Vivado FFT IP核使用

1.  今日摸鱼任务

学习Vivado FFT IP核的使用

Vivado_FFT IP核 使用详解_vivado fft ip核-CSDN博客

这篇写的很详细啦

简单做一点笔记进行记录

2.  FFT IP核

xfft_0 ff (.aclk(aclk),                                                // input wire aclk.aresetn(aresetn),                                          // input wire aresetn.s_axis_config_tdata(s_axis_config_tdata),                  // input wire [23 : 0] s_axis_config_tdata.s_axis_config_tvalid(s_axis_config_tvalid),                // input wire s_axis_config_tvalid.s_axis_config_tready(s_axis_config_tready),                // output wire s_axis_config_tready.s_axis_data_tdata(s_axis_data_tdata),                      // input wire [31 : 0] s_axis_data_tdata.s_axis_data_tvalid(s_axis_data_tvalid),                    // input wire s_axis_data_tvalid.s_axis_data_tready(s_axis_data_tready),                    // output wire s_axis_data_tready.s_axis_data_tlast(s_axis_data_tlast),                      // input wire s_axis_data_tlast.m_axis_data_tdata(m_axis_data_tdata),                      // output wire [31 : 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(event_frame_started),                  // output wire event_frame_started.event_tlast_unexpected(event_tlast_unexpected),            // output wire event_tlast_unexpected.event_tlast_missing(event_tlast_missing),                  // output wire event_tlast_missing.event_status_channel_halt(event_status_channel_halt),      // output wire event_status_channel_halt.event_data_in_channel_halt(event_data_in_channel_halt),    // output wire event_data_in_channel_halt.event_data_out_channel_halt(event_data_out_channel_halt)  // output wire event_data_out_channel_halt
);

看起来有这么多端口,貌似很麻烦捏:

AXI4-Stream这里重点是TVALID和TREADY:分清输入输出的主、从

3.  matlab 程序

clc;clear;close all;
fs = 1e4;f1 = 5e2;
N = 1024;
t = 0:1/fs:(N-1)/fs;
x = sin(2*pi*f1*t)  ;
x = mapminmax(x).* (2^15-1);
fid = fopen('fft_test_signal.txt', 'wt');
for i = 1:Nif (x(i) >= 0)fprintf(fid, '%s\n', dec2bin(x(i),16));else fprintf(fid, '%s\n', dec2bin(2^16 + x(i), 16));end
end
fclose(fid);
y = fft(x(1:1024)) / 2^12;%缩放倍数在s_axis_config_tdata处
y_re = real(y);
y_im = imag(y);
figure(1);
subplot(3,1,1);plot(0:N-1,x);title('x = sin(2*pi*500*t)  fs = 10kHz');
subplot(3,1,2);plot(0:N-1,y_re);title('y re');
subplot(3,1,3);plot(0:N-1,y_im);title('y im');

4.  FFT 配置与验证

