名称:1024点FFT计算波形频率设计Verilog代码VIVADO仿真
软件:VIVADO
语言:Verilog
代码功能:
1024点FFT计算波形频率
1、输入位宽为10bit的AD采样模拟信号波形数据
2、进行FFT计算(调用IP核)
3、输出计算的频谱,找到最大值所在的位置换算为频率
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
1024点
3. Testbench
4. 仿真图
部分代码展示:
module?FFT_ctrl( input?clk_in,//时钟100M input?rst_p,//复位 input?[9:0]?wr_data,//AD采样的10bit数据 output?clk_AD,//AD采样时钟 output?[36:0]?max_data//最大值对应的频率 ); parameter?point=1024;//根据实际点数修改 parameter?resolve=9765625;//10000000000/point=频率分辨率*1000,采样时钟除以点数,根据实际点数修改 wire?clk;//采样时钟10M assign?clk_AD=clk; ??clk_wiz_0?i_clk_wiz_0 ?( ?//?Clock?in?ports ??.clk_in1(clk_in),??????//?input?clk_in1 ??//?Clock?out?ports ??.clk_out1(clk));????//?output?clk_out1 //fifo?空满信号 wire?empty; wire?almost_empty; wire?full; reg?wr_en=0; reg?rd_en=0; wire?[9:0]?rd_data; wire?last; reg?valid=0; wire?[31:0]?fft_dout; wire?fft_dout_tvalid; wire?signed?[11:0]?fft_dout_re; wire?signed?[11:0]?fft_dout_im; //控制FIFO写使能 always@(posedge?clk?or?posedge?rst_p) if(rst_p) wr_en<=0; else if(empty==1) wr_en<=1; else?if(full==1) wr_en<=0; //控制FIFO读使能 always@(posedge?clk?or?posedge?rst_p) if(rst_p) rd_en<=0; else if(full==1?&&?fft_dout_tvalid==0) rd_en<=1; else?if(almost_empty==1) rd_en<=0;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1110
阅读全文