<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 汽車(chē)電子 > 設計應用 > 基于并行流水線(xiàn)結構的可重配FIR濾波器的FPGA實(shí)現

基于并行流水線(xiàn)結構的可重配FIR濾波器的FPGA實(shí)現

——
作者:曲少波 時(shí)間:2007-04-26 來(lái)源:國外電子元器件 收藏
1 并行流水結構FIR的原理

在用或專(zhuān)用集成電路實(shí)現數字信號處理算法時(shí),計算速度和芯片面積是兩個(gè)相互制約的主要問(wèn)題。實(shí)際應用時(shí),要獲得良好的濾波效果,濾波器的階數可能會(huì )顯著(zhù)增加,有時(shí)可能會(huì )多達幾百階。因此,有必要在性能和實(shí)現復雜性之間做出選擇,也就是選擇不同的濾波器實(shí)現結構。這里運用結構來(lái)實(shí)現速度和硬件面積之間的互換和折衷。

在關(guān)鍵路徑插入寄存器的流水線(xiàn)結構是提高系統吞吐率的一項強大的實(shí)現技術(shù),并且不需要大量重復設置硬件。流水線(xiàn)的類(lèi)型主要分為兩種:算術(shù)流水線(xiàn)和指令流水線(xiàn)。對設計,邏輯功能是面向特定應用的,因此,采用需要較少額外控制邏輯的算術(shù)流水結構。 流水線(xiàn)結構就意味著(zhù)將數字處理算法分割成時(shí)間上前后相連的多個(gè)處理片段.并且在段與段之間加信號寄存器來(lái)緩沖。這些段和段之間的緩沖就構成了流水線(xiàn)。系統原來(lái)的運算量被分割成k個(gè)部分,分別由流水線(xiàn)的k個(gè)段來(lái)外理。一旦前面的任務(wù)通過(guò)了流水線(xiàn)的第一段,新的任務(wù)就可以進(jìn)入流水線(xiàn)。設系統不加流水時(shí)的延時(shí)是D,則加上流水后,每隔D/k個(gè)時(shí)間單位就可以啟動(dòng)新的任務(wù)。要實(shí)現流水線(xiàn)的性能提升應滿(mǎn)足3個(gè)條件:

①運算量均勻分成延時(shí)一致的k個(gè)部分;

②輸人數據有大量重復的運算;

③重復的運算前后沒(méi)有相關(guān)性。

并行結構就是以重復相同的結構,對同時(shí)滿(mǎn)足并行運算條件的并行算法在硬件上進(jìn)行實(shí)現的結構。并行結構運用起來(lái)的主要難點(diǎn)如下:一,并行結構占用更多的面積。二,相互并行的各計算部分在相互交換數據時(shí),需要額外的控制和互聯(lián)結構。但是,在芯片工藝尺寸不斷減小的今天,并行結構成為設計高速、低延時(shí)數據處理系統的首選??刂坪突ヂ?lián)結構的復雜性取決于算法和對算法的劃分方法。本身就適合并行處理,但是對于占用時(shí)間和芯片面積都很大的乘法器來(lái)說(shuō),用全并行來(lái)實(shí)現是不經(jīng)濟的。

FIR濾波器以其設計簡(jiǎn)單、穩定性好、方便實(shí)現、線(xiàn)性相位等優(yōu)點(diǎn)往往成為首選,甚至是唯一的選擇。FIR濾波器用差分方程表示為:


FIR濾波器直接型結構如圖1。

FIR濾波器直接型結構

2 實(shí)現方法

