基于VHDL语言的FIR滤波器设计 第5页
图4-1 8阶FIR低通滤波器的幅频特性
若图片无法显示请联系QQ752018766
图4-2 8阶FIR低通滤波器的相频特性
FIR数字滤波器的数字硬件系统主要由输入模块、乘累加模块、进制转换模块、锁存模块和输出显示模块组成。
各模块执行的功能说明如下:
(1)输入模块:
输入模块的主要功能主要是完成对输入数据的处理,为后续电路做准备,主要由模拟信号源与A/D转换芯片TLC5510组成。
(2)乘累加模块:
乘累加模块的主要功能是实现数据的相乘和累加。
(3)进制转换模块
由于乘累加模块输出的数据为二进制的数据,为了方便在数码管上观察,此处将二进制数转化为二-十进制的BCD码。
(4)锁存模块:
锁存模块主要功能是将转化为BCD码的输出结果锁存后输出。
(5)输出显示模块:
输出显示模块主要功能是将由锁存模块输出的数据在数码管上显示出来。
在输入模块中,主要由试验箱集成芯片ICL8038产生模拟信号,输入到TLC5510进行A/D转换,输出数据即为8位数字信号。采样频率选用120KHZ,,使用分频器实现,a为6MHZ的时钟信号,对其进行50分频,b,c为分频以后的输出时钟信号,模块框图如下:
图4-3 分频器模块框图
依据FIR滤波器的直接型结构,假定要求设计的FIR滤波器的阶数为8,即N=8。这时,滤波器的输出序列y(n)为:
y(1)=x(1)h(0)=0+0+0+0+0+0+0+x(1)h(0)
=0h(7)+0h(6)+0h(5)+0h(4)+0h(3)+0h(2)+0h(1)+x(1)h(0)
y(2)=x(1)h(1)+x(2)h(0)=0+0+0+0+0+0+x(1)h(1)+x(2)h(0)
=0h(7)+0h(6)+0h(5)+0h(4)+0h(3)+0h(2)+x(1)h(1)+x(2)h(0)
y(8)=x(1)h(7)+x(2)h(6)+x(3)h(5)+x(4)h(4)+x(5)h(3)+x(6)h(2)+x(7)h(1)+x(8)h(0)
可知,当n的值不同时(处于时钟的不同节拍),计算y(n)所需的乘法及加法的次数有所不同。为了实现程序在每次循环中(一个时钟周期内)以相同的运算形式,算出一个y(n)值,可把不同n值时输出的y(n)计算统一为下面的形式:
若图片无法显示请联系QQ752018766
其中,数组r(i)为一组中间变量,其变化规律是相当于每个n值。当
由上可知,直接型FIR滤波器结构简单,整个乘累加模块的运算过程是乘法,加法,延时三种基本运算的组合。
大多数的 EDA 工具软件中都具备宏单元库,利用宏单元库提供的模块,可以大大提高基于 EDA 技术的电子设计的效率和可靠性。在用原理图描述的频率计的设计中,可从器件库中调用计数器、锁存器、译码器、门电路等器件,方便、快捷地完成电路的设计。这里运用 VHDL 进行此模块的设计,需要解决乘法和加法的运算问题。乘法和加法不是 VHDL 语言中所定义的标准运算,但通过引用 IEEE 标准程序包 std_logic_unsigned,仍可运用运算符“*”和“+”,实现乘法和加法运算,该程序包中含有为上述算术运算建模的部分。
为设计 FIR 滤波器,首先进行参数的设置,要求设计的 FIR 滤波器的阶数为 8,而其他参数在程序中应易于修改。假定设计的 FIR 滤波器为线性相位滤波器,其系数具有偶中心对称性,即 h(i)=h(N-1-i),抽头系数 h(n)的值以补码表示。为使设计适应不同的精度(输入、输出和抽头系数的字长),程序更具灵活性,在编写主程序(主设计实体)之前先定义一个供主程序调用的程序包(package);在程序包中预定义上述参数,某些数据类型以及各数据的字长。
在此模块中,xin[7..0]为输入数据,clk为时钟信号,outs[15..0]为输出结果。模块框图如下:
若图片无法显示请联系QQ752018766
图4-4 乘累加模块图
具体程序见附录。
由于乘累加模块输出的outs[15..0]为16位的二进制数,为了方便在数码管上观察最终的结果输入,进制转换模块将16位的二进制码转换为二-十进制的BCD码。
实现这种转换传统的方法有:
(1) 利用组合逻辑网络实现。其速度较快,但随着被转换的二进制码元位数的增加,将需要大量的硬件资源。
(2) 利用移位原理。这种方法速度适中,所需的硬件资源也适中。
(3) 利用计数器实现。这种方法所需的硬件相对较少,但速度慢。
本设计中由于二进制码元为16位,所以采用第一种方法,具体程序见附录,但是有局限性,当二进制码元位数较大时,将不适用,所以另外详细的介绍了用移位的方法实现二进制码到二-十进制BCD码的转换。
对于一个n位二进制码
若图片无法显示请联系QQ752018766
把上式写成套乘的形式:
式中的每项乘2,相当于将寄存器中的二进制码左移一位。
设每一组数码(4位)左移1位前的状态为原状态
当
下表给出了一个8位二进制码11101011转换成8421BCD码的时序。当系统时钟开始时,二进制码开始左移,当第3个时钟脉冲作用后,BCD 码的最低位中的数值0111大于5 (二进制码送入时,高位在前,低位在后) , 故需要加3左移。我们用修正后的数据1010代替原来的大于5 的数据,参与下一个脉冲周期内的移位。在第5 、第6 、第7 脉冲周期中,在数据移位的同时,我们同样需要对数值大于5的BCD 码进行修正。最后,经过8个脉冲周期的移位,二进制码转换为8421BCD码的数码转换得以实现。
若图片无法显示请联系QQ752018766
表4-1 B/BCD的转换
锁存模块的主要功能是对输出结果进行锁存,这主要是为了方便在数码管上观察输出的结果,因为采样频率过快。将输出结果寄存,然后用一个较低的脉冲信号使结果在数码管上显示(本设计中采用了1HZ的脉冲信号)。
经过进制转换以后,16位的二进制数换为10进制最多是5位数,所以选用了5个数码管来完成最后的显示功能。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页