名称:基于FPGA的8阶线性相位结构FIR设计Verilog代码VIVADO仿真(文末获取)
软件:VIVADO
语言:Verilog
代码功能:
8阶线性相位结构FIR
设计截止频率10K的低通滤波器,时钟为100KHz,100K*0.1=10K
m=fir1(7,0.2),fir1为matlab中滤波器设计函数,7表示滤波器阶数为7,0.2表示截止频率为100K*0.1=10K
滤波器系数设计:打开Matlab软件在指令窗口中键入:m=fir1(7,0.2),即可得到如下的系数:
0.009、0.048、0.164、0.279、0.279、0.164、0.048、0.009
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
局部放大波形
部分代码展示:
//滤波器 module FIR_filter( input clk_in,//50MHz input reset_p,//高电平复位 input [2:0]amp_cnt1,//幅值控制信号1--值越大输出幅值越高 input [2:0]amp_cnt2,//幅值控制信号2--值越大输出幅值越高 input [15:0]fre_cnt1,//频率控制信号1--值越大输出频率越低 input [15:0]fre_cnt2,//频率控制信号2--值越大输出频率越低 output [10:0] sin_1,//输出频率1 output [10:0] sin_2,//输出频率2 output [10:0] sin_super,//叠加信号 output [9:0] fir_data//滤波后结果 ); wire [10:0] sin_super_buf; wire clk_100K; //分频模块,50M分频到100K div_clk i_div_clk( . clk_in(clk_in), . clk_out(clk_100K) ); wire [7:0] sin_high_out;//输出频率1 wire [7:0] sin_low_out;//输出频率2 //产生带噪声的正弦波 sin_noise i_sin_noise( . clk_in(clk_in),//50MHz . reset_p(reset_p),//高电平复位 . fre_cnt1(fre_cnt1),//频率控制信号1--值越大输出频率越低 . fre_cnt2(fre_cnt2),//频率控制信号2--值越大输出频率越低 . sin_high_out(sin_high_out),//输出频率1 . sin_low_out(sin_low_out)//输出频率2 ); //8阶线性相位结构FIR FIR i_FIR( . clk(clk_100K),//100K . reset_p(reset_p),//高电平复位 . data_in(sin_super_buf[10:1]),//带噪声的正弦波 . fir_data(fir_data)//滤波后结果 ); assign sin_1=amp_cnt1*sin_high_out;//输出频率1 assign sin_2=amp_cnt2*sin_low_out;//输出频率2 assign sin_super_buf=amp_cnt1*sin_high_out+amp_cnt2*sin_low_out;//叠加信号 assign sin_super=sin_super_buf; endmodule
源代码
扫描文章末尾的公众号二维码