現場(chǎng)可編程門(mén)陣列()具有體系結構和邏輯單元配置靈活、集成度高以及設計開(kāi)發(fā)周期短等優(yōu)點(diǎn),因此,選用FPGA來(lái)驗證并實(shí)現本濾波器結構。VHDL是一種硬件描述語(yǔ)言,主要用于描述數字系統的結構、行為、功能和接口,與FPGA相結合后,表現出更加強大與靈活的數字系統設計能力。用VHDL完成數字系統的功能描述,用FPGA來(lái)實(shí)現是一種實(shí)用方便的軟、硬件結合方式。從硬件描述語(yǔ)言到FPGA配置數據文件是由綜合工具以及布局、布線(xiàn)工具來(lái)完成的。數字系統的功能最終能否實(shí)現以及性能如何,取決于數字系統的算法結構,也取決于綜合工具、布局和布線(xiàn)工具,還有器件性能。但是,如果數字系統的算法設計不好,就會(huì )有更多的設計反復。這里對FIR濾波器提出一種處理時(shí)間和所用芯片面積可以互換的結構,在最初的設計時(shí),就能對其處理能力有所估計,減少了設計的反復。

對于FIR濾波器,Xilinx提供了兩個(gè)軟核,一個(gè)是基于分布式運算的,另一個(gè)是基于單路的乘加運算。對于大階數、高采樣率的濾波器,這兩種濾波器結構都不太適合。

為了提高FIR濾波器的吞吐量,可用并行加流水線(xiàn)的結構來(lái)實(shí)現FIR濾波器,如圖2所示。流水結構用于提高吞吐量率,并行結構可以減小處理延時(shí)。利用流水和并行結構調整濾波器性能使其滿(mǎn)足實(shí)際應用要求。這里實(shí)現三級流水和二路并行的FIR濾波器。三級流水分別對應取數、乘法和累加。主要由雙口RAM、乘法器、累加器、控制邏輯和流水線(xiàn)間的寄存器組成,還有數據寫(xiě)入模塊(圖中未畫(huà))。

并行流水線(xiàn)結構的FIR濾波器

用兩塊RAM分別存放FIR系數和數據的前N個(gè)樣值點(diǎn),這兩個(gè)RAM要求有一個(gè)寫(xiě)數據和一個(gè)讀數據的雙端口RAM。數據寫(xiě)入模塊負責把所要濾波的數據輪換地寫(xiě)入兩個(gè)雙口RAM;FIR的系數也按偶數下標和奇數下標分別寫(xiě)入兩個(gè)系數RAM,實(shí)現時(shí)是預先配置的。在實(shí)現濾波時(shí),如圖1所示對數據移位是不現實(shí)的。因此,用交聯(lián)網(wǎng)絡(luò )結合控制模塊實(shí)現第一級流水--取數,完成給下一級流水線(xiàn)正確送數的目的。第二級流水是兩個(gè)并行的乘法器,完成乘法運算。第三級流水是一個(gè)累加器;在控制邏輯的控制下,對乘法器輸出結果進(jìn)行正確的累加運算。

完成結構設計后要進(jìn)行時(shí)序設計。數據寫(xiě)入模塊的時(shí)鐘是根據數據源產(chǎn)生數據的速率而定的。而流水線(xiàn)的工作時(shí)鐘頻率要求大于數據產(chǎn)生時(shí)鐘頻率的N/2倍,N是濾濾器階數,2是并行度。也就是要求流水線(xiàn)在數據產(chǎn)生的一個(gè)周期內能完成一次FIR濾波器輸出的計算。其中的控制邏輯是流水線(xiàn)正常運行的關(guān)鍵。數據流水線(xiàn)上的各種時(shí)序要求都要由其產(chǎn)生,包括讀數據地址、讀系數的地址、交聯(lián)網(wǎng)絡(luò )的控制和流水線(xiàn)結構的輸出。其VHDL的端口描述如下:

系數地址由計數器產(chǎn)生,計數器周期是濾波器的階數除以并行度,由first_data_address的第0位的邊沿觸發(fā),以重新從0開(kāi)始計數。數據RAM的地址加上計數器的值。兩個(gè)RAM地址因當前輸入濾波數據的存放位置,可能相同也可能相差1。交聯(lián)網(wǎng)絡(luò )的控制信號是計數器的最低位。累加器輸出的使能信號是在計數到濾波器的階數時(shí)產(chǎn)生的,而后經(jīng)過(guò)延時(shí)給到累加器。累加器清零信號在這里產(chǎn)生要比累加器中用其他方法方便得多。

