使用FPGA解決DSP設(shè)計(jì)難題
由于DSP能夠迅速測(cè)量、過濾或壓縮實(shí)時(shí)模擬信號(hào),因此DSP在電子系統(tǒng)設(shè)計(jì)中非常重要。這樣,DSP有助于實(shí)現(xiàn)數(shù)字世界與真實(shí)(模擬)世界的通信。但是隨著電子系統(tǒng)變得越來越精細(xì),需要處理多個(gè)模擬信號(hào)源,工程師們不得不作出艱難的決策。是使用多個(gè)DSP并使其功能與系統(tǒng)的其余部分同步,還是使用一個(gè)能夠?qū)崿F(xiàn)多個(gè)功能的帶精細(xì)軟件的高性能DSP更具優(yōu)勢(shì)?
由于現(xiàn)在的系統(tǒng)很復(fù)雜,在許多情況下,單DSP的實(shí)現(xiàn)方案的往往沒有足夠的處理能力。同時(shí),系統(tǒng)架構(gòu)也不能滿足多芯片系統(tǒng)的成本、復(fù)雜性和功耗要求。
FPGA現(xiàn)已成為需要高性能DSP功能的系統(tǒng)的絕佳選擇。事實(shí)上,與獨(dú)立的數(shù)字信號(hào)處理器相比,FPGA技術(shù)一般可以為DSP難題提供更加簡(jiǎn)單的解決方案。要了解其中的原因,需要回顧一下DSP的起源和發(fā)展過程。
專用微處理器
在過去的二十多年里,傳統(tǒng)的DSP架構(gòu)一直在竭力跟上日益增長(zhǎng)的性能要求的步伐。隨著視頻系統(tǒng)大踏步地邁進(jìn)高清和3D時(shí)代,并且通信系統(tǒng)為實(shí)現(xiàn)更高帶寬已經(jīng)將現(xiàn)有技術(shù)發(fā)揮到極致,設(shè)計(jì)師們需要可替代的實(shí)現(xiàn)策略。用于實(shí)現(xiàn)數(shù)字信號(hào)處理算法的硬件不外乎以下三種基本器件之一:微處理器、邏輯電路和存儲(chǔ)器。有些設(shè)計(jì)可能還需要額外硬件來實(shí)現(xiàn)模數(shù)轉(zhuǎn)換(A/D)、數(shù)模轉(zhuǎn)換(D/A)以及高速數(shù)字接口。
傳統(tǒng)的數(shù)字信號(hào)處理器是設(shè)計(jì)用于實(shí)現(xiàn)專門目的的微處理器。這類處理器非常適合用于處理算法密集型任務(wù),但是性能卻受到時(shí)鐘速率及其內(nèi)部設(shè)計(jì)順序性的限制。這限制了它們對(duì)輸入數(shù)據(jù)采樣每秒最多執(zhí)行的運(yùn)算次數(shù)。一般來講,每執(zhí)行一次算術(shù)邏輯單元(ALU)運(yùn)算需要三或四個(gè)時(shí)鐘周期。多核架構(gòu)可以提高性能,但是提升幅度有限。因此,采用傳統(tǒng)信號(hào)處理器的設(shè)計(jì)必須重復(fù)利用架構(gòu)單元來實(shí)現(xiàn)算法。對(duì)于每次執(zhí)行的加、減、乘或其他任何基本運(yùn)算,不論是內(nèi)部還是外部反饋,每次執(zhí)行都必須循環(huán)通過ALU。
遺憾的是,在處理當(dāng)今眾多的高性能應(yīng)用時(shí),典型的DSP難以滿足系統(tǒng)要求。過去已經(jīng)提出過多種解決方案,包括在一個(gè)器件中使用多個(gè)ALU或者在一塊板上使用多個(gè)DSP器件;不過這類方案往往會(huì)大大增加成本,并且只會(huì)將問題轉(zhuǎn)移到另外一個(gè)領(lǐng)域。比如,用多個(gè)器件提高性能遵循指數(shù)曲線。要使性能提高一倍,需要用兩個(gè)器件,若要再提高一倍,則需要用四個(gè)器件,依此類推。此外,程序員關(guān)注的重點(diǎn)往往會(huì)從信號(hào)處理功能轉(zhuǎn)移到多個(gè)處理器和內(nèi)核之間的任務(wù)調(diào)度上。這會(huì)產(chǎn)生大量的附加代碼,而且這些代碼會(huì)成為系統(tǒng)開銷,而不是用于解決眼前的數(shù)字信號(hào)處理問題。
FPGA 技術(shù)的引進(jìn)為解決DSP方案與日俱增的復(fù)雜性帶來了福音。FPGA最初開發(fā)的目的是為了整合和集中分立的存儲(chǔ)器和邏輯電路,以實(shí)現(xiàn)更高的集成度、更出色的性能和更高的靈活性。FPGA技術(shù)現(xiàn)已成為目前使用的幾乎所有高性能系統(tǒng)的一個(gè)重要組成部分。相比傳統(tǒng)DSP,F(xiàn)PGA是由可配置邏輯陣列(CLB)、存儲(chǔ)器、DSP邏輯片(Slice)和一些其他元件組成的統(tǒng)一陣列構(gòu)成的巨大并行結(jié)構(gòu)。它們可以使用VHDL和Verilog等高級(jí)描述語言進(jìn)行編程,或者在框圖中使用系統(tǒng)生成器進(jìn)行編程。FPGA還提供許多專用功能和IP核,用來以高度優(yōu)化的方式直接完成實(shí)現(xiàn)方案。
FPGA內(nèi)的數(shù)字信號(hào)處理器的主要優(yōu)勢(shì)是能夠定制滿足系統(tǒng)要求的方案。這意味著在多通道或高速系統(tǒng)中,用戶可以充分利用器件內(nèi)部的并行性,從而最大限度地提高性能,而對(duì)于低速系統(tǒng),則可以更多地采用串行方式完成設(shè)計(jì)。因此,設(shè)計(jì)人員可以定制滿足算法和系統(tǒng)要求的方案,而不是取期望的理想設(shè)計(jì)的折衷方案來迎合純順序器件的諸多局限。另外,超高速I/O通過最大限度地提高從捕捉經(jīng)處理鏈再到最終輸出的數(shù)據(jù)流,可進(jìn)一步降低成本并減少瓶頸問題。
下面以一個(gè)同時(shí)使用傳統(tǒng)DSP架構(gòu)和FPGA架構(gòu)的FIR濾波器實(shí)現(xiàn)方案為例,來說明每種解決方案的優(yōu)劣。
數(shù)字FIR濾波器實(shí)例
有限脈沖響應(yīng)(FIR)濾波器是一種使用最廣的數(shù)字信號(hào)處理元件。設(shè)計(jì)人員使用濾波器來改變數(shù)字信號(hào)的幅度或頻譜,通常用于隔離或突出樣本數(shù)據(jù)頻譜中的特定區(qū)域。從這個(gè)角度來講,可以把濾波器視為信號(hào)的預(yù)處理方式。在典型的濾波器應(yīng)用中,輸入數(shù)據(jù)樣本通過小心同步的數(shù)學(xué)運(yùn)算與濾波器系數(shù)相結(jié)合(這取決于濾波器的類型和實(shí)現(xiàn)策略),隨后數(shù)據(jù)樣本進(jìn)入下一個(gè)處理階段。如果數(shù)據(jù)源和目的地都是模擬信號(hào),則數(shù)據(jù)樣本必須首先通過A/D轉(zhuǎn)換器,而結(jié)果則必須饋送給D/A轉(zhuǎn)換器。
最簡(jiǎn)單的FIR濾波器是通過用一系列的延遲元件、乘法器和加法器樹或加法器鏈來實(shí)現(xiàn)的。
下面的等式是單通道FIR濾波器的數(shù)學(xué)表達(dá)式:
公式1
該等式中的各項(xiàng)分別表示輸入樣本、輸出樣本和系數(shù)。假設(shè)S為連續(xù)的輸入樣本流,Y為經(jīng)濾波后產(chǎn)生的輸出樣本流,那么n和k則對(duì)應(yīng)特定的瞬時(shí)時(shí)間。這樣,若要計(jì)算時(shí)間n時(shí)的輸出樣本Y(n),則需要一組在N個(gè)不同時(shí)間點(diǎn)的樣本,即:S(n)、S(n-1)、s(n-2)、…s(n-N+1)。將這組N個(gè)輸入樣本乘以N個(gè)系數(shù)并求和,便可得出最終結(jié)果Y。
圖2是一個(gè)簡(jiǎn)單的31抽頭FIR濾波器(長(zhǎng)度N=31)的框圖。
圖1:傳統(tǒng)的DSP架構(gòu)
圖2:長(zhǎng)度為31抽頭的FIR濾波器
在選擇濾波器的理想長(zhǎng)度和系數(shù)值時(shí),有多種設(shè)計(jì)工具可供使用。其目的是通過選擇適當(dāng)?shù)膮?shù)來實(shí)現(xiàn)所需的濾波器性能。參數(shù)選擇最常用的設(shè)計(jì)工具是MATLAB。一旦選定了濾波器參數(shù),就可以用數(shù)學(xué)等式實(shí)現(xiàn)。
實(shí)現(xiàn)FIR濾波器的基本步驟包括:
1. 對(duì)輸入數(shù)據(jù)流采樣;
2. 在緩沖區(qū)組織輸入樣本,以便讓每個(gè)捕捉到的樣本與每項(xiàng)濾波器系數(shù)相乘;
3. 讓每個(gè)數(shù)據(jù)樣本與每項(xiàng)系數(shù)相乘,并累加結(jié)果;
4. 輸出濾波結(jié)果。
使用“相乘累加法”在處理器上實(shí)現(xiàn)FIR濾波器的典型C語言程序,如下列代碼所示。
圖3所示的實(shí)現(xiàn)方案被稱為相乘累加或MAC型實(shí)現(xiàn)方案。這基本上就是用傳統(tǒng)的DSP處理器實(shí)現(xiàn)濾波器的方法。采用內(nèi)核時(shí)鐘速率為1.2GHz的典型DSP處理器并以這種方式實(shí)現(xiàn)的31抽頭FIR濾波器的最高性能約為9.68MHz,或最大的輸入數(shù)據(jù)率為968MS/s。
評(píng)論