该篇是FPGA数字信号处理的第四篇,选题为DSP系统中极其常用的FIR滤波器。本文将在前两篇的基础上,继续介绍在Quartus开发环境下使用Altera(或者叫Intel)提供的FIR IP核进行FIR滤波器的设计。

1.“FPGA数字信号处理(二)并行FIR滤波器Verilog设计” https://blog.csdn.net/fpgadesigner/article/details/80594627
2.“FPGA数字信号处理(三)串行FIR滤波器Verilog设计” https://blog.csdn.net/fpgadesigner/article/details/80598992

IP核概述

由于版本的关系,Quartus提供的IP核有两种,一种是集成在“MegaWizard Plug-In Manager”中:

一种是集成在“IP Catalog”和qsys中:

两种Quartus版本下的IP核,从使用者的角度来看仅仅是配置界面不同,在参数设置和使用方法上基本一致。本文以“MegaWizard Plug-In Manager”中的FIR Compiler IP核使用为例。
Quartus的FIR IP核属于收费IP,如果是个人学习使用需要对IP核单独破解。在Quartus的破解licence文件中找到下段代码,在licence最后复制粘贴一份,将“FEATURE 6AF7_XXXX”中的XXXX改成FIR IP核对应的编号“0012”。保存后重新打开Quartus,在License Setup页面看到FIR Compiler的破解信息,则可以正常使用。

FEATURE 6AF7_XXXX alterad 2035.12 permanent uncounted E75BE809707E \
    VENDOR_STRING="iiiiiiiihdLkhIIIIIIIIUPDuiaaaaaaaa11X38DDDDDDDDpjz5cddddddddtmGzGJJJJJJJJbqIh0uuuuuuuugYYWiVVVVVVVVbp0FVHHHHHHHHBUEakffffffffD2FFRkkkkkkkkWL$84" \
    HOSTID=b025aa21c82f TS_OK SIGN="1E27 C980 33CD 38BC 5532 368B \
    116D C1F8 34E0 5436 99A0 5A2E 1C8C 8DD0 C9C6 011B A5A9 932B \
    08DE C5ED 9E62 2868 5A32 6397 D9B8 5C3A B8E8 4E4F CEC7 C836"

IP核参数设置

像MATLAB一样,FIR Compiler也提供了设计FIR滤波器和生成滤波器系数的功能,点击“New Coffcient Set”,界面如下:

不过这个滤波器设计功能没有MATLAB的FDATOOL那么强大,也可以用MATLAB生成滤波器系数,存入txt文件中,在上面界面的“Imported Coefficient Set”中导入txt文件。

FIR Compiler IP核可以在主界面的structure中选择滤波器的四种结构,包括三种分布式算法结构:全并行、全串行和多比特串行,另外一种固定/可变系数的多时钟周期结构。如果设计时不需要改变滤波器系数,则选择四种结构的一种;如果需要在设计中重载滤波器系数,则必须选择最后一种结构。

“coefficients scaling”中可以选择滤波器系数的量化方式,“Bit width”中选择量化位宽,上面的图中可以看到滤波器的频率响应。

“Output Sepecification”中可以设置滤波器的输出方式和位宽,IP核会根据输入的数据位宽和其它参数设置自动计算输出数据的位宽。

IP核支持多通道数据输入,可以在“Number of Inpu Channels”中设置输入数据的通道数。另外设置FPGA型号、数据存储方式、系数存储方式、流水线级数、输入数据位宽等常规参数。

设置完成后可以生成IP核。老版本的IP核会自动加入到工程中;新版本的IP核集成在qsys中,需要手动在file中将IP核对应的qip文件加入工程。

IP核接口说明

Quartus的很多IP核采用的是Avalon-ST接口,主要有数据(data)、准备好(ready)、有效(valid)和错误(error)几种信号。Avalon-ST接口本身也支持时分复用来完成多通道同步(channel),因此FIR Compiler支持多通道数据处理。

