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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Vivado中FFT IP核的使用教程

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

本文介紹了Vidado中FFT IP核的使用,具體內(nèi)容為:調(diào)用IP核>>配置界面介紹>>IP核端口介紹>>MATLAB生成測試數(shù)據(jù)>>測試verilogHDL>>TestBench仿真>>結(jié)果驗(yàn)證>>FFT運(yùn)算。

1、調(diào)用IP核

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

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

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

2、配置界面介紹

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

第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核端口配置

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

表4 64點(diǎn)IFFT運(yùn)算IP核的設(shè)置表匯總

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

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

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

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

圖4 64點(diǎn)IFFT核端口圖

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

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

圖5

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

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

圖6

對例化語句的介紹見表5,其中L表示IFFT/FFT的點(diǎn)數(shù)。

表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生成測試數(shù)據(jù)

本次測試只需要使用TestBench驗(yàn)證即可,需要生成.txt后綴的文件,產(chǎn)生IFFT核的輸入數(shù)據(jù),主要程序?yàn)椋?/p>

%%該.m文件用來生成介紹IFFT核的數(shù)據(jù),具體為64點(diǎn)的IFFT16QAM
clear
closeall
clc
rngdefault%產(chǎn)生固定數(shù)值的隨機(jī)數(shù)據(jù)
%%基于符號算法的目標(biāo)距離和速度探測
%%定義基本參數(shù)
Ns=1;%符號數(shù)
Nc=64;%子載波數(shù)
M=16;%調(diào)制方式
bit_num=log2(M);%一個碼組中的碼元個數(shù)
bit=randi([01],Nc*Ns*bit_num,1);%產(chǎn)生比特
norm=1/sqrt(10);%16qam歸一化因子
%%16qam
bit_convert=(reshape(bit,bit_num,length(bit)/bit_num))';%二進(jìn)制數(shù)據(jù)流按照調(diào)制的方式分成不同碼元
data_2_to_10=bi2de(bit_convert,'left-msb');%將每四位數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制數(shù)
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調(diào)制
IFFT_OUT=ifft(a_nm,64);
%%數(shù)據(jù)保存為.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個復(fù)數(shù)數(shù)據(jù)的數(shù)組,并將每個復(fù)數(shù)數(shù)據(jù)用16表示實(shí)部16位表示虛部共生成32位二進(jìn)制數(shù),最后將這組數(shù)據(jù)保存為.txt后綴文件。

5、測試verilog HDL

根據(jù)前文的配置編寫一個簡單的測試.v文件測試64點(diǎn)數(shù)據(jù)的IFFT運(yùn)行結(jié)果,主要程序如下:

`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];//實(shí)部

endmodule

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

6、TestBench仿真

主要程序如下:

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

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內(nèi)置函數(shù)調(diào)用.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;????????
//計數(shù)
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
//?產(chǎn)生信號和數(shù)據(jù)
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結(jié)果與MATLAB輸出結(jié)果驗(yàn)證

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

Modelsim 輸出結(jié)果如下圖:

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

圖10

由于數(shù)據(jù)有64個而這里驗(yàn)證前三個中間三個和后三個的方式驗(yàn)證Modelsim數(shù)據(jù)和MATLAB數(shù)據(jù)正確性:

表6數(shù)據(jù)驗(yàn)證

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

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

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

圖11

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

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

8、FFT運(yùn)算

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

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

    關(guān)注

    15

    文章

    434

    瀏覽量

    59379
  • 仿真
    +關(guān)注

    關(guān)注

    50

    文章

    4082

    瀏覽量

    133596
  • 端口
    +關(guān)注

    關(guān)注

    4

    文章

    964

    瀏覽量

    32077
  • IP核
    +關(guān)注

    關(guān)注

    4

    文章

    327

    瀏覽量

    49497
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    812

    瀏覽量

    66523

原文標(biāo)題:Vivado中的FFT IP核使用

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

收藏 人收藏

    評論

    相關(guān)推薦

    quartusII FFT ip

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

    基于FPGA的FFT和IFFT IP應(yīng)用實(shí)例

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

    玩轉(zhuǎn)Zynq連載21——VivadoIP的移植

    `玩轉(zhuǎn)Zynq連載21——VivadoIP的移植更多資料共享騰訊微云鏈接:https://share.weiyun.com/5s6bA0s百度網(wǎng)盤鏈接:https://pan.ba
    發(fā)表于 09-04 10:06

    玩轉(zhuǎn)Zynq連載48——[ex67] Vivado FFT和IFFT IP應(yīng)用實(shí)例

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

    Vivadoxilinx_courdic IP怎么使用

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

    vivado有哪幾種常用IP?如何去調(diào)用它們

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

    Vivado生成IP

    vivado生成ip后缺少一大片文件,之前是可以用的,中途卸載過Modelsim,用vivado打開過ISE工程,因?yàn)楣こ?b class='flag-5'>中很多
    發(fā)表于 04-24 23:42

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

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

    了解VivadoIP的原理與應(yīng)用

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

    vivado調(diào)用IP詳細(xì)介紹

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

    關(guān)于Vivado三種常用IP的調(diào)用詳細(xì)解析

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

    VCS獨(dú)立仿真Vivado IP的問題補(bǔ)充

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

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

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

    如何在Vivado配置FIFO IP

    Vivado IP提供了強(qiáng)大的FIFO生成器,可以通過圖形化配置快速生成FIFO IP。
    的頭像 發(fā)表于 08-07 15:36 ?4345次閱讀
    如何在<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選項(xiàng)配置

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