在FIR with FPGA[0]中,使用Matlab环境对FIR进行了仿真,确定了输入数据和滤波器系数的量化bit和字长。下面将在FPGA中对FIR做实现。
FPGA中采用直接型:
按照原理图进行RTL的构造,中间计算过程不作截位处理。
由于FPGA的时钟频率往往远远高于数据输入速率,MAC可以采用时分复用,以减轻资源消耗;设计者也可以利用系数的对称性减少乘法器的使用。但本例并不作此类优化。相关代码优化将在后续文章中展开。本文采用全并行结构,即多个乘法器同时工作。
本例设计中,数据输入速率等于FPGA工作频率。整个系统只有一个主时钟,不存在跨时钟域。
1. 模块组成
系统组成比较简单,如之前大图所示。输入16位数据,和start的指示信号。输入信号由testbench产生。系统所产生的输出,也由testbench导出到txt文件中。并由matlab读取后,验证误差值。
2. 源代码
通过modelsim仿真后,观察波形可知,FIR成功的滤除了高频分量。
FIR代码如下:
module FIR(
input clk,
input rst_n,