【FPGA】:ip核-----CIC滤波器

文章目录

  • 一、 概述
  • 二、 端口说明[此章节为引用]
  • 三、 ip核的生成
  • 四、 matlab中cic滤波器的设计
  • 四、仿真
  • 五、 参考资料

一、 概述

【FPGA】:ip核-----CIC滤波器_第1张图片
【FPGA】:ip核-----CIC滤波器_第2张图片

【FPGA】:ip核-----CIC滤波器_第3张图片【FPGA】:ip核-----CIC滤波器_第4张图片
【FPGA】:ip核-----CIC滤波器_第5张图片
【FPGA】:ip核-----CIC滤波器_第6张图片
【FPGA】:ip核-----CIC滤波器_第7张图片
【FPGA】:ip核-----CIC滤波器_第8张图片
【FPGA】:ip核-----CIC滤波器_第9张图片

二、 端口说明[此章节为引用]

【FPGA】:ip核-----CIC滤波器_第10张图片
【FPGA】:ip核-----CIC滤波器_第11张图片

三、 ip核的生成

【FPGA】:ip核-----CIC滤波器_第12张图片
【FPGA】:ip核-----CIC滤波器_第13张图片【FPGA】:ip核-----CIC滤波器_第14张图片
【FPGA】:ip核-----CIC滤波器_第15张图片

四、 matlab中cic滤波器的设计

【FPGA】:ip核-----CIC滤波器_第16张图片

此部分来源于博客
【FPGA】:ip核-----CIC滤波器_第17张图片
【FPGA】:ip核-----CIC滤波器_第18张图片
【FPGA】:ip核-----CIC滤波器_第19张图片

总接:
【FPGA】:ip核-----CIC滤波器_第20张图片

四、仿真

第一组
采样率0.2MHZ,信号频率1Khz,抽取倍数5倍。
【FPGA】:ip核-----CIC滤波器_第21张图片
【FPGA】:ip核-----CIC滤波器_第22张图片
主程序:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/07/18 21:09:15
// Design Name: 
// Module Name: cic_ip_test
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module cic_ip_test();

reg aclk;
reg [15:0] s_axis_data_tdata;
reg s_axis_data_tvalid;
wire s_axis_data_tready; 
wire [23:0] m_axis_data_tdata;
wire m_axis_data_tvalid;

parameter data_num=4000;  //仿真数据长度
reg signed [9:0] stimulus[data_num-1:0];
integer i;

/*********************时钟的产生***********************/
parameter period=10;
initial aclk =0;
always #(period/2) aclk=~aclk;
/*********************信号的初始化***********************/
initial begin
   s_axis_data_tvalid<=1'b0;
   s_axis_data_tdata <= 16'd0;
   $readmemb("E:/vivado_project/cic/cic_test/E6_4_sin_in.txt",stimulus);
   # period;
   # period;
   i=0;
end

/*********************将数据送入cic ip核***********************/
always@(negedge aclk) begin   //注意下降沿
           if(i==data_num-1  && s_axis_data_tready==1'b1) begin
                s_axis_data_tdata <= {{6{stimulus[i][9]}},stimulus[i]};
                s_axis_data_tvalid <= 1'b1;
                i<=0;
            end   
            else if(s_axis_data_tready==1'b1 && i<data_num-1) begin
                s_axis_data_tdata <= {{6{stimulus[i][9]}},stimulus[i]};
                s_axis_data_tvalid <= 1'b1;
                i <= i+1; 
            end
            else begin
                s_axis_data_tvalid <= 1'b0;
                s_axis_data_tdata <=s_axis_data_tdata;
                i <= i;
 end   

end 


/*********************cic ip的例化***********************/
cic_compiler_0 cic_compiler_inst0 (
  .aclk(aclk),                              // input wire aclk
  .s_axis_data_tdata(s_axis_data_tdata),    // input wire [15 : 0] s_axis_data_tdata
  .s_axis_data_tvalid(s_axis_data_tvalid),  // input wire s_axis_data_tvalid
  .s_axis_data_tready(s_axis_data_tready),  // output wire s_axis_data_tready
  .m_axis_data_tdata(m_axis_data_tdata),    // output wire [23 : 0] m_axis_data_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid)  // output wire m_axis_data_tvalid
);

/*********************将最终的结果输出***********************/
integer w_file;
always@(posedge m_axis_data_tvalid) begin   
    w_file = $fopen("E:/vivado_project/cic/cic_test/E6_4_sin_out.txt");
	$fdisplay(w_file,"%d",$signed(m_axis_data_tdata[16:0]));   //h代表16进制 d代表十进制
end 
endmodule

仿真结果
【FPGA】:ip核-----CIC滤波器_第23张图片
【FPGA】:ip核-----CIC滤波器_第24张图片
从图中可以看出,输出与输入相比经过了5倍的抽取。

同理第二组
采样率0.2MHZ,信号频率1Khz,内插倍数5倍。
【FPGA】:ip核-----CIC滤波器_第25张图片
【FPGA】:ip核-----CIC滤波器_第26张图片
从图中可以看出,输出与输入相比经过了5倍的内插。
另外输出数据位宽和输入数据位宽估算公式为:
在这里插入图片描述
其中B为输入信号的位数,Bmax为输出信号的最大位宽。
第三组:
采样率0.2MHZ,信号频率1Khz和50khz,抽取倍数5倍。
【FPGA】:ip核-----CIC滤波器_第27张图片
可以看出50KHZ处,比最大值低了大约41dB。
【FPGA】:ip核-----CIC滤波器_第28张图片
从结果可以看出,50khz的频率成分被滤掉,并且输出采样率降低为原来的五分之一。

五、 参考资料

  1. CIC滤波器
  2. Matlab中CIC滤波器的应用
  3. CIC滤波器(公式推导)
  4. 基于FPGA的CIC滤波器设计(1)(重点看)
  5. Vivado CIC IP核滤波器详解(一)(重点中的重点)
  6. 多通道CIC抽取滤波器Vivado CIC IP核实现实现(3)
  7. FPGA数字信号处理(十九)Vivado CIC IP核实现
  8. FPGA数字信号处理(十六)单级CIC滤波器Verilog设计(仿真重点)
  9. FPGA数字信号处理(十七)多级CIC滤波器Verilog设计
    10.插值滤波器设计(抽取和插值的理论,很重要)

你可能感兴趣的:(fpga开发)