这里写自定义目录标题

  • 环境
  • 层次结构
  • 仿真
  • 实现
    • HDL
      • 顶层文件
      • 仿真文件
      • dds文件
    • IP配置
    • FFT
    • ROM
    • COE文件生成
  • reference

环境

Vivado
Modelsim 仿真

层次结构

ROM matlab产生波形,保存到coe文件中,加载到rom中
dds 控制输入信号的频率
dds的输出信号给到fft IP核

仿真


左边为input,右边为output
输入信号的范围为0-255,包含直流分量,频率为单频

实现

HDL

顶层文件

module ip_fft(input clk,input rst);wire [7:0]      Out;wire [10:0]     addr;//=============================wire [31:0]     fft_s_axis_data_tdata;reg fft_s_axis_data_tvalid;wire fft_s_axis_data_tready;reg fft_s_axis_data_tlast;wire [63:0]     m_axis_data_tdata;wire [7:0]      m_axis_data_tuser;wire m_axis_data_tvalid;wire m_axis_data_tlast;wire m_axis_data_tready;reg [7:0]   counter;reg fft_flag;//assign fft_s_axis_data_tdata = {24'b0, Out};// assign fft_s_axis_data_tvalid = 1'b1;// assign fft_s_axis_data_tlast = (addr==11'b1)?1'b1:1'b0;assign m_axis_data_tready = 1'b1;always @(posedge clk ) beginif (!rst) begincounter <= 8'b0;endelse if(fft_s_axis_data_tready)  begincounter <= counter +1'b1;endendalways @(posedge clk ) beginfft_s_axis_data_tvalid  <= fft_s_axis_data_tvalid;fft_s_axis_data_tlast   <= 1'b0 ;fft_flag                <= fft_flag;if (!rst) beginfft_flag <= 1'b0;fft_s_axis_data_tlast <= 1'b0;fft_s_axis_data_tvalid <= 1'b0;endelse if(fft_flag == 1'b0)  beginif (counter == 8'hff) beginfft_flag <= 1'b1;fft_s_axis_data_tvalid <= 1'b1;endendelse if(fft_flag == 1'b1) beginif (counter == 8'hff) beginfft_s_axis_data_tvalid <= 1'b0;fft_s_axis_data_tlast <= 1'b1;endendelse beginfft_s_axis_data_tvalid  <= fft_s_axis_data_tvalid;fft_s_axis_data_tlast   <= fft_s_axis_data_tlast ;endend// outputwire [24:0]     realp;wire [24:0]     imagp;wire [50:0]     fft_abs;assign realp = m_axis_data_tdata[56:32];assign imagp = m_axis_data_tdata[24:0];assign fft_abs = $signed(realp)* $signed(realp)+ $signed(imagp)* $signed(imagp);xfft_0 u_xfft_0 (.aclk       (clk),                                                // input wire aclk.aresetn    (rst),                                          // input wire aresetn.s_axis_config_tdata    (8'b1),                                      // input wire [7 : 0] s_axis_config_tdata.s_axis_config_tvalid   (1'b1),                                    // input wire s_axis_config_tvalid.s_axis_config_tready   (),                                    // output wire s_axis_config_tready.s_axis_data_tdata  (fft_s_axis_data_tdata),                      // input wire [xx : 0] s_axis_data_tdata.s_axis_data_tvalid (fft_s_axis_data_tvalid),                    // input wire s_axis_data_tvalid.s_axis_data_tready (fft_s_axis_data_tready),                    // output wire s_axis_data_tready.s_axis_data_tlast  (fft_s_axis_data_tlast),                      // input wire s_axis_data_tlast.m_axis_data_tdata  (m_axis_data_tdata),                      // output wire [xx : 0] m_axis_data_tdata.m_axis_data_tuser  (m_axis_data_tuser),                      // output wire [7 : 0] m_axis_data_tuser.m_axis_data_tvalid (m_axis_data_tvalid),                    // output wire m_axis_data_tvalid.m_axis_data_tready (m_axis_data_tready),                    // input wire m_axis_data_tready.m_axis_data_tlast  (m_axis_data_tlast),                      // output wire m_axis_data_tlast.event_frame_started        ( ),                  // output wire event_frame_started.event_tlast_unexpected     ( ),            // output wire event_tlast_unexpected.event_tlast_missing        ( ),                  // output wire event_tlast_missing.event_status_channel_halt  ( ),                     // output wire event_status_channel_halt.event_data_in_channel_halt ( ),                   // output wire event_data_in_channel_halt.event_data_out_channel_halt( )                 // output wire event_data_out_channel_halt);dds  u_dds (.clk                     ( clk      ),    .rst                     ( rst      ),.Fword                   ( 32'h800_0000   ),.Pword                   ( 11'b0    ),.Out                     ( Out      ),.addr                    ( addr     ));
endmodule

