0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Vivado中FFT IP核的使用教程

Hack電子 ? 來源:Hack電子 ? 2024-11-06 09:51 ? 次閱讀

本文介紹了Vidado中FFT IP核的使用,具體內容為:調用IP核>>配置界面介紹>>IP核端口介紹>>MATLAB生成測試數據>>測試verilogHDL>>TestBench仿真>>結果驗證>>FFT運算。

1、調用IP核

該IP核對應手冊pg109_xfft.pdf,首先按照圖片找到IP核:

e718a622-90a1-11ef-a511-92fbcf53809c.png

e74bfa9a-90a1-11ef-a511-92fbcf53809c.png

2、配置界面介紹

本小節(jié)主要介紹Fast Fourier Transform9.1這個IP核配置界面的一些選項:

第1頁:Configuration

e76f59b8-90a1-11ef-a511-92fbcf53809c.png

圖1

表1 Configuration界面介紹

e7a8e7dc-90a1-11ef-a511-92fbcf53809c.jpg

e7d2a1ee-90a1-11ef-a511-92fbcf53809c.jpg

第2頁:Implementation

e80efa40-90a1-11ef-a511-92fbcf53809c.png

圖2

表2 Implementation界面介紹

e8318f1a-90a1-11ef-a511-92fbcf53809c.jpg

e861dc38-90a1-11ef-a511-92fbcf53809c.jpg

e892b5ce-90a1-11ef-a511-92fbcf53809c.jpg

第3頁:Detailed Implementation

e8cffb8c-90a1-11ef-a511-92fbcf53809c.png

圖3

表3 Detailed Implementation

e901231a-90a1-11ef-a511-92fbcf53809c.jpg

e92e8dfa-90a1-11ef-a511-92fbcf53809c.jpg

3、IP核端口配置

根據上述配置界面的介紹,下面以64點IFFT為例子,總結了使用IP核時所需的端口配置,如表4所示,需要注意的是表4中沒有涉及的部分按照IP核的默認配置即可:

表4 64點IFFT運算IP核的設置表匯總

e94a155c-90a1-11ef-a511-92fbcf53809c.jpg

e97f8692-90a1-11ef-a511-92fbcf53809c.jpg

配置完成之后IP核的端口圖如下:

e9ae0918-90a1-11ef-a511-92fbcf53809c.png

圖4 64點IFFT核端口圖

按照下面圖找到例化原語:

e9dcb204-90a1-11ef-a511-92fbcf53809c.png

圖5

打開.veo后綴的文件找到例化原語:

ea134b5c-90a1-11ef-a511-92fbcf53809c.png

圖6

對例化語句的介紹見表5,其中L表示IFFT/FFT的點數。

表5 例化原語介紹

ea54ed5a-90a1-11ef-a511-92fbcf53809c.jpg

ea8be472-90a1-11ef-a511-92fbcf53809c.jpg

eac688c0-90a1-11ef-a511-92fbcf53809c.jpg

需要說明的是,需要配置的端口有,1)aclk;2)aclken;3)s_axis_config_tdata ;4)s_axis_config_tvalid ;5)s_axis_config_tready;6)s_axis_data_tdata;7)s_axis_data_tvalid;8)s_axis_data_tready;9)m_axis_data_tdata;10)m_axis_data_tuser;11)m_axis_data_tready;12)m_axis_data_tlast

4、MATLAB生成測試數據

本次測試只需要使用TestBench驗證即可,需要生成.txt后綴的文件,產生IFFT核的輸入數據,主要程序為:

