55--fpga FIR ip核 高通滤波 初学者适用

设计任务:
实现高通滤波器,参数如下:
通过频率:200KHz;
截止频率:180KHz;
通带纹波:<1dB;
阻带衰减:>40dB。
本次实验需要用上篇文章用matlab生成vivado fir ip核需要用的ceo文件

module fir_top(
    input clk,
    input axis_data_tvalid,
    input axis_data_tvalid_f,
    output [15:0]S,//叠加波形
    output [39:0]fir_out,//滤波后的波形
    output [15 : 0] m_axis_data_tdata_1,//100kHz正弦波
    output [15 : 0] m_axis_data_tdata_2//200kHz正弦波
    );
    

    wire event_pinc_invalid_1,event_pinc_invalid_2;
    wire event_poff_invalid_1,event_poff_invalid_2;
    wire [15:0]m_axis_phase_tdata_1,m_axis_phase_tdata_2;
    wire m_axis_phase_tvalid_1,m_axis_phase_tvalid_2;
    
    c_addsub_0 your_instance_name (
  .A( m_axis_data_tdata_1),  // input wire [15 : 0] A
  .B(m_axis_data_tdata_2),  // input wire [15 : 0] B
  .S(S)  // output wire [15 : 0] S
);
    
    
    dds_compiler_0 dds_1 (
  .aclk(clk),                                // input wire aclk
  .m_axis_data_tvalid(axis_data_tvalid),    // output wire m_axis_data_tvalid
  .m_axis_data_tdata(m_axis_data_tdata_1),      // output wire [15 : 0] m_axis_data_tdata
  .m_axis_phase_tvalid(m_axis_phase_tvalid_1),  // output wire m_axis_phase_tvalid
  .m_axis_phase_tdata(m_axis_phase_tdata_1),    // output wire [15 : 0] m_axis_phase_tdata
  .event_pinc_invalid(event_pinc_invalid_1),    // output wire event_pinc_invalid
  .event_poff_invalid(event_poff_invalid_1)    // output wire event_poff_invalid
);
dds_compiler_1 dds_2 (
  .aclk(clk),                                // input wire aclk
  .m_axis_data_tvalid(axis_data_tvalid),    // output wire m_axis_data_tvalid
  .m_axis_data_tdata(m_axis_data_tdata_2),      // output wire [15 : 0] m_axis_data_tdata
  .m_axis_phase_tvalid(m_axis_phase_tvalid_2),  // output wire m_axis_phase_tvalid
  .m_axis_phase_tdata(m_axis_phase_tdata_2),    // output wire [15 : 0] m_axis_phase_tdata
  .event_pinc_invalid(event_pinc_invalid_2),    // output wire event_pinc_invalid
  .event_poff_invalid(event_poff_invalid_2)    // output wire event_poff_invalid
);
    wire axis_data_tready;

    wire m_axis_data_tvalid_3;
    fir_compiler_0 fir1 (
  .aclk(clk),                              // input wire aclk
  .s_axis_data_tvalid(axis_data_tvalid_f),  // input wire s_axis_data_tvalid
  .s_axis_data_tready(axis_data_tready),  // output wire s_axis_data_tready
  .s_axis_data_tdata(S),    // input wire [15 : 0] s_axis_data_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid_3),  // output wire m_axis_data_tvalid
  .m_axis_data_tdata(fir_out)    // output wire [39 : 0] m_axis_data_tdata
);

endmodule
module fir_tb(
    );
        reg clk;
        reg axis_data_tvalid;
       wire [15 : 0] m_axis_data_tdata_1;
       wire [15 : 0] m_axis_data_tdata_2;
       reg axis_data_tvalid_f;
       wire [15:0]S;
       wire [39:0]fir_out;
         // fir_top u1(.clk(clk),.axis_data_tvalid(axis_data_tvalid),. m_axis_data_tdata_1(m_axis_data_tdata_1),.m_axis_data_tdata_2(m_axis_data_tdata_2)); 
        fir_top u1(.clk(clk),.axis_data_tvalid(axis_data_tvalid),.S(S),.fir_out(fir_out),.axis_data_tvalid_f(axis_data_tvalid_f),. m_axis_data_tdata_1(m_axis_data_tdata_1),.m_axis_data_tdata_2(m_axis_data_tdata_2));
       initial begin
       clk<=1'b0;
       axis_data_tvalid<=1'b1;
       axis_data_tvalid_f<=1'b1;
       end
       always #5 clk<=~clk;
endmodule

这次用了4个IP核,dds0用来生成100kHz的信号,dds1生成200kHz信号,fir用来设置滤波参数,c_addsub_0是加法器用来进行信号累加。
在这里插入图片描述
加法器ip核配置:
在这里插入图片描述
在这里插入图片描述
dds ip核配置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
dds1把频率控制字改成2000的二进制数即可。

fir ip核设置
在这里插入图片描述
在这里插入图片描述
其余保持默认
仿真波形:
可见对200kHz和100kHz正弦波叠加后的信号S进行滤波,只剩下200kHz的信号,滤波成功。
在这里插入图片描述

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值