仿真文件

module tb_ip_fft;// ip_fft Parametersparameter PERIOD  = 10;// ip_fft Inputsreg   clk                                  = 0 ;reg   rst                                  = 0 ;initialbeginforever #(PERIOD/2)  clk=~clk;endinitialbegin#(PERIOD*4) rst  =  1;endip_fft  u_ip_fft (.clk                     ( clk   ),.rst                     ( rst   ));endmodule

dds文件

module dds(input clk,input rst,input [31:0]Fword,input [10:0]Pword,output [7:0]Out,output [10:0] addr);reg [31:0] r_Fword;reg [10:0] r_Pword;reg [31:0] cnt;// wire [10:0] addr;always @(posedge clk ) beginr_Fword = Fword;r_Pword = Pword;endalways @(posedge clk or negedge rst) beginif(!rst)cnt <= 0;elsecnt <= cnt+r_Fword;endassign addr = cnt[31:21]+r_Pword;blk_mem_gen_0 u_blk_mem_gen_0 (.clka     (clk),          // input wire clka.ena      (1'b1),         // input wire ena.addra    (addr),         // input wire [10 : 0] addra.douta    (Out)           // output wire [7 : 0] douta);endmodule

IP配置

FFT



ROM




COE文件生成

matlab 代码,产生coe文件

%%
clc;
t=0:2*pi/(2^11-1):2*pi;
y=0.5*sin(t)+0.5;
figure; subplot(1,3,1); plot(y);
r=ceil(y*(2^8-1)); %将小数转换为整数,ceil是向上取整。
fid = fopen('sin.coe','w+'); %写到sin.coe文件,用来初始化sin_rom
fprintf(fid,'memory_initialization_radix=10;\n');
fprintf(fid,'memory_initialization_vector= \n');
for i = 1:1:2^11fprintf(fid,'%d',r(i));if i==2^11fprintf(fid,'; ');elsefprintf(fid,', ');end
%     if i%15==0
%         fprintf(fid,'\n');
%     end
end
fclose(fid);

reference

vivado 基于FPGA的dds学习记录
Vivado中FFT IP核的使用


都看到这儿了,点个赞吧!

