李玉學+白忠臣+秦水介
摘 要: 對FIR數字濾波器基于Verilog HDL的實現進行了研究,在分布式算法的基礎上進行了改進,設計了32階常系數FIR濾波器。用Verilog硬件描述語言進行數字邏輯設計,使用Synopsys VCS作為仿真工具對設計進行仿真和驗證,在Synopsys 公司的Design Compiler下進行綜合。結果表明,該設計既保證了運行速度又節省了芯片的面積,可以廣泛應用于數字集成電路的設計中。
關鍵詞: Verilog HDL; FIR濾波器; 分布式算法; 數字集成電路
中圖分類號: TN713?34 文獻標識碼: A 文章編號: 1004?373X(2014)07?0154?03
Optimization design and simulation of FIR digital filter based on Verilog HDL
LI Yu?xue1,2, BAI Zhong?chen1, QIN Shui?jie1
(1. Guizhou Key Laboratory of Photoelectron Technology and Application, Guiyang 550025, China;
2. School of Electronic Information, Guizhou University, Guiyang 550025, China)
Abstract: The realization of FIR digital filter based on Verilog HDL was studied and was improved on the basis of the distributed algorithm. A 32?order constant coefficient FIR filter was designed. Verilog hardware description language was used for digital logic Design. The design was simulated and verified by taking Synopsys VCS as a simulation tool. It was synthesized with Design Compiler of Synopsys Company. The results show that the design can noy only ensure the running speed, but also save the area of the chip. It can be widely used in the design of digital integrated circuit.
Keywords: Verilog HDL; FIR filter; distributed algorithm; digital integrated circuit
0 引 言
數字濾波器廣泛應用于數字音頻、圖像處理、數據傳輸、生物醫學等領域,是現代信號處理的重要內容。有限沖擊響應(FIR)濾波器有著保證線性相位和系統絕對穩定的優勢,因此在現代信號處理中得到廣泛的應用。 隨著電子計算機技術和大規模集成電路的發展,數字濾波器已可用計算機軟件實現,也可用大規模集成數字硬件實時實現。在工程實踐中,對信號的靈活和實時性要求很高,而現有的一些軟件和硬件設計方式很難同時達到這兩方面的要求[1?2]。本文優化設計了一種基于Verilog HDL的FIR數字濾波器,該濾波器處理速度較快,滿足信號實時處理的需求,且有效地減少了芯片的面積。
1 FIR數字濾波器的設計與實現
1.1 FIR濾波器的設計原理
FIR濾波器的實現方法主要是基于乘加結構(MAC結構)和分布式算法(DA)結構。乘累加結構在很大程度上能夠節省硬件資源,但造成濾波器要在多時鐘周期后才有輸出,處理速度很慢,不能滿足對高速系統的要求。并行乘法器結構盡管處理速度提高了,但是大量的耗費硬件資源,造成設計成本高。DA算法是將所有可能的乘積和預先計算出并保存在查找表中,能高效地實現多個乘法運算操作,在速度上和資源占用上比利用乘法器結構設計FIR濾波器有不可比擬的優勢[3]。DA算法的原理簡介如下。
一個[K]階的FIR濾波器的表達式如下:
[y=k=0K-1hkxk] (1)
式中:[hk]是第[k]個抽頭上的濾波器系數;[xk]是對應第[k]個抽頭上的輸入數據。對于位寬為[n]比特的有符號[xk]數用二進制補碼表示為[(b0b1…bn-2bn-1)2,][b0]是符號位,[bn-1]是最低位,則:
[xk=-bk0+i=1n-1bki2-i] (2)
將式(2)代入式(1),則有:
[y=k=0K-1hk-bk0+i=1n-1bki2-i] (3)
將式(3)展開,得到:
[y=-k=0K-1hkbk0+i=1n-1k=0K-1hkbki2-i] (4)
由式(4)可以看出,濾波器的輸出[y]由兩部分組成,式中[k=0K-1hkbki]表示[K]個固定系數與其對應的[K]個二進制補碼輸入的第[i]位的乘積和,它的結果共有[2k]種可能,將這[2k]種可能值計算出來放在查找表里,將乘累加轉換成查表的過程。采用DA算法的FIR濾波器,其處理速度僅與輸入的數據寬度有關,而與濾波器的階數無關。
由以上推導得出,當濾波器的階數變大時,查找表的規模按指數增長。對于高階濾波器的實現,必須采用將高階濾波器拆分成多個低階濾波器的方式。例如實現一個32階的FIR濾波器,可以由8個4階的FIR濾波器的輸出結果相加來完成,但是它們有各自不同的查找表[4]。
DA算法有位串分布式(SDA)算法,并行分布式(PDA)算法和串并結合的分布式算法,實現一個4階的FIR濾波器,對于SDA算法,需要一個查找表,如果輸入數據位寬為[N]位時,至少要在[N]個時鐘周期后才有結果輸出,對于PDA算法,將每個輸入數據的相同位傳遞給查找表,不同的位有不同的查找表,實現很高的速度,常用在對濾波器速度要求相當高的場合,不利的地方是使用多個數據相同的查找表內,加大了資源的占用,目前還沒有一個有效的方法既能有效減少查找表的數量,又能不降低系統運算速度[5]。串并結合的分布式算法,例如,輸入的16 b數據,從低到高分為4個4 b數據:[0:3]、[4:7]、[8:11]、[12:15],每個4 b數據使用一個查找表,共4個查找表,由于既有并行結構又有串行結構,往往有一些控制電路和多個時鐘[6]。
1.2 FIR濾波器的Verilog HDL設計實例
1.2.1 設計結構
本例主要設計一個32階的FIR濾波器,由8個結構完全相同的4階的FIR濾波器連接構成,32階FIR濾波器的輸出為每個4階FIR濾波器的輸出結果相加,如圖1所示。
基于PDA算法的4階FIR濾波器的結構如圖2所示。輸入的4個數據的相同位構成一個4位的查找表地址,查找從最低位開始,通過移位實現乘2運算后累加,得到濾波器的輸出。
圖1 32階FIR濾波器結構
圖2 基于PDA算法的4階FIR數字濾波器結構
對基于PDA算法的4階FIR數字濾波器進行優化設計后的濾波器結構圖,如圖3所示。用數據選擇器代替查找表,數據選擇器中選擇的數據和查找表的數據相同,數據選擇器的個數和查找表的個數相等。
圖3 4階FIR數字濾波器結構
1.2.2 Verilog HDL代碼編寫
采用寄存器傳輸級描述(RTL)的方法和自頂向下的方式進行代碼的編寫,同時應該具有很好的易讀性和可重復性[7]。其中每個數據選擇器模塊和4階FIR濾波器模塊完全相同,可重復使用。32階FIR濾波器的端口列表見表1。
表1 32階FIR濾波器的端口列表
[端口名\&類型\&說明\&data_in[15..0]\&輸入\&輸入為16位帶符號整數\&rst_n\&輸入\&時鐘復位信號\&clk\&輸入\&時鐘\&data_out[15..0]\&輸出\&FIR濾波器的輸出為16位帶符號整數\&]
1.2.3 驗證仿真
使用Synopsys VCS作為仿真工具,通過編譯仿真得到波形文件,使用DVE打開波形文件,能夠看到各信號的傳輸情況,圖4為32階FIR濾波器的仿真波形圖。本文設計的濾波器為常系數FIR濾波器,由輸入數據和濾波器的系數可以利用Matlab計算出標準的濾波器輸出數據[8?9]。把通過Verilog HDL實現濾波后得到的輸出數據和Matlab計算得到的數據進行對比,發現兩種方式得到的數據相同,驗證了設計的濾波器的輸出結果的正確性。由查找表實現的FIR濾波器會因為查找表占用大量的存儲單元,而本文設計的FIR濾波器用數據選擇器代替了查找表結構,實現相同的功能和高速的處理速度,而且減少了資源的占用,這和綜合后的得到的結果相符合,有效地節約了芯片的面積。
圖4 32階FIR濾波器仿真波形
2 結 論
利用Verilog HDL 設計的FIR濾波器在設計上比較靈活,代碼容易修改,編譯和仿真效率較高[10]。本文設計的濾波器有效地節約了芯片的面積,降低設計的成本,可以廣泛應用于數字集成電路中。
參考文獻
[1] 王春興,張彬.基于Matlab的FIR濾波器設計[J].現代電子技術,2011,34(18):83?85.
[2] 林志典,張方佩,袁國順.基于FPGA的高速FIR濾波器的設計與實現[J].微電子學,2013,43(4):537?540.
[3] 曲仕如,彭紀昌.一種在FPGA上實現的FIR數字濾波器的資源優化算法[J].電子設計工程,2013,21(14):147?149.
[4] 陳亦歐.采用分布式算法的高速FIR濾波器ASIC設計[J].微電子學,2007,37(1):144?146.
[5] 趙金現,吳三,王乃飛.基于FPGA并行分布式算法的FIR濾波器的實現[J].黑龍江科技學院學報,2006,16(4):248?250.
[6] 凌春麗.基于分布式算法的FIR濾波器的實現與應用[D].南京:南京林業大學,2012.
[7] 夏雨聞.Verilog HDL數字系統設計教程[M].北京:北京航空航天大學出版社,2003.
[8] 尹玉興,劉振堅,項止武.基于Matlab的FIR數字濾波器設計與仿真[J].工礦自動化,2011(12):60?63.
[9] 黃宗衛.基于Matlab的數字濾波器的設計[J].船舶電子對抗,2011,32(1):116?120.
[10] 江健康.基于Verilog HDL的FIR數字濾波器設計與仿真[J].微計算機信息,2007,23(3):206?207.
DA算法有位串分布式(SDA)算法,并行分布式(PDA)算法和串并結合的分布式算法,實現一個4階的FIR濾波器,對于SDA算法,需要一個查找表,如果輸入數據位寬為[N]位時,至少要在[N]個時鐘周期后才有結果輸出,對于PDA算法,將每個輸入數據的相同位傳遞給查找表,不同的位有不同的查找表,實現很高的速度,常用在對濾波器速度要求相當高的場合,不利的地方是使用多個數據相同的查找表內,加大了資源的占用,目前還沒有一個有效的方法既能有效減少查找表的數量,又能不降低系統運算速度[5]。串并結合的分布式算法,例如,輸入的16 b數據,從低到高分為4個4 b數據:[0:3]、[4:7]、[8:11]、[12:15],每個4 b數據使用一個查找表,共4個查找表,由于既有并行結構又有串行結構,往往有一些控制電路和多個時鐘[6]。
1.2 FIR濾波器的Verilog HDL設計實例
1.2.1 設計結構
本例主要設計一個32階的FIR濾波器,由8個結構完全相同的4階的FIR濾波器連接構成,32階FIR濾波器的輸出為每個4階FIR濾波器的輸出結果相加,如圖1所示。
基于PDA算法的4階FIR濾波器的結構如圖2所示。輸入的4個數據的相同位構成一個4位的查找表地址,查找從最低位開始,通過移位實現乘2運算后累加,得到濾波器的輸出。
圖1 32階FIR濾波器結構
圖2 基于PDA算法的4階FIR數字濾波器結構
對基于PDA算法的4階FIR數字濾波器進行優化設計后的濾波器結構圖,如圖3所示。用數據選擇器代替查找表,數據選擇器中選擇的數據和查找表的數據相同,數據選擇器的個數和查找表的個數相等。
圖3 4階FIR數字濾波器結構
1.2.2 Verilog HDL代碼編寫
采用寄存器傳輸級描述(RTL)的方法和自頂向下的方式進行代碼的編寫,同時應該具有很好的易讀性和可重復性[7]。其中每個數據選擇器模塊和4階FIR濾波器模塊完全相同,可重復使用。32階FIR濾波器的端口列表見表1。
表1 32階FIR濾波器的端口列表
[端口名\&類型\&說明\&data_in[15..0]\&輸入\&輸入為16位帶符號整數\&rst_n\&輸入\&時鐘復位信號\&clk\&輸入\&時鐘\&data_out[15..0]\&輸出\&FIR濾波器的輸出為16位帶符號整數\&]
1.2.3 驗證仿真
使用Synopsys VCS作為仿真工具,通過編譯仿真得到波形文件,使用DVE打開波形文件,能夠看到各信號的傳輸情況,圖4為32階FIR濾波器的仿真波形圖。本文設計的濾波器為常系數FIR濾波器,由輸入數據和濾波器的系數可以利用Matlab計算出標準的濾波器輸出數據[8?9]。把通過Verilog HDL實現濾波后得到的輸出數據和Matlab計算得到的數據進行對比,發現兩種方式得到的數據相同,驗證了設計的濾波器的輸出結果的正確性。由查找表實現的FIR濾波器會因為查找表占用大量的存儲單元,而本文設計的FIR濾波器用數據選擇器代替了查找表結構,實現相同的功能和高速的處理速度,而且減少了資源的占用,這和綜合后的得到的結果相符合,有效地節約了芯片的面積。
圖4 32階FIR濾波器仿真波形
2 結 論
利用Verilog HDL 設計的FIR濾波器在設計上比較靈活,代碼容易修改,編譯和仿真效率較高[10]。本文設計的濾波器有效地節約了芯片的面積,降低設計的成本,可以廣泛應用于數字集成電路中。
參考文獻
[1] 王春興,張彬.基于Matlab的FIR濾波器設計[J].現代電子技術,2011,34(18):83?85.
[2] 林志典,張方佩,袁國順.基于FPGA的高速FIR濾波器的設計與實現[J].微電子學,2013,43(4):537?540.
[3] 曲仕如,彭紀昌.一種在FPGA上實現的FIR數字濾波器的資源優化算法[J].電子設計工程,2013,21(14):147?149.
[4] 陳亦歐.采用分布式算法的高速FIR濾波器ASIC設計[J].微電子學,2007,37(1):144?146.
[5] 趙金現,吳三,王乃飛.基于FPGA并行分布式算法的FIR濾波器的實現[J].黑龍江科技學院學報,2006,16(4):248?250.
[6] 凌春麗.基于分布式算法的FIR濾波器的實現與應用[D].南京:南京林業大學,2012.
[7] 夏雨聞.Verilog HDL數字系統設計教程[M].北京:北京航空航天大學出版社,2003.
[8] 尹玉興,劉振堅,項止武.基于Matlab的FIR數字濾波器設計與仿真[J].工礦自動化,2011(12):60?63.
[9] 黃宗衛.基于Matlab的數字濾波器的設計[J].船舶電子對抗,2011,32(1):116?120.
[10] 江健康.基于Verilog HDL的FIR數字濾波器設計與仿真[J].微計算機信息,2007,23(3):206?207.
DA算法有位串分布式(SDA)算法,并行分布式(PDA)算法和串并結合的分布式算法,實現一個4階的FIR濾波器,對于SDA算法,需要一個查找表,如果輸入數據位寬為[N]位時,至少要在[N]個時鐘周期后才有結果輸出,對于PDA算法,將每個輸入數據的相同位傳遞給查找表,不同的位有不同的查找表,實現很高的速度,常用在對濾波器速度要求相當高的場合,不利的地方是使用多個數據相同的查找表內,加大了資源的占用,目前還沒有一個有效的方法既能有效減少查找表的數量,又能不降低系統運算速度[5]。串并結合的分布式算法,例如,輸入的16 b數據,從低到高分為4個4 b數據:[0:3]、[4:7]、[8:11]、[12:15],每個4 b數據使用一個查找表,共4個查找表,由于既有并行結構又有串行結構,往往有一些控制電路和多個時鐘[6]。
1.2 FIR濾波器的Verilog HDL設計實例
1.2.1 設計結構
本例主要設計一個32階的FIR濾波器,由8個結構完全相同的4階的FIR濾波器連接構成,32階FIR濾波器的輸出為每個4階FIR濾波器的輸出結果相加,如圖1所示。
基于PDA算法的4階FIR濾波器的結構如圖2所示。輸入的4個數據的相同位構成一個4位的查找表地址,查找從最低位開始,通過移位實現乘2運算后累加,得到濾波器的輸出。
圖1 32階FIR濾波器結構
圖2 基于PDA算法的4階FIR數字濾波器結構
對基于PDA算法的4階FIR數字濾波器進行優化設計后的濾波器結構圖,如圖3所示。用數據選擇器代替查找表,數據選擇器中選擇的數據和查找表的數據相同,數據選擇器的個數和查找表的個數相等。
圖3 4階FIR數字濾波器結構
1.2.2 Verilog HDL代碼編寫
采用寄存器傳輸級描述(RTL)的方法和自頂向下的方式進行代碼的編寫,同時應該具有很好的易讀性和可重復性[7]。其中每個數據選擇器模塊和4階FIR濾波器模塊完全相同,可重復使用。32階FIR濾波器的端口列表見表1。
表1 32階FIR濾波器的端口列表
[端口名\&類型\&說明\&data_in[15..0]\&輸入\&輸入為16位帶符號整數\&rst_n\&輸入\&時鐘復位信號\&clk\&輸入\&時鐘\&data_out[15..0]\&輸出\&FIR濾波器的輸出為16位帶符號整數\&]
1.2.3 驗證仿真
使用Synopsys VCS作為仿真工具,通過編譯仿真得到波形文件,使用DVE打開波形文件,能夠看到各信號的傳輸情況,圖4為32階FIR濾波器的仿真波形圖。本文設計的濾波器為常系數FIR濾波器,由輸入數據和濾波器的系數可以利用Matlab計算出標準的濾波器輸出數據[8?9]。把通過Verilog HDL實現濾波后得到的輸出數據和Matlab計算得到的數據進行對比,發現兩種方式得到的數據相同,驗證了設計的濾波器的輸出結果的正確性。由查找表實現的FIR濾波器會因為查找表占用大量的存儲單元,而本文設計的FIR濾波器用數據選擇器代替了查找表結構,實現相同的功能和高速的處理速度,而且減少了資源的占用,這和綜合后的得到的結果相符合,有效地節約了芯片的面積。
圖4 32階FIR濾波器仿真波形
2 結 論
利用Verilog HDL 設計的FIR濾波器在設計上比較靈活,代碼容易修改,編譯和仿真效率較高[10]。本文設計的濾波器有效地節約了芯片的面積,降低設計的成本,可以廣泛應用于數字集成電路中。
參考文獻
[1] 王春興,張彬.基于Matlab的FIR濾波器設計[J].現代電子技術,2011,34(18):83?85.
[2] 林志典,張方佩,袁國順.基于FPGA的高速FIR濾波器的設計與實現[J].微電子學,2013,43(4):537?540.
[3] 曲仕如,彭紀昌.一種在FPGA上實現的FIR數字濾波器的資源優化算法[J].電子設計工程,2013,21(14):147?149.
[4] 陳亦歐.采用分布式算法的高速FIR濾波器ASIC設計[J].微電子學,2007,37(1):144?146.
[5] 趙金現,吳三,王乃飛.基于FPGA并行分布式算法的FIR濾波器的實現[J].黑龍江科技學院學報,2006,16(4):248?250.
[6] 凌春麗.基于分布式算法的FIR濾波器的實現與應用[D].南京:南京林業大學,2012.
[7] 夏雨聞.Verilog HDL數字系統設計教程[M].北京:北京航空航天大學出版社,2003.
[8] 尹玉興,劉振堅,項止武.基于Matlab的FIR數字濾波器設計與仿真[J].工礦自動化,2011(12):60?63.
[9] 黃宗衛.基于Matlab的數字濾波器的設計[J].船舶電子對抗,2011,32(1):116?120.
[10] 江健康.基于Verilog HDL的FIR數字濾波器設計與仿真[J].微計算機信息,2007,23(3):206?207.