版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、信息與通信工程學(xué)院信號(hào)與信息處理綜合實(shí)驗(yàn)報(bào)告(FPGA部分)班級(jí):姓名:學(xué)號(hào):序號(hào):實(shí)驗(yàn)三 用FPGA實(shí)現(xiàn)快速傅里葉變換一、 實(shí)驗(yàn)?zāi)康模?) 掌握Xilinx ISE中IP Core的使用方法;(2) 初步掌握Xilinx 公司的FFT IPCore的使用方法;(3) 比較DSP和FPGA實(shí)現(xiàn)FFT的異同。二、 實(shí)驗(yàn)內(nèi)容(1)按實(shí)驗(yàn)指導(dǎo)書所給出的步驟,用Xilinx IP Core實(shí)現(xiàn)256點(diǎn)的FFT并進(jìn)行仿真和測(cè)試。(2)將所給出的例子改寫為512點(diǎn)的IFFT并進(jìn)行仿真和測(cè)試。 三、實(shí)驗(yàn)過(guò)程說(shuō)明1、 Xilinx FFT IPcore使用說(shuō)明在Xilinx公司的IPCore中,提供兩不同的架
2、構(gòu):Burst I/O架構(gòu)和Streaming I/O流水線架構(gòu)。所謂的Burst I/O是指數(shù)據(jù)的輸入和輸出都是突發(fā)的,即輸入輸出是一段一段的而不是連續(xù)的;所謂的Streaming I/O流水線架構(gòu)則是指輸入數(shù)據(jù)和輸出數(shù)據(jù)都是以一定的頻率連續(xù)不斷地進(jìn)行的。Burst I/O 架構(gòu)下,采用的是時(shí)間抽?。―IT)方法,而 在Streaming I/O流水線架構(gòu)下采用的是頻率抽?。―IF)方法。當(dāng)采用基4分解時(shí),N點(diǎn)FFT共需log4 (N) 級(jí),每一級(jí)包含N/4個(gè)基4的蝶形圖,如果點(diǎn)數(shù)N不是4的冪次,則還需要另外一個(gè)基2的級(jí)。如果采用基2的分解,則共有l(wèi)og2 (N)級(jí),每一級(jí)包含N/2個(gè)基2蝶
3、形。IFFT通過(guò)將對(duì)應(yīng)的FFT的相位因子取共軛實(shí)現(xiàn)。本實(shí)驗(yàn)以Streaming I/O流水線架構(gòu)為例學(xué)習(xí)Xilinx FFT IPcore的使用方法。Streaming I/O流水線架構(gòu)示意圖如下圖所示。這種架構(gòu)將多個(gè)基2的蝶形處理單元排成流水線形式以提供連續(xù)的數(shù)據(jù)處理,每個(gè)處理單元有它自己的存儲(chǔ)單元用于存儲(chǔ)輸入和中間數(shù)據(jù)。數(shù)據(jù)數(shù)據(jù)可以連續(xù)輸入到流水線的前級(jí),經(jīng)過(guò)一段計(jì)算時(shí)延,從輸出端連續(xù)輸出一個(gè)數(shù)據(jù)塊的數(shù)據(jù)。當(dāng)然,這種架構(gòu)也允許在數(shù)據(jù)塊之間添加一段時(shí)間的間隔。在scaled fixed-point模式下,數(shù)據(jù)在每進(jìn)行一對(duì)基2級(jí)之后都會(huì)進(jìn)行一次移位,移位次數(shù)可以事先根據(jù)輸入數(shù)據(jù)范圍確定。除了這
4、種模式外,IP core還提供一種塊浮點(diǎn)模式用于改善性能。輸出數(shù)據(jù)可以以比特逆序輸出,也可以自然序輸出,當(dāng)采用自然序輸出時(shí),需要用到額外的存儲(chǔ)資源。與streaming I/O架構(gòu)不同,Burst I/O以一組蝶形計(jì)算單元完成所有運(yùn)算,其中基4的Burst I/O架構(gòu)示意圖如下圖所示。在這種架構(gòu)下,輸入數(shù)據(jù)分為4塊存儲(chǔ)到RAM中,每計(jì)算一次蝶形運(yùn)算,計(jì)算結(jié)果仍然存儲(chǔ)到這4塊RAM中,直至最后輸出。在這種架構(gòu)下,數(shù)據(jù)不能連續(xù)輸入,整個(gè)IPcore的工作狀態(tài)分為數(shù)據(jù)輸入、處理和輸出等不同的狀態(tài)。顯然,這種架構(gòu)占用資源量明顯少于Streaming I/O結(jié)構(gòu),但是處理數(shù)據(jù)的吞吐量有限。在不同的配置下
5、,IPcore對(duì)外的接口有一些差別,下面僅對(duì)在本實(shí)驗(yàn)中將要用到的部分端口的功能做以下說(shuō)明:端口名位寬方向描述Xn_re可配輸入輸入數(shù)據(jù)實(shí)部,與xn_index對(duì)應(yīng)Xn_im可配輸入輸入數(shù)據(jù)虛部start1輸入啟動(dòng)控制信號(hào),拉高則FFT開始加載數(shù)據(jù),可一直置高,此時(shí)由IP core的狀態(tài)控制加載Fwd_inv1輸入1表示FFT,0表示IFFTScale_sch在不同模式下位寬不同,在Streaming I/O模式下,輸入各級(jí)移位次數(shù)Sclr1輸入同步復(fù)位信號(hào)Clk1輸入工作時(shí)鐘Xk_re可配,scaled模式下同Xn_re輸入輸入數(shù)據(jù)實(shí)部,與xn_index對(duì)應(yīng)Xk_im同上輸入輸入數(shù)據(jù)虛部Xn
6、_index與點(diǎn)數(shù)有關(guān)輸出Xn所對(duì)應(yīng)的序號(hào)Xk_index與點(diǎn)數(shù)有關(guān)輸出Xk所對(duì)應(yīng)的序號(hào)RFD1輸出加載數(shù)據(jù)階段為高Dv1輸出輸出數(shù)據(jù)時(shí)為高2、 實(shí)驗(yàn)步驟(1) 新建工程;(2) 新建FFT IPcore。 命名為fft256,在IP列表中選擇Digital signal processing->transforms->FFTs,選擇7.1版本,點(diǎn)擊Next,然后點(diǎn)擊finish;(3) 在按以下截圖下設(shè)置參數(shù),然后點(diǎn)擊Next(4) 在第2個(gè)頁(yè)面上按下圖設(shè)置,其含義分別為:定點(diǎn)格式;輸入數(shù)據(jù)位寬16比特,相位因子16比特、Scaling選項(xiàng)選擇scaled,截取模式選擇trunc
7、ation、添加同步復(fù)位sclr控制管腳、輸出自然順序,輸入數(shù)據(jù)時(shí)序3 clock cycle offset選項(xiàng)。點(diǎn)擊Next,進(jìn)入第3頁(yè)面(5) 第3頁(yè)面上,選擇Number of Stages using block ram為3,點(diǎn)擊Generate生成IPcore。(6) 新建block RAM IPcore,取名為input_rom_I;(7) 在第2頁(yè)面上選擇單口ROM,其他選項(xiàng)保持不變;(8) 第3頁(yè)面設(shè)置如下圖,注意選擇use ENA pin選項(xiàng);(9)第4頁(yè)面上,選擇下圖中所示的兩個(gè)寄存器選項(xiàng);(10)選擇壓縮包中的input_I.coe作為該ROM的初始化文件;其他選項(xiàng)保持默
8、認(rèn)值,點(diǎn)擊Generate;(11)再按照上述步驟生成一個(gè)ROM,選擇壓縮包中的input_Q.coe文件作為初始化文件;(12)將壓縮包中的fft_top.v,fft_ctrl.v添加到工程中;(13)為fft_top.v編寫測(cè)試文件,可參閱壓縮包中的test_fft.v,注意理解程序中文件輸出部分的功能;(14)對(duì)該設(shè)計(jì)進(jìn)行功能仿真,記錄仿真波形,并分析Streaming I/O架構(gòu)下256點(diǎn)FFT的計(jì)算時(shí)延;(15)使用Chipcope對(duì)該設(shè)計(jì)進(jìn)行在板測(cè)試,觀察xn_index、xn_im、xn_re、xk_im、xk_re、xk_index的相對(duì)時(shí)序關(guān)系,觸發(fā)條件可以xk_index、
9、out_block_index或rd_block_index、xn_index取某一具體數(shù)值開始觸發(fā)采數(shù)操作。(16)去掉cdc文件,在布局布線報(bào)告中找到Device Utilization Summary部分,觀察FFT部分的資源占用情況。(17)比較DSP實(shí)現(xiàn)FFT與FPGA實(shí)現(xiàn)FFT的異同。(18)(擴(kuò)展功能)修改FFT點(diǎn)數(shù)為1024點(diǎn),重新進(jìn)行完成上述流程;(19)(擴(kuò)展功能)將FFT IPcore改為Radix-4 Burst I/O架構(gòu),重新完成上述過(guò)程(注意,此時(shí)需要uload信號(hào),直接在ctrl模塊里置1即可),并對(duì)streaming I/O方式的時(shí)延、吞吐量以及資源占用情況進(jìn)
10、行比較。四、實(shí)驗(yàn)代碼分析程序模塊描述:本次實(shí)驗(yàn)里涉及了三個(gè)程序,第一個(gè)是原始程序,另外兩個(gè)是對(duì)原始程序作簡(jiǎn)單修改后的功能拓展,基本是類似的。以下只對(duì)原始程序作較為詳細(xì)的說(shuō)明,而功能拓展只簡(jiǎn)單說(shuō)明修改的情況。本次實(shí)驗(yàn)主要通過(guò)FPGA IPCore實(shí)現(xiàn)。所謂IP Core就是預(yù)先設(shè)計(jì)好、經(jīng)過(guò)嚴(yán)格測(cè)試和優(yōu)化后的電路功能模塊。它猶如一個(gè)黑盒子,用戶只需要配置好其相關(guān)接口并在頂層文件中將其實(shí)例化即可,但是它本質(zhì)上也是一個(gè)ISE工程文件,存儲(chǔ)在設(shè)計(jì)工程的ipcore_dir目錄下,由于其代碼本身過(guò)于復(fù)雜且本次實(shí)驗(yàn)中基本不涉及,因此下面不作介紹。本次實(shí)驗(yàn)全部采用以下兩種IP核:Fast Fourier Tr
11、ansform(FFT)和Block Memory Generator。1、256點(diǎn)FFT(Streaming I/O):(1)源程序(IP Core):FFT核核名:fft256;架構(gòu):Streaming I/O(流水線);其它參數(shù):工作頻率100MHz,定點(diǎn)格式,輸入數(shù)據(jù)位寬和相位因子位寬均為16比特,需要縮放,向下截取,順序輸出,添加同步復(fù)位sclr控制管腳,輸入數(shù)據(jù)延遲3時(shí)鐘周期等。調(diào)用該IP Core的控制信號(hào)將在介紹頂層文件時(shí)說(shuō)明。存儲(chǔ)器核全稱:Block Memory Generator,可直譯為塊存儲(chǔ)器生成器,可以生成任意大小的存儲(chǔ)器陣列并可以針對(duì)速度或功率對(duì)其進(jìn)行優(yōu)化。本次實(shí)
12、驗(yàn)使用它來(lái)生成存儲(chǔ)器陣列,用于存儲(chǔ)輸入數(shù)據(jù)。由于輸入數(shù)據(jù)(復(fù)數(shù))的實(shí)部和虛部使用兩個(gè)幾乎完全相同的IP核,因此主要介紹實(shí)部使用的核,虛部使用的核若采用不同參數(shù)會(huì)在括號(hào)里注明。核名:input_rom_I(input_rom_Q);存儲(chǔ)器類型:?jiǎn)慰赗OM;讀取數(shù)據(jù)位寬:16位;讀取數(shù)據(jù)深度(個(gè)數(shù)):1024;使用的初始化文件:input_I.coe(input_Q.coe),存儲(chǔ)了1024個(gè)16位數(shù),表示輸入數(shù)據(jù)的實(shí)部(虛部);使用使能管腳。(2)頂層文件(fft_top.v)及控制文件(fft_ctrl.v):重要的組成部分,對(duì)于工程的正確運(yùn)行是必需的,其中頂層文件完成控制信號(hào)的聲明,部分信號(hào)
13、(主要為恒定信號(hào))的賦值,接受來(lái)自控制文件的信號(hào),利用信號(hào)實(shí)例化和調(diào)用所有IP核的任務(wù),而控制信號(hào)則主要根據(jù)系統(tǒng)時(shí)鐘及相關(guān)觸發(fā)條件對(duì)控制信號(hào)及相關(guān)參數(shù)進(jìn)行賦值,并將其結(jié)果返回給頂層文件。這兩個(gè)文件的主要工作都是對(duì)相關(guān)控制信號(hào)進(jìn)行處理,下面介紹這些控制信號(hào)及它們?cè)谙嚓P(guān)文件中是如何被處理的,通過(guò)這些基本就可了解這兩個(gè)文件的內(nèi)容。a. 輸入(控制)信號(hào):這里都是IP核的輸入信號(hào),需要在頂層文件或控制文件中對(duì)其初始化或賦值。FFT核控制(輸入)信號(hào):XN_RE和XN_IM:輸入操作數(shù),分別代表實(shí)部和虛部,位寬為16位,表明實(shí)部和虛部都是16位。頂層文件中還包含32位的XN和XK信號(hào)也用來(lái)表示操作數(shù),高
14、16位表示實(shí)部,低16位表示虛部;START:FFT開始信號(hào),高有效,表明開始輸入數(shù)據(jù)??刂莆募性谝婚_始把它置為1,但對(duì)于Streaming I/O結(jié)構(gòu)而言,任何時(shí)候置1都可以開始數(shù)據(jù)的加載;FWD_INV:指示IP Core是FFT還是IFFT,頂層文件中把它置1表明是FFT運(yùn)算;FWD_INV_WE:FWD_INV端口的使能信號(hào),由于這里自始至終都是進(jìn)行FFT運(yùn)算,因此頂層文件中把它置0表明FWD_INV信號(hào)不再變化;SCALE_SCH:若選擇在數(shù)據(jù)處理中進(jìn)行縮放則需要此信號(hào),流水線結(jié)構(gòu)中,將每個(gè)基2的蝶形處理單元視為一個(gè)階段,每個(gè)階段進(jìn)行一次數(shù)據(jù)的縮減,縮減的比例以此輸入中對(duì)應(yīng)階段的兩
15、比特表示;SCALE_SCH_WE:SCALE_SCH的使能信號(hào),這里同樣置0表示SCALE_SCH不再變化;SCLR:FFT核同步復(fù)位信號(hào),高有效,控制文件中置其為0表明不需要復(fù)位;CLK:輸入時(shí)鐘信號(hào),實(shí)驗(yàn)中由FPGA板產(chǎn)生;XK_RE及XK_IM:輸出的數(shù)據(jù)(補(bǔ)碼形式),兩個(gè)信號(hào)分別代表實(shí)部和虛部,實(shí)驗(yàn)中采用了縮放,因此這兩個(gè)信號(hào)位寬和輸入數(shù)據(jù)是相同的,都是16,輸出的數(shù)據(jù)將存儲(chǔ)在XK中;XN_INDEX:輸入數(shù)據(jù)的下標(biāo),位寬等于以2為底FFT點(diǎn)數(shù)的對(duì)數(shù),對(duì)于256點(diǎn)FFT而言是8位;XK_INDEX:輸出數(shù)據(jù)的下標(biāo),位寬與XN_INDEX相同;存儲(chǔ)器核控制(輸入)信號(hào):本次實(shí)驗(yàn)中僅使用
16、了端口A,下面的信號(hào)都是針對(duì)它的。CLKA:端口A使用的時(shí)鐘信號(hào),這里和CLK是相同的;ENA:端口A的使能信號(hào),啟用相關(guān)讀寫和復(fù)位操作,這里直接使用頂層文件中的RD_EN(讀使能)信號(hào);ADDRA:該信號(hào)把相關(guān)地址賦給A端口以用于讀寫操作,這里直接使用頂層文件中的RD_ADDR信號(hào)(10位);b. 輸出(狀態(tài))信號(hào):這些都是IP核的輸出信號(hào)以表明工作狀態(tài),頂層文件和控制文件不需要對(duì)它們進(jìn)行修改,但在調(diào)用IP核時(shí)仍需要聲明它們,在仿真時(shí)通過(guò)觀察這些信號(hào)的狀態(tài)可以獲得很多有用信息。RFD(Ready for data):FFT核輸出信號(hào),當(dāng)其為高時(shí)表明FFT核正在加載數(shù)據(jù),當(dāng)其由低變高時(shí)表明FF
17、T核已經(jīng)轉(zhuǎn)備好接收數(shù)據(jù);BUSY:FFT核輸出信號(hào),當(dāng)其為高時(shí)表明FFT正在計(jì)算中;DV:FFT核輸出信號(hào),當(dāng)其為高時(shí)表明當(dāng)前輸出端口存在有效數(shù)據(jù);EDONE:FFT核輸出信號(hào),即將完成,在DONE之前一個(gè)周期給出高電平;DONE:FFT核輸出信號(hào),當(dāng)其為高時(shí)表明FFT已經(jīng)計(jì)算完成,但高電平只持續(xù)一個(gè)時(shí)鐘周期;DOUTA:存儲(chǔ)器核輸出信號(hào),返回讀操作中得到的數(shù)據(jù),這里它用來(lái)返回從input_i.coe或input_q.coe文件中的數(shù)據(jù),因此位寬為16,返回的數(shù)據(jù)存儲(chǔ)在XN中;c. 其它信號(hào):這里的信號(hào)和IP核無(wú)關(guān),僅用在控制文件和頂層文件中,用于傳遞參數(shù)或顯示相關(guān)狀態(tài),其中XN和XK信號(hào)前面
18、已有描述,這里不再重復(fù)。RESET:控制文件信號(hào),在頂層文件中為RST,來(lái)源為FPGA板,當(dāng)其為高電平時(shí),塊序號(hào)清零(下面會(huì)介紹),注意FFT核也有一個(gè)控制信號(hào)RESET,但是和這里介紹的無(wú)關(guān),頂層文件實(shí)例化FFT核時(shí)沒(méi)有使用RESET信號(hào);RD_EN:從ROM中讀取數(shù)據(jù)的使能信號(hào),這里直接使用FFT核的RFD信號(hào),即:一旦FFT核已經(jīng)準(zhǔn)備好或正在接收數(shù)據(jù),就讀取新數(shù)據(jù);WR_EN:往RAM里寫數(shù)據(jù)的使能信號(hào),這里直接使用FFT核的DV信號(hào),即:一旦FFT核開始輸出有效數(shù)據(jù),就開始寫入這些數(shù)據(jù);RD_ADDR:讀取數(shù)據(jù)的地址,10位(表示1024個(gè)數(shù)),在這里由2位塊序號(hào)和8位輸入數(shù)據(jù)序號(hào)組成
19、,見(jiàn)下面的相關(guān)說(shuō)明;RD_BLOCK_INDEX:表示數(shù)據(jù)塊的序號(hào),讀操作用,2位,可表示4個(gè)ROM塊,由于輸入數(shù)據(jù)有1024個(gè),而輸入序號(hào)XN_INDEX和XK_INDEX都是8位,最多表示256個(gè)數(shù),因此需要4個(gè)ROM塊來(lái)管理所有輸入數(shù)據(jù),每個(gè)塊存儲(chǔ)256個(gè)數(shù),控制文件中,當(dāng)數(shù)據(jù)序號(hào)達(dá)到255(即已有256個(gè)數(shù)據(jù))時(shí),該信號(hào)加一表明開始啟用下一個(gè)ROM塊,塊序號(hào)(2位)和輸入序號(hào)(8位)共同組成RD_ADDR信號(hào)指示數(shù)據(jù)地址;OUT_BLOCK_INDEX:表示數(shù)據(jù)塊的序號(hào),寫操作用,2位,和RD_BLOCK_INDEX性質(zhì)相同;OUTPUT_RE:輸出數(shù)據(jù)的實(shí)部,16位,直接使用XK的高
20、16位;OUTPUT_IM:輸出數(shù)據(jù)的虛部,16位,直接使用XK的低16位;(3)測(cè)試文件(test_fft.v):該文件對(duì)于工程的正常運(yùn)行不是必需的,它僅用在Modelsim仿真中,也是通過(guò)相關(guān)信號(hào)的處理來(lái)構(gòu)建仿真環(huán)境,以下簡(jiǎn)要介紹它的工作流程(其中所有信號(hào)都將送給頂層文件)。打開(或創(chuàng)建)文件output_data.txt,對(duì)應(yīng)的語(yǔ)句語(yǔ)句為“fp = $fopen("output_data.txt")”;開始置寫使能(WF_en)信號(hào)為高,計(jì)數(shù)器(counter)為0;產(chǎn)生周期為10ns時(shí)鐘信號(hào)CLK,并向頂層文件中輸出,作為系統(tǒng)時(shí)鐘;在每一個(gè)時(shí)鐘的上升沿,若FFT核輸
21、出的DV為高電平(表明數(shù)據(jù)有效),則向文件output_data.txt中寫入輸出的有效數(shù)據(jù),數(shù)據(jù)源自頂層文件的OUTPUT_RE和OUTPUT_IM,將被轉(zhuǎn)換成十進(jìn)制,寫入文件的語(yǔ)句為“$fdisplay(fp, "%d %d", output_re, output_im)”,寫入數(shù)據(jù)的形式為無(wú)符號(hào)十進(jìn)制數(shù),同時(shí)計(jì)數(shù)器值加1;若計(jì)數(shù)器值變?yōu)?023,即已寫入了1024個(gè)數(shù),則置寫使能信號(hào)為低,停止寫入。以上流程結(jié)束后,在Modelsim中顯示波形的同時(shí),工程目錄下將多出一個(gè)output_data.txt文件,存儲(chǔ)了一次 FFT運(yùn)算的結(jié)果。若延長(zhǎng)仿真時(shí)間,則FFT核還會(huì)輸出
22、相同的數(shù)據(jù),但它們將不會(huì)被寫入文件中。2、1024點(diǎn)FFT(Streaming I/O):這是源程序的功能拓展,基本內(nèi)容和源程序是相同的,以下只說(shuō)明需要修改的地方。在FFT核設(shè)置的第一頁(yè),把點(diǎn)數(shù)改成1024,其它設(shè)置無(wú)需改動(dòng),改完后需要重新生成IP核;XN_INDEX和XK_INDEX位寬是以2為底FFT點(diǎn)數(shù)的對(duì)數(shù),因此對(duì)于1024點(diǎn)數(shù)FFT來(lái)說(shuō)應(yīng)從8位改成10位;SCALE_SCH信號(hào)的位寬為2×log2NFFT2,其中NFFT為FFT點(diǎn)數(shù),因此對(duì)于1024點(diǎn)FFT來(lái)說(shuō)應(yīng)改為10位,這里按照XILINX官方說(shuō)明文件(見(jiàn)下面截圖)的內(nèi)容將其改為;(對(duì)于SCALE_SCH的取值,XIL
23、INX官方文件也給出了其它方案,下面給出另一個(gè)截圖,這段敘述給出了SCALE_SCH的意義所在,即每?jī)蓚€(gè)比特對(duì)應(yīng)輸入中某階段即每個(gè)蝶形運(yùn)算的壓縮比例。按照這段內(nèi)容的說(shuō)法,若將SCALE_SCH改成可以完全避免數(shù)據(jù)溢出的情況,但是由于時(shí)間所限我沒(méi)有進(jìn)行測(cè)試。)對(duì)于上面的256點(diǎn)FFT而言,由于XN_INDEX和XK_INDEX都是8位,最多表示256個(gè)數(shù),而輸入的卻有1024個(gè),因此前面需要添加兩位塊序號(hào),使用4塊ROM進(jìn)行管理,而對(duì)于1024點(diǎn)FFT來(lái)說(shuō),XN_INDEX和XK_INDEX都是10位,不需要使用塊序號(hào)進(jìn)行管理,也就是說(shuō)RD_BLOCK_INDEX和OUT_BLOCK_INDEX
24、已經(jīng)沒(méi)有存在的意義,需要去掉或者屏蔽掉它們,按照以下方法即可實(shí)現(xiàn): 把語(yǔ)句“assign rd_addr = rd_block_index, xn_index”改成“assign rd_addr = xn_index”(必要步驟),然后刪掉RD_BLOCK_INDEX和OUT_BLOCK_INDEX的聲明語(yǔ)句和調(diào)用語(yǔ)句(不是必要的步驟)。 3、256點(diǎn)FFT(Radix-4,Burst I/O)這是源程序的功能拓展,基本內(nèi)容和源程序是相同的,以下只說(shuō)明需要修改的地方。在FFT核設(shè)置的第一頁(yè),把類型改成“Radix-4, Burst I/O”,其它設(shè)置無(wú)需改動(dòng),改完后需要重新生成IP核;添加UN
25、LOAD信號(hào)(實(shí)驗(yàn)指導(dǎo)書上把它錯(cuò)打成了“uload”),它僅用在Burst I/O結(jié)構(gòu)的FFT核中,表示將開始輸出處理的結(jié)果,添加的具體方法如下:在頂層文件實(shí)例化FFT核模塊和控制文件模塊加入語(yǔ)句“.unload(unload),”;控制文件中加入語(yǔ)句“assign unload = 1;”,模塊聲明(module fft_ctrl)部分加入“output unload,”,表明該信號(hào)的值將從控制文件傳遞到頂層文件中。以上功能拓展,若要進(jìn)行Chipscope在板調(diào)試,還要對(duì)CDC文件和UCF文件進(jìn)行修改,但我這次只進(jìn)行了Modelsim的仿真,因此無(wú)法給出CDC文件和UCF文件的修改方案。五、
26、實(shí)驗(yàn)結(jié)果分析1. 256點(diǎn)FFT的modelsim仿真:仿真可大致分為4個(gè)階段: 第一階段,模擬實(shí)際系統(tǒng)的初始化,除了打開或創(chuàng)建用于寫入結(jié)果的文件output_data.txt外不進(jìn)行任何操作; 第二階段,系統(tǒng)開始工作,開始會(huì)有一個(gè)短暫的重置時(shí)間(RST信號(hào)為0),這時(shí)清空塊序號(hào)OUT_BLOCK_INDEX和RD_BLOCK_INDEX,這段時(shí)間里RFD信號(hào)也變?yōu)楦弑硎綟FT核已經(jīng)準(zhǔn)備好接收數(shù)據(jù),重置過(guò)后正式開始FFT計(jì)算,這段時(shí)間雖然系統(tǒng)暫時(shí)不會(huì)有任何輸出,但從RD_BLOCK_INDEX的變化上可以看出數(shù)據(jù)已經(jīng)開始加載,每加載256個(gè)輸入數(shù)值該信號(hào)會(huì)加1; 第三階段,開始輸出有效數(shù)據(jù),D
27、V信號(hào)變?yōu)楦?,此時(shí)OUTPUT_RE和OUTPUT_IM開始輸出計(jì)算結(jié)果,由于WF_en信號(hào)為高電平,結(jié)果也被寫入文件中,為確保只寫入一次計(jì)算結(jié)果計(jì)數(shù)器COUNTER也將開始工作,這段時(shí)間里,每輸出256個(gè)數(shù)據(jù),OUT_BLOCK_INDEX信號(hào)都將加1; 第四階段,一次FFT結(jié)果已經(jīng)全部寫入文件,計(jì)數(shù)器值變?yōu)?023,此時(shí)置WF_en為0停止寫入,計(jì)算器也清零停止工作,但是數(shù)據(jù)的加載沒(méi)有結(jié)束,F(xiàn)FT還將重復(fù)輸出前面的結(jié)果,DV信號(hào)仍為高電平,以后無(wú)論怎樣延長(zhǎng)仿真時(shí)間,都將停留在這個(gè)階段,即只輸出FFT結(jié)果但不寫入文件的階段。結(jié)果見(jiàn)下圖:仿真完成后output_data.txt的內(nèi)容,默認(rèn)為按
28、2進(jìn)制顯示,將其改為按無(wú)符號(hào)數(shù)顯示時(shí),可以看到輸出的結(jié)果已經(jīng)寫入到文件中,且寫入形式為無(wú)符號(hào)數(shù)。若將輸出的信號(hào)改為有符號(hào)數(shù),則與老師給的output.txt文件內(nèi)容對(duì)應(yīng),當(dāng)然,這里只是改變了顯示的形式,實(shí)際處理和寫入時(shí)仍按照無(wú)符號(hào)數(shù)進(jìn)行。計(jì)算延時(shí):這段時(shí)間嚴(yán)格來(lái)說(shuō)應(yīng)該是從數(shù)據(jù)開始輸入(加載)到第一個(gè)有效數(shù)據(jù)輸出這段時(shí)間,根據(jù)圖中數(shù)據(jù)可以判斷,延時(shí)為6094737ps。2.256點(diǎn)FFT的Chipscope測(cè)試波形分析:以下先介紹我的Chipscope內(nèi)核定義文件是如何設(shè)置的。Trigger Parameters選項(xiàng)卡里,Trigger Ports設(shè)為1,Trigger Width設(shè)為20,即1
29、個(gè)觸發(fā)源,里面包含20個(gè)觸發(fā)信號(hào),觸發(fā)信號(hào)至少應(yīng)為10個(gè),另外更好的設(shè)置方案是設(shè)置2個(gè)觸發(fā)源,每個(gè)觸發(fā)源設(shè)置10個(gè)信號(hào),具體下面會(huì)說(shuō)明;Capture Parameters選項(xiàng)卡里,去掉Data Same As Trigger選項(xiàng),設(shè)置Data Width為113,即113個(gè)數(shù)據(jù)信號(hào);Net Connections選項(xiàng)卡里,按下設(shè)置信號(hào)連接:Clock Signals里設(shè)置時(shí)鐘源為fft_top模塊下的clk_BUFGP;Trigger Signals里設(shè)置觸發(fā)源為fft_top模塊下的ctrl_inst/out_block_index(2位),ctrl_inst/rd_block_index
30、(2位),xk_index(8位)和xn_index(8位),共20個(gè)觸發(fā)信號(hào)(更好的設(shè)置方案是設(shè)置兩個(gè)觸發(fā)源,一個(gè)觸發(fā)源包含out_block_index和xk_index共10位信號(hào),另一個(gè)包含rd_block_index和xn_index共10位信號(hào),最小的設(shè)置方案是至少設(shè)置以上任何一個(gè)觸發(fā)源,否則采集的數(shù)據(jù)會(huì)不正確);Data Signals共包含113個(gè)信號(hào),分別是fft_top下的output_re(16位)、output_im(16位)、xn_index(8位)和xk_index(8位),fft_inst下的xn_re(16位)、xn_im(16位)、xk_re(16位)、xk_
31、im(16位)和dv信號(hào)(1位)。實(shí)驗(yàn)結(jié)果如下:可以看到圖中數(shù)據(jù)與理論值一致 要獲得圖中的顯示結(jié)果,需把所有數(shù)值按無(wú)符號(hào)數(shù)顯示,另外若output信號(hào)展開后序號(hào)從高到低,需要反轉(zhuǎn)這個(gè)顯示順序,改成序號(hào)從低到高。 如果運(yùn)行正確的話,output信號(hào)輸出的數(shù)據(jù)在output_data.txt可以查找到,若output信號(hào)是按有符號(hào)數(shù)顯示的,則數(shù)據(jù)可以在output.txt中可以查找到,和Modelsim仿真類似,說(shuō)明了Chipscope仿真和Modelsim仿真獲得的計(jì)算結(jié)果是相同的,這里不再給出對(duì)應(yīng)的截圖。要說(shuō)明的是,Chipscope仿真不產(chǎn)生結(jié)果文件,欲比較結(jié)果需要事先執(zhí)行Modelsim仿
32、真。3. 去掉cdc文件,在布局布線報(bào)告中找到Device Utilization Summary部分,觀察FFT部分的資源占用情況:結(jié)果如下:4.1024點(diǎn)FFT的modelsim仿真:結(jié)果如下圖:可以看到波形和256點(diǎn)FFT差不多,數(shù)據(jù)也和理論值相符。可見(jiàn)延時(shí)為21585100ps,可以看到比之前的256點(diǎn)FFT的延時(shí)長(zhǎng)很多。5. 256點(diǎn)FFT(Radix-4,Burst I/O):將FFT IPcore改為Radix-4 Burst I/O架構(gòu),重新完成上述過(guò)程,并對(duì)streaming I/O方式的時(shí)延、吞吐量以及資源占用情況進(jìn)行比較。結(jié)果如下圖:在DV數(shù)據(jù)有效信號(hào)為1前就輸出了四組數(shù)
33、據(jù),這種現(xiàn)象是正常的。在Burst I/O架構(gòu)下,輸入數(shù)據(jù)分為4塊存儲(chǔ)到RAM中,每計(jì)算一次蝶形運(yùn)算,計(jì)算結(jié)果仍然存儲(chǔ)到這4塊RAM中,直至最后輸出。在這種架構(gòu)下,數(shù)據(jù)不能連續(xù)輸入,整個(gè)IPcore的工作狀態(tài)分為數(shù)據(jù)輸入、處理和輸出等不同的狀態(tài)。整個(gè)仿真中,包含了4次把計(jì)算出的臨時(shí)數(shù)據(jù)存儲(chǔ)到RAM又讀出的過(guò)程,才會(huì)出現(xiàn)這種情況。雖然輸出了四組數(shù)據(jù),但FFT核判定這些數(shù)據(jù)都不是有效的,DV信號(hào)保持為0,因此它們也不會(huì)被寫入文件中。如果延長(zhǎng)仿真時(shí)間,這種現(xiàn)象會(huì)一再出現(xiàn)。圖中可以看出延時(shí)大約為6070000左右,和原程序的結(jié)果差不多。一般來(lái)說(shuō),采用基4算法速度應(yīng)該快于基2算法,這里計(jì)算時(shí)間沒(méi)有大幅縮
34、短的原因是采用了Burst I/O結(jié)構(gòu),不能處理連續(xù)數(shù)據(jù),處理時(shí)間較長(zhǎng)。資源占用情況見(jiàn)下表:Device Utilization Summary-Slice Logic UtilizationUsedAvailableUtilizationNote(s)Number of Slice Registers2,57511,44022% Number used as Flip Flops2,575 Number used as Latches0
35、60; Number used as Latch-thrus0 Number used as AND/OR logics0 Number of Slice LUTs1,6275,72028% Number used as logic1,2005,72020% N
36、umber using O6 output only517 Number using O5 output only22 Number using O5 and O6661 Number used as ROM0
37、 Number used as Memory3361,44023% Number used as Dual Port RAM0 Number used as Single Port RAM0
38、0; Number used as Shift Register336 Number using O6 output only53 Number using O5 output only0
39、; Number using O5 and O6283 Number used exclusively as route-thrus91 Number with same-slice register load82
40、0; Number with same-slice carry load9 Number with other load0 Number of occupied Slices6621,43046% Number of LUT Flip Flop pairs used2,002
41、0; Number with an unused Flip Flop872,0024% Number with an unused LUT3752,00218% Number of fully used LUT-FF pairs1,5402,00276% Number of unique control sets29 &
42、#160;Number of slice register sites lost to control set restrictions15011,4401% Number of bonded IOBs3710236% Number of LOCed IOBs223759% Number of RAMB16BWERs2326% Number of RAMB8BWERs5647% Number of BUF
43、IO2/BUFIO2_2CLKs0320% Number of BUFIO2FB/BUFIO2FB_2CLKs0320% Number of BUFG/BUFGMUXs1166% Number used as BUFGs1 Number used as BUFGMUX0 Number of DCM/DCM_CLKGENs040% Number of ILOGIC2/ISERDES2s02000
44、% Number of IODELAY2/IODRP2/IODRP2_MCBs02000% Number of OLOGIC2/OSERDES2s02000% Number of BSCANs040% Number of BUFHs01280% Number of BUFPLLs080% Number of BUFPLL_MCBs040% Number of DSP48A1s121675% Number of ICAPs010% Number of MCBs020% Number of PCILOGICSEs020% Number of PLL_ADVs020% Number of PMVs010% Number of STARTUPs010% Number of SUSPEND_SYNCs010%
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年區(qū)第三期機(jī)關(guān)、事業(yè)單位公開選調(diào)工作人員考試題及答案
- 【+高+中語(yǔ)文】長(zhǎng)征勝利萬(wàn)歲++課件++統(tǒng)編版語(yǔ)文高二選擇性必修上冊(cè)
- 獲獎(jiǎng)?wù)n件教學(xué)課件
- 與銀行簽訂合同模板
- 咸寧合同模板家好
- 銀行貿(mào)易合同模板中文
- 煤矸石合作合同模板
- 供銷欠款合同模板
- 窗戶護(hù)欄安裝合同模板
- 合作石材合同模板
- 近五年高考三視圖匯編
- 治安保衛(wèi)業(yè)務(wù)技能培訓(xùn)
- 晉祠完整分享
- 高一上學(xué)期必修中外歷史綱要上必背知識(shí)點(diǎn)
- 酒店優(yōu)勢(shì)劣勢(shì)分析報(bào)告模板
- 醫(yī)療器械倉(cāng)庫(kù)出入庫(kù)人員審核流程
- 《嬰幼兒的教養(yǎng)》課件
- 身體機(jī)能的測(cè)量與評(píng)價(jià)
- ?;诽胤N作業(yè)人員安全操作高溫液體操作要點(diǎn)
- 《我健康我快樂(lè)》心理健康
- 急診科的現(xiàn)狀與發(fā)展趨勢(shì)
評(píng)論
0/150
提交評(píng)論