• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

CIC和FIR滤波器设计Verilog代码VIVADO仿真

08/07 08:41
706
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-24061QHH2536.doc

共1个文件

名称:CIC和FIR滤波器设计Verilog代码VIVADO仿真

软件:VIVADO

语言:Verilog

代码功能:

CIC和FIR滤波器设计

数据从端口进入后,使用150MHz的时钟再打一拍(采样一次),然后经过第一个CIC滤波器,将速率降为10MHz,然后再经过一级CIC滤波器,将速率降为2MHz,最后再经过一个FIR滤波器,将速率降为1MHz。FIR滤波器截止频率设置为25KHz。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

设计文档

数据从端口进入后,使用150MHz的时钟再打一拍(采样一次),然后经过第一个CIC滤波器,将速率降为10MHz,然后再经过一级CIC滤波器,将速率降为2MHz,最后再经过一个FIR滤波器,将速率降为1MHz。FIR滤波器截止频率设置为25KHz。

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. Testbench

Testbench首先使用readmemh函数去读取事先准备好的原始数据txt,然后进入到程序输入端口,降采样和滤波后输出结果也保存为一个txt文件,便于后续matlab分析。

6. 仿真图

下图可看出采样率降为1MHz

7. FIR滤波器系数设计

FIR滤波器系数设计

1. 打开matlab

2. 输入fdatool回车,打开滤波器设计工具fdatool

3. 设置如下

导出coe文件即可

部分代码展示:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2020/09/13 19:38:12
// Design Name: 
// Module Name: fir_cic_filter
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////
//1.实现150M采样速率到1兆采样速率的抽取
//2.注意原始信号的采样速率必须是150MHz,
//3.MATLAB生成一个0~20kHz的信号,40kHz~50kHz的干扰,采样速率150MHz。将数据导入到vivado中做为原始仿真的输入数据,写清MATLAB部分和fpga部分的实现
//细节
//4.写清楚cic滤波器和fir滤波器ip核的具体设计参数
//5.vivado中仿真
//6.文档说明,视频录制啥的和上次的一样。
module fir_cic_filter(
    input clk_in,//150MHz
    input rst_p,//高电平复位
    input [15:0] data_in,//输入数据
    output [47:0] data_out,//1M信号输出
    output data_out_en
    );
//信号采样
reg [15:0] data_sample=16'd0;
always@(posedge clk_in or posedge rst_p)
    if(rst_p)
        data_sample<=16'd0;
    else
        data_sample<=data_in;//150M采样
//CIC抽取15倍
wire cic_data_tready;
wire [23 : 0] cic_tdata;
wire cic_tvalid;
cic_compiler_0 i1_cic_compiler_0 (
  .aclk(clk_in),                              // input wire aclk
  .s_axis_data_tdata(data_sample),    // input wire [15 : 0] s_axis_data_tdata
  .s_axis_data_tvalid(1'b1),  // input wire s_axis_data_tvalid
  .s_axis_data_tready(cic_data_tready),  // output wire s_axis_data_tready
  .m_axis_data_tdata(cic_tdata),    // output wire [23 : 0] m_axis_data_tdata
  .m_axis_data_tvalid(cic_tvalid)  // output wire m_axis_data_tvalid
);
//CIC抽取5倍
wire cic_D5_tready;
wire [23 : 0] cic_D5_tdata;
wire cic_D5_tvalid; 
cic_D5 i_cic_D5 (
  .aclk(clk_in),                              // input wire aclk
  .s_axis_data_tdata(cic_tdata),    // input wire [23 : 0] s_axis_data_tdata
  .s_axis_data_tvalid(cic_tvalid),  // input wire s_axis_data_tvalid
  .s_axis_data_tready(cic_D5_tready),  // output wire s_axis_data_tready
  .m_axis_data_tdata(cic_D5_tdata),    // output wire [23 : 0] m_axis_data_tdata
  .m_axis_data_tvalid(cic_D5_tvalid)  // output

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=879

  • 2-24061QHH2536.doc
    下载

相关推荐