原创 【博客大赛】直接型FIR的FPGA设计(三)

2012-4-22 20:13 1293 9 9 分类: FPGA/CPLD

(三)FIR滤波器的FPGA设计

y(n) = h(0)x(n) + h(1)x(n-1) + h(2)x(n-2) + …… + h(N-1)x(n-N+1)

可知,FIR滤波过程是一个串行相乘累加的过程。一次FIR时域卷积运算需要242次乘加。如果采用直接型结构,则在一次数据输入时间内,需要进行242次运算。最小资源要求,242*16bit的ROM大小,242*8bit的RAM大小,最少有一个16*16bit的乘法器。直接型结构图如下:

05.jpg
为了最大程度节省乘法器资源,本设计只使用一个乘法器,这样难免牺牲了处理时间。
设计完成后的RTL图:
rtl_fir.jpg

电路主要由四个模块构成:

rtl_rom_coef.jpg

系数ROM表:

用于保存242个抽头系数。深度为7bit,位宽16bit。

rtl_data_ram.jpg

数据双口RAM:

用于缓存输入数据,深度一样为8bit,位宽也为8bit。

rtl_addr_control.jpg

地址控制模块:

用于产生系数ROM的读地址和数据RAM的读写地址,以及后级串行卷积电路的控制信号,从而控制数据的缓存和读写。

rtl_conv.jpg

串行卷积模块:

核心的运算模块,采用流水线进行相乘累加。其中,在对相乘累加后的数据进行了截取,截取方式:

相乘累加结果:sum[23:0]  signed;

卷积输出结果:SUM_OUT[15:0]  signed;

SUM _OUT = sum[22:7];

由于是有符号数相乘,最高两位都是符号位,所以舍弃最高位的符号位,另外再截取低7位的数据。

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /2 下一条