【工程源码】基于FPGA的数字滤波器的使用

本文非原创

 

主要有两种方式,一是matlab滤波器工具箱设计并生成Verilog或VHDL的代码,二是matlab滤波器工具箱设计并export 系数,又FIR II ip core import。先说下滤波器设计工具箱,filter Designer 低版本叫做 fdatool

 

【工程源码】基于FPGA的数字滤波器的使用_第1张图片

 

【工程源码】基于FPGA的数字滤波器的使用_第2张图片
先说调用ip core的方式,ip core是收费的,百度一下。
点击file-export,保存成.txt的格式

 

【工程源码】基于FPGA的数字滤波器的使用_第3张图片【工程源码】基于FPGA的数字滤波器的使用_第4张图片

【工程源码】基于FPGA的数字滤波器的使用_第5张图片

打开quartus17.1,添加ipcore

 

【工程源码】基于FPGA的数字滤波器的使用_第6张图片【工程源码】基于FPGA的数字滤波器的使用_第7张图片

【工程源码】基于FPGA的数字滤波器的使用_第8张图片

然后就可以导入系数了,由滤波器工具箱直接生成的txt无法直接导入,需要做格式调整,将滤波器工具箱生成的系数文件命名为“filter.txt”,与附件中的filter.exe置于同一个目录下,并运行filter.exe(程序写的比较简陋,见谅)。
导入程序自动生成的fil.txt文件

【工程源码】基于FPGA的数字滤波器的使用_第9张图片

 

【工程源码】基于FPGA的数字滤波器的使用_第10张图片【工程源码】基于FPGA的数字滤波器的使用_第11张图片

 【工程源码】基于FPGA的数字滤波器的使用_第12张图片

 

【工程源码】基于FPGA的数字滤波器的使用_第13张图片

 

 

 记住输入输出的位宽,然后finish
运行程序filter2.exe键入输入输出位宽

【工程源码】基于FPGA的数字滤波器的使用_第14张图片

 

会生成fir_filter.v文件,然后直接加入工程就能直接用了。
这个模块完成了,FIR ipcore的例化和配置。
module fir_filter(
        input clk,//系统时钟
        input rst_n,//复位信号
        input sample_clk,//采样时钟
        input [7:0] filter_in,//滤波器输入
        output reg [26:0] filter_out//滤波器输出
);

重点:这里的采样时钟有讲究,采样时钟的频率为设置的频率,占空比一定是采样时钟/系统时钟。
例如:系统时钟50MHz,采样频率10MHz,则采样时钟为10MHz,占空比20%
         系统时钟50MHz,采样频率50MHz,则采样时钟为50MHz,占空比100%,即恒为高电平1

至此,完成FIR ipcore的输入输出配置和介绍。

下面是滤波器工具箱生成的方式
设计方法同上,
导出时注意一点

 

【工程源码】基于FPGA的数字滤波器的使用_第15张图片

【工程源码】基于FPGA的数字滤波器的使用_第16张图片

选择语言,名称,保存路径,然后Generate就行了。
(端口输入输出信号及仿真文件可以设置,自行解决)
module filter
               (
                clk,
                clk_enable,
                reset,
                filter_in,
                filter_out
                );

要注意的是这里的clk_enable的要求与刚才说的采样时钟的要求一致。

PS:这个滤波器工具箱生成的代码,性能和ip core差远了。

欢迎各位补充。

你可能感兴趣的:(【工程源码】基于FPGA的数字滤波器的使用)