在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

Vivado Xilinx FFT IP核v9.0使用說明

FPGA設(shè)計(jì)論壇 ? 來源:FPGA設(shè)計(jì)論壇 ? 2025-01-08 11:33 ? 次閱讀

一 傅里葉變換FFT

想必大家對傅里葉老人家都不陌生了,網(wǎng)上也有這方面的很多資料。通過FFT將時(shí)域信號轉(zhuǎn)換到頻域,從而對一些在時(shí)域上難以分析的信號在頻域上進(jìn)行處理。在這里,我們需要注意采樣頻率、FFT采樣點(diǎn)數(shù)這兩個(gè)參數(shù)

根據(jù)奈奎斯特采樣定理,采樣頻率需大于信號頻率的兩倍;

FFT采樣點(diǎn)數(shù),代表對信號在頻域的采樣數(shù);

采樣頻率Fs和采樣點(diǎn)數(shù)N決定了信號的頻域分辨力,即分辨力=Fs/N,即N越大,頻域分辨力越好,反之頻域分辨力越差。

二 Xilinx FFT v9.0

1.輸入輸出端口

6d37a12c-ccac-11ef-9310-92fbcf53809c.png


如上圖所示,左側(cè)的端口均為輸入端口,右側(cè)端口均為輸出端口,其中,S_AXIS_DATA為輸入數(shù)據(jù)端口,我們要進(jìn)行FFT的數(shù)據(jù)需要通過這根線輸入給IP核;S_AXIS_CONFIG為輸入配置端口,這個(gè)信號包含了對數(shù)據(jù)進(jìn)行FFT還是IFFT、縮放因子、FFT變換點(diǎn)數(shù)等信息;FFT變換后的數(shù)據(jù)從M_AXIS_DATA端口輸出。這些端口的具體功能可以參見pg109手冊。

2.Vivado中IP核的配置

打開Vivado軟件,我的版本是2018.04

6d4d59d6-ccac-11ef-9310-92fbcf53809c.png


找到FFT IP核后,雙擊,彈出如下對話框:

6d766844-ccac-11ef-9310-92fbcf53809c.png


第二頁implementation

6d93946e-ccac-11ef-9310-92fbcf53809c.png


第三頁

6db45b68-ccac-11ef-9310-92fbcf53809c.png


配置完成后,我們可以點(diǎn)擊左側(cè)的implementation detail選項(xiàng)卡,看到IP核的具體信息:

6ddb2fd6-ccac-11ef-9310-92fbcf53809c.png


其中包含了S_AXIS_DATA_TDATA、S_AXIS_CONFIG_TDATA以及M_AXIS_DATA_TDATA的數(shù)據(jù)格式,我們需要加以關(guān)注:

S_AXIS_DATA_TDATA:共32位,其中低16位為輸入數(shù)據(jù)的實(shí)部,高16位為輸入數(shù)據(jù)的虛部(但在實(shí)際使用中,高16位才是實(shí)部,低16位是虛部,如果有大神明白是咋回事兒,歡迎留言)

S_AXIS_CONFIG_TDATA:最低位第0位,決定對數(shù)據(jù)進(jìn)行FFT還是IFFT,置1時(shí)FFT,清零時(shí)IIFT,由于要進(jìn)行補(bǔ)零操作,因此在最終寫入S_AXIS_CONFIG_TDATA時(shí),除了最低位以外,還要再補(bǔ)七個(gè)零,補(bǔ)到8位

M_AXIS_DATA_TDATA:48位數(shù)據(jù)輸出,低24位為實(shí)部,高24位為虛部

3.軟件仿真

IP核配置完成后,下面開始編寫我們的TestBench文件。
我們通過matlab對F(t) = 200 + 100cos(2pi10t) + 100cos(2pi30t)這個(gè)信號以Fs = 100HZ進(jìn)行采樣,采樣點(diǎn)數(shù)N = 128,采樣完成后,將數(shù)據(jù)轉(zhuǎn)換為16位二進(jìn)制,并存入txt文件中。matlab程序如下:

clear

