图3中N为该模块的滤波器阶数,那么DALUT有2N个存储单元,如果滤波器抽头数过多,查找表规模随抽头数的增加成指数递增。因此实现高阶滤波器时,要分割查找表。因为卷积运算是线性的,所以在将每个子表的输出相加可得到总输出。逻辑设计是基于Altera公司的Stratix系列FPGA为平台,在OuartusII软件中利用VHDL语言和原理图进行逻辑设计。
3.2 5阶FIR滤波器设计
Stratix器件的LPM_ROM模块最少有32(25)个存储单元,所以设定滤波器模块阶数N=5。5阶滤波器模块设计如图4所示,其中lpm_dff0为12位锁存器,5个锁存器对输入数据进行移位寄存,firda5为分布式算法模块,DATAS[11:0]输出引脚是滤波器模块最后一个锁存器输出,作为滤波器模块级联时不同滤波器模块之间的数据移位。
分布式算法模块firda5实现数据的并串转换、DALUT查表、加权累加。设计中采用状态机实现分布式算法的状态转移,这样简化计算过程,在实现算法时发挥关键作用。根据分布式算法的状态转移关系,每输入一个数据,在下一个数据输入之前,需要在状态s1停留12位数据宽度的时钟时间和2个寄存的时钟时间(在QuartusII软件中,器件选用Stratix系列,利用LPM_ROM模块,地址输入是寄存输入,数据输出也包含寄存器)以及一个数据输出时钟时间:所以系统时钟必须为数据时钟的16倍,图中div 16实现16分频。
3.3 50阶匹配滤波器设计
由于匹配滤波器就是有限脉冲响应(FIR)滤波器,具有线性特性,所以通过低阶滤波器的直接级联相加就可以实现高阶滤波器,前一个滤波器的移位数据DATAS[11:0]作为下一个滤波器模块的信号输入,每个滤波器模块都根据图4设计,只需要根据不同的系数更改DALUT表中的数据。50阶匹配滤波器的逻辑设计如图5所示。其中,Imatch50模块为匹配滤波器复系数实部对应的50阶滤波器,而Qmatch50模块为匹配滤波器复系数虚部对应的50阶滤波器。输出信号包括16位I信号和16位O信号。