今天给大侠带来 Vivado 经典案例:使用 Simulink 设计 FIR 滤波器,话不多说,上货。
FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,又称为非递归型滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。因此,FIR 滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。
Vivado 自带的 FIR 滤波器 IP 核已经很好用,这里借 FIR 滤波器的设计,介绍 Simulink 图形设计编程方法。Simulink 可以使设计更直观,使硬件资源得到更为高效的利用。
使用 vivado 的 System Generator 可以在 simulink 下快速的通过 matlab 的强大设计功能设计滤波器。这里使用 fdatool 设计了一个 15 阶的 FIR 滤波器。
软件环境:【vivado2014.2+matlab2013b】
1. fdatool 设计滤波器
通过 matlab 可以快速的设计滤波器,直接导出滤波器系数,方便大家快速设计。上图使用 Kaiser 窗函数设计了一个采样率为 30.72MHz 的 15 阶 8M 低通滤波器。File – Export 将设计好的滤波器系数 Num 导出到 Workspace。
2.系数处理
由于系数都是小数,需要重新量化,以充分利用 dsp48 的精度。
本例直接将系数扩大 2^16 倍后取整。
Num = { -0.0007 -0.0071 0.0070 0.0287 -0.0305 -0.0827 0.1244 0.4610 0.4610 0.1244 -0.0827 -0.0305 0.0287 0.0070 -0.0071 -0.0007 }
a = round ( Num * 2^16) = { -46 -467 459 1879 -2002 -5418 8152 30211 30211 8152 -5418 -2002 1879 459 -467 -46 }
3. Simulink 设计模型
y(n) = h(0)*(x(n)+x(n-15))+h(1)*(x(n-1)+x(n-14))+h(2)*(x(n-2)+x(n-13))+h(3)*(x(n-3)+x(n-12))+h(4)*(x(n-4)+x(n-11))+h(5)*(x(n-5)+x(n-10))+h(6)*(x(n-6)+x(n-9))+h(7)*(x(n-7)+x(n-8))
利用 FIR 滤波器系数的对称性,采用折叠方式,可节省一半的 DSP48 用量,考虑到 7 系的 DSP48 普遍可以跑到 200-300MHz,如信号采样率低的话,可以采用多路复用的方式大量节省 DSP 使用量,若只有一路信号也可以采用提高工作时钟的方式减少 DSP 使用量。空间与时间的相互关系,在这里表现的淋漓尽致。
模型设计的时候特别需要注意每个模块的时延,时延一定要计算清楚。
上图设计的 fir 滤波器,DSP 的 PCIN 输入为上一级 DSP 的 PCOUT 信号,这样做的目的是充分利用 DSP 的快速进位链,使实现变得容易。最后一拍数据直接使用的 DSP 的 P 端输出。
4. 模型仿真
为设计好的模型增加一个顶层,添加两个信号源作为仿真激励,使用两个频谱分析仪观测结果。
由滤波器幅值响应图可知,当信号采样率为 245.76MHz 时(提升了 8 倍),通带(原为 5M 提升 8 倍为 40MHz)内信号抖动为 0.03db 以内,此滤波器对 100MHz(对应图中 12.5MHz)的抑制能力为-61db。
测试使用两个幅度相同、频率不同的正弦信号(25M 与 100M)相加作为信号输入,使用频谱分析仪观测 FIR 模型输出,开始仿真观测频谱仪信号。
上面左图为滤波器输入信号,右图为滤波器输出信号。观测可知此滤波器对 25MHz 信号功率没有影响,对 100MHz 信号衰减了约 60db 左右,将图放大可知输入 100MHz 功率为 83.2dbm 输出为 21.6dbm,衰减了 61.2db。由此可知与 fdatool 设计的滤波器性能相同。
xilinx 在新版本的 vivado 中将 simulink 中的 WaveScope 删掉了,信号观测方式换为和 vivado debug 相同的窗口,更为灵活和人性化。添加信号的方式更为简单,选择好需要观测的信号后直接右键单击 Xilinx Add to Viewer。这时启动仿真将自动打开 vivado 的 Waveform 窗口,可以在时域上观察每一个点的数据。
上图为单个 25M 正弦波作为激励信号的模型输入和输出信号。当前光标位置输入数据为 1025,此 fir 滤波器时域上对信号有 19 个周期的延迟,19 个周期后的数据为 1024,那么 20lg(1025/1024)=0.008db 抖动小于通带内抖动值 0.03db。
通过将输入信号改为脉冲信号,脉冲宽度为 1 个周期,此时可观测到此 fir 滤波器的冲击响应。
经过以上步骤,基本验证此滤波器的设计能够达到需求。
5. 将模型导入到 vivado 工程
System Generator 提供了几种导入方法:
1、 直接生成 hdl 网表文件。
生成的.v 或.vhd 文件直接例化 dsp 的 IP 核,用户可直接将代码文件添加至自己的工程内。就好像模型是自己用代码完成的一样。
2、 以 IP 核形式生成 IP。
添加 IP 信息,生成 IP 核。用户以 IP 核的形式直接调用。
3、 Synthesized Checkpoint 形式生成网表文件(推荐)。
选择此项,用户可直接在 simulink 下综合出网表和约束文件,打包至.dcp 文件中,用户可在 vivado 下直接加载 dcp 文件调用模型。
4、 直接在 vivado 中添加模型文件(推荐)。
Vivado 的 Add source 中可选择 Add or Create DSP Sources,直接将模型文件(.mdl 或.slx)添加至工程中,综合的时候,系统将自动调用 matlab 分析模型文件,自动生成需要 HDL 文件。效果等同于自动操作的方法 1,缺点是使用此方法综合工程必须装有对应版本的 matlab。
Vivado 设计套件,赛灵思公司 2012 年发布的集成设计环境,随着每季度的按时更新,现已发布最新版本为 2019+。目前来看命名规则较为简单,为年份+发布季度。若有比已安装的版本更新的版本发布后,启动 vivado 后会有版本升级通知,方便用户及时更新版本。总的来说新产品不是特别完善前总会或多或少有一些 bug,八年多过去了,已经非常不错了。
大侠,有缘再见!
END
作者:The last one
来源:FPGA技术江湖
相关文章推荐
- Vivado DDS IP 核仿真
- 基于 matlab FPGA verilog 的 FIR 滤波器设计
- 一篇文章搞懂软核(MicroBlaze)的固化和启动
- 很能体现 FPGA 硬件思维的一道面试题
- 基于 FPGA 及深度学习的人脸检测系统设计
更多 FPGA 干货请关注 FPGA 的逻辑技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。