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

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


IP核概述

由于版本的关系,Quartus提供的IP核有两种,一种是集成在“MegaWizard Plug-In Manager”中;一种集成在“IP Catalog”和qsys中。两种Quartus版本下的IP核,从使用者的角度来看仅仅是配置界面不同,在参数设置和使用方法上基本一致。本文以“MegaWizard Plug-In Manager”中的CIC IP核(12.1)使用为例。

Quartus的CIC IP核属于收费IP,如果是个人学习使用需要对IP核单独破解。破解方法与当时破解FIR Compiler IP核时相同,只不过CIC IP核对应的编号为00BB(参考https://blog.csdn.net/fpgadesigner/article/details/80605869 中的破解步骤)。保存license文件后重新打开Quartus,在License Setup页面看到CIC的破解信息,则可以正常使用。


IP核参数设置

这里写图片描述
CIC IP核的配置很简单。在主界面中:
●Filter Type:设置CIC滤波器模式为抽取Decimator或插值Interpolator;
●Number of stages:设置级联的CIC滤波器级数;
●Differential delay:设置差分延时(该值与输出数据位宽有关);
●Rate change factor:设置抽取/插值的倍数。

Quartus的CIC IP核还支持多通道输入,即对多个通道的数据采用分时复用 的方法完成滤波,这个功能在后面文章的设计中用到是时再做具体介绍。切换到“Input/Output Options”界面:
这里写图片描述
●Input data width:设置CIC滤波器输入数据的位宽;
●Full output resolution:选中表示全精度输出,不需要全精度输出时可以 在下面选择输出的位宽截断方式。


IP核接口说明

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

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

这里写图片描述

在设置为多通道模式时,还会用到其它的接口。上表中的接口已经足够完成一次单通道的CIC滤波器设计。


FPGA设计与仿真

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

将CIC IP核配置为3级CIC滤波器的级联,对输入数据进行5倍抽取。单通道的CIC接口时序非常简单,Verilog HDL示例代码如下所示:

//------------------------------------------
// 使用Quartus CIC IP核完成抽取滤波
//------------------------------------------
module Quartus_CICIP_liuqi
(
    input clk,         //输入,系统工作时钟
    input reset_n,     //输入,低电平有效复位信号
    input [9:0]in_data,//输入,数据
    output [16:0]out_data, //输出,数据
    output in_ready,   //输出,置1表示CIC滤波器可以接收数据
    output out_valid,  //输出,置1表示输出数据有效 
    output [1:0] out_error //输出,标明输出端违背Avalon-ST协议的错误
);

CicFilter   CicFilter_cic_inst(
        .clk(clk),
        .clken(1'b1),
        .reset_n(reset_n),
        .in_data(in_data),
        .in_valid(1'b1),
        .out_ready(1'b1),
        .in_error(2'b00),
        .out_data(out_data),
        .in_ready(in_ready),
        .out_valid(out_valid),
        .out_error(out_error));

endmodule       

程序中认为输入的数据始终有效,因此将in_valid、out_ready置1,in_error置0。

为了能将IP核的仿真结果与Verilog HDL的设计仿真结果进行对比,本文CIC IP核的设置与上篇相同,仿真及testbench的编写也基本相同。使用CIC滤波器对0.25MHz+7.5Mhz的正弦混合信号滤波。

使用Quartus调用ModelSim进行仿真,结果如下图所示:
这里写图片描述
仿真结果与上一篇的仿真结果基本一致。可以看到经过抽取滤波后,0.25MHz的信号分量数据速率降低,但信号频率没有改变。而7.5MHz的信号分量被抗混叠滤波器滤除,结果符合预期。

猜你喜欢

转载自blog.csdn.net/fpgadesigner/article/details/80887165