Vivado环境下基于FPGA的IP实现FFT变换相关推荐

  1. Linux环境下基于策略的路由

    Linux环境下基于策略的路由 原文作者:Matthew G. Marsh 原文出处:[url]http://www.sysadminmag.com/linux/articles/v09/i01/a3 ...

  2. 【内网穿透开机】外网环境下基于路由器广播,一键唤醒内网计算机实现远程开机

    外网环境下基于路由器广播,一键唤醒内网计算机实现远程开机(详细) 之前文章向大家介绍了 外网环境下基于FRP.VNC技术远程访问计算机,实现内网穿透 以及利用 WOL远程唤醒功能 基于FRP.VNC技 ...

  3. 可持续5G环境下基于机器学习的网络分片框架

    Machine Learning-Based Network Sub-Slicing Framework in a Sustainable 5G Environment 5G环境下的物联网框架 5G切 ...

  4. Freebsd 4.7环境下基于qmail系统的反病毒反垃圾邮件系统构建--fw

    Freebsd 4.7环境下基于 qmail系统的反病毒反垃圾邮件系统构建 第一部分:前 言 一.        版权信息 本文档的版权属于作者姜培军[peijun.jiang]所有.转摘时请附带本信 ...

  5. 科学计算机撤销,云计算环境下基于属性的撤销方案-计算机科学.PDF

    云计算环境下基于属性的撤销方案-计算机科学.PDF 第 卷 第 期 计 算 机 科 学 45 8 Vol.45No.8 年 月 2018 8 COMPUTER SCIENCE Au.2018 g 云计 ...

  6. C++:Windows环境下基于Eclipse配置C/C++开发环境

    C++:Windows环境下基于Eclipse配置C/C++开发环境 目录 Windows下的MinGW下载.安装和配置 1.MinGW下载 2.MinGW安装与配置 3.基于Eclipse配置 Wi ...

  7. vivado环境下实现比较器

    ** vivado环境下实现比较器 ** 比较逻辑功能 比较器要实现的功能比较简单,即:当A>B时,输出AGTB值为1:否则为0.在AGTB=0的情况下,为了更精准地看到究竟是A=B还是A< ...

  8. vivado环境下用Verilog语言实现编码器

    ** vivado环境下用Verilog语言实现编码器 ** 编码器的分类 编码器通常分为两大类: 普通编码器和优先编码器. 其中,普通编码器对某一个给定时刻只能对一个输入信号进行编码的编码器, 它的 ...

  9. PaddleOCR——Docker环境下基于HubServing模式部署Restful API服务(CPU版本)

    Docker环境下基于HubServing模式部署Restful API服务(CPU版本) 在日常项目应用中,相信大家一般都会希望能通过Docker技术,把PaddleOCR服务打包成一个镜像,以便在 ...

最新文章

  1. 2020年春季学期信号与系统课程作业参考答案-第九次作业
  2. 移动app崩溃原因及场景
  3. sizeof不是java关键字是_下列哪项不是Java语言的关键字。
  4. Symfony2插件FOSUserBundle的使用说明
  5. 医院药房管理系统 php,his 源码 医院管理系统
  6. 中望cad自定义快捷键命令_[cad常用快捷键命令大全]中望cad常用快捷键及命令
  7. win10无线投屏_原来小米的投屏功能,如此强大,每天都偷偷用,秒杀4k电视
  8. solidworks2021安装教程,solidworks2021安装步骤
  9. listview优化几种写法(原创)
  10. 信息学奥赛一本通T1183-病人排队-题解(C语言代码)
  11. 13岁残疾、35岁离异……43岁这年她将和全球最美王妃同台……
  12. 密码学总结(一) 数学常识
  13. 如何写一篇五彩斑斓的博客.append(可爱)
  14. 企业生产管理集成的核心工具—MES管理系统
  15. Linux - 安装内核源码
  16. 哈夫曼树构建与哈夫曼树编码
  17. 云ERP的创新到底在哪?
  18. 趣谈网络协议-课程介绍
  19. 毕业设计 基于JavaWbe的校友录管理网站的设计与实现
  20. 《Python语言程序设计》第四章(选择)学习笔记

热门文章

  1. java 校验护照_如何处理护照身份验证响应并将其显示给用户
  2. 注册表禁用U盘、注册表屏蔽USB端口的方法
  3. 女生做测试工程师好还是需求分析师好?
  4. pqmagic分区失败蓝屏解决方案
  5. php如何删除所有文件,php如何删除所有文件
  6. Linux之chgrp命令
  7. FileManager文件管理器(总结)
  8. 转:Windows驱动开发(中间层)
  9. 智芯传感聚焦国产高端MEMS压力传感器 深耕多领域产品布局
  10. Android开发imageview实现上面两个圆角下面两个直角的效果