運(yùn)用FPGA解決DSP設(shè)計(jì)難題
2013-07-18
作者:Reg Zatrepalek
來(lái)源:Hardent 公司 DSP/FGPA 設(shè)計(jì)專(zhuān)家
本文以實(shí)踐為基礎(chǔ),對(duì) DSP和 FPGA 技術(shù)進(jìn)行了簡(jiǎn)要回顧,并詳細(xì)比較了這兩種架構(gòu)在 FIR 濾波器應(yīng)用中的優(yōu)劣。
DSP 對(duì)電子系統(tǒng)設(shè)計(jì)來(lái)說(shuō)非常重要,因?yàn)樗鼈兡軌蜓杆贉y(cè)量、過(guò)濾或壓縮即時(shí)模擬信號(hào)。這樣有助于實(shí)現(xiàn)數(shù)字電路和模擬電路之間的通信。但隨著電子系統(tǒng)進(jìn)一步精細(xì) 化,需要處理多種模擬信號(hào)源,迫使工程師不得不做出艱難決策。是使用多個(gè) DSP 并將其功能與系統(tǒng)的其余部分同步更具優(yōu)勢(shì)?還是采用一個(gè)能夠處理多項(xiàng)功能的高性能 DSP 并配套精細(xì)的軟件更具優(yōu)勢(shì)?
由于當(dāng)今的系統(tǒng)非常復(fù)雜,在許多情況下單個(gè) DSP 實(shí)現(xiàn)方案根本沒(méi)有足夠的處理能力。同時(shí),系統(tǒng)架構(gòu)也不能滿足多芯片系統(tǒng)帶來(lái)的成本、復(fù)雜性和功耗要求。
FPGA 已成為需要高性能 DSP 功能的系統(tǒng)的理想選擇。事實(shí)上,與單獨(dú)的數(shù)字信號(hào)處理器相比,F(xiàn)PGA 技術(shù)能夠?yàn)楦唠y度的 DSP 問(wèn)題提供大為簡(jiǎn)化的解決方案。要明白其中的緣由,需要回顧一下 DSP 的肇始和發(fā)展。
用于實(shí)現(xiàn)專(zhuān)門(mén)目的的微處理器
在過(guò)去二十年里,傳統(tǒng)的 DSP 架構(gòu)一直在竭盡全力跟上不斷提高的性能需求步伐。但隨著視頻系統(tǒng)大踏步地邁進(jìn)高清和 3D 時(shí)代,通信系統(tǒng)為實(shí)現(xiàn)更高帶寬已將現(xiàn)有技術(shù)發(fā)揮到極致,設(shè)計(jì)人員需要替代性實(shí)現(xiàn)策略。常用于實(shí)現(xiàn)數(shù)字信號(hào)處理算法的硬件不外乎如下三類(lèi)基本器件之一:微處 理器、邏輯和存儲(chǔ)器。部分設(shè)計(jì)還需要額外的硬件來(lái)實(shí)現(xiàn)模數(shù) (A/D) 和數(shù)模 (D/A) 轉(zhuǎn)換以及高速數(shù)字接口。
傳統(tǒng)的數(shù)字信號(hào)處理器是設(shè)計(jì)用于實(shí)現(xiàn)專(zhuān)門(mén)目的的微處理器,非常適合算法密集的任務(wù),但性能受時(shí)鐘速率及其內(nèi)部設(shè)計(jì)的有序性的限制,從而限制了它們對(duì) 輸入的數(shù)據(jù)采樣每秒最多執(zhí)行的運(yùn)算次數(shù)。一般來(lái)說(shuō),算術(shù)邏輯單元 (ALU) 運(yùn)算一次需要三或四個(gè)時(shí)鐘周期。多核架構(gòu)可以提升性能,但提升的幅度仍有限。因此,采用傳統(tǒng)的信號(hào)處理器設(shè)計(jì)必須將架構(gòu)元件重復(fù)用于算法實(shí)現(xiàn)。對(duì)每次執(zhí)行 的加、乘、減或其它任何基本運(yùn)算,每次運(yùn)算都必須循環(huán)通過(guò) ALU,不管是內(nèi)部還是外部反饋。
但令人遺憾的是,在處理當(dāng)今眾多的高性能應(yīng)用時(shí),這種傳統(tǒng)的 DSP 難以滿足系統(tǒng)的要求。為此在過(guò)去已經(jīng)提出過(guò)多種解決方案,其中包括在一個(gè)器件中使用多個(gè)ALU,或在一個(gè)開(kāi)發(fā)板上布置多個(gè) DSP 器件。但是,這些方案往往會(huì)造成成本大幅上升,同時(shí)把問(wèn)題直接推向另一個(gè)領(lǐng)域。例如,用多個(gè)器件提高性能遵循指數(shù)曲線。要讓性能提高一倍,需要兩個(gè)器件。 再提高一倍,則需要四個(gè)器件,依此類(lèi)推。另外,編程人員的工作重點(diǎn)也從注重信號(hào)處理功能轉(zhuǎn)為多個(gè)處理器與內(nèi)核之間的任務(wù)調(diào)度。這樣會(huì)產(chǎn)生大量額外的代碼, 而且這些代碼會(huì)成為系統(tǒng)開(kāi)銷(xiāo),而非用于解決眼前的數(shù)字信號(hào)處理問(wèn)題。
FPGA 技術(shù)的引入是解決 DSP 實(shí)現(xiàn)方案日益增長(zhǎng)的復(fù)雜性的福音。FPGA 最初開(kāi)發(fā)用于整合和集中分立的存儲(chǔ)器和邏輯,以實(shí)現(xiàn)更高的集成度、更出色的性能以及更高的靈活性。FPGA 技術(shù)已成為當(dāng)今使用的幾乎每一款高性能系統(tǒng)的重要組成部分。與傳統(tǒng)的 DSP 相比,F(xiàn)PGA 是由可配置邏輯塊 (CLB)、存儲(chǔ)器、DSP Slice 及一些其它元件組成的統(tǒng)一陣列所構(gòu)成的巨大并行結(jié)構(gòu)。它們既可以使用VHDL 和 Verilog 等高級(jí)描述語(yǔ)言進(jìn)行編程,也可以在方框圖中用系統(tǒng)生成器 (System Generator) 編程。FPGA 還提供眾多專(zhuān)用功能和 IP 核,可用于用高度優(yōu)化的方式直接完成實(shí)現(xiàn)方案。
在 FPGA 中完成數(shù)字信號(hào)處理的主要優(yōu)勢(shì)在于能夠根據(jù)系統(tǒng)要求定制實(shí)現(xiàn)方案。這就意味著對(duì)于多通道或高速系統(tǒng),用戶可以充分利用 FPGA 器件的并行性來(lái)最大化性能,而對(duì)低速系統(tǒng),則可以更多采用串行方式完成設(shè)計(jì)。這樣,設(shè)計(jì)人員就能夠根據(jù)算法和系統(tǒng)的要求來(lái)定制實(shí)現(xiàn)方案,不必折衷理想的設(shè) 計(jì)來(lái)迎合純順序器件的諸多局限。另外超高速 I/O 通過(guò)最大限度地提高從采集、處理到最終輸出的數(shù)據(jù)流,可進(jìn)一步降低成本并減少瓶頸問(wèn)題。
如何比對(duì) FPGA 的,下面以一個(gè)同時(shí)使用傳統(tǒng) DSP 架構(gòu)和 FPGA 架構(gòu)的 FIR 濾波器實(shí)現(xiàn)方案為例,來(lái)說(shuō)明每種架構(gòu)的優(yōu)劣。
實(shí)例:數(shù)字 FIR 濾波器
有限脈沖響應(yīng) (FIR) 濾波器是使用最廣的數(shù)字信號(hào)處理元件之一。設(shè)計(jì)人員可用濾波器來(lái)改變數(shù)字信號(hào)的幅度或頻譜,通常用于隔離或衰減樣本數(shù)據(jù)頻譜中的特定區(qū)域。從這個(gè)角度說(shuō), 可以把濾波器視為信號(hào)的預(yù)處理方式。在典型的濾波器應(yīng)用中,輸入的數(shù)據(jù)樣本通過(guò)精心同步的數(shù)學(xué)運(yùn)算與濾波器系數(shù)相結(jié)合,不過(guò)這取決于濾波器的類(lèi)型和實(shí)現(xiàn)策 略,隨后數(shù)據(jù)樣本進(jìn)入下一個(gè)處理階段。如果數(shù)據(jù)源和終點(diǎn)都是模擬信號(hào),則數(shù)據(jù)樣本必須首先通過(guò) A/D 轉(zhuǎn)換器,結(jié)果則必須饋通給 D/A 轉(zhuǎn)換器。
最簡(jiǎn)單的 FIR 濾波器的構(gòu)造采用一系列延遲元件、乘法器和加法器樹(shù)或加法器鏈來(lái)實(shí)現(xiàn)。
下面的等式是單通道 FIR 濾波器的數(shù)學(xué)表達(dá):
該等式中的各項(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 各時(shí)間點(diǎn)的樣本群組,即S(n)、S(n-1)、s(n-2)…s(n-N+1)。N 輸入樣本群組乘以 N系數(shù),加總后得出最終結(jié)果 Y。
圖 2 是一個(gè)簡(jiǎn)單的 31 抽頭 FIR 濾波器(長(zhǎng)度N=31)的方框圖。
在選擇濾波器的理想長(zhǎng)度和系數(shù)值時(shí),有多種設(shè)計(jì)工具可供使用。其目的是通過(guò)選擇適當(dāng)?shù)膮?shù)來(lái)實(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 語(yǔ)言程序,如下列代碼所示:
/*
*采集輸入的數(shù)據(jù)樣本
*/
datasample = input();
/*
*將新數(shù)據(jù)樣本導(dǎo)入緩沖器
*/
S[n] = datasample;
/*
*將每個(gè)數(shù)據(jù)樣本與每項(xiàng)系數(shù)相乘并累加結(jié)果
*/
y = 0;
for (i = 0; i {
y += k[i] * S[(n + i) %N];
}
n = (n+1) %N;
/*
* 輸出濾波結(jié)果
*/
output(y);
圖 3 所示的實(shí)現(xiàn)方案被稱(chēng)為相乘累加或 MAC 型實(shí)現(xiàn)方案。這基本上就是用傳統(tǒng)的 DSP 處理器實(shí)現(xiàn)濾波器的方法。采用內(nèi)核時(shí)鐘速率為 1.2GHz 的典型 DSP 處理器實(shí)現(xiàn)的 31 抽頭 FIR 濾波器的最高性能約為 9.68 MHz,即最大的輸入數(shù)據(jù)率為 968 Msps。
而 FPGA 提供了許多不同的設(shè)計(jì)和優(yōu)化選擇。如果需要高資源效率的設(shè)計(jì),MAC 引擎法相當(dāng)理想。這里還是以31 抽頭濾波器為例來(lái)說(shuō)明濾波器規(guī)范對(duì)所需邏輯資源的影響。這種實(shí)現(xiàn)方案的方框圖如圖 4 所示。
這種設(shè)計(jì)需要存儲(chǔ)器存儲(chǔ)數(shù)據(jù)和系數(shù),可以混合采用FPGA 內(nèi)部的 RAM 和 ROM。RAM 用于存儲(chǔ)數(shù)據(jù)樣本,故采用循環(huán)式RAM緩沖器來(lái)實(shí)現(xiàn)。字的數(shù)量與濾波器抽頭數(shù)相等,位寬按樣本大小設(shè)置。ROM 用于存儲(chǔ)系數(shù)。在最糟糕的情況下字的數(shù)量與濾波器抽頭的數(shù)量相等,但如果存在對(duì)稱(chēng),則可以減少字的數(shù)量。位寬必須足以支持最大的系數(shù)。由于數(shù)據(jù)樣本和系數(shù) 數(shù)據(jù)隨每個(gè)周期改變,故需要全乘法器。累加器負(fù)責(zé)將產(chǎn)生的結(jié)果累加起來(lái)。因?yàn)殡S著濾波器采集數(shù)據(jù),累加器的輸出會(huì)隨每個(gè)時(shí)鐘周期改變,故需要采集寄存器。 當(dāng)全套 N 樣本完成累加后,輸出寄存器負(fù)責(zé)采集最終結(jié)果。
如果采用 MAC 模式,則 DSP48 非常適用,因?yàn)镈SP48 Slice 內(nèi)含輸入寄存器、輸出寄存器和加法器單元。實(shí)現(xiàn) 31 抽頭 MAC 引擎需要一個(gè) DSP48、一個(gè)18 KbBlock RAM 和 9 個(gè)邏輯 Slice。另外還需要一些 Slice 用于采樣、系數(shù)地址生成和控制。如果 FPGA 內(nèi)置有 600MHz的時(shí)鐘,則在一個(gè) -3 速度等級(jí)的賽靈思 7 系列器件中該濾波器能夠以 19.35MHz 的輸入采樣速率運(yùn)行,即1,935Msps。
如果系統(tǒng)規(guī)范要求更高性能的 FIR 濾波器,則可采用并行結(jié)構(gòu)來(lái)實(shí)現(xiàn)。圖 5 顯示了 Direct Form Type I 實(shí)現(xiàn)方案的方框圖。
Direct Form I 濾波器能夠在 FPGA 中實(shí)現(xiàn)最高性能的設(shè)計(jì)。這種結(jié)構(gòu)通常也稱(chēng)為收縮型 FIR 濾波器,它采用流水線和加法器鏈讓 DSP48 Slice 發(fā)揮出最高性能。輸入首先饋送到用作數(shù)據(jù)樣本緩沖器的級(jí)聯(lián)寄存器。每個(gè)寄存器隨后向 DSP48 提供一個(gè)樣本,隨即乘以對(duì)應(yīng)的系數(shù)。加法器鏈負(fù)責(zé)存儲(chǔ)部分結(jié)果,然后順序相加,得到最終結(jié)果。
這種設(shè)計(jì)無(wú)需外部邏輯支持濾波器,且該結(jié)構(gòu)可擴(kuò)展用于支持任意數(shù)量的系數(shù)。由于沒(méi)有高扇出的輸入信號(hào),故這種結(jié)構(gòu)能夠?qū)崿F(xiàn)最高性能。實(shí)現(xiàn) 31 抽頭 FIR 濾波器僅需要 31 個(gè) DSP48 Slice。如果 FPGA 內(nèi)置有 600MHz 的時(shí)鐘,則在一個(gè) -3 速度等級(jí)的賽靈思 7 系列器件中該濾波器能夠以 600MHz 的輸入采樣速率運(yùn)行,即 600Msps。
從這個(gè)實(shí)例可以清晰地看出 FPGA 不僅在性能上顯著超越了傳統(tǒng)的數(shù)字信號(hào)處理器,而且要求的時(shí)鐘速率也顯著降低(因此功耗也顯著降低)。
這個(gè)實(shí)例只反映出采用 PFGA 實(shí)現(xiàn) FIR 濾波器的部分技巧。為充分利用數(shù)據(jù)采樣率規(guī)范,可對(duì)該器件進(jìn)行進(jìn)一步的定制,此時(shí)數(shù)據(jù)采樣率可在順序 MAC 運(yùn)算極值和完全并行運(yùn)算極值之間任取。用戶還可考慮在涉及對(duì)稱(chēng)系數(shù)、內(nèi)插、抽取、多通道或多速率的性能和資源利用方面進(jìn)行更多權(quán)衡取舍。賽靈思 CORE Generator™ 或System Generator 實(shí)用工具可幫助用戶充分發(fā)掘這些設(shè)計(jì)變量和技巧。
在傳統(tǒng) DSP 和 FPGA 之間決策
傳統(tǒng)數(shù)字處理器已經(jīng)有多年的應(yīng)用歷史,當(dāng)然不乏為特定問(wèn)題提供最佳解決方案的實(shí)例。如果系統(tǒng)采樣率低于數(shù) KHz 且為單通道設(shè)計(jì),DSP 可能是不二之選。但是,當(dāng)采樣率增加到數(shù) MHz 以上,或者系統(tǒng)要求多通道,F(xiàn)PGA 就越來(lái)越具優(yōu)勢(shì)。在高數(shù)據(jù)速率條件下,DSP 只能勉為其能地在不造成任何損耗的情況下采集、處理和輸出數(shù)據(jù)。這是因?yàn)樵谔幚砥髦写嬖诖罅抗蚕淼馁Y源、總線,乃至內(nèi)核。而 FPGA 能夠?yàn)槊宽?xiàng)功能提供專(zhuān)門(mén)的資源。
DSP 是基于指令而非時(shí)鐘的器件。一般來(lái)說(shuō),對(duì)單個(gè)樣本上的任何數(shù)學(xué)運(yùn)算需要三條或四條指令。數(shù)據(jù)必須經(jīng)輸入端采集,發(fā)送到處理內(nèi)核,每完成一次運(yùn)算需循環(huán)通過(guò) 內(nèi)核,然后發(fā)送到輸出端。相比之下,F(xiàn)PGA 基于時(shí)鐘,故每個(gè)時(shí)鐘周期都有可能在輸入數(shù)據(jù)流上進(jìn)行一次數(shù)學(xué)運(yùn)算。
由于 DSP 的運(yùn)算以指令或代碼為基礎(chǔ),編程機(jī)制為標(biāo)準(zhǔn)的 C 語(yǔ)言,或者在需要更高性能的情況下,用低級(jí)匯編語(yǔ)言。這種代碼可能包含高級(jí)決策樹(shù)或者分支運(yùn)算,難以在 FPGA 中實(shí)現(xiàn)。例如現(xiàn)存的大量用于執(zhí)行預(yù)設(shè)功能或標(biāo)準(zhǔn)的代碼,比如音頻和語(yǔ)音編解碼器。
FPGA 廠商和第三方合作伙伴已經(jīng)意識(shí)到將 FPGA 用于高性能 DSP 系統(tǒng)的優(yōu)勢(shì)。如今已有許多 IP 核廣泛應(yīng)用于視頻、圖像處理、通信、汽車(chē)、醫(yī)療和軍用等大部分垂直應(yīng)用市場(chǎng)。與把高級(jí)系統(tǒng)方框圖映射成為 C 語(yǔ)言代碼的DSP 設(shè)計(jì)相比,將高級(jí)系統(tǒng)方框圖分解為 FPGA 模塊和 IP核會(huì)更加簡(jiǎn)便易行。
從 DSP 轉(zhuǎn)向 FPGA
考查一些主要標(biāo)準(zhǔn)有利于在傳統(tǒng) DSP 和 FPGA 之間做出決策(見(jiàn)表 1)。
軟件編程人員的數(shù)量遠(yuǎn)遠(yuǎn)超過(guò)硬件設(shè)計(jì)人員的數(shù)量,這已是不爭(zhēng)的事實(shí)。DSP 編程人員的數(shù)量與 FPGA 設(shè)計(jì)人員的數(shù)量之間的關(guān)系也是如此。不過(guò)讓系統(tǒng)架構(gòu)師或者 DSP設(shè)計(jì)人員轉(zhuǎn)為使用 FPGA 的難度并不像讓軟件編程人員轉(zhuǎn)為從事硬件設(shè)計(jì)那么大。有大量的資源可以顯著簡(jiǎn)化 DSP算法開(kāi)發(fā)和 FPGA 設(shè)計(jì)工作。
主要的障礙是轉(zhuǎn)換問(wèn)題描述和解決的思路,即從基于樣本和事件的方法轉(zhuǎn)向基于時(shí)鐘的方法。如果能夠在設(shè)計(jì)流程的系統(tǒng)架構(gòu)和定義階段就能夠完成,對(duì)這種轉(zhuǎn)換的理解和應(yīng)用就會(huì)簡(jiǎn)單得多。由彼此隔絕的不同工程師和數(shù)學(xué)專(zhuān)家負(fù)責(zé)
系統(tǒng)架構(gòu)的定義,DSP 算法的開(kāi)發(fā)和 FPGA 的設(shè)計(jì)是司空見(jiàn)慣的事情。當(dāng)然,如果每個(gè)成員對(duì)其他開(kāi)發(fā)小組成員面臨
的難題有一定程度的認(rèn)識(shí)的話,這個(gè)過(guò)程會(huì)順利得多。
要支持 FPGA 實(shí)現(xiàn)方案,架構(gòu)師不需要高度精通FPGA 設(shè)計(jì)。只需要對(duì)器件、資源和工具有基本的理解即可。通過(guò)提供的多種專(zhuān)題課程,可以快速進(jìn)階。
具體的進(jìn)階方式取決于工程師的背景和專(zhuān)業(yè)知識(shí)。具體就 DSP 類(lèi)課程而言,就有算法開(kāi)發(fā)課、高效設(shè)計(jì)課和System Generator 設(shè)計(jì)課。如果用戶期望成為在 FPGA 進(jìn)行 DSP 設(shè)計(jì)的高手,Hardent 和其他賽靈思授權(quán)培訓(xùn)合作伙伴提供的三大課程可幫助您快速入門(mén):DSP 入門(mén)、使用賽靈思 FPGA 完成 DSP 設(shè)計(jì)的必備技巧、使用 SystemGenerator 進(jìn)行 DSP 設(shè)計(jì)。
Hardent 還提供介紹賽靈思器件、HDL 設(shè)計(jì)入門(mén)語(yǔ)言、優(yōu)化技巧,以及設(shè)計(jì)與調(diào)試策略的公共課。另外還有專(zhuān)門(mén)針對(duì)高速 I/O 設(shè)計(jì)、嵌入式處理和 DSP 設(shè)計(jì)技巧的專(zhuān)業(yè)課程和研討會(huì)。