基于VerilogHDL的小波滤波器的设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于VerilogHDL的小波滤波器的设计与实现
高冲;何云斌
【摘要】VerilogHDL是EDA领域中电路设计必不可少的工具,利用它设计数字滤波器的最大优点就是可使设计更加灵活,它具有良好的结构化设计和行为建模能力.首先利用VerilogHDL对小波滤波器复杂算法电路建立结构化模型,然后根据改进的分布式算法(是一项重要的FPGA技术)和滤波电路结构图对小波滤波器进行行为建模.最后,利用QuartusⅡ.内部的波形仿真软件进行波形仿真和验证,并根据仿真结果对模型进行修改以达到设计要求.
【期刊名称】《现代电子技术》
【年(卷),期】2009(032)003
【总页数】4页(P119-121,126)
【关键词】Verilog硬件描述语言;改进的分布式算法;小波滤波器
【作者】高冲;何云斌
【作者单位】哈尔滨理工大学计算机学院,黑龙江,哈尔滨,150080;哈尔滨理工大学计算机学院,黑龙江,哈尔滨,150080
【正文语种】中文
【中图分类】TP302
0 引言
现代计算机和通信系统中广泛采用数字信号处理的技术和方法,其基本思路是先把
信号用一系列的数字来表示,然后对这些数字信号进行各种快速的数学运算。

其目的是多种多样的,有的是为了加密,有的是为了去掉噪声等无关的信息,称为滤波;有时也把某些种类的数字信号处理运算成为变换,如离散的傅里叶变换(DFT),小波变换(Wavelet T)等[1]。

VerilogHDL是目前应用最广泛的一种硬件描述语言,
用于数字电子系统的设计。

可用它进行各种级别的逻辑设计,并进行数字逻辑系统的仿真验证,时序分析,逻辑综合。

小波滤波器的设计属于复杂算法的电路设计,因此利用VerilogHDL对双正交小波滤波器进行建模、仿真,实现电路的自动化设计,将是一种较为理想的方法。

1 小波滤波器的设计
对于小波函数,要求它具有正交性、紧支集、对称性和平滑性。

正交性可以使变换无冗余;紧支集则带来优良的空间分辨率;对称性保证了与其对应滤波器的相位为线性;平滑性可以产生较小的失真。

这样使离散二进小波变换受到很大的限制,为此,人们提出一种双正交的小波变换[2,3]。

本文设计小波滤波器正是基于双正交
小波变换的一种双通道完全重构滤波器,因此可以对信号进行分解后实现精确重构,所以对信号的滤波有很好的作用。

由于它具有正变换二元上抽样采样和反变换二元下抽样采样特性,在进行滤波器设计时可以将双正交小波滤波器设计成具有多相结构的双通道完全重构滤波器[4]。

双正交小波变换可以看成原始信号通过一系列高
低通滤波器滤波并经过抽样后所得到的结果,重构过程与此相反。

为了使变换后的信号能够完全重建,须满足Y(n)=z-kX(n),在这里取k=1[5]。

双正交小波滤波器分解和重构过程如图1所示。

设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)的偶数项和奇数项,He和Ho分别是H(z)的偶数项和
奇数项。

根据式(1),式(2)可以建立双正交小波滤波器的多相结构模型如图2所示。

图1 双正交小波滤波器分解和重构过程
图2 双正交小波滤波器的多相结构
下面对双正交小波滤波器用VerilogHDL进行顶层设计:
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设计,采用行为描述方式进行设计[6]。

VerilogHDL行为描述语言作为一种结构化和过程性的语言,其语法结构非常适合于算法级和RTL级的模型设计。

在VerilogHDL语言中行为描述分为算法和RTL两种。

算法级:用语言提供的高级结构能够实现算法的运行模型。

RTL级:描述数据在寄存器之间的流动和如何处理,控制这些数据的流动,采用改进的DA算法(如
图3所示)。

DA算法完成一次滤波所需要B次的累加(或减)也就是B个时钟周期
完成一次运算,B位输入数据的位宽。

它的查找表(LUT)的大小是由滤波器的阶数
N决定的,共需要2N个查找表单元,如果系数N过多,用单个LUT不能够执行全字查找则可把系数分组,利用部分表并将结果相加,为了简单的阐述算法,在此系数只分了2组,每个单元的位宽是由滤波器的系数的量化决定的[7]。

Ge,Go,He,Ho四个滤波器虽然长度不同,但具有相同的电路结构,如图4所示。

图3 有符号的改进DA算法的直观实现图(滤波单元)
图4 基于有符号的改进DA算法的电路结构图
计算控制器用于控制滤波单元中移位寄存器移位,累加器的循环周期和计算输出,并控制移位寄存器的数据输入。

2 利用VerilogHDL语言实现以上功能
2.1 用VerilogHDL语言进行算法建模
计算机控制器(calculate-controller)的verilogHDL模型:
寄存器组中每个寄存器的位数为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模型:
假设寄存器只包括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;
//数据输入和移位
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)模块,它们是复杂或高级系统构建的重要组成部分,可以与Quartus Ⅱ普通设计文件一起使用,该文使用“Tools”菜单下的MegaWizard Plug-In Manager命令定制ROM的元件。

如图5所示。

图5 ROM的实现
2.3 用VerilogHDL进行数据流建模
滤波器的建模过程如下:
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软件内部带有仿真器对滤波器的VerilogHDL 模型进行波形仿真,通过建立正确的Vector Waveform File(向量波形文件)就可以开始仿真了。

如图6所示。

图6 滤波器波形的仿真结果图
通过QuartusⅡ的波形仿真功能,对输入输出进行波形仿真,对其结果进行定量分析。

通过时序分析和功能分析结果,对设计进行进一步的完善。

在仿真中,input
滤波器输入数据,output滤波器输入数据x0,x1,x2,x3,x4为移位寄存器组中寄存器,count为控制计数器,table-in为流水线寄存器。

所得结果如图6所示。

经验证,仿真结果和实际运算结果一致[3,8]。

4 结语
本文介绍了利用VerilogHDL语言编写文件的方法对双正交小波滤波器进行设计,相比硬件电路图设计,verilogHDL语言设计的参数可以很容易地在程序中修改,方便地实现电路结构和功能的描述。

而且HDL语言的移植性是最好的,可以方便以后的设计。

通过QuartusⅡ软件强大的综合和仿真特性大大缩减了设计研发的时间,对设计过程中不满意的地方可以随时进行修改,直到满足设计的要求。

优秀编
码风格能够在综合过程中节省芯片使用的单元,从而降低设计成本。

在设计应用中,具有一定的工程实际参考价值。

参考文献
[1] 夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2003.
[2] 孙延奎.小波分析及其应用[M].北京:机械工业出版社,2005.
[3] 张贤达.现代信号处理[M].北京:清华大学出版社,1998.
[4] 潘全,张磊.小波滤波方法及应用[M].北京:清华大学出版社,2006.
[5] 徐长发,李国宽.实用小波方法[M].武汉:华中科技大学出版社,2004.
[6] 王欣.离散信号的滤波[M].北京:电子工业出版社,2002.
[7] 胡广书.数字信号处理理论、算法与实现[M].北京:清华大学出版社,2002.
[8] MEYER2BAESE U.数字信号处理的FPGA实现[M].刘凌,译.北京:清华大学出版社,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[J].Commun.Pure Appl.Math.,1988:909-996.。

相关文档
最新文档