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

这篇具有很好参考价值的文章主要介绍了【FPGA】:ip核-----CIC滤波器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、 概述

cic ip核实现,fpga开发
cic ip核实现,fpga开发

cic ip核实现,fpga开发cic ip核实现,fpga开发
cic ip核实现,fpga开发
cic ip核实现,fpga开发
cic ip核实现,fpga开发
cic ip核实现,fpga开发
cic ip核实现,fpga开发

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

cic ip核实现,fpga开发
cic ip核实现,fpga开发

三、 ip核的生成

cic ip核实现,fpga开发
cic ip核实现,fpga开发cic ip核实现,fpga开发
cic ip核实现,fpga开发

四、 matlab中cic滤波器的设计

cic ip核实现,fpga开发

此部分来源于博客
cic ip核实现,fpga开发
cic ip核实现,fpga开发
cic ip核实现,fpga开发

总接:
cic ip核实现,fpga开发

四、仿真

第一组
采样率0.2MHZ,信号频率1Khz,抽取倍数5倍。
cic ip核实现,fpga开发
cic ip核实现,fpga开发
主程序:

`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

仿真结果
cic ip核实现,fpga开发
cic ip核实现,fpga开发
从图中可以看出,输出与输入相比经过了5倍的抽取。

同理第二组
采样率0.2MHZ,信号频率1Khz,内插倍数5倍。
cic ip核实现,fpga开发
cic ip核实现,fpga开发
从图中可以看出,输出与输入相比经过了5倍的内插。
另外输出数据位宽和输入数据位宽估算公式为:
cic ip核实现,fpga开发
其中B为输入信号的位数,Bmax为输出信号的最大位宽。
第三组:
采样率0.2MHZ,信号频率1Khz和50khz,抽取倍数5倍。
cic ip核实现,fpga开发
可以看出50KHZ处,比最大值低了大约41dB。
cic ip核实现,fpga开发
从结果可以看出,50khz的频率成分被滤掉,并且输出采样率降低为原来的五分之一。文章来源地址https://www.toymoban.com/news/detail-707671.html

五、 参考资料

  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】:ip核-----CIC滤波器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FIR滤波器的FPGA实现【IP核实现版】

    本文使用FPGA来实现FIR滤波器设计,设计中使用的DDS、乘法器与FIR滤波器均采用IP core进行实现,实现效果是将3MHz和4MHz的正弦信号混频后使用FIR低通滤波器滤除7MHz信号得到1MHz的信号。 首先用两个DDS核生成3MHz以及4MHz的正弦波信号。 注意:此处的dds的命名要和代码中对应,系统

    2024年02月04日
    浏览(39)
  • 基于FPGA的FIR滤波器的实现(5)— 并行结构FIR滤波器的FPGA代码实现

    并行结构,并行实现滤波器的累加运算,即并行将具有对称系数的输入数据进行相加,而后采用多个乘法器并行实现系数与数据的乘法运算,最后将所有乘积结果相加输出。这种结构具有最高的运行速度,因不需要累加运算,因此系数时钟频率可以与数据输出时钟频率保持一

    2024年02月03日
    浏览(42)
  • (三)FPGA实现滤波器

     DDS:直接数字式频率合成器,可以根据需求产生不同频率和相位的正弦波数据,通常用于通信系统中的调制解调。 配置过程: 【IP CATALOG】à【modulation DDS complier】 Configuration Options Phase generator and SIN COS LUT 相位和查找表(本实验中选这个) Phase Generator only 只产生相位 SIN CO

    2024年02月16日
    浏览(28)
  • 升余弦滤波器的FPGA实现

    升余弦滤波器与无码间串扰(一) 升余弦滤波器与无码间串扰(二) 升余弦滤波器的FPGA实现 成形滤波器采用vivado中的FIR ip核实现。滤波器的系数用matlab产生并转成coe文件。 FIR滤波器的输入数据是s_axis_data_tdata,输出数据是m_axis_data_tdata。输入和输出接口均采用AXIS总线,即接

    2024年02月14日
    浏览(31)
  • 孩子都能学会的FPGA:第十六课——用FPGA实现IIR滤波器滤波

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年01月21日
    浏览(46)
  • 基于FPGA的IIR滤波器的实现

    IIR滤波器原理以及架构在此不做阐述,如何从模拟滤波器到数字滤波器进行设计,可参考 https://blog.csdn.net/k331922164/article/details/117265704?spm=1001.2101.3001.6661.1utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-117265704-blog-123083652.235%5Ev38%5Epc_relevant_anti_t3_based

    2024年02月04日
    浏览(29)
  • 基于FPGA的RC滤波器设计实现

    目录 简介: 传递函数 FPGA代码实现 总结 RC滤波器的特性基本情况介绍 RC一阶低通滤波介绍;RC滤波器电路简单,抗干扰性强,有较好的低频性能,并且选用标准的阻容元件易得,所以在工程测试的领域中最经常用到的滤波器是RC滤波器。 这里我们主要认识和介绍低通滤波器。

    2024年02月16日
    浏览(23)
  • FIR内插滤波器的FPGA实现(一)-matlab实现

    FIR内插滤波器是一种基本的插值方法,主要有两个步骤: 1)在输入的每一个初始采样中间插入L个零点; 2)插零后的数据经过低通滤波器。 运行结果如图(时域、频域): 我们的目标是把采样频率提升五十倍。 得到的频域图: 可以看出内插零点在频域会实现频谱扩展,因此

    2024年02月03日
    浏览(40)
  • 利用FPGA实现全串行低通FIR滤波器

    设计一个15阶(长度为16)的具有线性相位低通FIR滤波器,采用布拉克曼窗函数设计,截止频率为500HZ,抽样频率为2000HZ;采用FPGA实现全串行FIR滤波器,系数的量化位数为12比特,输入数据位数为12比特,输出数据位数为29比特,系统时钟为16KHZ 设计思路 :首先采用MATLAB根据要

    2024年02月07日
    浏览(40)
  • 解析使用FPGA逻辑实现FIR滤波器的几种架构

    有限脉冲响应(finite impulse response,FIR)数字滤波器         FIR滤波器的实质就是输入序列与系统脉冲响应的卷积,即:         其中,N为滤波器的阶数,也即抽头数;x(n)为第n个输入序列;h(n)为FIR滤波器的第n级抽头系数。         FIR滤波器基本结构如下:      

    2024年02月08日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包