当前位置: 首页 > news >正文

基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation

基于FPGA的FIR低通滤波器实现(附工程源码)


文章目录

  • 基于FPGA的FIR低通滤波器实现(附工程源码)
  • 前言
  • 一、matlab设计FIR滤波器,生成正弦波
    • 1.设计FIR滤波器
    • 1.生成正弦波.coe
  • 二、vivado
    • 1.fir滤波器IP核
    • 2.正弦波生成IP核
    • 3.时钟IP核设置
    • 4.顶层文件/测试文件代码
  • 三.simulation
  • 四.源代码


前言

本文为FPGA实现FIR滤波器仿真过程,附源代码。


提示:以下是本篇文章正文内容,下面案例可供参考

一、matlab设计FIR滤波器,生成正弦波

1.设计FIR滤波器

打开MATLAB在命令行窗口输入:
fadtool
回车后在滤波器设计界面设置滤波器参数如下
在这里插入图片描述
之后点击如图标志,设置定点,在菜单栏"目标(R)"出选择生成对应滤波器系数.COE文件
在这里插入图片描述

1.生成正弦波.coe

matlab代码如下

width=8;    %rom的位宽
depth=1024; %rom的深度
x=linspace(0,2*pi,depth);   %在一个周期内产生1024个采样点
y_sin=sin(x);    %生成余弦数据
y_sin=round(y_sin*(2^(width-1)-1))+2^(width-1)-1;   %将余弦数据全部转换为整数fid=fopen('C:\Users\lys\Desktop\fir\sin.coe','w');   %创建.coe文件
fprintf(fid,'%d,\n',y_sin);   %向.coe文件中写入数据
fclose(fid);   %关闭.coe文件

二、vivado

1.fir滤波器IP核

设置参数如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.正弦波生成IP核

参数设置如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.时钟IP核设置

参数设置如下:
在这里插入图片描述
在这里插入图片描述

4.顶层文件/测试文件代码

`timescale 1ns / 1psmodule fir_top(input clk,input rst_n,input [1:0]rom_sel,output [7:0]douta,output [7:0]fir_out_data);wire clk_10m;wire clk_1;wire clk_2;wire clk_3;//    clk_wiz_0 instance_name(
//        .clk_out1(clk_1),     // output clk_out1
//        .clk_out2(clk_2),
//        .clk_out3(clk_3),
//        .clk_out4(clk_10m),
//        .reset(rst_n), // input resetn
//        .locked(),       // output locked
//        .clk_in1(clk)
//    );      // input clk_in1clk_wiz_0 instance_name(// Clock out ports.clk_out1(clk_1),     // output clk_out1.clk_out2(clk_2),     // output clk_out2.clk_out3(clk_3),     // output clk_out3.clk_out4(clk_10m),     // output clk_out4// Status and control signals.resetn(rst_n), // input reset.locked(),       // output locked// Clock in ports.clk_in1(clk));      // input clk_in1wire clk_rom;assign clk_rom = (rom_sel == 0)?clk_1:((rom_sel == 1)?clk_2:clk_3);reg [9:0]addra;always@(posedge clk_rom or negedge rst_n)beginif(!rst_n)addra <= 'd0;elseaddra <= addra + 1'b1;endrom_fir rom_inst (.clka(clk_rom),    // input wire clka.ena(1'b1),      // input wire ena.addra(addra),  // input wire [9 : 0] addra.douta(douta)  // output wire [7 : 0] douta);wire [7:0]fir_in_data;assign fir_in_data = douta - 'd128;fir fir_inst (.aclk(clk),                              // input wire aclk.s_axis_data_tvalid(clk_10m),  // input wire s_axis_data_tvalid.s_axis_data_tready(),  // output wire s_axis_data_tready.s_axis_data_tdata(fir_in_data),    // input wire [7 : 0] s_axis_data_tdata.m_axis_data_tvalid(),  // output wire m_axis_data_tvalid.m_axis_data_tdata(fir_out_data)    // output wire [7 : 0] m_axis_data_tdata);endmodule
`timescale 1ns / 1psmodule fir_top_tb;reg clk;reg rst_n;reg [1:0]rom_sel;wire [7:0]douta;wire [7:0]fir_out_data;fir_top fir_top_inst(.clk    (clk),.rst_n  (rst_n),.rom_sel(rom_sel),.douta  (douta),.fir_out_data(fir_out_data));initial clk = 0;always#10 clk = ~clk;initial beginrst_n = 0;rom_sel = 0;#200;rst_n = 1'b1;#200000;rom_sel = 1;#200000;rom_sel = 2;#200000;$stop;endendmodule

三.simulation

只为测试功能,未考虑滤波器性能,所以效果不佳,结果实现如下
在这里插入图片描述

四.源代码

https://download.csdn.net/download/qq_42761380/88243346

http://www.lryc.cn/news/141439.html

相关文章:

  • c++ qt--事件(第六部分)
  • 嵌入式系统入门实战:探索基本概念和应用领域
  • 关于hive sql进行调优的理解
  • 十大排序算法
  • PIP 常用操作汇总
  • 线性代数的本质笔记(3B1B课程)
  • 快速掌握MQ消息中间件rabbitmq
  • Git push拦截
  • 拼多多anti-token分析
  • 基于微信小程序的中医体质辨识文体活动的设计与实现(Java+spring boot+MySQL)
  • 4.16 TCP 协议有什么缺陷?
  • VMware 修改ip地址 虚拟机静态ip设置 centos动态ip修改为静态ip地址 centos静态ip地址 vmware修改ip地址
  • Deepin添加Ubuntu源
  • Mysql的多表查询和索引
  • Java设计模式之建造者模式
  • H5商城公众号商城系统源码 积分兑换商城系统独立后台
  • 华为OD机试 - 完全数计算(Java 2023 B卷 100分)
  • 每日一学——Vlan配置
  • Pimpl模式
  • Python 密码破解指南:5~9
  • ARM驱动开发
  • Matlab图像处理-加法运算
  • Docker容器学习:搭建自己专属的LAMP环境
  • 问道管理:沪指弱势震荡跌0.38%,金融、地产等板块走弱,算力概念等活跃
  • OpenWrt package - BuildPackage
  • C++三体星战小游戏
  • 【zip密码】修改zip压缩包密码
  • 小小讲一下Linux基本命令
  • Python数据容器(列表list、元组tuple、字符串str、字典dict、集合set)详解
  • 2023高教社杯数学建模思路 - 复盘:人力资源安排的最优化模型