在quartus中使用FFT IP核最全教程(从入门到放弃)
一、准备工作
首先需要把需要的器材准备好,我使用的是quartus18.0,并且要使用IP核被破解的版本,不然无法使用其中的FFT和NCO,一定要注意,quartus对于版本非常敏感,一定要严格对应好版本
1、带IP的quartus18.0
2、modelsim,这个modelsim不能使用自己下载的modelsim,要去官网下载,对应版本的modelsim-altera版本,而不是modesim se,应为modelsim-altera版本,是已经将altera上的器件的lib编译好了,如果自己下载modelsim使用,则还要自己编译相应的altera库,非常的坑
二、IP核导入
1、在quartus的IP库中,导入FFT核和NCO核,并完成设置,具体的设置结果如下:
设置的位置在tool->platform designer
设置好以后就generate HDL,在这一步中一定要注意,在simulation中选择verilog选项:
2、然后将两个IP加入到工程中:
Project->add file in Project,
主要加入的是两个文件,后缀为sip和qip的文件,分别在simulation文件夹下和synthesis文件夹下。加入后如下所示:
三、编写代码
1、fft_wrapper.v
module fft_wrapper(clk,in_signal,real_power,imag_power,fft_source_sop,sink_sop,sink_eop,sink_valid,reset_n,start); input clk;input start;input wire [13:0] in_signal;wire [31:0] short_in_signal;output wire [24:0] real_power;output wire [24:0] imag_power;//fft signaloutput wire sink_valid;wire sink_ready;output wire sink_sop;output wire sink_eop;wire [10:0] fft_pts;output wire fft_source_sop;wire fft_source_eop;output reg reset_n;wire [13:0] real_to_fft_p;wire [13:0] imag_to_fft_p;reg [4:0] count;reg eop2, sop2, eop5;initial beginreset_n = 0;count = 5'd0;endalways@(posedge clk)begincount <= count + 1;if(count == 10)beginreset_n = 1;endend// always @(posedge clk)
// begin
// if(start)
// begin
// reset_n <= 0;
// count <= 5'd0;
// end
// else
// begin
// count = count + 5'd1;
// if(count == 5'd10)
// begin
// reset_n <= 1;
// end
// end
// endcontrol_for_fft control_for_fft_longer_inst(.clk(clk),.insignal(in_signal),.sink_valid(sink_valid),.sink_ready(sink_ready),.sink_error(),.sink_sop(sink_sop),.sink_eop(sink_eop),.inverse(inverse),.outreal(real_to_fft_p),.outimag(imag_to_fft_p),.fft_pts(fft_pts));fft fft_inst (.clk (clk), // clk.clk.reset_n (reset_n), // rst.reset_n.sink_valid (sink_valid), // sink.sink_valid.sink_ready (sink_ready), // .sink_ready.sink_error (2'b00), // .sink_error.sink_sop (sink_sop), // .sink_sop.sink_eop (sink_eop), // .sink_eop.sink_real (real_to_fft_p), // .sink_real.sink_imag (imag_to_fft_p), // .sink_imag.fftpts_in (fft_pts), // .fftpts_in.inverse (1'b0), // .inverse.source_valid (), // source.source_valid.source_ready (1'b1), // .source_ready.source_error (), // .source_error.source_sop (fft_source_sop), // .source_sop.source_eop (fft_source_eop), // .source_eop.source_real (real_power), // .source_real.source_imag (imag_power), // .source_imag.fftpts_out () // .fftpts_out); endmodule
2、control_for_fft.v
module control_for_fft(clk,insignal, sink_valid,sink_ready,sink_error,sink_sop,sink_eop,inverse,outreal,outimag,fft_pts);input clk;
input [13:0] insignal;
output reg sink_valid, sink_sop, sink_eop, inverse, sink_ready;
output reg [1:0] sink_error;output [13:0] outreal, outimag;
output reg [10:0] fft_pts;
reg [9:0] count;initial
begincount = 10'd1;inverse = 0;sink_valid = 0;sink_ready = 1;sink_error = 2'b00;fft_pts = 11'd1024;
endassign outreal = insignal;
assign outimage = 14'd0;always @(posedge clk)beginbegincount <= count + 1;endif(count == 10'd1024)beginsink_eop <= 1;endif(count == 10'd0)beginsink_eop <= 0;sink_sop <= 1;sink_valid <= 1;endif(count == 10'd1)beginsink_sop <= 0;endendendmodule
3、fft_test.v
`timescale 1ns / 1ps
module fft_test;reg clk;
reg start;wire reset_n;
wire [13:0] fsin_o, fcos_o;wire sink_sop_sig;
wire sink_eop_sig;
wire [24:0] real_power_sig;wire [24:0] imag_power_sig;initial
begin clk <= 0;start <= 0;#2 start <= 1;
endalways begin #10 clk <= ~clk; endnco nco_inst (.clk (clk), // clk.clk.reset_n (reset_n), // rst.reset_n
// .clken (clken), // in.clken.clken (1'b1), // in.clken
// .phi_inc_i (phi_inc_i), // .phi_inc_i.phi_inc_i (32'd41943040), // .phi_inc_i.fsin_o (fsin_o), // out.fsin_o.fcos_o (fcos_o), // .fcos_o.out_valid (out_valid) // .out_valid);fft_wrapper fft_wrapper_inst
(.clk(clk),//.in_signal(in_signal_sig),.in_signal(fsin_o),.real_power(real_power_sig),.imag_power(imag_power_sig),.fft_source_sop(fft_source_sop_sig),.sink_sop(sink_sop_sig),.sink_eop(sink_eop_sig),.sink_valid(sink_valid_sig),.reset_n(reset_n),.start(start)
);endmodule
四、仿真
1、综合后,会发现
有错误出现,不用管,直接联合仿真即可。
仿真结果如下:
在quartus中使用FFT IP核最全教程(从入门到放弃)相关推荐
- Vivado中的FFT IP核使用(含代码)
本文介绍了Vidado中FFT IP核的使用,具体内容为:调用IP核>>配置界面介绍>>IP核端口介绍>>MATLAB生成测试数据>>测试verilog ...
- FPGA数字信号处理(九)Vivado FFT IP核实现
该篇是FPGA数字信号处理的第9篇,选题为DSP系统中极其常用的FFT运算.上篇介绍了Quartus环境下FFT IP核的使用"FPGA数字信号处理(八)Quartus FFT IP核实现h ...
- 【FPGA学习】Quartus II中NCO与FFT ip核的仿真
FPGA有许多IP核使用起来很方便,本篇博客记录一下NCO以及FFT的IP核使用和学习,实验平台是Altera公司的EP4CE40F23C8N 参考资料: Altera--NCO IP核详解 ALTE ...
- FPGA数字信号处理(八)Quartus FFT IP核实现
本系列的2-7篇分别介绍了FIR和IIR滤波器的FPGA实现.除了数字滤波器外,快速傅里叶变换(FFT)也是DSP系统常用的运算单元,用于对信号进行频域分析.FFT算法的实现很复杂,但Altera和X ...
- 频谱仪的更改ip_【正点原子FPGA连载】第五十一章 基于FFT IP核的音频频谱仪-摘自【正点原子】开拓者 FPGA 开发指南 (amobbs.com 阿莫电子论坛)...
本帖最后由 正点原子 于 2020-10-24 15:19 编辑 203429z6c3os33t8albi33.png (66.36 KB) 2019-7-28 15:14 上传 第五十一章 基于FF ...
- FFT IP核调用与仿真之SCALE压缩因子设置
关于FFT IP核的配置,网上有很多相关的资料可以参考,但是唯独涉及到scaled压缩因子设置这个参数,资料却非常匮乏,这是个什么参数,应该整么设置,设置后对结果输出会有什么影响,整样才能知道它设置的 ...
- Xilinx HLS FFT IP核运行时动态配置FFT长度
如上图所示,xilinx hls的fft ip核不仅可以计算固定长度的FFT变换,还可以在运行时动态配置fft变换长度,但其可配置的长度仅限于小于等于最大长度的所有可能的2的幂,即若该fft ip可支 ...
- 用Modelsim仿真QII FFT IP核的时候出现的Error: Illegal target for defparam
怎么回事,在用Modelsim仿真QII FFT IP核的时候出现的问题 ,这个可是用QII11.1的mega wizard manager 生成的一个FFT的模块 可是在调用Modelsim 进行c ...
- 【以前】ModelSim中仿真Xilinx IP核
先对题目进行说明:ModelSim本身是一个独立的仿真环境,不需要依赖其他的软件.这里所说的" ModelSim仿真XilinxIP核"是指单独运行ModelSim 进行仿真,而不 ...
最新文章
- [leetcode] 367. Valid Perfect Square
- shell如何将标准错误输出重定向为标准输出
- 深入理解Spark 2.1 Core (十三):sparkEnv类源码分析
- 我的docker随笔18:阿里云docker仓库的使用
- vc++.net 移植到 C#中的几点注意事项
- springboot + redis(单机版)
- html时钟自动刷新抖音,抖音上炫酷的网红文字时钟
- 左耳朵耗子的技术书籍建议
- 电脑蓝屏:缺少bootsafe64_ev.sys
- BestCoder HDU 5750 Dertouzos
- a标签使用方法和跳转方式
- cydia服务器未响应,完美解决cydia 软件源空白问题
- python访问陌生人qq空间_用Python登录好友QQ空间点赞的示例代码
- Cobalt Strike (cs)联动 Goby 进行内网扫描
- c语言百变图形,百变图标app官方版-百变图标更换图标app下载v1.0.0-西西软件下载...
- USTCOJ 1382 毛毛虫
- 互联网快讯:中国石化与隆基达成战略合作;极米多款投影产品持续热销;百度网盘青春版正式上线
- 牛客小白月赛21(求三角形的外心模板)
- agm x2 android8.0,【AGMX2评测】性能:八核骁龙小钢炮_AGM X2_手机评测-中关村在线...
- Facebook的预填问题默认可以设定哪些类型。