www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > > FPGA開源工作室

1 xilinx FFT IP介紹

Xilinx快速傅立葉變換(FFT IP)內(nèi)核實(shí)現(xiàn)了Cooley-Tukey FFT算法,這是一種計(jì)算有效的方法,用于計(jì)算離散傅立葉變換(DFT)。

1)正向和反向復(fù)數(shù)FFT,運(yùn)行時(shí)間可配置。

2)變換大小N = 2mm = 3 16

3)數(shù)據(jù)采樣精度bx = 8 34

4)相位系數(shù)精度bw = 8 34

5)算術(shù)類型:

°無標(biāo)度(全精度)定點(diǎn)

°定標(biāo)定點(diǎn)

°浮點(diǎn)數(shù)

6)定點(diǎn)或浮點(diǎn)接口

7)蝴蝶后舍入或截?cái)?/span>

8)Block RAM或分布式RAM,用于數(shù)據(jù)和相位因子存儲(chǔ)

9)可選的運(yùn)行時(shí)可配置轉(zhuǎn)換點(diǎn)大小

10)可擴(kuò)展的定點(diǎn)核心的運(yùn)行時(shí)可配置擴(kuò)展時(shí)間表

11)/數(shù)字反轉(zhuǎn)或自然輸出順序

12)用于數(shù)字通信系統(tǒng)的可選循環(huán)前綴插入

13)四種架構(gòu)在內(nèi)核大小和轉(zhuǎn)換時(shí)間之間進(jìn)行權(quán)衡

14)位精確的C模型和用于系統(tǒng)建模的MEX功能可供下載

15)有四種運(yùn)算架構(gòu)可供選擇

.Pipelined Streaming I/O

.Radix-4 Burst I/O

.Radix-2 Burst I/O

.Radix-2 Lite Burst I/O

2 FFT IP接口介紹

1 xilinx FFT IP

1)AXI4-Stream 介紹

AXI4-Stream接口帶來了標(biāo)準(zhǔn)化,并增強(qiáng)了Xilinx IP LogiCORE解決方案的互操作性。除了諸如aclkacclkenaresetn之類的常規(guī)控制信號(hào)以及事件信號(hào)之外,到內(nèi)核的所有輸入和輸出都通過AXI4-Stream通道進(jìn)行傳輸。道始終由TVALIDTDATA以及必填字段和可選字段(如TREADY,TUSERTLAST)組成。TVALIDTREADY一起執(zhí)行握手以傳輸消息,其中有效負(fù)載為TDATATUSERTLAST。內(nèi)核對包含在TDATA字段中的操作數(shù)進(jìn)行運(yùn)算,并將結(jié)果輸出到輸出通道的TDATA字段中。

2 AXI4-Stream時(shí)序圖

2顯示了在AXI4-Stream通道中的數(shù)據(jù)傳輸。TVALID由通道的源(主)端驅(qū)動(dòng),而TREADY由接收器(從屬)驅(qū)動(dòng)。TVALID指示有效負(fù)載字段(TDATA,TUSERTLAST)中的值有效。TREADY表示從機(jī)已準(zhǔn)備好接收數(shù)據(jù)。當(dāng)一個(gè)周期中的TVALIDTREADY均為TRUE時(shí),將發(fā)生傳輸。主機(jī)和從機(jī)分別為下一次傳輸分別設(shè)置TVALIDTREADY。

2s_axis_config_tdata接口介紹

s_axis_config_tdata接口攜帶配置信息CP_LENFWD / INV,NFFTSCALE_SCH