`timescale 1ns / 1ns
module fft_tb(    );reg aclk;reg aresetn;reg [23:0] s_axis_config_tdata;reg s_axis_config_tvalid;reg [31:0] s_axis_data_tdata;reg s_axis_data_tvalid;reg s_axis_data_tlast;reg m_axis_data_tready;wire [31:0] m_axis_data_tdata;wire [9:0] m_axis_data_tuser;wire m_axis_data_tlast;wire m_axis_data_tvalid;wire s_axis_config_tready;wire s_axis_data_tready;wire event_frame_started;wire event_tlast_unexpectedl;wire event_tlast_unexpected;wire event_tlast_missing;wire event_status_channel_halt;wire event_data_in_channel_halt;wire event_data_out_channel_halt;reg [15:0] data_in[0:1024-1];integer i;wire [15:0] Xk_Re, Xk_Im;assign Xk_Re = m_axis_data_tdata[31:16];assign Xk_Im = ~m_axis_data_tdata[15:0]+1'b1;//取反initial aclk = 1'b1;always#10aclk = ~aclk ;initialbegin$readmemb("E:/vivado/fft/fft_test_signal.txt", data_in);aresetn = 1'b0;s_axis_config_tdata = {7'b000_0000, 16'b_01_01_10_01_10_10_01_10, 1'b1};//s缩放倍数 1+1+2+1+2+2+1+2=12  2的12次幂对应matlabs_axis_config_tvalid = 1'b1;i = 0;s_axis_data_tdata = 32'd0;s_axis_data_tlast = 1'b0;m_axis_data_tready = 1'b1;# 40;aresetn = 1'b1;  forever begin@(negedge aclk) if(s_axis_data_tready == 1'b1) begins_axis_data_tvalid = 1'b1;s_axis_data_tdata = {data_in[i], 16'd0};if(i == 1024-1) i = 0;else i = i+1;endelse s_axis_data_tvalid = 1'b0;      end$stop;  endxfft_0 ff (.aclk(aclk),                                                // input wire aclk.aresetn(aresetn),                                          // input wire aresetn.s_axis_config_tdata(s_axis_config_tdata),                  // input wire [23 : 0] s_axis_config_tdata.s_axis_config_tvalid(s_axis_config_tvalid),                // input wire s_axis_config_tvalid.s_axis_config_tready(s_axis_config_tready),                // output wire s_axis_config_tready.s_axis_data_tdata(s_axis_data_tdata),                      // input wire [31 : 0] s_axis_data_tdata.s_axis_data_tvalid(s_axis_data_tvalid),                    // input wire s_axis_data_tvalid.s_axis_data_tready(s_axis_data_tready),                    // output wire s_axis_data_tready.s_axis_data_tlast(s_axis_data_tlast),                      // input wire s_axis_data_tlast.m_axis_data_tdata(m_axis_data_tdata),                      // output wire [31 : 0] m_axis_data_tdata.m_axis_data_tuser(m_axis_data_tuser),                      // output wire [9: 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(event_frame_started),                  // output wire event_frame_started.event_tlast_unexpected(event_tlast_unexpected),            // output wire event_tlast_unexpected.event_tlast_missing(event_tlast_missing),                  // output wire event_tlast_missing.event_status_channel_halt(event_status_channel_halt),      // output wire event_status_channel_halt.event_data_in_channel_halt(event_data_in_channel_halt),    // output wire event_data_in_channel_halt.event_data_out_channel_halt(event_data_out_channel_halt)  // output wire event_data_out_channel_halt);endmodule

这个取补码可以正数变负数、负数变正数(这个小问题下周推导一下)

对于有符号数,右键Radix--> Signed Decimal

对于模拟波形显示,可以右键--> Waveform Style --> Analog Settings

//下班下班

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/372404.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++编译链接原理

从底层剖析程序从编译到运行的整个过程 三个阶段 一、编译阶段二、链接阶段三、运行阶段 为了方便解释,给出两端示例代码,下面围绕代码进行实验: //sum.cpp int gdata 10; int sum(int a,int b) {return ab; }//main.cpp extern int gdata…

Java基础---复习01

main方法 一个程序有且只有一个main方法,main方法是java程序的唯一入口。 修饰符 修饰类修饰方法修饰域public都可以访问都可以访问private私有类只能本类只能本类protected子类可以继承、访问,同包下的类也可以访问子类可以继承、访问,同…

[AI 大模型] Google Gemini

文章目录 [AI 大模型] Gemini简介模型架构发展新技术和优势示例 [AI 大模型] Gemini 简介 Google Gemini 是 Google 最新推出的多模态 AI 大模型,旨在提升 AI 在各个领域的应用能力。Gemini 能够处理文本、图像、音频、视频和代码等多种数据类型,展现出…

暑期备考2024小学生古诗文大会:吃透真题和知识点(持续)

2024年上海市小学生古诗文大会的自由报名初赛将于10月19日(星期六)正式开始,还有3个多月的时间。 为帮助孩子们备考,我持续分享往年上海小学生古诗文大会真题,这些题目来自我去重、合并后的1700在线题库,每…

云计算渲染时代:选择Blender或KeyShot进行高效渲染

在云渲染技术日益成熟的背景下,挑选一款贴合项目需求的3D渲染软件显得尤为关键。当前,Blender与KeyShot作为业界领先的全能渲染解决方案,广受推崇。它们虽皆能创造出令人信服的逼真视觉效果,但在特色功能上各有所长。本篇文章旨在…

稀疏建模介绍,详解机器学习知识

目录 一、什么是机器学习?二、稀疏建模介绍三、Lasso回归简介四、Lasso超参数调整与模型选择 一、什么是机器学习? 机器学习是一种人工智能技术,它使计算机系统能够从数据中学习并做出预测或决策,而无需明确编程。它涉及到使用算…

华为HCIP Datacom H12-821 卷30

1.单选题 以下关于OSPF协议报文说法错误的是? A、OSPF报文采用UDP报文封装并且端口号是89 B、OSPF所有报文的头部格式相同 C、OSPF协议使用五种报文完成路由信息的传递 D、OSPF所有报文头部都携带了Router-ID字段 正确答案:A 解析: OSPF用IP报…

游戏AI的创造思路-技术基础-决策树(1)

决策树,是每个游戏人必须要掌握的游戏AI构建技术,难度小,速度快,结果直观,本篇将对决策树进行小小解读~~~~ 目录 1. 定义 2. 发展历史 3. 决策树的算法公式和函数 3.1. 信息增益(Information Gain&…

无线网卡怎么连接台式电脑?让上网更便捷!

随着无线网络的普及,越来越多的台式电脑用户希望通过无线网卡连接到互联网。无线网卡为台式电脑提供了无线连接的便利性,避免了有线网络的束缚。本文将详细介绍无线网卡怎么连接台式电脑的四种方法,包括使用USB无线网卡、内置无线网卡以及使用…

终于搞定了通过两路蓝牙接收数据

一直想做无线传感器,通过蓝牙来接收数据,无奈因为arduino接收串口数据的一些问题,一直搁到现在。因为学校里给学生开了选修课,所以手边有一些nano和mega可以使用,所以就做了用两个nano加上两个蓝牙模块来发射数据&…

群体优化算法---文化算法介绍,求解背包问题

介绍 文化算法(Cultural Algorithm, CA)是一种基于文化进化理论的优化算法,首次由Robert G. Reynolds在20世纪90年代提出。文化算法通过模拟人类社会中的文化进化过程,利用个体与群体的双重进化机制来解决优化问题。其基本思想是…

动态数据库设计

动态数据库设计是一种灵活的方法,用于构建能够适应不断变化的数据需求的数据库结构。它强调在不频繁修改数据库表结构的前提下,有效管理和存储多样化的数据。以下是实现动态数据库设计的一些关键技术点和策略: 实体-属性-值(EAV&a…

Java的面向对象基础

叠甲:以下文章主要是依靠我的实际编码学习中总结出来的经验之谈,求逻辑自洽,不能百分百保证正确,有错误、未定义、不合适的内容请尽情指出! 文章目录 1.面向过程和面向对象2.访问限定符3.类和对象基础3.1.类的定义3.2.…

【安全设备】下一代防火墙

一、什么是防火墙 防火墙是一个网络安全产品,它是由软件和硬件设备组合而成,在内网和外网之间、专用网与公共网之间的一种保护屏障。在计算机网络的内网和外网之间构建一道相对隔离的保护屏障,以达到保护资料的目的。它是一种隔离技术&#…

Qt 线程 QThread类详解

Qt 线程中QThread的使用 在进行桌面应用程序开发的时候, 假设应用程序在某些情况下需要处理比较复杂的逻辑, 如果只有一个线程去处理,就会导致窗口卡顿,无法处理用户的相关操作。这种情况下就需要使用多线程,其中一个…

【操作系统】进程管理——进程的同步与互斥(个人笔记)

学习日期:2024.7.8 内容摘要:进程同步/互斥的概念和意义,基于软/硬件的实现方法 进程同步与互斥的概念和意义 为什么要有进程同步机制? 回顾:在《进程管理》第一章中,我们学习了进程具有异步性的特征&am…

如何安全隐藏IP地址,防止网络攻击?

当您想在互联网上保持隐私或匿名时,您应该做的第一件事就是隐藏您的 IP 地址。您的 IP 地址很容易被追踪到您,并被用来了解您的位置。下面的文章将教您如何隐藏自己,不让任何试图跟踪您的活动的人发现。 什么是 IP 地址? 首先&am…

JavaWeb系列二十一: 数据交换和异步请求(JSON, Ajax)

文章目录 官方文档JSON介绍JSON快速入门JSON对象和字符串对象转换应用案例注意事项和细节 JSON在java中使用说明JSON在Java中应用场景应用实例1.3.3 Map对象和JSON字符串转换 2. Ajax介绍2.1 Ajax应用场景2.2 传统的web应用-数据通信方式2.3 Ajax-数据通信方式2.4 Ajax文档使用…

百度云智能媒体内容分析一体机(MCA)建设

导读 :本文主要介绍了百度智能云MCA产品的概念和应用。 媒体信息海量且复杂,采用人工的方式对视频进行分析处理,面临着效率低、成本高的困难。于是,MCA应运而生。它基于百度自研的视觉AI、ASR、NLP技术,为用户提供音视…

标准盒模型和怪异盒子模型的区别

盒模型描述了一个 HTML 元素所占用的空间,由内容(content)、内边距(padding)、边框(border)和外边距(margin)组成。 可以通过修改元素的box-sizing属性来改变元素的盒模型…