FIR Compiler支持重载滤波器系数,但系数重载的相关端口(coed_set、coed_in_clk、coed_set_in、coed_in、coed_we、coed_ld)不被Avalon-ST接口支持,不属于该类型接口。

接下来介绍几个主要的接口:

在设置为多通道、可变系数模式时,还会用到其它的接口。上表中的接口已经足够完成一次单通道、固定系数的FIR滤波器设计。其它接口在后文的设计中使用到FIR滤波器的其它模式时,再做介绍。

FPGA设计

IP核的接口在Verilog HDL中进行设计时,一定要参考官方文档中给出的时序图。在IP核的配置界面点击“documentation”,可以找到IP核的data sheet、user guide和release notes。

FIR IP核的相关文档如上图所示。注意,在altera卖身给intel后,官网进行了大改,目前老版本的quartus中的IP核点击“documentation”时已经成了error,即官网已经没有了相关文档。
单通道、固定系数的FIR Compiler接口时序非常简单,Verilog HDL示例代码如下所示:

module FirIPDa
(input reset_n,              //复位信号,低电平有效input clk,                  //FPGA系统时钟/数据速率:2kHzinput signed [11:0] Xin,    //数据输入频率为2kHZoutput signed [24:0] Yout   //滤波后的输出数据
);wire source_valid, sink_ready;
wire [1:0] source_error;
wire sink_valid = 1'b1;fir_par fir_inst
(.clk                (clk),             //输入,时钟信号.reset_n            (reset_n),         //输入,低电平有效复位.ast_sink_data      (Xin),             //输入,采样输入数据.ast_sink_valid     (sink_valid),      //输入,置1时向FIR滤波器输入数据.ast_source_ready   (1'b1),            //输入,源准备好.ast_sink_error     (2'd0),            //输入,标识信宿端出现的错误.ast_source_data    (Yout),            //输出,滤波器输出,位宽与设计的滤波器参数有关.ast_sink_ready     (sink_ready),      //输出,.ast_source_valid   (source_valid),    //输出,FIR输出数据有效时该信号置位.ast_source_error   (source_error)     //输出,标识信源端出现的错误
);endmodule

程序中认为输入的采样数据始终有效,因此将sink_valid永远置1。另外将source_ready永远置1,且忽视sink_ready信号,可以获得最高的FIR计算时钟速率。

仿真与工程下载

使用MATLAB生成一个200khz+800kHz的混合频率信号,写入txt文件,。编写Testbench读取txt文件对信号滤波,文件操作方法参考“Testbench编写指南(一)文件的读写操作”https://blog.csdn.net/fpgadesigner/article/details/80470972。

使用Quartus调用ModelSim进行仿真,对正弦信号的滤波如下图所示:

明显看到经过500Hz低通滤波器滤波后,输入的200+800Hz信号只剩下200Hz的单频信号。
完整的Quartus工程(含testbench仿真)可以在这里下载:https://download.csdn.net/download/fpgadesigner/10464189。