交聯(lián)網(wǎng)絡(luò )也是設計的重點(diǎn)。對于并行處理結構,各單元之間數據的共享和通信是限制并行度的主要原因。在并行度為2的結構中,只要輪流交換系數就可以了。但是對更高的并行度,這一通信網(wǎng)絡(luò )的延時(shí)是相當大的,這也是把它單獨列為濾波器的流水線(xiàn)的一級的主要原因。

還要注意的是:有符號數常用補碼表示。在對有符號數進(jìn)行擴展時(shí),要擴展最高位。對乘法器的輸出一般要進(jìn)行擴展,以避免累加器溢出。

對于乘加運算,有一種分布式計算方法,也就是把乘法進(jìn)一步分解為部分和(二進(jìn)制系數的每一位和輸入數據相與的結果)。當乘加運算的一個(gè)乘數是已知常數時(shí),分布式乘加運算會(huì )很節省資源。因為系數固定,與運算的結果是在運算前可知的,這樣零位與數據相與的結 果是不參與加運算的,從而實(shí)現無(wú)乘法器的濾波器。這里不選用這種方法,原因有二:其一,分布式運算將使濾波器難以重配:其二,基于FPGA的硬件乘法器較綜合得來(lái)的乘法器性能更佳。

3 仿真及測試

用VHDL語(yǔ)言描述全部電路模塊后,輸入系數1、2、3、4、5和數據-l、-2、3、4等進(jìn)行測試.用Mod-elsim進(jìn)行仿真,其結果如圖3所示。

可以看出,模塊能正確進(jìn)行計算,從數據輸入到數據輸出約延時(shí)2個(gè)數據時(shí)鐘.這主要是前面的數據輸入模塊的延時(shí)。乘加部分采用數據時(shí)鐘的N/2倍,其延時(shí)與濾波器的階數成比例,但不會(huì )超過(guò)一個(gè)數據時(shí)鐘周期。

仿真結果

然后,對VHDL描述就Xilinx的Spartan-3進(jìn)行綜合和測試??梢缘贸霰?所示的測試結果,其中第一行為并行流水結構所設計的濾波器,第二行是采用Xilinx提供的軟核設計的濾波器。

測試結果

可以看出,除了增加一個(gè)乘法器外,邏輯塊和觸發(fā)器都增加了一倍多。用這種結構設計的濾波器面積增加了一倍,速度性能也提高了一倍。以上兩種濾波器可以應用在語(yǔ)音信號處理中--讓語(yǔ)音信號通過(guò)低通濾波器以獲取語(yǔ)音的低頻分量。相對而言,并行流水結構能實(shí)現比Xilinx軟核更高階數的濾波器。在聽(tīng)覺(jué)上,經(jīng)過(guò)兩種濾波器(相同階數)的語(yǔ)音信號沒(méi)有太大差別。

4 結束語(yǔ)

本文在運算層次上,依據流水和并行運算結構實(shí)現直接型FIR濾波器。如果在設計濾波器時(shí),結合級聯(lián)型和直接型兩種濾波器結構,那么也能實(shí)現同樣的并行和流水的效果。實(shí)際上,還可在更低層次的乘法運算時(shí),對部分和也用并行和流水結構來(lái)實(shí)現。這些結構的選擇都依據性能要求和實(shí)現的復雜性來(lái)具體確定。

作為實(shí)現現代高性能處理器的方法,并行和流水結構各有特點(diǎn)。并行是以面積換速度。流水是以延時(shí)換速度,采用這兩種結構,就能在面積、速度、延時(shí)之間靈活互換。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>