%%該.m文件用來生成介紹IFFT核的數據,具體為64點的IFFT16QAM
clear
closeall
clc
rngdefault%產生固定數值的隨機數據
%%基于符號算法的目標距離和速度探測
%%定義基本參數
Ns=1;%符號數
Nc=64;%子載波數
M=16;%調制方式
bit_num=log2(M);%一個碼組中的碼元個數
bit=randi([01],Nc*Ns*bit_num,1);%產生比特
norm=1/sqrt(10);%16qam歸一化因子
%%16qam
bit_convert=(reshape(bit,bit_num,length(bit)/bit_num))';%二進制數據流按照調制的方式分成不同碼元
data_2_to_10=bi2de(bit_convert,'left-msb');%將每四位數據轉換為十進制數
maxtix=reshape(data_2_to_10,Nc,Ns);
bit_mo=norm*qammod(data_2_to_10,M);
a_nm=reshape(bit_mo,Nc,Ns);
%%發(fā)送端IFFT調制
IFFT_OUT=ifft(a_nm,64);
%%數據保存為.txt文件
echo_real=real(a_nm);
echo_imag=imag(a_nm);
echo1_real=quantizer([1611]);
echo1_imag=quantizer([1611]);
fid_echo=fopen('C:Users15865DesktopFFT_IP_core_64pointIFFT_IP_core_64point_exam.txt','wt');
forj=1:Ns
echo2_real=num2bin(echo1_real,echo_real(:,j));
echo2_imag=num2bin(echo1_imag,echo_imag(:,j));
fori=1:Nc
imag_real_echo=[echo2_imag(i,:),echo2_real(i,:)];
fwrite(fid_echo,imag_real_echo);
fprintf(fid_echo,'
');
end
end
fclose(fid_echo);

圖中程序功能是生成了一段包含64個復數數據的數組,并將每個復數數據用16表示實部16位表示虛部共生成32位二進制數,最后將這組數據保存為.txt后綴文件。

5、測試verilog HDL

根據前文的配置編寫一個簡單的測試.v文件測試64點數據的IFFT運行結果,主要程序如下:

`timescale1ns/1ps
moduleIFFT_introduction(
inputclk,
inputrst_n,
inputifft_valid,
input[31:0]data_in,
//inputlast,

outputs_config_tready,
output[31:0]m_data_tdata,
outputs_data_tready,
output[7:0]m_data_tuser,
outputm_data_tvalid,
outputm_data_tlast
);
FFT_IP_core_64pointifft_u0(
.aclk(clk),//inputwireaclk
.aclken(rst_n),//inputwireaclken
.s_axis_config_tdata(8'd0),//inputwire[7:0]s_axis_config_tdata
.s_axis_config_tvalid(1'b1),//inputwires_axis_config_tvalid
.s_axis_config_tready(s_config_tready),//outputwires_axis_config_tready
.s_axis_data_tdata(data_in),//inputwire[31:0]s_axis_data_tdata
.s_axis_data_tvalid(ifft_valid),//inputwires_axis_data_tvalid
.s_axis_data_tready(s_data_tready),//outputwires_axis_data_tready
//.s_axis_data_tlast(s_axis_data_tlast),//inputwires_axis_data_tlast
.m_axis_data_tdata(m_data_tdata),//outputwire[31:0]m_axis_data_tdata
.m_axis_data_tuser(m_data_tuser),//outputwire[7:0]m_axis_data_tuser
.m_axis_data_tvalid(m_data_tvalid),//outputwirem_axis_data_tvalid
.m_axis_data_tready(1'b1),//inputwirem_axis_data_tready
.m_axis_data_tlast(m_data_tlast)//outputwirem_axis_data_tlast
);


wire[15:0]ifft_64point_out_RE,ifft_64point_out_IM;
//assignRE={{4{m_data_tdata[15]}},m_data_tdata[15:4]};//IFFT歸一化處理,除Nfft
//assignIM={{4{m_data_tdata[39]}},m_data_tdata[39:28]};
assignifft_64point_out_IM=m_data_tdata[31:16];//虛部
assignifft_64point_out_RE=m_data_tdata[15:0];//實部

endmodule

這段程序調用了FFT IP核的例化原語,并將部分接口作為函數的輸入和輸出,方便TestBench調用。

6、TestBench仿真

主要程序如下:

`timescale1ns/1ps
moduleifft_tb();
regclk;//系統(tǒng)時鐘
regrst_n;//復位信號,低有效
regifft_valid;//數據有效位,指示輸入數據有效
reg[31:0]data_in;//輸入數據

wires_config_tready;
wire[31:0]m_data_tdata;
wires_data_tready;
wire[7:0]m_data_tuser;
wirem_data_tvalid;
wirem_data_tlast;

IFFT_introductionu0(//例化.v文件
.clk(clk),
.rst_n(rst_n),
.ifft_valid(ifft_valid),
.data_in(data_in),
.s_config_tready(s_config_tready),
.m_data_tdata(m_data_tdata),
.s_data_tready(s_data_tready),
.m_data_tuser(m_data_tuser),
.m_data_tvalid(m_data_tvalid),
.m_data_tlast(m_data_tlast)
);
reg[31:0]mem[63:0];
initialbegin//$readmembVivado內置函數調用.txt文件
$readmemb("C:/Users/15865/Desktop/FFT_IP_core_64point/IFFT_IP_core_64point_exam.txt",mem);
clk=0;
rst_n=0;
#1000;
rst_n=1;
#10_000;
$stop;
end
always#10clk<=~clk;????//50MHz
reg?[6:0]?count;????????
//計數
always@(posedge?clk?or?negedge?rst_n)?begin
????if(!rst_n)?
????????count<='d0;
????else?if(count<='d63)
????????count<=count+1'b1;
????else
????????count<='dz;
end
//?產生信號和數據
always@(posedge?clk?or?negedge?rst_n)?begin
????if(!rst_n)?begin
????????ifft_valid<='d0;
????????data_in<='d0;
????end
????else?if(count>='d0&&count<='d63)?begin
????????????ifft_valid<=1;
????????????data_in<=mem[count];
????end
????else?begin
????????????ifft_valid<=1'b0;
????????????data_in<='d0;
????end
end
endmodule

7、Modelsim結果與MATLAB輸出結果驗證

本節(jié)將驗證Modelsim和MATLAB輸出結果的一致性,并簡單介紹Modelsim輸出結果向MATLAB數據的轉換。

Modelsim 輸出結果如下圖:

eae14a5c-90a1-11ef-a511-92fbcf53809c.png

圖10

由于數據有64個而這里驗證前三個中間三個和后三個的方式驗證Modelsim數據和MATLAB數據正確性:

表6數據驗證

eb31ff60-90a1-11ef-a511-92fbcf53809c.jpg

需要注意的是,Modelsim輸出的結果并不是小數,而是忽略了小數點的整數,要想獲得和MATLAB類似的浮點數,需要我們將輸出結果變換,這里以Modelsim輸出的最后一個數為例(即表6中序號64),可見圖11。

eb640690-90a1-11ef-a511-92fbcf53809c.png

圖11

對于該結果需要我們將輸出結果除以2^(a+ b),a為用以表示小數的位寬數,本文中為11,b為FFT點數的2次冪冪值,本文為6,因此對于每一個Modelsim的輸出結果都需要除以2^17,這里實部-15302/2^17=-0.1167,虛部-23234/2^17=-0.1773。

從表6中數據可以看出,IFFT 核執(zhí)行的運算和MATLAB的運算結果十分接近,驗證成功。

8、FFT運算

與IFFT運算類似,配置不用更改只需將第5小節(jié)程序中,s_axis_config_tdata端口配置改為8’d1即可,其他無需變動。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • FFT
    FFT
    +關注

    關注

    15

    文章

    433

    瀏覽量

    59245
  • 仿真
    +關注

    關注

    50

    文章

    4017

    瀏覽量

    133322
  • 端口
    +關注

    關注

    4

    文章

    944

    瀏覽量

    31977
  • IP核
    +關注

    關注

    4

    文章

    326

    瀏覽量

    49370
  • Vivado
    +關注

    關注

    19

    文章

    804

    瀏覽量

    66202

原文標題:Vivado中的FFT IP核使用

文章出處:【微信號:Hack電子,微信公眾號:Hack電子】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    quartusII FFT ip

    在quartusII,應用fft ip時,variable streaming 模式下的bit-reverse(位翻轉)是什么意思?煩勞詳細幫助新手解釋一下,不甚感激
    發(fā)表于 01-09 10:55

    基于FPGA的FFT和IFFT IP應用實例

    16bit,定點signed(1.15),即最高位符號位,15位小數。同時,繪制出matlabcos時域和頻域的波形如下。 3 Vivado添加配置FFT
    發(fā)表于 08-10 14:30

    玩轉Zynq連載48——[ex67] Vivado FFT和IFFT IP應用實例

    cos時域和頻域的波形如下。 3 Vivado添加配置FFT IPVivado
    發(fā)表于 01-07 09:33

    Vivadoxilinx_courdic IP怎么使用

    Vivadoxilinx_courdic IP(求exp指數函數)使用
    發(fā)表于 03-03 07:35

    vivado有哪幾種常用IP?如何去調用它們

    運算器等)、信號處理(FFT、DFT、DDS等)。IP類似編程的函數庫(例如C語言中的printf()函數),可以直接調用,非常方便,大大加快了開發(fā)速度。今天介紹的是
    發(fā)表于 07-29 06:07

    Vivado生成IP

    vivado生成ip后缺少一大片文件,之前是可以用的,中途卸載過Modelsim,用vivado打開過ISE工程,因為工程很多
    發(fā)表于 04-24 23:42

    Xilinx Vivado的使用詳細介紹(3):使用IP

    IPIP Core) Vivado中有很多IP核可以直接使用,例如數學運算(乘法器、除法器、浮點運算器等)、信號處理(
    發(fā)表于 02-08 13:08 ?2121次閱讀
    Xilinx <b class='flag-5'>Vivado</b>的使用詳細介紹(3):使用<b class='flag-5'>IP</b><b class='flag-5'>核</b>

    了解VivadoIP的原理與應用

    IPIP Core) Vivado中有很多IP核可以直接使用,例如數學運算(乘法器、除法器、浮點運算器等)、信號處理(
    發(fā)表于 11-15 11:19 ?9062次閱讀

    vivado調用IP詳細介紹

    數學運算(乘法器、除法器、浮點運算器等)、信號處理(FFT、DFT、DDS等)。IP類似編程的函數庫(例如C語言中的printf()函數),可以直接調用,非常方便,大大加快了開發(fā)速
    的頭像 發(fā)表于 05-28 11:42 ?3.7w次閱讀

    關于Vivado三種常用IP的調用詳細解析

    vivadoIP,IPIP Core):Vivado
    的頭像 發(fā)表于 04-27 15:45 ?2.4w次閱讀
    關于<b class='flag-5'>Vivado</b>三種常用<b class='flag-5'>IP</b><b class='flag-5'>核</b>的調用詳細解析

    如何進行FFT IP配置和設計

    以Xilinx Vivado設計套件中提供的FFT IP為例,簡要說明如何進行FFT IP配置和設計。
    的頭像 發(fā)表于 07-22 10:21 ?2346次閱讀

    VCS獨立仿真Vivado IP的問題補充

    在仿真Vivado IP時分兩種情況,分為未使用SECURE IP和使用了SECURE IP
    的頭像 發(fā)表于 06-06 14:45 ?1643次閱讀
    VCS獨立仿真<b class='flag-5'>Vivado</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>的問題補充

    一邊學習控制FFT IP,一邊學習AXI4-Stream協(xié)議

    這里做最簡單的設置,打開Vivado,點開IP Catalog,找到FFT IP
    的頭像 發(fā)表于 06-19 14:38 ?1626次閱讀
    一邊學習控制<b class='flag-5'>FFT</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>,一邊學習AXI4-Stream協(xié)議

    如何在Vivado配置FIFO IP

    Vivado IP提供了強大的FIFO生成器,可以通過圖形化配置快速生成FIFO IP。
    的頭像 發(fā)表于 08-07 15:36 ?3919次閱讀
    如何在<b class='flag-5'>Vivado</b><b class='flag-5'>中</b>配置FIFO <b class='flag-5'>IP</b><b class='flag-5'>核</b>

    Vivado IPShared Logic選項配置

    在給Vivado的一些IP進行配置的時候,發(fā)現有Shared Logic這一項,這里以Tri Mode Ethernet MAC IP
    的頭像 發(fā)表于 09-06 17:05 ?1441次閱讀
    <b class='flag-5'>Vivado</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>Shared Logic選項配置