学会System Generator(17)——转置型FIR滤波器设计

本文是该系列的第17篇。上一篇介绍了使用低层次封装的block搭建直接型FIR滤波器结构的方法,对设计进行时序分析,并将设计流水线化来提高系统的工作频率。转置型FIR滤波器是一种由直接型FIR滤波器变换而来的结构,在几乎相同的结构下有着更好的性能,本文将对此做介绍。

转置型FIR滤波器
滤波器结构框图如下:

直接型FIR滤波器是对输入数据做寄存,这样当设计没有采用流水线时,最长的路径为输入到输出,有一个乘法器和多个加法器(见上篇);转置型FIR滤波器是对加法器的输出结果做寄存,这样相当于将原本最长的路径拆分为几段,缩短了延迟,大大提升了系统工作频率。

需要注意的是,虽然看起来直接型FIR和转置型FIR的结构完全相同,只是延迟器的位置不同。但转置型FIR滤波器是对乘加运算之后的值(位宽有扩展)做寄存,消耗的资源实际上更多,在系数越多的情况下越明显。

System Generator设计

1.搭建模型
在Simulink中添加block按下图连接:

滤波器系数与上篇设计相同,系统设置20MHz采样率,1.5MHz通带截止频率、8.5MHz阻带截止频率,对1MHz+9MHz的叠加信号滤波。子系统设计方法也在上篇讲过,这里不再赘述。FIR transpose子系统的内部模型如下:

与上一篇中直接型FIR滤波器的结构相比,去除了输入数据的延时链,将加法器(AddSub)的Latency设置为·1,进行一个时钟的寄存。注意第一个乘法器的输出部分省略了一个加法器(相当于第一个乘法器的结果+0),因此为了数据同步需要增加一个延迟为1的delay block。

2.仿真验证与时序分析
运行仿真,滤波前后频谱结果如下,与上篇仿真结果基本相同,滤除了9Mhz的频率分量,只留下了1MHz的正弦波信号:

点击System Generator block中的Generate,运行时序分析:

设计中的最长路径为1个乘法器+1个加法器,延时为8.079ns,系统运行的最高频率大约为125Mhz,比直接型FIR滤波器提高了2倍多。

设计流水线化
既然上一个设计中的最长路径中包含1个乘法器+1个加法器,根据上一篇中的设计流水线化思想,转置FIR滤波器也可对乘法器的输出结果做寄存,将路径进一步拆分。将乘法器的Latency设置为3(表示三级流水),模型连接图与上文相同。

运行仿真,结果与上面相同,表明设计正确。再次运行时序分析:

乘法器三级流水线化之后(相当于在计算乘法的整个过程中插入了三级寄存器作为缓存),设计的最长路径延时降低为了3.401ns,相当于系统最高频率提升到了大约294Mhz。

最后
从本设计可以发现:转置型FIR滤波器、流水线化后的时序,与上一篇中加法器流水线化、乘法器流水线化后的直接型FIR滤波器的时序,完全相同。这是理所当然的,因为只要一条路径上的资源是固定的,那么延时也是固定的(针对综合后分析而言)。

文章来源:FPGADesigner的博客
*本文由作者授权转发,如需转载请联系作者本人

最新文章

最新文章