DSP入門知識(shí)
Digital Signal Processing 數(shù)字信號(hào)處理
作為一個(gè)案例研究,我們來(lái)考慮數(shù)字領(lǐng)域里最通常的功能:濾波。簡(jiǎn)單地說(shuō),濾波就是對(duì)信
號(hào)進(jìn)行處理,以改善其特性。例如,濾波可以從信號(hào)里清除噪聲或靜電干擾,從而改善其信
噪比。為什么要用微處理器,而不是模擬器件來(lái)對(duì)信號(hào)做濾波呢?我們來(lái)看看其優(yōu)越性:
模擬濾波器(或者更一般地說(shuō),模擬電路)的性能要取決于溫度等環(huán)境因素。而數(shù)字濾波器
則基本上不受環(huán)境的影響。
數(shù)字濾波易于在非常小的寬容度內(nèi)進(jìn)行復(fù)制,因?yàn)槠湫阅懿⒉蝗Q于性能已偏離正常值的器
件的組合。
一個(gè)模擬濾波器一旦制造出來(lái),其特性(例如通帶頻率范圍)是不容易改變的。使用微處理
器來(lái)實(shí)現(xiàn)數(shù)字濾波器,就可以通過(guò)對(duì)其重新編程來(lái)改變?yōu)V波的特性。
信號(hào)處理方式的比較
比較因素 模擬方式 數(shù)字方式
修改設(shè)計(jì)的靈活性 修改硬件設(shè)計(jì),或調(diào)整硬件參數(shù) 改變軟件設(shè)置
精度 元器件精度 A/D 的位數(shù)和計(jì)算機(jī)字長(zhǎng),算法
可靠性和可重復(fù)性 受環(huán)境溫度、濕度、噪聲、 不受這些因素的影響
電磁場(chǎng)等的干擾和影響大
大規(guī)模集成 盡管已有一些模擬集成電路, 但品種較少、集成度不高、價(jià)格較高DSP 器件
體積小、功能強(qiáng)、功耗小、一致性好、使用方便、性能/價(jià)格比高
實(shí)時(shí)性 除開電路引入的延時(shí)外,處理是實(shí)時(shí)的 由計(jì)算機(jī)的處理速度決定
高頻信號(hào)的處理 可以處理包括微波毫米波乃至光波信號(hào) 按照奈準(zhǔn)則的要求,受S/H、A/D
和 處理速度的限制
Digital Signal Processor 數(shù)字信號(hào)處理器
微處理器(Microprocessor)的分類
通用處理器(GPP)
采用馮.諾依曼結(jié)構(gòu),程序和數(shù)據(jù)的存儲(chǔ)空間合二而一
8-bit Apple(6502),NEC PC-8000(Z80)
8086/286/386/486/Pentium/Pentium II/ Pentium III
PowerPc 64-bit CPU(SUN Sparc,DEC Alpha, HP)
CISC 復(fù)雜指令計(jì)算機(jī), RISC 精簡(jiǎn)指令計(jì)算機(jī)
采取各種方法提高計(jì)算速度,提高時(shí)鐘頻率,高速總線,多級(jí)Cashe,協(xié)處理器等
Single Chip Computer/ Micro Controller Unit(MCU)
除開通用CPU 所具有的ALU 和CU,還有存儲(chǔ)器(RAM/ROM)寄存器,時(shí)鐘,計(jì)數(shù)器,
定時(shí)器,串/并口,有的還有A/D,D/A
INTEL MCS/48/51/96(98)
MOTOROLA HCS05/011
DSP
采用哈佛結(jié)構(gòu),程序和數(shù)據(jù)分開存儲(chǔ)
采用一系列措施保證數(shù)字信號(hào)的處理速度,如對(duì)FFT 的專門優(yōu)化
MCU 與DSP 的簡(jiǎn)單比較
MCU DSP
低檔 高檔 低檔 高檔
指令周期(ns) 600 40 50 5
乘加時(shí)間(ns) 1900 80 50 5
US$/MIPS 1.5 0.5 0.15 0.1
DSP 處理器與通用處理器的比較
考慮一個(gè)數(shù)字信號(hào)處理的實(shí)例,比如有限沖擊響應(yīng)濾波器(FIR)。用數(shù)學(xué)語(yǔ)言來(lái)說(shuō),F(xiàn)IR 濾
波器是做一系列的點(diǎn)積。取一個(gè)輸入量和一個(gè)序數(shù)向量,在系數(shù)和輸入樣本的滑動(dòng)窗口間作
乘法,然后將所有的乘積加起來(lái),形成一個(gè)輸出樣本。
類似的運(yùn)算在數(shù)字信號(hào)處理過(guò)程中大量地重復(fù)發(fā)生,使得為此設(shè)計(jì)的器件必須提供專門的支
持,促成了了DSP 器件與通用處理器(GPP)的分流:
1 對(duì)密集的乘法運(yùn)算的支持
GPP 不是設(shè)計(jì)來(lái)做密集乘法任務(wù)的,即使是一些現(xiàn)代的GPP,也要求多個(gè)指令周期來(lái)做一
次乘法。而DSP 處理器使用專門的硬件來(lái)實(shí)現(xiàn)單周期乘法。DSP 處理器還增加了累加器寄
存器來(lái)處理多個(gè)乘積的和。累加器寄存器通常比其他寄存器寬,增加稱為結(jié)果bits 的額外
bits 來(lái)避免溢出。
同時(shí),為了充分體現(xiàn)專門的乘法-累加硬件的好處,幾乎所有的DSP 的指令集都包含有顯式
的MAC 指令。
2 存儲(chǔ)器結(jié)構(gòu)
傳統(tǒng)上,GPP 使用馮.諾依曼存儲(chǔ)器結(jié)構(gòu)。這種結(jié)構(gòu)中,只有一個(gè)存儲(chǔ)器空間通過(guò)一組總線
(一個(gè)地址總線和一個(gè)數(shù)據(jù)總線)連接到處理器核。通常,做一次乘法會(huì)發(fā)生4 次存儲(chǔ)器訪
問(wèn),用掉至少四個(gè)指令周期。
大多數(shù)DSP 采用了哈佛結(jié)構(gòu),將存儲(chǔ)器空間劃分成兩個(gè),分別存儲(chǔ)程序和數(shù)據(jù)。它們有兩
組總線連接到處理器核,允許同時(shí)對(duì)它們進(jìn)行訪問(wèn)。這種安排將處理器存貯器的帶寬加倍,
更重要的是同時(shí)為處理器核提供數(shù)據(jù)與指令。在這種布局下,DSP 得以實(shí)現(xiàn)單周期的MAC
指令。
還有一個(gè)問(wèn)題,即現(xiàn)在典型的高性能GPP 實(shí)際上已包含兩個(gè)片內(nèi)高速緩存,一個(gè)是數(shù)據(jù),
一個(gè)是指令,它們直接連接到處理器核,以加快運(yùn)行時(shí)的訪問(wèn)速度。從物理上說(shuō),這種片內(nèi)
的雙存儲(chǔ)器和總線的結(jié)構(gòu)幾乎與哈佛結(jié)構(gòu)的一樣了。然而從邏輯上說(shuō),兩者還是有重要的區(qū)
別。
GPP 使用控制邏輯來(lái)決定哪些數(shù)據(jù)和指令字存儲(chǔ)在片內(nèi)的高速緩存里,其程序員并不加以
指定(也可能根本不知道)。與此相反,DSP 使用多個(gè)片內(nèi)存儲(chǔ)器和多組總線來(lái)保證每個(gè)指
令周期內(nèi)存儲(chǔ)器的多次訪問(wèn)。在使用DSP 時(shí),程序員要明確地控制哪些數(shù)據(jù)和指令要存儲(chǔ)
在片內(nèi)存儲(chǔ)器中。程序員在寫程序時(shí),必須保證處理器能夠有效地使用其雙總線。
此外,DSP 處理器幾乎都不具備數(shù)據(jù)高速緩存。這是因?yàn)镈SP 的典型數(shù)據(jù)是數(shù)據(jù)流。也就
是說(shuō),DSP 處理器對(duì)每個(gè)數(shù)據(jù)樣本做計(jì)算后,就丟棄了,幾乎不再重復(fù)使用。
3 零開銷循環(huán)
如果了解到DSP 算法的一個(gè)共同的特點(diǎn),即大多數(shù)的處理時(shí)間是花在執(zhí)行較小的循環(huán)上,
也就容易理解,為什么大多數(shù)的DSP 都有專門的硬件,用于零開銷循環(huán)。所謂零開銷循環(huán)
是指處理器在執(zhí)行循環(huán)時(shí),不用花時(shí)間去檢查循環(huán)計(jì)數(shù)器的值、條件轉(zhuǎn)移到循環(huán)的頂部、將
循環(huán)計(jì)數(shù)器減1。
與此相反,GPP 的循環(huán)使用軟件來(lái)實(shí)現(xiàn)。某些高性能的GPP 使用轉(zhuǎn)移預(yù)報(bào)硬件,幾乎達(dá)到
與硬件支持的零開銷循環(huán)同樣的效果。
4 定點(diǎn)計(jì)算
大多數(shù)DSP 使用定點(diǎn)計(jì)算,而不是使用浮點(diǎn)。雖然DSP 的應(yīng)用必須十分注意數(shù)字的精確,
用浮點(diǎn)來(lái)做應(yīng)該容易的多,但是對(duì)DSP 來(lái)說(shuō),廉價(jià)也是非常重要的。定點(diǎn)機(jī)器比起相應(yīng)的
浮點(diǎn)機(jī)器來(lái)要便宜(而且更快)。為了不使用浮點(diǎn)機(jī)器而又保證數(shù)字的準(zhǔn)確,DSP 處理器在
指令集和硬件方面都支持飽和計(jì)算、舍入和移位。
5 專門的尋址方式
DSP 處理器往往都支持專門的尋址模式,它們對(duì)通常的信號(hào)處理操作和算法是很有用的。
例如,模塊(循環(huán))尋址(對(duì)實(shí)現(xiàn)數(shù)字濾波器延時(shí)線很有用)、位倒序?qū)ぶ罚▽?duì)FFT 很有用)。
這些非常專門的尋址模式在GPP 中是不常使用的,只有用軟件來(lái)實(shí)現(xiàn)。
6 執(zhí)行時(shí)間的預(yù)測(cè)
大多數(shù)的DSP 應(yīng)用(如蜂窩電話和調(diào)制解調(diào)器)都是嚴(yán)格的實(shí)時(shí)應(yīng)用,所有的處理必須在
指定的時(shí)間內(nèi)完成。這就要求程序員準(zhǔn)確地確定每個(gè)樣本需要多少處理時(shí)間,或者,至少要
知道,在最壞的情況下,需要多少時(shí)間。
如果打算用低成本的GPP 去完成實(shí)時(shí)信號(hào)處理的任務(wù),執(zhí)行時(shí)間的預(yù)測(cè)大概不會(huì)成為什么
問(wèn)題,應(yīng)為低成本GPP 具有相對(duì)直接的結(jié)構(gòu),比較容易預(yù)測(cè)執(zhí)行時(shí)間。然而,大多數(shù)實(shí)時(shí)
DSP 應(yīng)用所要求的處理能力是低成本GPP 所不能提供的。
這時(shí)候,DSP 對(duì)高性能GPP 的優(yōu)勢(shì)在于,即便是使用了高速緩存的DSP,哪些指令會(huì)放進(jìn)
去也是由程序員(而不是處理器)來(lái)決定的,因此很容易判斷指令是從高速緩存還是從存儲(chǔ)
器中讀取。DSP 一般不使用動(dòng)態(tài)特性,如轉(zhuǎn)移預(yù)測(cè)和推理執(zhí)行等。因此,由一段給定的代
碼來(lái)預(yù)測(cè)所要求的執(zhí)行時(shí)間是完全直截了當(dāng)?shù)摹亩钩绦騿T得以確定芯片的性能限制。
7 定點(diǎn)DSP 指令集
定點(diǎn)DSP 指令集是按兩個(gè)目標(biāo)來(lái)設(shè)計(jì)的:
使處理器能夠在每個(gè)指令周期內(nèi)完成多個(gè)操作,從而提高每個(gè)指令周期的計(jì)算效率。
將存貯DSP 程序的存儲(chǔ)器空間減到最小(由于存儲(chǔ)器對(duì)整個(gè)系統(tǒng)的成本影響甚大,該問(wèn)題
在對(duì)成本敏感的DSP 應(yīng)用中尤為重要)。
為了實(shí)現(xiàn)這些目標(biāo),DSP 處理器的指令集通常都允許程序員在一個(gè)指令內(nèi)說(shuō)明若干個(gè)并行
的操作。例如,在一條指令包含了MAC 操作,即同時(shí)的一個(gè)或兩個(gè)數(shù)據(jù)移動(dòng)。在典型的例
子里,一條指令就包含了計(jì)算FIR 濾波器的一節(jié)所需要的所有操作。這種高效率付出的代
價(jià)是,其指令集既不直觀,也不容易使用(與GPP 的指令集相比)。
GPP 的程序通常并不在意處理器的指令集是否容易使用,因?yàn)樗麄円话闶褂孟驝 或C++等
高級(jí)語(yǔ)言。而對(duì)于DSP 的程序員來(lái)說(shuō),不幸的是主要的DSP 應(yīng)用程序都是用匯編語(yǔ)言寫的
(至少部分是匯編語(yǔ)言優(yōu)化的)。這里有兩個(gè)理由:首先,大多數(shù)廣泛使用的高級(jí)語(yǔ)言,例
如C,并不適合于描述典型的DSP 算法。其次,DSP 結(jié)構(gòu)的復(fù)雜性,如多存儲(chǔ)器空間、多
總線、不規(guī)則的指令集、高度專門化的硬件等,使得難于為其編寫高效率的編譯器。
即便用編譯器將C 源代碼編譯成為DSP 的匯編代碼,優(yōu)化的任務(wù)仍然很重。典型的DSP 應(yīng)
用都具有大量計(jì)算的要求,并有嚴(yán)格的開銷限制,使得程序的優(yōu)化必不可少(至少是對(duì)程序
的最關(guān)鍵部分)。因此,考慮選用DSP 的一個(gè)關(guān)鍵因素是,是否存在足夠的能夠較好地適應(yīng)
DSP 處理器指令集的程序員。
8 開發(fā)工具的要求
因?yàn)镈SP 應(yīng)用要求高度優(yōu)化的代碼,大多數(shù)DSP 廠商都提供一些開發(fā)工具,以幫助程序員
完成其優(yōu)化工作。例如,大多數(shù)廠商都提供處理器的仿真工具,以準(zhǔn)確地仿真每個(gè)指令周期
內(nèi)處理器的活動(dòng)。無(wú)論對(duì)于確保實(shí)時(shí)操作還是代碼的優(yōu)化,這些都是很有用的工具。
GPP 廠商通常并不提供這樣的工具,主要是因?yàn)镚PP 程序員通常并不需要詳細(xì)到這一層的
信息。GPP 缺乏精確到指令周期的仿真工具,是DSP 應(yīng)用開發(fā)者所面臨的的大問(wèn)題:由于
幾乎不可能預(yù)測(cè)高性能GPP 對(duì)于給定任務(wù)所需要的周期數(shù),從而無(wú)法說(shuō)明如何去改善代碼
的性能。
評(píng)論