APP下载

基于Verilog HDL的FIR数字滤波器的优化设计与仿真

2014-04-18李玉学白忠臣秦水介

现代电子技术 2014年7期

李玉学+白忠臣+秦水介

摘 要: 对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.