Fs=100;                         %采樣率1ns一個(gè)點(diǎn)
%t=0:1/Fs:63/Fs;                 %數(shù)據(jù)時(shí)長:64個(gè)采樣周期
N = 128;
n = 1:N;
t = n/Fs;
% 生成測試信號
f1 = 10;                   %
f2 = 30;                     %
s1 = cos(2*pi*f1*t);    
s2 = cos(2*pi*f2*t);
signalN = 2 + s1 + s2 ;
data_before_fft = 100*signalN;  %系數(shù)放大100倍


fp = fopen('D:ynq_Coredata_before_fft.txt','w');
for i = 1:N
   if(data_before_fft(i)>=0)
       temp= dec2bin(data_before_fft(i),16);
   else
       temp= dec2bin(data_before_fft(i)+2^16+1, 16);
   end
    for j=1:16
        fprintf(fp,'%s',temp(j));
    end
    fprintf(fp,'
');
end
fclose(fp);

y = fft(data_before_fft,N);
y = abs(y);
f = n*Fs/N;
plot(f,y);

程序執(zhí)行結(jié)束后,我們可以看到在指定目錄下新建了一個(gè)txt文件,內(nèi)容如下所示:

6e07da40-ccac-11ef-9310-92fbcf53809c.png


由于我們在配置IP核的時(shí)候配置了數(shù)據(jù)位寬為16位,因此我們存入的數(shù)據(jù)也要設(shè)置為16位的。采樣點(diǎn)數(shù)N=128,因此一共有128個(gè)這樣的數(shù)據(jù)。

得到采樣數(shù)據(jù)后,在vivado中新建一個(gè)sim文件:

6e1a33c0-ccac-11ef-9310-92fbcf53809c.png

TB文件代碼如下:

`timescale 1ns / 1ps
module FFT_test2();

reg clk;
reg rst_n;
reg signed [15:0] Time_data_I[127:0];
reg data_finish_flag;

wire              fft_s_config_tready;

reg signed [31:0] fft_s_data_tdata;
reg               fft_s_data_tvalid;
wire              fft_s_data_tready;
reg               fft_s_data_tlast;

wire signed [47:0] fft_m_data_tdata;
wire signed [7:0]  fft_m_data_tuser;
wire               fft_m_data_tvalid;
reg                fft_m_data_tready;
wire               fft_m_data_tlast;

wire          fft_event_frame_started;
wire          fft_event_tlast_unexpected;
wire          fft_event_tlast_missing;
wire          fft_event_status_channel_halt;
wire          fft_event_data_in_channel_halt;
wire          fft_event_data_out_channel_halt;

reg [7:0]     count;

reg signed [23:0] fft_i_out;
reg signed [23:0] fft_q_out;
reg signed [47:0] fft_abs;

initial begin
    clk = 1'b1;
    rst_n = 1'b0;
    fft_m_data_tready = 1'b1;
    $readmemb("D:/Zynq_Core/data_before_fft.txt",Time_data_I);
end

always #5 clk = ~clk;

always @ (posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        fft_s_data_tvalid <= 1'b0;
        fft_s_data_tdata  <= 32'd0;
        fft_s_data_tlast  <= 1'b0;
        data_finish_flag  <= 1'b0;
        count <= 8'd0;
        rst_n = 1'b1;
    end
    else if (fft_s_data_tready) begin 
        if(count == 8'd127) begin
            fft_s_data_tvalid <= 1'b1;
            fft_s_data_tlast  <= 1'b1;
            fft_s_data_tdata  <= {Time_data_I[count],16'd0};
            count <= 8'd0;
            data_finish_flag <= 1'b1;
        end
        else begin
            fft_s_data_tvalid <= 1'b1;
            fft_s_data_tlast  <= 1'b0;
            fft_s_data_tdata  <= {Time_data_I[count],16'd0};   
            count <= count + 1'b1;
        end
    end
    else begin
        fft_s_data_tvalid <= 1'b0;
        fft_s_data_tlast  <= 1'b0;
        fft_s_data_tdata <= fft_s_data_tdata;
    end
end

always @ (posedge clk) begin
    if(fft_m_data_tvalid) begin
        fft_i_out <= fft_m_data_tdata[23:0];
        fft_q_out <= fft_m_data_tdata[47:24];
    end
end

always @ (posedge clk) begin
    fft_abs <= $signed(fft_i_out)* $signed(fft_i_out)+ $signed(fft_q_out)* $signed(fft_q_out);
end


//fft ip核例化
xfft_0 u_fft(
    .aclk(clk),                                                // 時(shí)鐘信號(input)
    .aresetn(rst_n),                                           // 復(fù)位信號,低有效(input)
    .s_axis_config_tdata(8'd1),                                // ip核設(shè)置參數(shù)內(nèi)容,為1時(shí)做FFT運(yùn)算,為0時(shí)做IFFT運(yùn)算(input)
    .s_axis_config_tvalid(1'b1),                               // ip核配置輸入有效,可直接設(shè)置為1(input)
    .s_axis_config_tready(fft_s_config_tready),                // output wire s_axis_config_tready
    //作為接收時(shí)域數(shù)據(jù)時(shí)是從設(shè)備
    .s_axis_data_tdata(fft_s_data_tdata),                      // 把時(shí)域信號往FFT IP核傳輸?shù)臄?shù)據(jù)通道,[31:16]為虛部,[15:0]為實(shí)部(input,主->從)
    .s_axis_data_tvalid(fft_s_data_tvalid),                    // 表示主設(shè)備正在驅(qū)動一個(gè)有效的傳輸(input,主->從)
    .s_axis_data_tready(fft_s_data_tready),                    // 表示從設(shè)備已經(jīng)準(zhǔn)備好接收一次數(shù)據(jù)傳輸(output,從->主),當(dāng)tvalid和tready同時(shí)為高時(shí),啟動數(shù)據(jù)傳輸
    .s_axis_data_tlast(fft_s_data_tlast),                      // 主設(shè)備向從設(shè)備發(fā)送傳輸結(jié)束信號(input,主->從,拉高為結(jié)束)
    //作為發(fā)送頻譜數(shù)據(jù)時(shí)是主設(shè)備
    .m_axis_data_tdata(fft_m_data_tdata),                      // FFT輸出的頻譜數(shù)據(jù),[47:24]對應(yīng)的是虛部數(shù)據(jù),[23:0]對應(yīng)的是實(shí)部數(shù)據(jù)(output,主->從)。
    .m_axis_data_tuser(fft_m_data_tuser),                      // 輸出頻譜的索引(output,主->從),該值*fs/N即為對應(yīng)頻點(diǎn);
    .m_axis_data_tvalid(fft_m_data_tvalid),                    // 表示主設(shè)備正在驅(qū)動一個(gè)有效的傳輸(output,主->從)
    .m_axis_data_tready(fft_m_data_tready),                    // 表示從設(shè)備已經(jīng)準(zhǔn)備好接收一次數(shù)據(jù)傳輸(input,從->主),當(dāng)tvalid和tready同時(shí)為高時(shí),啟動數(shù)據(jù)傳輸
    .m_axis_data_tlast(fft_m_data_tlast),                      // 主設(shè)備向從設(shè)備發(fā)送傳輸結(jié)束信號(output,主->從,拉高為結(jié)束)
    //其他輸出數(shù)據(jù)
    .event_frame_started(fft_event_frame_started),                  // output wire event_frame_started
    .event_tlast_unexpected(fft_event_tlast_unexpected),            // output wire event_tlast_unexpected
    .event_tlast_missing(fft_event_tlast_missing),                  // output wire event_tlast_missing
    .event_status_channel_halt(fft_event_status_channel_halt),      // output wire event_status_channel_halt
    .event_data_in_channel_halt(fft_event_data_in_channel_halt),    // output wire event_data_in_channel_halt
    .event_data_out_channel_halt(fft_event_data_out_channel_halt)   // output wire event_data_out_channel_halt
  );
    
    
endmodule

由于我們設(shè)置程序一直保持正向FFT模式,因此將s_axis_config_tdata始終寫入1即可。

同時(shí)我們還要注意文件讀入函數(shù)readmemb(),這一函數(shù)是以二進(jìn)制格式讀入數(shù)據(jù),而readmemh()是以16進(jìn)制讀入數(shù)據(jù),大家不要搞混了。我就是用readmemh()弄了半天,結(jié)果數(shù)據(jù)一個(gè)也不對,找了半天才發(fā)現(xiàn)那是h不是b…[cry][cry][cry]

4.仿真分析

運(yùn)行仿真后,時(shí)序圖如下所示:

6e28c796-ccac-11ef-9310-92fbcf53809c.png


如圖所示,首先判斷fft_s_data_tready信號是否為高電平,即IP核是否準(zhǔn)備好了接收數(shù)據(jù),當(dāng)檢測到該信號有效后,將fft_s_data_tvalid信號拉高,準(zhǔn)備向IP核寫入數(shù)據(jù),并開啟count計(jì)數(shù)。在fft_s_data_tvalid有效期間內(nèi),讀出指定txt文件中的數(shù)據(jù),并在低16位進(jìn)行補(bǔ)零處理后,按順序?qū)懭氲絝ft_s_data_tdata信號線中。當(dāng)count計(jì)數(shù)到127,即最后一個(gè)數(shù)據(jù)時(shí),將fft_s_data_tlast信號拉高,代表數(shù)據(jù)寫入完成。

可以看到,在數(shù)據(jù)寫入完成后(fft_s_data_tlast出現(xiàn)脈沖),fft_s_data_tready變?yōu)榈碗娖剑瑒t代表IP核此時(shí)變?yōu)槊顟B(tài),不能再繼續(xù)寫入數(shù)據(jù)。

6e4a66e4-ccac-11ef-9310-92fbcf53809c.png


延時(shí)一段時(shí)間后,fft_m_data_tvalid變?yōu)楦唠娖剑韋ft_m_data_tdata中將輸出有效數(shù)據(jù),即128點(diǎn)FFT的計(jì)算結(jié)果。結(jié)果的實(shí)部和虛部分別見上圖中的fft_q_out和fft_i_out。將IP核的計(jì)算結(jié)果與matlab的計(jì)算結(jié)果相對比,發(fā)現(xiàn)實(shí)部數(shù)據(jù)基本正確,虛部數(shù)據(jù)略有偏差。

6e60c0ec-ccac-11ef-9310-92fbcf53809c.png


通過對IP核的計(jì)算結(jié)果進(jìn)行分析,發(fā)現(xiàn)數(shù)據(jù)在第0個(gè)、第14個(gè)和34個(gè)數(shù)據(jù)的位置出現(xiàn)峰值,對應(yīng)0HZ、10HZ和30HZ,正代表著原始信號中的這三個(gè)頻率分量,因此FFT IP核計(jì)算結(jié)果正確無誤。

同時(shí),從仿真中還可以看出,當(dāng)FFT計(jì)算結(jié)果輸出完成后,信號fft_m_data_tlast變?yōu)楦唠娖剑頂?shù)據(jù)輸出結(jié)束,并在延時(shí)一小段時(shí)間后,fft_s_data_tready重新變?yōu)榈碗娖剑鞩P核重新進(jìn)入到空閑狀態(tài)。可以進(jìn)行對IP核下一組數(shù)據(jù)的輸入。

原文鏈接:

https://gitcode.csdn.net/6628ae7c9c80ea0d22719dd0.html

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

    關(guān)注

    71

    文章

    2168

    瀏覽量

    121671
  • IP
    IP
    +關(guān)注

    關(guān)注

    5

    文章

    1712

    瀏覽量

    149653
  • FFT
    FFT
    +關(guān)注

    關(guān)注

    15

    文章

    436

    瀏覽量

    59411
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    813

    瀏覽量

    66657

原文標(biāo)題:Vivado Xilinx FFT IP核v9.0 使用詳解

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    關(guān)于altera FFT IP matlab 仿真問題請教

    本帖最后由 Laputa_fly 于 2013-11-23 13:46 編輯 用quartus9.0調(diào)用了altera FFT IP  生成了modisim 和 matlab 的仿真文件。用modelsim 仿真有結(jié)果。
    發(fā)表于 11-23 13:43

    xilinx FPGA的FFT IP的調(diào)用

    有沒有大神可以提供xilinx FPGA的FFT IP的調(diào)用的verilog 的參考程序,最近在學(xué)習(xí)FFT
    發(fā)表于 12-25 17:05

    DSP Builder V9.0軟件下載

    DSP Builder V9.0安裝程序,使用前請先安裝 Quartus II V9.0軟件。點(diǎn)擊下載
    發(fā)表于 04-22 16:37

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

    基于FPGA的FFT和IFFT IP應(yīng)用實(shí)例AT7_Xilinx開發(fā)板(USB3.0+LVDS)資料共享騰訊鏈接:https://share.weiyun.com/5GQyKKc百度
    發(fā)表于 08-10 14:30

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

    VivadoFFT IP生成的數(shù)據(jù)。 2 Matlab產(chǎn)生測試數(shù)據(jù),繪制cos時(shí)域和頻域波形使用projectzstar_ex67matlab文件夾下的Matlab源碼
    發(fā)表于 01-07 09:33

    fft核心v9.0的數(shù)據(jù)表如何實(shí)現(xiàn)FFT核心

    親愛的大家我已經(jīng)通過fft核心v9.0的數(shù)據(jù)表。我想實(shí)現(xiàn)FFT核心,但我沒有在頂層模塊(VHDL)中找到任何FFT核心的例子。如果有人建議我提供一些文檔或示例,我將感激不盡。這是我第一
    發(fā)表于 05-21 08:19

    Vivadoxilinx_courdic IP怎么使用

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

    基于Xilinx_FPGA_IPFFT算法的設(shè)計(jì)與實(shí)現(xiàn)

    利用FPGA的IP設(shè)計(jì)和實(shí)現(xiàn)FFT算法
    發(fā)表于 05-24 14:14 ?37次下載

    FFT變換的IP的源代碼

    Xilinx FPGA工程例子源碼:FFT變換的IP的源代碼
    發(fā)表于 06-07 11:44 ?10次下載

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

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

    FFT的分析和Xilinx FFT的介紹

    -FS/2~FS/2 提高采樣頻率則可提高量程,卻會(在轉(zhuǎn)換長度不變的情況下)降低分辨率。此時(shí)需要通過增加轉(zhuǎn)換長度的方式增加分辨率,但卻會增加處理時(shí)間。 相關(guān)ipFFT V7.1
    發(fā)表于 02-08 15:15 ?1340次閱讀

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

    大家好,又到了每日學(xué)習(xí)的時(shí)間了,今天咱們來聊一聊vivado 調(diào)用IP。 首先咱們來了解一下vivadoIP
    的頭像 發(fā)表于 05-28 11:42 ?3.7w次閱讀

    ACDSee v9.0 Build 50

    ACDSee v9.0 Build 50(大工電源技術(shù)在線作業(yè)1)-ACDSee v9.0 Build 50;看圖軟件,感謝原創(chuàng)作者!
    發(fā)表于 09-27 15:10 ?13次下載
    ACDSee <b class='flag-5'>v9.0</b> Build 50

    如何進(jìn)行FFT IP配置和設(shè)計(jì)

    Xilinx Vivado設(shè)計(jì)套件中提供的FFT IP為例,簡要說明如何進(jìn)行FFT
    的頭像 發(fā)表于 07-22 10:21 ?2444次閱讀

    VivadoFFT IP的使用教程

    本文介紹了Vidado中FFT IP的使用,具體內(nèi)容為:調(diào)用IP>>配置界面介紹>>IP
    的頭像 發(fā)表于 11-06 09:51 ?1137次閱讀
    <b class='flag-5'>Vivado</b>中<b class='flag-5'>FFT</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>的使用教程
    主站蜘蛛池模板: 人人干天天干| 国产98在线传媒在线视频| 黄色网在线| aaa在线观看视频高清视频| 国内精品久久影视| 在线观看免费黄视频| 欧美性猛交xxxx乱大交中文| 免费h视频在线观看| 亚洲欧美v视色一区二区| 九九热在线精品视频| 亚洲六月丁香六月婷婷花| 天堂网在线最新版官网| 日韩特黄毛片| 久久精品夜色国产| 丁香八月婷婷| 天天干狠狠| 边摸边吃奶边做视频叫床韩剧| 免费观看视频| aaaaa国产毛片| 色婷婷综合在线| 久久婷婷丁香| 亚洲久久久| 国产高清免费在线观看| 一区二区三区www| 亚洲综合激情网| 欧美色图在线视频| 成人午夜性视频欧美成人| 日本美女黄色一级片| 六月丁香啪啪| 亚洲图色视频| 免费观看一级成人毛片| aaaa日本| 国产精品天天看天天爽| 日本一区免费观看| 夜夜嘿视频免费看| 国产精品久久久久久久成人午夜 | www.亚洲综合| 免费网站黄成人影院| avtt香蕉| 亚洲综合啪啪| 久久日精品|