數(shù)字信號(hào)處理器概論
數(shù)字信號(hào)處理學(xué)科與數(shù)字信號(hào)處理器
數(shù)字信號(hào)處理(DSP)自1965年由Cooley和Tukey提出DFT(離散傅里葉變換)的高效快速算法(Fourier Transform,簡(jiǎn)稱FFT)以來,已有近40年的歷史。隨著計(jì)算機(jī)和信息技術(shù)的發(fā)展,數(shù)字信號(hào)處理技術(shù)已形成一門獨(dú)立的學(xué)科系統(tǒng)。數(shù)字信號(hào)處理作為一門獨(dú)立學(xué)科是圍繞著三個(gè)方面迅速發(fā)展的:理論、現(xiàn)實(shí)和應(yīng)用。作為數(shù)字信號(hào)理論,一般是指利用經(jīng)典理論(如數(shù)字、信號(hào)與系統(tǒng)分析等)作為基礎(chǔ)而形成的獨(dú)特的信號(hào)處理理論,以及各種快速算法和各類濾波技術(shù)等基礎(chǔ)理論。由此在各個(gè)應(yīng)用領(lǐng)域如語音與圖象處理、信息的壓縮與編碼、信號(hào)的調(diào)制與調(diào)解、信道的辨識(shí)與均衡、各種智能控制與移動(dòng)通訊等都延伸出各自的理論與技術(shù),到目前可以說凡是用計(jì)算機(jī)來處理各類信號(hào)的場(chǎng)合都引用了數(shù)字信號(hào)處理的基本理論、概念和技術(shù)。
數(shù)字化技術(shù)有今天的飛速發(fā)展,是依仗于強(qiáng)大的軟、硬件環(huán)境支撐。作為數(shù)字信號(hào)處理的一個(gè)實(shí)際任務(wù)就是要求能夠快速、高效、實(shí)時(shí)完成處理任務(wù),這就要通過通用或?qū)S玫臄?shù)字信號(hào)處理器來完成。因此,數(shù)字信號(hào)處理器是用來完成數(shù)字信號(hào)處理任務(wù)的一個(gè)軟、硬件環(huán)境和硬件平臺(tái)。
DSP算法及芯片分類
DSP運(yùn)算的基本類型是乘法和累加(MAC)運(yùn)算,對(duì)于卷積、相關(guān)、濾波和FFT基本上都是這一類運(yùn)算。這樣的運(yùn)算可以用通用機(jī)來完成,但受到其成本和結(jié)構(gòu)的限制不可能有很高的實(shí)時(shí)處理能力。
DSP運(yùn)算的特點(diǎn)是尋址操作。數(shù)據(jù)尋址范圍大,結(jié)構(gòu)復(fù)雜但很有規(guī)律。例如FFT運(yùn)算,它的蝶形運(yùn)算相關(guān)節(jié)點(diǎn)從相鄰兩點(diǎn)直至跨越N/2間隔的地址范圍,每次變更都很有規(guī)律,級(jí)間按一定規(guī)律排列,雖然要運(yùn)算log2N遍,但每級(jí)的地址都可以預(yù)測(cè),也就是尋址操作很有規(guī)律而且可以預(yù)測(cè)。這就不同于一般的通用機(jī),在通用機(jī)中對(duì)數(shù)據(jù)庫(kù)的操作,具有很大的隨機(jī)性,這種隨機(jī)尋址方式不是信號(hào)處理器的強(qiáng)項(xiàng)。
可以看出無論是專用的DSP芯片或通用DSP芯片在結(jié)構(gòu)考慮上都能適應(yīng)DSP運(yùn)算的這些特點(diǎn)。而專用芯片在結(jié)構(gòu)上考慮的更加專業(yè)化,更為合理,因而有更高的運(yùn)算速度。
DSP芯片按用途或構(gòu)成分類可以分為下列幾種類型: 為不同算法而專門設(shè)計(jì)的專用芯片:例如用于做卷積/相關(guān)并具有橫向?yàn)V波器結(jié)構(gòu): INMOS公司的A100、A110;HARRIS公司的HPS43168; PLESSY GEC 公司的PDSP16256等。 用于做FFT: Austek公司的A41102, PLESSY GEC 公司的PDSP16150等。這些都是為做FIR、IIR、FFT運(yùn)算而設(shè)計(jì)的,因而運(yùn)算速度高,但是具有有限的可編程能力,靈活性差。
為某種目的應(yīng)用的專門設(shè)計(jì)系統(tǒng),即ASIC系統(tǒng)。它只涉及一種或一種以上自然類型數(shù)據(jù)的處理,例如音頻、視頻、語音的壓縮和解壓,調(diào)制/解調(diào)器等。其內(nèi)部都是由基本DSP運(yùn)算單元構(gòu)建,包括FIR、IIR、FFT、DCT,以及卷積碼的編/解碼器及RS編/解碼器等。其特點(diǎn)是計(jì)算復(fù)雜而且密集,數(shù)據(jù)量、運(yùn)算量都很大。
積木式結(jié)構(gòu):它是由乘法器、存儲(chǔ)器、控制電路等單元邏輯電路搭接而成,這種結(jié)構(gòu)方式也稱為硬連線邏輯電路。它是一種早期實(shí)現(xiàn)方法,具有成本低、速度高等特點(diǎn),由于是硬連接因而沒有可編程能力。目前主要用于接收機(jī)的前端某些高頻操作中。
用FPGA(現(xiàn)場(chǎng)可編程陳列)實(shí)現(xiàn)DSP的各種功能。實(shí)質(zhì)上這也是一種硬連接邏輯電路,但由于有現(xiàn)場(chǎng)可編程能力,允許根據(jù)需要迅速重新組合基礎(chǔ)邏輯來滿足使用要求,因而更加靈活,而且比通用DSP芯片具有更高的速度。一些大的公司如 Xinlinx、Altera也正把FPGA產(chǎn)品擴(kuò)展到DSP應(yīng)用中去。
通用可編程DSP芯片:這是目前用得最多的數(shù)字信號(hào)處理應(yīng)用器件,其特點(diǎn)本文將予以詳細(xì)討論。
片上系統(tǒng)Soc(System on Chip),這是數(shù)字化應(yīng)用及微電子技術(shù)迅速發(fā)展的產(chǎn)物,是下一代基于DSP產(chǎn)品的主要發(fā)展方向之一。它把一種應(yīng)用系統(tǒng)集成在一個(gè)芯片上。通常,為滿足系統(tǒng)的性能要求和提高功率效率,會(huì)把DSP和MCU的多處理器處理平臺(tái)集成在一起。圖1 是由TI公司推出的開放多媒體應(yīng)用平臺(tái)(OMAP),用來支持2.5G和3G應(yīng)用而設(shè)計(jì)的處理器體系結(jié)構(gòu),它支持語音、音頻、圖像和視頻信號(hào)處理應(yīng)用的各種性能。其中關(guān)鍵器件有:低功耗的DSP芯片,用來做媒體處理;MCU用來支持應(yīng)用操作系統(tǒng)及以控制為核心的應(yīng)用處理;MTC是內(nèi)存和流量控制器,確保處理器能高效訪問外部存儲(chǔ)區(qū),避免產(chǎn)生瓶頸現(xiàn)象,提高整個(gè)平臺(tái)的處理速度。
DSP對(duì)MCU性能上的改進(jìn)
對(duì)數(shù)字信號(hào)處理器可以確切的下這樣的定義:解決實(shí)時(shí)處理要求,適合DSP運(yùn)算需求的單片可編程微處理器芯片。原理上說通用微機(jī)、單片機(jī)都可以用來做信號(hào)處理的硬件平臺(tái),但作為DSP實(shí)時(shí)處理要求必須滿足大數(shù)據(jù)量、復(fù)雜計(jì)算、實(shí)時(shí)性強(qiáng)的各種運(yùn)算,因而DSP芯片針對(duì)DSP算法特點(diǎn)做了以下幾方面的改進(jìn):
運(yùn)算能力上的擴(kuò)充
采用專用的硬件乘法器,有足夠的字長(zhǎng),乘法結(jié)果保留全部數(shù)值,用雙字長(zhǎng)乘法存儲(chǔ)器,同時(shí)可以用來做雙精度運(yùn)算。
自動(dòng)產(chǎn)生數(shù)據(jù)地址
通用處理器由ALU產(chǎn)生地址,在DSP中專門有地址產(chǎn)生單元,通過程序循環(huán),自動(dòng)產(chǎn)生數(shù)據(jù)地址,這一單元本身也是一個(gè)微處理器,可以通過編程產(chǎn)生復(fù)雜的非順序地址(例如FFT中的倒位序地址產(chǎn)生)。
指令時(shí)序的產(chǎn)生不對(duì)其他運(yùn)算單元造成額外開銷
指令時(shí)序是可編程的,在遇到執(zhí)行程序轉(zhuǎn)移和循環(huán)時(shí),不會(huì)額外增加開銷。
簡(jiǎn)單比例定標(biāo)運(yùn)算得到寬的動(dòng)態(tài)范圍
一般DSP芯片中都有桶形移位器,可以在一定范圍內(nèi)調(diào)整數(shù)據(jù)輸出寬度,特別是在做浮點(diǎn)和塊浮點(diǎn)運(yùn)算時(shí),免去主處理器作多次移位和旋轉(zhuǎn)操作。
DSP處理器特點(diǎn)
DSP處理器的著眼點(diǎn)是要求速度快、處理的數(shù)據(jù)量大、效率高。但是單純提高時(shí)鐘速度受到工藝等各種因素的限制,一般是緩慢的,所以必須從結(jié)構(gòu)上著手。某些概念其實(shí)在二十世紀(jì)40年代已經(jīng)出現(xiàn):其一是改造處理器的處理方法,用多總線、多存儲(chǔ)器體系結(jié)構(gòu);其二是提高程序和數(shù)據(jù)流的速度,采用流水線,并行處理等方法。盡管不同廠商采用不同的技術(shù)和措施,但在這些方面都有共同點(diǎn)。以下就DSP芯片一些特點(diǎn)來作說明。
采用哈佛(Harvard)結(jié)構(gòu)和改進(jìn)的哈佛結(jié)構(gòu)
通用機(jī)采用馮·諾依曼(Von Neumenn)結(jié)構(gòu),這主要考慮到成本,其結(jié)構(gòu)如圖 2 所示。把指令、數(shù)據(jù)、地址的傳送采用同一條總線,靠指令計(jì)數(shù)來區(qū)分三者。由于取指和存取數(shù)據(jù)是在同一存取空間通過同一總線傳輸,因而指令的執(zhí)行只能是順序的,不可能重疊進(jìn)行,所以無法提高運(yùn)算速度。
DSP處理器幾乎毫無例外的采用哈佛結(jié)構(gòu),如圖3所示。哈佛結(jié)構(gòu)把程序代碼和數(shù)據(jù)的存儲(chǔ)空間分開,并有各自的地址和數(shù)據(jù)總線,每個(gè)存儲(chǔ)器獨(dú)立編址,用獨(dú)立的一組程序總線和數(shù)據(jù)總線進(jìn)行訪問。
如果程序代碼存儲(chǔ)空間與數(shù)據(jù)存儲(chǔ)空間之間還可以進(jìn)行數(shù)據(jù)交換,則稱為改進(jìn)的哈佛結(jié)構(gòu)。這種結(jié)構(gòu)可以并行進(jìn)行數(shù)據(jù)操作。例如在做數(shù)字濾波時(shí)把系數(shù)放在程序空間,待處理的樣本數(shù)據(jù)放在數(shù)據(jù)空間,處理時(shí)可以同時(shí)提取濾波器系數(shù)和樣本進(jìn)行乘法和累加操作,從而大大提高運(yùn)算速度。 改進(jìn)哈佛結(jié)構(gòu)還可以從程序存儲(chǔ)區(qū)來初始化數(shù)據(jù)存儲(chǔ)區(qū),或把數(shù)據(jù)存儲(chǔ)區(qū)的內(nèi)容轉(zhuǎn)移到程序存儲(chǔ)區(qū),這樣可以復(fù)用存儲(chǔ)器,降低成本,提高存儲(chǔ)器使用效率。
多總線結(jié)構(gòu)
例如TMS320C54X結(jié)構(gòu)中有一組程序總線(PB PAB),兩組讀數(shù)據(jù)總線(CB CAB)、(DB DAB),和一組寫數(shù)據(jù)總線(EB EAB),這樣可以同時(shí)讀取兩組數(shù)據(jù)和存儲(chǔ)一組數(shù)據(jù),即同一時(shí)鐘周期內(nèi)可以執(zhí)行一條3個(gè)操作的指令。這種附加總線和擴(kuò)充地址增加數(shù)據(jù)流量,提高尋址能力。
采用流水線操作
計(jì)算機(jī)在執(zhí)行一條指令時(shí),要通過取指、譯碼、取數(shù)、執(zhí)行等各階段。由于DSP哈佛結(jié)構(gòu)指令的各個(gè)階段可以重疊進(jìn)行,這樣對(duì)每一條指令似乎都是在一個(gè)周期內(nèi)完成,可以把指令周期減到最小,增加數(shù)據(jù)吞吐量。
這種流水線操作也不是十全十美的,其主要原因是,一項(xiàng)處理很難被分解成若干個(gè)處理規(guī)模一致、在時(shí)間上有最佳配合的流水段,因而需要用寄存器協(xié)調(diào)流水線工作。
流水線操作適用于循環(huán)操作時(shí)間足夠長(zhǎng)或多個(gè)數(shù)據(jù)點(diǎn)反復(fù)執(zhí)行同一指令的情況。這是由于,流水線啟動(dòng)和停止的階段是流水線逐步被填滿和出空的過程。對(duì)于一次性非重復(fù)計(jì)算,流水線不可能達(dá)到穩(wěn)態(tài),反而用主要時(shí)間做填滿和出空操作,因而是不合適的。
硬件乘法器和高效的MAC指令
在DSP算法中,乘法累加操作是大量的運(yùn)算。因而DSP芯片都有硬件乘法器,使得乘法運(yùn)算做到一個(gè)周期內(nèi)完成。與之配合的指令為MAC-乘法累加指令,其功能如圖 4 所示,它可以在單周期內(nèi)取兩個(gè)操作數(shù)相乘,并將結(jié)果加載到累加器。有的DSP還具有多組MAC結(jié)構(gòu),可以并行處理。
獨(dú)立的傳輸總線及其控制器
處理器高速處理速度必須與高速的數(shù)據(jù)訪問和傳輸相配合。而且為不影響CPU及其相關(guān)總線的工作,DSP的DMA單獨(dú)設(shè)置了傳輸總線及其控制器,因此DMA可以獨(dú)立工作。
為了提高DSP的實(shí)時(shí)處理能力,有時(shí)把多個(gè)DSP組成DSP處理器陣列,并行工作,此時(shí)DMA成為各處理器之間進(jìn)行數(shù)據(jù)傳輸?shù)闹饕ǖ馈?/P>
專用的數(shù)據(jù)地址發(fā)生器(DAG)
在DSP運(yùn)算中,存儲(chǔ)器的訪問具有可預(yù)測(cè)性。例如在FIR濾波中,樣本、系數(shù)都是順序訪問的,因此在DSP芯片中專門設(shè)置數(shù)據(jù)地址發(fā)生器。其實(shí)它也是一個(gè)ALU單元,具有簡(jiǎn)單的運(yùn)算能力。在通用機(jī)的CPU中,數(shù)據(jù)地址和數(shù)據(jù)處理都由同一ALU完成。例如在8086中,做一次加法需要三個(gè)周期,而計(jì)算一次地址需要5~6 周期,這樣會(huì)耗費(fèi)大量的時(shí)間。在DSP芯片中就不需要這樣的額外開銷。另外在DSP芯片的數(shù)據(jù)地址產(chǎn)生中還支持間接尋址、循環(huán)尋址、倒位尋址等特殊操作,以適應(yīng)DSP運(yùn)算的各種尋址需求。
豐富的外設(shè)(Peripherals)
DSP處理器往往是脫機(jī)獨(dú)立工作,因此為與外設(shè)接口方便,往往設(shè)置了豐富的周邊接口電路。一般包含下列幾種主要外設(shè):
時(shí)鐘產(chǎn)生器(振蕩器與鎖相環(huán)PLL);
定時(shí)器(Timer);
軟件可編程等待狀態(tài)發(fā)生器,以便使較快的片內(nèi)設(shè)施與較慢的片外電路及存儲(chǔ)器協(xié)調(diào)工作;
通用的I/O口;
多通道同步緩沖串口(McBSP)和異步串口;
主機(jī)接口(HIP)
JTAG邊界掃描邏輯電路(IEEE 標(biāo)準(zhǔn)1149. 1),便于對(duì)DSP處理器做片上在線仿真和多處理器情況下的調(diào)試。
具有片內(nèi)存儲(chǔ)器
DSP芯片片內(nèi)一般帶有存放程序的只讀存儲(chǔ)器ROM和存放數(shù)據(jù)的隨機(jī)存儲(chǔ)器RAM,符合DSP運(yùn)算簡(jiǎn)單、核心程序短小的特征,同時(shí)可以提高指令傳輸效率,減小總線接口壓力。并且它不存在與外部總線競(jìng)爭(zhēng)和訪問外部存儲(chǔ)器速度不匹配的問題,這樣使DSP處理器具有強(qiáng)大的數(shù)據(jù)處理能力。
與結(jié)構(gòu)相配合的采用RISC指令集
一般DSP處理器具有高度專門化、復(fù)雜且不規(guī)則的指令集,這樣單個(gè)指令字可以同時(shí)控制片內(nèi)多個(gè)功能單元操作。DSP處理器指令集在設(shè)計(jì)時(shí)有兩個(gè)特點(diǎn):其一是最大限度的使用了處理器的硬件資源,因此往往是在單個(gè)指令中并行完成若干操作。例如在完成主要算術(shù)運(yùn)算的同時(shí),并行地從存儲(chǔ)器提取一個(gè)或兩個(gè)數(shù)據(jù)以及完成地址指針的更新。其次是指令所使用的存儲(chǔ)空間減到最小,為縮短指令字長(zhǎng),往往用狀態(tài)寄存器的模式來控制處理器的操作特性,例如舍入或飽和的處理,而不再將這些信息作為指令的一部分來處理。
由于傳統(tǒng)DSP芯片指令集的高度專門化及多功能操作使它難以用高級(jí)語言編譯,所以一般C編譯效率不高。另外C語言也不適合用來描述這種多存儲(chǔ)空間、多組總線、高度專門化結(jié)構(gòu)的硬件系統(tǒng),這些都是導(dǎo)致用C編譯傳統(tǒng)DSP處理器效率不高的原因。
綜上所述DSP處理器實(shí)現(xiàn)高速運(yùn)算的主要途徑可以概括為:具有硬件乘法器及乘-加單元;高效的存儲(chǔ)器訪問;零開銷循環(huán);專門的適應(yīng)硬件結(jié)構(gòu)的指令集;多執(zhí)行單元;數(shù)據(jù)流的線性I/O口。
DSP處理器性能指標(biāo)
對(duì)DSP處理器缺乏一種諸如對(duì)PC機(jī)那樣公正合理的性能評(píng)價(jià)體系,這是由于各DSP廠商推出的產(chǎn)品在結(jié)構(gòu)和數(shù)據(jù)傳輸能力上有很大的差異,它是專門為某種目的而設(shè)計(jì)的,因而正確評(píng)價(jià)只有與特定的應(yīng)用聯(lián)系起來,評(píng)價(jià)結(jié)果才有意義。這里將常用的指標(biāo)評(píng)價(jià)方法做一介紹。
傳統(tǒng)評(píng)價(jià)方法,這是最簡(jiǎn)單的評(píng)價(jià)指標(biāo):
MIPS(Millions of Instructions Per Second),一般DSP為20~100MIPS,使用超長(zhǎng)指令字的TMS320B2XX為2400MIPS。
MOPS(Millions of Operations Per Second),每秒執(zhí)行百萬操作。這個(gè)指標(biāo)的問題是什么是一次操作。通常操作包括CPU操作外,還包括地址計(jì)算、DMA訪問數(shù)據(jù)傳輸、I/O操作等。一般說MOPS越高意味著乘積-累加和運(yùn)算速度越快。
MFLOaPS(Million Floating Point Operations Per Second),這是衡量浮點(diǎn)DSP芯片的重要指標(biāo)。例如TMS320C31在主頻為40MHZ時(shí),處理能力為40MFLOPS,TMS320C6701在指令周期為6ns時(shí),單精度運(yùn)算可達(dá)1GFLOPS。
MBPS(Million Bit Per Second),它是對(duì)總線和I/O口數(shù)據(jù)吞吐率的度量,也就是某個(gè)總線或I/O的帶寬。例如對(duì)TMS320C6XXX、200MHZ時(shí)鐘、32bit總線時(shí),總線數(shù)據(jù)吞吐率則為800Mbyte/s或6400MBPS。
MACS(Multiply-Accumulates Per Second),例如TMS320C6XXX乘加速度達(dá)300MMACS~600MMACS。
以上傳統(tǒng)指標(biāo)雖然可以作為設(shè)計(jì)時(shí)可選的參考指標(biāo),但是有很大的局限性。例如它沒有考慮存儲(chǔ)器的使用和器件的功耗,一旦器件與外部速度較慢的存儲(chǔ)器進(jìn)行數(shù)據(jù)交換時(shí),運(yùn)行速度馬上就會(huì)被降低。
另一評(píng)價(jià)指標(biāo)是核心算法評(píng)價(jià)指標(biāo)。它是利用構(gòu)成大多數(shù)DSP系統(tǒng)的基本運(yùn)算模塊,例如FIR、IIR、FFT、向量加等典型運(yùn)算。規(guī)定大小適度、統(tǒng)一輸入、輸出要求,在保證功能一致性的條件下,也允許程序員針對(duì)所使用的處理進(jìn)行代碼的優(yōu)化,評(píng)價(jià)指標(biāo)是執(zhí)行時(shí)間、存儲(chǔ)器的使用和能耗等。
表1是對(duì)一些處理器評(píng)價(jià)的結(jié)果,其中DSP53611和MSC8101是MOTOROLA產(chǎn)品,TMS320C54166203是TI公司產(chǎn)品。TMS320C6701和Pentium Ⅲ屬于浮點(diǎn)運(yùn)算。
這種評(píng)價(jià)方法很容易用軟件仿真或基于硬件應(yīng)用的開發(fā)工具來決定執(zhí)行的周期數(shù)。
從上列執(zhí)行時(shí)間可以看出處理器結(jié)構(gòu)對(duì)其性能的影響。例如TMS320C6203,時(shí)鐘300MHZ,由于采用超長(zhǎng)指令字結(jié)構(gòu)、每個(gè)指令周期內(nèi)處理8條指令,因此等效為2400MIPS,與TMS320C5416相比MIPS之比為15:1。但執(zhí)行同樣的256點(diǎn)復(fù)數(shù)FFT所需時(shí)間之比為7.8:1,因此兩者用MIPS作為比較指標(biāo)就有差距。其原因是C6203指令比C5416簡(jiǎn)單,因而完成同樣任務(wù)需要更多的指令,另外也由于數(shù)據(jù)的獨(dú)立和流水作業(yè)的影響等因素,C6203的并行性不能同時(shí)得到最佳的發(fā)揮。并且,這種核心算法評(píng)估指標(biāo)并沒有反映出計(jì)算精度,提高計(jì)算精度意味著字長(zhǎng)的增加或采用浮點(diǎn)運(yùn)算,相應(yīng)的存儲(chǔ)器容量增加,這些情況都沒有能在指標(biāo)中反映。
DSP處理器還有其他評(píng)估指標(biāo),各類評(píng)估指標(biāo)之間都有其自身的不足,因而正確的選用器件要根據(jù)任務(wù)需要量身定做,不可一味追求某項(xiàng)高指標(biāo),要根據(jù)性能價(jià)格比合理選用器件。
評(píng)論