4 自适应滤波器的 FPGA实现
4.1 N阶 FIR滤波器模块的设计
在设计中,为了节省 FPGA的内部资源,提高利用效率,此处采用串行乘加的方法实现。 FIR滤波器模块实现 16阶的 FIR滤波,输入量主要包括 AD转换后的激波信号数据的输入和权值系数的输入,xin是 AD转换后的输出信号,为 12位字宽,其中 1位符号位,10位精度位,将此信号存储在深度为 N的 RAM中作为 16阶 FIR滤波器的输入;FIR的权系数 win存储在另外一个 RAM中,字宽 16位,其中最高位为符号位。通过控制模块输出地址信号控制读各个存储模块的读写动作,此处的乘法器为 28位有符号数的乘法器,加法器完成累加任务,当 16阶乘法以及累加运算做完后,由控制模块输出 youten信号,对锁存的数据进行有效截取,然后输出。其实现的框图如图 3所示。在该设计中,采用 VHDL语言编程完成,生成对应的顶层原理符号,然后按设计方案把它们连接成顶层原理图。
4.2控制模块本模块主要是控制从激波数据输入模块和权系数输入模块读取数据输入信号和权系数到乘法器的输入端,同时还控制累加器完成累加任务,然后产生一个使能信号,对输出数据进行截取操作,然后输出到下一级模块中。本模块为整个系统的核心部分,它主要完成:初始化各个模块;根据系统时钟产生各个模块的控制信号,控制每个单元完成特定的工作;采用整体流水线和局部流水线的方式,协调各个模块工作,从而提高整个滤波系统的整体性能。
4.3计算模块
本模块包括:误差计算模块和权值计算模块。误差模块实际就是一个减法器,主要计算 FIR滤波器输出和期望值之间的误差,然后,在控制模块的作用下,当误差满足设计要求时,便使能其输出,得到最终的输出结果。在权值计算模块中,综合考虑收敛性和设计实现,设定 u=1/4092,即 u=10H,这样只需对误差计算模块的误差输出进行移位运算即可实现,省掉了乘法器的使用,节省了 FPGA资源,提高了计算速度,另外,在计算 2ue(k)x(k)时,可以在 e(k)与 x(k)相乘后直接右移 12位,即可得出权值变量。
5 自适应滤波器的仿真与校验
在 Quartus II6.0综合环境下,首先对输入设计文件( .vhd、.bdf)进行编译(包括建库、
逻辑综合、器件适配、仿真数据截取等),系统自动编译完成后自动生成 .pof文件,然后通过 JTAG下载电缆把 .pof文件下载到 FPGA器件中即可。本设计选用 CycloneII系列的 EP2C8Q208C8芯片,系统时钟为 20MHz,输入信号、参考输入和滤波器输出都是 12位,考虑到 FPGA还要实现其它功能,因此在进行系统的芯片选型时,留有较大的冗余量。实验时,调试电路板从计算机中读取输入数据到 FPGA中,然后经过 FPGA处理后,将处理的数据送回计算机中。
仿真时,设期望信号为 900,输入信号为 500,实际输出为 895,误差为 5,在 63.2us处收敛到稳定状态。其时序仿真波形如图 4所示。