IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Xilinx FFT IP核的使用 -> 正文阅读

[网络协议]Xilinx FFT IP核的使用

说明:通过对比Matlab实践来运用Xilinx FFT IP核实现复数的FFT。
代码下载:Xilinx FFT IP核 Verilog代码实现
工程下载:FFT工程


一、Fast Fourier Transform IP核介绍

在这里插入图片描述
IP核主要端口介绍:

名称方向说明
aclk输入模块工作时钟,上升沿有效
aclken输入时钟使能信号,高电平有效,低电平时内核暂停工作,可通过此信号降低内核运行的最大时钟频率
aresetn输入低电平同步复位信号,优先级高于aclken,低电平至少持续两个时钟周期
配置:
s_axis_config_tvalid输入配置通道的 tvalid,由外部主机断言以表示它能够提供数据
s_axis_config_tready输出配置通道的 tready,由内核断言以表示它已准备好接收数据
s_axis_config_tdata输入配置通道的tdata,携带配置信息,NFFT、FWD/INV、CP_LEN和SCALE_SCH
输入数据:
s_axis_data_tvalid输入输入数据通道tvalid,由外部主机断言以表示它能够提供数据
s_axis_data_tready输出输入数据通道tready,由内核断言以表示它能够接收数据
s_axis_data_tdata输入输入数据通道tdara,由外部主机提供待处理的数据
s_axis_data_tlast输入输入数据通道tdara,由外部主机断言表示最后一组数据。
只在生成事件event_tlast_unexpected 和 event_tlast_missing时,内核才使用它
输出数据:
m_axis_data_tvalid输出输出数据通道tvalid,由内核断言表示它能够提供数据
m_axis_data_tready输入输出数据通道tready,由外部丛机断言表示它能够接收数据
m_axis_data_tdata输出输出数据通道tdata,由内核提供FFT后的数据
m_axis_data_tuser输出输出数据通道tuser,由内核提供XK_INDEX,OVFLO,BLK_EXP信息
m_axis_data_tlast输出数据数据通道tlast,由内核断言表示最后一个输出数据

s_axis_data_tdata 输入数据格式:
根据你的配置比如1024个点,每个点为32bit,高16bit为虚部,低16bit为实部。

在这里插入图片描述
s_axis_config_tdata 配置数据格式: :
在这里插入图片描述
m_axis_data_tdata 输出数据格式: :

根据你的配置比如1024个点,每个点为32bit,高16bit为虚部,低16bit为实部。
在这里插入图片描述

IP核配置
在这里插入图片描述
①:通道数,1~12。
②:变换点数,8~65536。
③:工作时钟频率,1~1000。
④:数据比特率。
⑤:根据时钟频率与比特率自动选择。
⑥:流水线IO,允许连续数据处理,仅当使用单通道时,流水线IO可选。
⑦:碟4,突发IO,使用迭代方法分别加载和处理数据。它的资源消耗比流水线架构小,但转换时间更长
一点不同:蝶4架构的变换点数为64 ~ 65536,其它架构点数为 8 ~ 65536。
⑧:碟2,突发IO,使用与 Radix-4 相同的迭代方法,但蝶形运算单元更小。
它的资源消耗比 Radix-4 架构的尺寸更小,但转换时间更长。
⑨:碟2 -Lite,突发IO,基于 Radix-2 架构,此变体使用分时复用方法实现蝶形运算单元,
以实现更少的资源消耗,但代价是转换时间更长。
⑩:运行期间可配置变换点数。

四种FFT架构的资源消耗与吞吐量的关系:
在这里插入图片描述

在这里插入图片描述
①:数据格式,定点、浮点。
②:缩放选项,。
③:数据省入模式。
④:输入数据宽度。
⑤:相位因子宽度。
⑥:输出位序。
⑦:输出序号。
⑧:数据溢出标志。

在这里插入图片描述
①:数据。
②:相位因子。
③:重排序缓冲。
④:复数乘法器。
⑤:蝶形运算单元。

二、FFT IP核的使用

1、1KHz采样率、1024点FFT