FPGA数字信号处理(四)Quartus FIR IP核实现相关推荐

  1. FPGADesigner《FPGA数字信号处理系列》目录与传送门

    FPGA数字信号处理(1)数字混频(NCO与DDS的使用): https://blog.csdn.net/fpgadesigner/article/details/80512067 FPGA数字信号处 ...

  2. FPGA数字信号处理(十八)Quartus CIC IP核实现

    该篇是FPGA数字信号处理的第18篇,题接上篇,本文详细介绍使用Quartus自带的CIC IP核进行设计的方法.下一篇会介绍使用Vivado的IP核设计CIC的方法. IP核概述 由于版本的关系,Q ...

  3. FPGA数字信号处理(八)Quartus FFT IP核实现

    本系列的2-7篇分别介绍了FIR和IIR滤波器的FPGA实现.除了数字滤波器外,快速傅里叶变换(FFT)也是DSP系统常用的运算单元,用于对信号进行频域分析.FFT算法的实现很复杂,但Altera和X ...

  4. FPGA数字信号处理(九)Vivado FFT IP核实现

    该篇是FPGA数字信号处理的第9篇,选题为DSP系统中极其常用的FFT运算.上篇介绍了Quartus环境下FFT IP核的使用"FPGA数字信号处理(八)Quartus FFT IP核实现h ...

  5. FPGA数字信号处理(十九)Vivado CIC IP核实现

    该篇是FPGA数字信号处理的第19篇,题接上篇,本文详细介绍使用Vivado自带的CIC IP核进行设计的方法.关于单级CIC滤波器.多级CIC滤波器的Verilog HDL设计以及Quartus中C ...

  6. FPGA(五):Quartus II 调用Fir IP核使用说明

    这几天在忙着写通信原理的项目,其中用到了fir滤波器的部分,从最初的一脸懵逼到初步理解了该怎么去调用ip核以及参数设置,这其中的过程着实不易.这篇博客主要是为了记录自己的学习过程以便日后也可以回想起来 ...

  7. FPGA数字信号处理(二)并行FIR滤波器Verilog设计

    该篇是FPGA数字信号处理的第二篇,选题为DSP系统中极其常用的FIR滤波器.本文将简单介绍FIR滤波器的原理,详细介绍使用Verilog HDL设计并行FIR滤波器的流程和方法.接下来几篇会介绍串行 ...

  8. FPGA数字信号处理(三)串行FIR滤波器Verilog设计

    该篇是FPGA数字信号处理的第三篇,选题为DSP系统中极其常用的FIR滤波器.本文将在上一篇"FPGA数字信号处理(二)并行FIR滤波器Verilog设计" https://blo ...

  9. FPGA数字信号处理(十五)多速率FIR滤波器

    该篇是FPGA数字信号处理的第15篇,选题为多速率信号处理系统中用到的多速率FIR滤波器.本文将简单介绍多速率信号处理系统的基本概念,以及使用Quartus和Vivado的IP核设计多速率FIR滤波器 ...

最新文章

  1. 7 Papers | MIT学神开源微分太极;北大等提出没有乘法的神经网络
  2. SQL語句大全4(常用函數)
  3. RH033 Unit 9 vim: An Advanced Text Editor
  4. 微信小程序lottiejs动画事例代码
  5. jsp中的basePath和path (绝对路径 相对路径)
  6. python安装pyquery失败
  7. 4.29python
  8. ios sqlite3 初级应用
  9. topsis综合评价法_DRG如何评价临床医师绩效——以肿瘤科为例
  10. leetcode力扣647. 回文子串
  11. 雷军回应小米新 Logo 争议;马化腾排名第 15 位,2021 全球亿万富豪榜出炉!谷歌将停止使用甲骨文的财务软件|极客头条...
  12. Python实现统计代码行数功能
  13. 破解完全入门篇 第七章-寻找软件的注册码
  14. APP抓包教程 windows + mimtproxy +夜神模拟器 + XposedInstaller + JustTrustMe
  15. 雅虎市值_也许不算雅虎! 刚出来
  16. Math.cbrt() Math.sqrt() Math.pow()
  17. c++ mupdf 提取pdf文件里面图片
  18. 高考必胜|东方星书法祝全体考生旗开得胜,金榜题名
  19. python main传参args_python argh/argparse:如何将列表作为命令行参数传递?
  20. [再寄小读者之数学篇](2014-06-20 Beta 函数)

热门文章

  1. 用python放烟花咯
  2. 如何快速将WPS表格或者excel数据将表格转化为json
  3. java中pl是什么意思,英语中pl是什么意思
  4. jQuery学习之旅 Item1 选择器【一】
  5. Pytorch中的torch.where函数
  6. Unity 检测手机性能,区分高中低端机型
  7. 用Hadoop分析金庸人物关系网-实验报告
  8. FFmpeg的HEVC解码器源码简单分析:解码器主干部分
  9. openlayers官方教程(三)Basics——Zooming to your location
  10. html做图片模糊效果,CSS3 filter(滤镜) 制作图片高斯模糊无需JS