高 沖 何云斌
摘 要:VerilogHDL是EDA領(lǐng)域中電路設(shè)計必不可少的工具,利用它設(shè)計數(shù)字濾波器的最大優(yōu)點就是可使設(shè)計更加靈活,它具有良好的結(jié)構(gòu)化設(shè)計和行為建模能力。首先利用VerilogHDL對小波濾波器復(fù)雜算法電路建立結(jié)構(gòu)化模型,然后根據(jù)改進的分布式算法(是一項重要的FPGA技術(shù))和濾波電路結(jié)構(gòu)圖對小波濾波器進行行為建模。最后,利用QuartusⅡ內(nèi)部的波形仿真軟件進行波形仿真和驗證,并根據(jù)仿真結(jié)果對模型進行修改以達到設(shè)計要求。
關(guān)鍵詞:Verilog硬件描述語言;改進的分布式算法;小波濾波器
中圖分類號:TP302文獻標識碼:B
文章編號:1004-373X(2009)03-119-03
Design and Implementation of Wavelet Filter Based on VerilogHDL
GAO Chong,HE Yunbin
(Computer Science College,Harbin University of Science and Technology,Harbin,150080,China)
Abstract:VerilogHDL is a necessary tool in the area of EDA circuit design,the biggest advantage to design a digital filter by what is to make design more flexible.Verilog HDL has a good structured design and behavioral modeling capability.First of all,in this wavelet filter,the structure model of the complex algorithm circuit is created in Verilog HDL.Then,the behavior modeling with a combination of improved Distributed Arithmetic(DA) (an important FPGA technology)and structure diagram of filter circuit follows modeling.Finally,the design is verified and simulated by the QuartusII′s integrated waveform simulator.Based on the simulation results,the model can be modified in order to meet the design requirements.
Keywords:Verilog HDL;improved distributed arithmetic;wavelet filter
0 引 言
現(xiàn)代計算機和通信系統(tǒng)中廣泛采用數(shù)字信號處理的技術(shù)和方法,其基本思路是先把信號用一系列的數(shù)字來表示,然后對這些數(shù)字信號進行各種快速的數(shù)學(xué)運算。其目的是多種多樣的,有的是為了加密,有的是為了去掉噪聲等無關(guān)的信息,稱為濾波;有時也把某些種類的數(shù)字信號處理運算成為變換,如離散的傅里葉變換(DFT),小波變換(Wavelet T)等[1]。VerilogHDL是目前應(yīng)用最廣泛的一種硬件描述語言,用于數(shù)字電子系統(tǒng)的設(shè)計??捎盟M行各種級別的邏輯設(shè)計,并進行數(shù)字邏輯系統(tǒng)的仿真驗證,時序分析,邏輯綜合。小波濾波器的設(shè)計屬于復(fù)雜算法的電路設(shè)計,因此利用VerilogHDL對雙正交小波濾波器進行建模、仿真,實現(xiàn)電路的自動化設(shè)計,將是一種較為理想的方法。
1 小波濾波器的設(shè)計
對于小波函數(shù),要求它具有正交性、緊支集、對稱性和平滑性。正交性可以使變換無冗余;緊支集則帶來優(yōu)良的空間分辨率;對稱性保證了與其對應(yīng)濾波器的相位為線性;平滑性可以產(chǎn)生較小的失真。這樣使離散二進小波變換受到很大的限制,為此,人們提出一種雙正交的小波變換[2,3]。本文設(shè)計小波濾波器正是基于雙正交小波變換的一種雙通道完全重構(gòu)濾波器,因此可以對信號進行分解后實現(xiàn)精確重構(gòu),所以對信號的濾波有很好的作用。由于它具有正變換二元上抽樣采樣和反變換二元下抽樣采樣特性,在進行濾波器設(shè)計時可以將雙正交小波濾波器設(shè)計成具有多相結(jié)構(gòu)的雙通道完全重構(gòu)濾波器[4]。雙正交小波變換可以看成原始信號通過一系列高低通濾波器濾波并經(jīng)過抽樣后所得到的結(jié)果,重構(gòu)過程與此相反。為了使變換后的信號能夠完全重建,須滿足Y(n)=z-kX(n),在這里取k=1[5]。雙正交小波濾波器分解和重構(gòu)過程如圖1所示。
設(shè)G(z),H(z)分別為分解低通,高通濾波器,下采樣后用H(z)濾波等價于先用H(z2)濾波,然后下采樣,所以:
G(z)=Ge(z2)+z-1Go(z2)
(1)
H(z)=He(z2)+z-1Ho(z2)
(2)
其中:Ge和Go分別是G(z)的偶數(shù)項和奇數(shù)項,He和Ho分別是H(z)的偶數(shù)項和奇數(shù)項。根據(jù)式(1),式(2)可以建立雙正交小波濾波器的多相結(jié)構(gòu)模型如圖2所示。
圖1 雙正交小波濾波器分解和重構(gòu)過程
圖2 雙正交小波濾波器的多相結(jié)構(gòu)
下面對雙正交小波濾波器用VerilogHDL進行頂層設(shè)計:
module wavelet filter ( clk,data1,data2,gdata,hdata);
input clk,data1,data2;
output gdata,hdata;
wrie geout,heout,gout,hoout;
ge_filter u1(
.clk(clk),
.e1_input(data1),
.geoutput(ge)
);
he_filter u2(
.clk(clk),
.o1_input(data2),
.heoutput(he)
);
go_filter u3(
.clk(clk),
.e2_input(data1),
.geoutput(ge)
);
ho_filter u4(
.clk(clk),
.o2_input(data2),
.hooutput(ho)
);
Adder1 u5(
.output1(gdata)
);
Adder1 u6(
.output2(hdata)
);
endmodule
對于雙正交小波濾波器的部件Ge,Go,He,Ho設(shè)計,采用行為描述方式進行設(shè)計[6]。VerilogHDL行為描述語言作為一種結(jié)構(gòu)化和過程性的語言,其語法結(jié)構(gòu)非常適合于算法級和RTL級的模型設(shè)計。在VerilogHDL語言中行為描述分為算法和RTL兩種。算法級:用語言提供的高級結(jié)構(gòu)能夠?qū)崿F(xiàn)算法的運行模型。RTL級:描述數(shù)據(jù)在寄存器之間的流動和如何處理,控制這些數(shù)據(jù)的流動,采用改進的DA算法(如圖3所示)。DA算法完成一次濾波所需要B次的累加(或減)也就是B個時鐘周期完成一次運算,B位輸入數(shù)據(jù)的位寬。它的查找表(LUT)的大小是由濾波器的階數(shù)N決定的,共需要2N個查找表單元,如果系數(shù)N過多,用單個LUT不能夠執(zhí)行全字查找則可把系數(shù)分組,利用部分表并將結(jié)果相加,為了簡單的闡述算法,在此系數(shù)只分了2組,每個單元的位寬是由濾波器的系數(shù)的量化決定的[7]。Ge,Go,He,Ho四個濾波器雖然長度不同,但具有相同的電路結(jié)構(gòu),如圖4所示。
圖3 有符號的改進DA算法的直觀實現(xiàn)圖(濾波單元)
圖4 基于有符號的改進DA算法的電路結(jié)構(gòu)圖
計算控制器用于控制濾波單元中移位寄存器移位,累加器的循環(huán)周期和計算輸出,并控制移位寄存器的數(shù)據(jù)輸入。
2 利用VerilogHDL語言實現(xiàn)以上功能
2.1 用VerilogHDL語言進行算法建模
計算機控制器(calculate-controller)的verilogHDL模型:
寄存器組中每個寄存器的位數(shù)為0,1,…,num-1。
module calculate-controller(clk,count);
input clk;
output count;
reg count;
always@(posedge clk)
begin
if(count=num)
count<=0;
else count<=count+1;
end
endmodule
寄存器組(registers)的VerilogHDL模型:
假設(shè)寄存器只包括3個寄存器x0,x1,x2。
module registers (clk,count,filter_in,table_in)
input clk,count,filter_in;
output table_in;
reg filter_in,table_in;
always@(posedge clk)
begin
if(count=0)
x0<=x1;x1<=x2;x2<=input;//數(shù)據(jù)輸入和移位
else if for(k=0;k<=num;k++)
table_in(0)<=x0(k);//寄存器移位
table_in(1)<=x1(k);
table_in(2)<=x2(k);
end
endmodule
累加器(accumulator)的verilogHDL模型
module accumulator(clk,count,table_out,filter_out)
input clk,count;,table_out
output filter_out;
reg p;//累加寄存器
always@(posedge clk)
begin
if(count=num)
output<=CONV_INTEGER(P);
else
if(count=num-1)
p:=p/2-table_out*2num-1;
else
p:=p/2+table_out*2num-1;
end
endmodule
2.2 定制ROM
Quartus Ⅱ包含有許多有用的LPM(Library of Parameterized Modules)模塊,它們是復(fù)雜或高級系統(tǒng)構(gòu)建的重要組成部分,可以與Quartus Ⅱ普通設(shè)計文件一起使用,該文使用“Tools”菜單下的MegaWizard Plug-In Manager命令定制ROM的元件。如圖5所示。
圖5 ROM的實現(xiàn)
2.3 用VerilogHDL進行數(shù)據(jù)流建模
濾波器的建模過程如下:
module filter(clk,count table_in,table_out filter_in,filter_out);
input clk,filter_in;
output filter_out;
wire count;
reg table_in,table_out;
reg filter_in,filter_out;
calculate-controller u7(
.clk(clk),
.count(count)
);
registers u8(
.clk(clk),
.input(filter_in),
.count(count),
.table_in(address)
);
accumulator u9(
.clk(clk),
.count(count),
.table_out(q),
.output(filter_out)
);
LUT LPM_ROM(
.clk(clk)
.address(table_in)
.q(table_out)
);
endmodule
3 驗證仿真
利用Altera公司的QuartusⅡ 7.2軟件內(nèi)部帶有仿真器對濾波器的VerilogHDL模型進行波形仿真,通過建立正確的Vector Waveform File(向量波形文件)就可以開始仿真了。如圖6所示。
圖6 濾波器波形的仿真結(jié)果圖
通過QuartusⅡ的波形仿真功能,對輸入輸出進行波形仿真,對其結(jié)果進行定量分析。通過時序分析和功能分析結(jié)果,對設(shè)計進行進一步的完善。在仿真中,input濾波器輸入數(shù)據(jù),output濾波器輸入數(shù)據(jù)x0,x1,x2,x3,x4為移位寄存器組中寄存器,count為控制計數(shù)器,table-in為流水線寄存器。所得結(jié)果如圖6所示。經(jīng)驗證,仿真結(jié)果和實際運算結(jié)果一致[3,8]。
4 結(jié) 語
本文介紹了利用VerilogHDL語言編寫文件的方法對雙正交小波濾波器進行設(shè)計,相比硬件電路圖設(shè)計,verilogHDL語言設(shè)計的參數(shù)可以很容易地在程序中修改,方便地實現(xiàn)電路結(jié)構(gòu)和功能的描述。而且HDL語言的移植性是最好的,可以方便以后的設(shè)計。通過QuartusⅡ軟件強大的綜合和仿真特性大大縮減了設(shè)計研發(fā)的時間,對設(shè)計過程中不滿意的地方可以隨時進行修改,直到滿足設(shè)計的要求。優(yōu)秀編碼風(fēng)格能夠在綜合過程中節(jié)省芯片使用的單元,從而降低設(shè)計成本。在設(shè)計應(yīng)用中,具有一定的工程實際參考價值。
參考文獻
[1]夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計教程[M].北京:北京航空航天大學(xué)出版社,2003.
[2]孫延奎.小波分析及其應(yīng)用[M].北京:機械工業(yè)出版社,2005.
[3]張賢達.現(xiàn)代信號處理[M].北京:清華大學(xué)出版社,1998.
[4]潘全,張磊.小波濾波方法及應(yīng)用[M].北京:清華大學(xué)出版社,2006.
[5]徐長發(fā),李國寬.實用小波方法[M].武漢:華中科技大學(xué)出版社,2004.
[6]王欣.離散信號的濾波[M].北京:電子工業(yè)出版社,2002.
[7]胡廣書.數(shù)字信號處理理論、算法與實現(xiàn)[M].北京:清華大學(xué)出版社,2002.
[8]MEYER2BAESE U.數(shù)字信號處理的FPGA實現(xiàn)[M].劉凌,譯.北京:清華大學(xué)出版社,2006.
[9]Vetterli M,Herley C.Wavelets and Filter Banks Theory and Design[J].IEEE Trans.on SP,1992,40:2 207-2 232.
[10]Daubchies I.Orthonomal Bases of Compactly Supported Wavelets.Commun.Pure Appl.Math.,1988:909-996.
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。