Matlab产生原实信号 s,将1024点的数据写入FPGA的ROM
采样率为1000Hz,信号为100Hz、200Hz、300Hz叠加,FFT点数为1024。

clc
clear all;
row=3;
column=1;
N=1024;
fs=1000;                    %采样间隔为1/1000
t=(1:1024)/fs;               %时间轴
f0=100;                     %载频频率
f1=200;                     %载频频率
f2=300;                     %载频频率
y1=100*exp(1i*2*pi*f0*t);   
y2=100*exp(1i*2*pi*f1*t);
y3=100*exp(1i*2*pi*f2*t);
y=y1+y2+y3;                 %信号产生
real_y = int32(real(y));    %实部
imag_y = int32(imag(y));    %虚部
a=[real_y;imag_y];
s = int32(bitshift(imag_y,16)+real_y);%将实部和虚部拼接为32bit(实部16bit+虚部16bit)
s = s';                     %此数据输出到FPGA

%绘制原信号
subplot(row,column,1);
plot(t,y);
title("时域");
xlabel('t');
ylabel('y');
grid on;
%FFT
f=(0:N-1)*(fs/N);
fft_y=fft(y,N);             %FFT
abs_fft_y=abs(fft(y,N));    %FFT取绝对值

subplot(row,column,2);      %FFT波形
plot(f,fft_y);
title("FFT");
xlabel('t');
ylabel('y');
grid on;

subplot(row,column,3);      %FFT取绝对值波形
plot(f,abs_fft_y);
title("FFT取绝对值");
xlabel('t');
ylabel('y');
grid on;

在这里插入图片描述

数据通过coe文件写入ROM:
在这里插入图片描述

FPGA端IP核的配置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将时域数据写入ROM,通过FFT IP核后得到以下结果:

结果展现:
FPGA FFT波形
在这里插入图片描述

采样率为1000Hz,1024个点。

观察下图中f变量(可以表示频率的横轴),三个峰值对应的频率为100Hz,200Hz,300Hz。
在这里插入图片描述
Verilog代码:
Xilinx FFT IP核 Verilog代码实现

2、2.5GHz采样率、8192点FFT

Matlab产生原实信号 s,将8192点的数据写入FPGA的ROM

采样率为2.5GHz,信号为100Hz、350Hz、500Hz叠加,FFT点数为1024。

clc
clear all;
close all;
row=3;
column=1;
N=8192;
fs=2.5e9;                    %采样间隔为1/1000
t=(1:N)/fs;               %时间轴
f0=100e6;                     %载频频率
f1=350e6;                     %载频频率
f2=500e6;                     %载频频率
y1=20*exp(1i*2*pi*f0*t);   
y2=20*exp(1i*2*pi*f1*t);
y3=20*exp(1i*2*pi*f2*t);
y=y1+y2+y3;                 %信号产生
real_y = int32(real(y));    %实部
imag_y = int32(imag(y));    %虚部
a=[real_y;imag_y];
s = int32(bitshift(imag_y,16)+real_y);%将实部和虚部拼接为32bit(实部16bit+虚部16bit)
s = s';                     %此数据输出到FPGA

%绘制原信号
subplot(row,column,1);
plot(t,y);
title("时域");
xlabel('t');
ylabel('y');
grid on;
%FFT
f=(0:N-1)*(fs/N);
fft_y=fft(y,N);             %FFT
abs_fft_y=abs(fft(y,N));    %FFT取绝对值

subplot(row,column,2);      %FFT波形
plot(f,fft_y);
title("FFT");
xlabel('t');
ylabel('y');
grid on;

subplot(row,column,3);      %FFT取绝对值波形
plot(f,abs_fft_y);
title("FFT取绝对值");
xlabel('t');
ylabel('y');
grid on;

在这里插入图片描述
将时域数据写入ROM,通过FFT IP核后得到以下结果:

结果展示:
在这里插入图片描述

观察图中f变量(可以表示频率的横轴),三个峰值对应的频率为100Hz,350Hz,500Hz。
在这里插入图片描述
Verilog代码:
Xilinx FFT IP核 Verilog代码实现

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-21 12:46:40  更:2021-10-21 12:47:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/3 11:50:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码