一、准备工作

首先需要把需要的器材准备好,我使用的是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核最全教程(从入门到放弃)相关推荐

  1. Vivado中的FFT IP核使用(含代码)

    本文介绍了Vidado中FFT IP核的使用,具体内容为:调用IP核>>配置界面介绍>>IP核端口介绍>>MATLAB生成测试数据>>测试verilog ...

  2. FPGA数字信号处理(九)Vivado FFT IP核实现

    该篇是FPGA数字信号处理的第9篇,选题为DSP系统中极其常用的FFT运算.上篇介绍了Quartus环境下FFT IP核的使用"FPGA数字信号处理(八)Quartus FFT IP核实现h ...

  3. 【FPGA学习】Quartus II中NCO与FFT ip核的仿真

    FPGA有许多IP核使用起来很方便,本篇博客记录一下NCO以及FFT的IP核使用和学习,实验平台是Altera公司的EP4CE40F23C8N 参考资料: Altera--NCO IP核详解 ALTE ...

  4. FPGA数字信号处理(八)Quartus FFT IP核实现

    本系列的2-7篇分别介绍了FIR和IIR滤波器的FPGA实现.除了数字滤波器外,快速傅里叶变换(FFT)也是DSP系统常用的运算单元,用于对信号进行频域分析.FFT算法的实现很复杂,但Altera和X ...

  5. 频谱仪的更改ip_【正点原子FPGA连载】第五十一章 基于FFT IP核的音频频谱仪-摘自【正点原子】开拓者 FPGA 开发指南 (amobbs.com 阿莫电子论坛)...

    本帖最后由 正点原子 于 2020-10-24 15:19 编辑 203429z6c3os33t8albi33.png (66.36 KB) 2019-7-28 15:14 上传 第五十一章 基于FF ...

  6. FFT IP核调用与仿真之SCALE压缩因子设置

    关于FFT IP核的配置,网上有很多相关的资料可以参考,但是唯独涉及到scaled压缩因子设置这个参数,资料却非常匮乏,这是个什么参数,应该整么设置,设置后对结果输出会有什么影响,整样才能知道它设置的 ...

  7. Xilinx HLS FFT IP核运行时动态配置FFT长度

    如上图所示,xilinx hls的fft ip核不仅可以计算固定长度的FFT变换,还可以在运行时动态配置fft变换长度,但其可配置的长度仅限于小于等于最大长度的所有可能的2的幂,即若该fft ip可支 ...

  8. 用Modelsim仿真QII FFT IP核的时候出现的Error: Illegal target for defparam

    怎么回事,在用Modelsim仿真QII FFT IP核的时候出现的问题 ,这个可是用QII11.1的mega wizard manager 生成的一个FFT的模块 可是在调用Modelsim 进行c ...

  9. 【以前】ModelSim中仿真Xilinx IP核

    先对题目进行说明:ModelSim本身是一个独立的仿真环境,不需要依赖其他的软件.这里所说的" ModelSim仿真XilinxIP核"是指单独运行ModelSim 进行仿真,而不 ...

最新文章

  1. [leetcode] 367. Valid Perfect Square
  2. shell如何将标准错误输出重定向为标准输出
  3. 深入理解Spark 2.1 Core (十三):sparkEnv类源码分析
  4. 我的docker随笔18:阿里云docker仓库的使用
  5. vc++.net 移植到 C#中的几点注意事项
  6. springboot + redis(单机版)
  7. html时钟自动刷新抖音,抖音上炫酷的网红文字时钟
  8. 左耳朵耗子的技术书籍建议
  9. 电脑蓝屏:缺少bootsafe64_ev.sys
  10. BestCoder HDU 5750 Dertouzos
  11. a标签使用方法和跳转方式
  12. cydia服务器未响应,完美解决cydia 软件源空白问题
  13. python访问陌生人qq空间_用Python登录好友QQ空间点赞的示例代码
  14. Cobalt Strike (cs)联动 Goby 进行内网扫描
  15. c语言百变图形,百变图标app官方版-百变图标更换图标app下载v1.0.0-西西软件下载...
  16. USTCOJ 1382 毛毛虫
  17. 互联网快讯:中国石化与隆基达成战略合作;极米多款投影产品持续热销;百度网盘青春版正式上线
  18. 牛客小白月赛21(求三角形的外心模板)
  19. agm x2 android8.0,【AGMX2评测】性能:八核骁龙小钢炮_AGM X2_手机评测-中关村在线...
  20. Facebook的预填问题默认可以设定哪些类型。

热门文章

  1. 微信小程序实战(仿小米商城)
  2. 娱乐至死?不,我偏要活着
  3. 微信支付接口的参数规定
  4. Python创建免费Ip代理池,伪装Ip。
  5. Java生成与解析二维码
  6. wifi连接成功,但提示“无法连接到Internet”(已解决)
  7. JVM优化之 -Xss -Xms -Xmx -Xmn 参数设置
  8. 1. Java基础语法
  9. MFC的使用——在共享DLL中使用MFC、在静态库中使用MFC
  10. Deep Learning on Graphs: A Survey