NFFT(變換的點(diǎn)大小)NFFT可以是最大變換的大小或任何較小的點(diǎn)大小。例如,1024點(diǎn)FFT可以計(jì)算點(diǎn)大小1024512、256等。NFFT的值為log2(點(diǎn)大?。T撟侄蝺H在運(yùn)行時(shí)可配置的轉(zhuǎn)換點(diǎn)大小時(shí)出現(xiàn)。

CP_LEN(循環(huán)前綴長度):從轉(zhuǎn)換結(jié)束起,在輸出整個(gè)轉(zhuǎn)換之前,最初作為循環(huán)前綴輸出的樣本數(shù)。CP_LEN可以是小于點(diǎn)大小的從零到一的任何數(shù)字。該字段僅在循環(huán)前綴插入時(shí)出現(xiàn)。

FWD_INV:指示是執(zhí)行前向FFT變換還是逆向FFT變換(IFFT)。當(dāng)FWD_INV = 1時(shí),將計(jì)算前向變換。如果FWD_INV = 0,則計(jì)算逆變換。

SCALE_SCH伸縮時(shí)間表:對于突發(fā)I / O架構(gòu),伸縮時(shí)間表由每個(gè)階段的兩位指定,第一階段的伸縮由兩個(gè)LSB給出??s放比例可以指定為32、10,代表要移位的位數(shù)。N = 1024Radix-4 Burst I / O的示例縮放計(jì)劃是[1 0 2 3 2](從最后階段到第一階段排序)。對于N = 128,Radix-2 Burst I / ORadix-2 Lite Burst I / O,一個(gè)可能的擴(kuò)展時(shí)間表是[1 1 1 1 0 1 2](從最后階段到第一階段排序)。對于流水線I / O架構(gòu),從兩個(gè)LSB開始,每兩對Radix-2級(jí)用兩位指定擴(kuò)展時(shí)間表。例如,N = 256的縮放時(shí)間表可以是[2 2 2 3]。當(dāng)N不是4的冪時(shí),最后一級(jí)的最大位增長為一位。例如,對于N = 512[0 2 2 2 2][1 2 2 2 2]是有效的縮放時(shí)間表,但是[2 2 2 2 2]無效。對于此變換長度,SCALE_SCH的兩個(gè)MSB只能為0001。此字段僅可用于縮放算法(非縮放,塊浮點(diǎn)或單精度浮點(diǎn))。

s_axis_config_tdata接口格式:

1.(可選)NFFT加填充

2.(可選)CP_LEN加填充

3.前轉(zhuǎn)/后轉(zhuǎn)

4.(可選)SCALE_SCH

舉例:

內(nèi)核具有可配置的轉(zhuǎn)換大小,最大大小為128點(diǎn),具有循環(huán)前綴插入和3個(gè)FFT通道。內(nèi)核需要配置為執(zhí)行8點(diǎn)變換,并在通道01上執(zhí)行逆變換,并在通道2上執(zhí)行前向變換。需要4點(diǎn)循環(huán)前綴。這些字段采用表中的值。

這給出了19位的向量長度。由于所有AXI通道必須與字節(jié)邊界對齊,因此需要5個(gè)填充位,從而s_axis_config_tdata的長度為24位。

3)相關(guān)標(biāo)志信號(hào)

3 xilinx FFT IP的仿真測試

FFT的長度選擇8點(diǎn),x輸入序列為x=[1,2,3,4,5,6,7,8];

Matlab驗(yàn)證:

clear allclose allclc x = [1,2,3,4,5,6,7,8];y =fft(x,8);realy=real(y);imagy=imag(y);

Y的實(shí)部輸出為realy=[36,-4,-4,-4,-4,-4,-4,-4];

Y的虛部輸出為imagy=[0,9.6569,4,1.6569,0,-1.6569,-4,-9.6569];

FPGA仿真驗(yàn)證:

1)IP的設(shè)置

2)仿真頂層

`timescale 1ns / 1ps  module tb_fft_top(  ); reg aclk;  reg [7 : 0] s_axis_config_tdata; reg s_axis_config_tvalid;  wire s_axis_config_tready;  wire [31 : 0] s_axis_data_tdata;  reg s_axis_data_tvalid;  wire s_axis_data_tready;  reg s_axis_data_tlast;  wire [31 : 0] m_axis_data_tdata; wire m_axis_data_tvalid;  reg m_axis_data_tready;  wire m_axis_data_tlast; reg [15:0] real_data; reg [15:0] imag_data; wire [15:0] real_dataout; wire [15:0] imag_dataout; reg [9:0]  cnt; assign s_axis_data_tdata={real_data,imag_data}; assign real_dataout = m_axis_data_tdata[31:16]; assign imag_dataout = m_axis_data_tdata[15:0]; initial begin aclk = 0; s_axis_config_tdata=8'b0; s_axis_config_tvalid=1'b0; s_axis_data_tvalid=1'b0; s_axis_data_tlast=1'b0; real_data=16'd0; imag_data=16'd0; cnt = 0; m_axis_data_tready=1'b1; #1000; s_axis_config_tdata=8'b0000_0001; s_axis_config_tvalid=1'b1; #10; s_axis_config_tdata=8'b0000_0000; s_axis_config_tvalid=1'b0; #1000; repeat(8)begin s_axis_data_tvalid=1'b1; real_data=real_data+16'd1; cnt=cnt+1; if(cnt==8) s_axis_data_tlast=1'b1; #10; end s_axis_data_tvalid=1'b0; s_axis_data_tlast=1'b0; real_data=16'd0; #1000; $stop; end always #(5) aclk= ~aclk;fft_top Ufft_top( .aclk(aclk), // input wire aclk .s_axis_config_tdata(s_axis_config_tdata), // input wire [7 : 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_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  );endmodule

3)仿真結(jié)果

Vivado最終的仿真結(jié)果為

Real=[36,-4,-4,-4,-4,-4,-4,-4];

Imag=[0,-10,-4,-2,0,1,4,9];

matlab的計(jì)算結(jié)果相比實(shí)部一樣,除虛部因?yàn)閿?shù)據(jù)位的取舍問題以外,正數(shù)和負(fù)數(shù)部分順序相反。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
關(guān)閉