freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于modelsim的fft算法的設(shè)計學(xué)士學(xué)位論文(編輯修改稿)

2024-07-24 18:05 本頁面
 

【文章內(nèi)容簡介】 =x= Q12 8=x= Q11 16=x= Q10 32=x= Q9 64=x= Q8 128=x= Q7 256=x= Q6 512=x= Q5 1024=x= Q4 2048=x= Q3 4096=x= Q2 8192=x= Q1 16384=x= Q0 32768=x=32767 有限字長效應(yīng)和單片機(jī)、DSP等器件一樣,F(xiàn)PGA也是不能直接處理模擬信號的。模擬信號必須利用A/D轉(zhuǎn)換成數(shù)字信號以后才能利用FPGA處理。由于A/D器件的精度是一定的,所以轉(zhuǎn)換之后的數(shù)值和真實值之間存在著偏差,這就是輸入的量化誤差。當(dāng)利用FPGA實現(xiàn)乘法計算的時候,例如計算兩個N位寬的二進(jìn)制數(shù)的乘積,乘積的結(jié)果一般都會用2N位寬的二進(jìn)制數(shù)表示,這個時候都會將結(jié)果進(jìn)行適當(dāng)?shù)纳嵛惶幚?,否則再進(jìn)行后面的運算的話最終的結(jié)果的數(shù)據(jù)寬度將是難以想象的。進(jìn)行舍位就會自然而然的引入誤差,這種誤差屬于運算量化誤差,也稱為運算噪聲。這些誤差就使得利用FPGA進(jìn)行數(shù)字信號處理的時候會產(chǎn)生有限字長效應(yīng)。為了得到精確結(jié)果,一方面可以選用合適的運算結(jié)構(gòu),盡量減少有限字長效應(yīng),另一方面可以采用合適的字長以降低運算噪聲[3]。 塊浮點數(shù)浮點數(shù)具有很大的動態(tài)范圍,可以非常精確地表示一個數(shù)值。由于在執(zhí)行算術(shù)運算時需要大量的硬件資源,所以浮點數(shù)記數(shù)方法的使用成本很高。塊浮點數(shù)記數(shù)方法廣泛用于信號處理領(lǐng)域,如執(zhí)行FFT變換,它消耗的硬件資源要比浮點數(shù)少得多。在用FPGA實現(xiàn)FFT算法的時候,經(jīng)常會使用塊浮點的方式來進(jìn)行。這一方法的初始輸入數(shù)據(jù)限制為|x(n)|l,計算方式按定點方式進(jìn)行。塊浮點數(shù)可以跟蹤數(shù)值動態(tài)范圍的變化,例如做256點FFT變換,數(shù)據(jù)寬度為16位,動態(tài)范圍是32768~32767,經(jīng)過FFT的第一級運算后,取值范圍是65536~65535。為了保持?jǐn)?shù)據(jù)寬度不變,可以將所有256個點的數(shù)值均除以2,然后寄存器中置入一個“1”,這樣通過增加一位寄存器,達(dá)到了既增加了數(shù)據(jù)的動態(tài)范圍,又未增加數(shù)據(jù)寬度的目的。這種記數(shù)方法就是塊浮點數(shù)記數(shù)方法??偟膩碚f,塊浮點數(shù)具有定點數(shù)的運算速度,同時又有浮點數(shù)的計數(shù)思想,鑒于塊浮點數(shù)的這種優(yōu)點,本課題選擇了塊浮點數(shù)的計數(shù)方式[3]。 3 FFT的算法設(shè)計 FFT處理器的實現(xiàn)框圖本論文主要研究的是32點的按時間抽取的基2FFT算法的FPGA實現(xiàn),同時為了提高運行速度還運用了流水線結(jié)構(gòu),為了兼顧高精度和復(fù)雜度的特點還引入了塊浮點結(jié)構(gòu)?;?FFT模塊設(shè)計主要由6個部分組成:蝶形運算單元、存儲單元、地址生成單元、功能切換單元、塊浮點單元和時序控制單元[4]。 FFT處理器結(jié)構(gòu)框圖:蝶算單元采用DIT方式來完成基2蝶形運算,如果數(shù)據(jù)從雙口RAM1中讀出,則計算結(jié)果存入雙口RAM2中,反之亦然;存儲單元主要用來存儲輸入數(shù)據(jù)、中間結(jié)果(RAM),預(yù)置旋轉(zhuǎn)因子(ROM),以及最后的計算結(jié)果(RAM);地址產(chǎn)生單元產(chǎn)生RAM的讀、寫地址和ROM的讀地址;功能切換單元用來完成RAM1和RAM2間數(shù)據(jù)讀寫功能的切換;塊浮點單元記錄蝶算單元輸出數(shù)據(jù)的位信息,并完成蝶算單元輸入數(shù)據(jù)的截位;時序控制單元產(chǎn)生各個模塊的使能、控制信號,使整個流程正常工作。 蝶形運算單元的設(shè)計 給出了遞歸順序型FFT算法結(jié)構(gòu)框圖。這種形式的FFT只有一個蝶形運算單元,蝶形運算按遞歸的方式,根據(jù)蝶形圖從左向右、從上向下先計算第一級的每個蝶形,然后計算第二級、第三級,逐級地循環(huán)運算,直至第N/2 log2N個蝶形,完成N點FFT的全部運算。若執(zhí)行一次蝶形運算的時間為T,則完成N點FFT計算,所需的時間為N/2 log2NT。在實際應(yīng)用中,輸入緩沖單元和輸出緩沖單元可以是同一個存儲單元,完成N點FFT運算最少只需要N個存儲單元來緩存輸入數(shù)據(jù)和中間計算結(jié)果。如果輸入數(shù)據(jù)是連續(xù)的,那么一次N點FFT運算必須在下一組N點輸入數(shù)據(jù)輸入結(jié)束之前完成,這往往需要數(shù)倍于輸入數(shù)據(jù)時鐘的內(nèi)部運算時鐘。這種結(jié)構(gòu)的優(yōu)點是只有一個蝶形運算單元,所占的硬件資源少,結(jié)構(gòu)簡單,穩(wěn)定性能好,缺點是運算速度緩慢,且時序控制較為復(fù)雜。其程序設(shè)計如下。 遞歸順序型FFT結(jié)構(gòu)框圖module cfft32( clk, rst_n, slice_number, normal_re, normal_im, normal_valid, startfft, fft_finish, address_a, dataout_a, address_b, dataout_b, dataout_valid, number)。input clk。 input rst_n。input [4:0] slice_number。 input [15:0] normal_re。input [15:0] normal_im。input normal_valid。input startfft。output fft_finish。output [3:0] address_a。output [13:0] dataout_a。output [3:0] address_b。output [13:0] dataout_b。output dataout_valid。output [3:0] number。wire d_valid。wire [15:0] d_re。wire [15:0] d_im。assign d_valid=normal_valid。assign d_re[15:0]=normal_re[15:0]。assign d_im[15:0]=normal_im[15:0]。reg [4:0] datain_t。 //ram control signal and databus ,address busreg [35:0] dina,dinb。reg wrda,wrdb。reg blka,blkb。reg [4:0] addra,addrb。wire [35:0] douta,doutb。parameter [4:0] st0=0, st1=1, st2=2, st3=3, st4=4, st5=5, st6=6, st7=7, st8=8,st9=9,st10=10,st11=11,st12=12,st13=13。reg [4:0] state。reg cf_address_gen_en。wire [31:0] datain_cf1,datain_cf2。wire [35:0] dataout_cf1,dataout_cf2。//cfft dataout output signalwire [4:0] addr_cf1,addr_cf2。//cfft addresswire blk_cf,rd_ram,wr_ram。//cfft read write and blk_en signalwire finish_butterfly。reg [31:0] datain。reg valid。wire start_cfft。reg datain_wr,datain_blk。wire [3:0] address_w。wire [31:0] twiddle_dataout。wire read_twiddle。wire [15:0] d_im_conj。wire fft_finish。reg dataout_valid。wire last_butterfly。wire [1:0] shift。assign fft_finish=finish_butterfly。assign blk_cf=rd_ramamp。amp。wr_ram。assign d_im_conj[15:0]=d_im[15:0]。assigndatain_cf1[31:0]=(shift[1:0]==0)?{douta[33:18],douta[15:0]}:(shift[1:0]==1)?{douta[34:19],douta[16:1]}:(shift[1:0]==2)?{douta[35:20],douta[17:2]}:3239。b0。assigndatain_cf2[31:0]=(shift[1:0]==0)?{doutb[33:18],doutb[15:0]}:(shift[1:0]==1)?{doutb[34:19],doutb[16:1]}:(shift[1:0]==2)?{doutb[35:20],doutb[17:2]}:3239。b0。wire [24:0] dataout_cf1_t,dataout_cf2_t,dataout_cf1_t2,dataout_cf2_t2。assigndataout_cf1_t[24:0]={dataout_cf1[35],dataout_cf1[35],dataout_cf1[35],dataout_cf1[35],dataout_cf1[35],dataout_cf1[35],dataout_cf1[35],dataout_cf1[35:18]}number[3:0]。assigndataout_cf2_t[24:0]={dataout_cf2[35],dataout_cf2[35],dataout_cf2[35],dataout_cf2[35],dataout_cf2[35],dataout_cf2[35],dataout_cf2[35],dataout_cf2[35:18]}number[3:0]。assign dataout_cf1_t2[24:0]=dataout_cf1_t[24:0]slice_number[4:0]。assign dataout_cf2_t2[24:0]=dataout_cf2_t[24:0]slice_number[4:0]。assign dataout_a[13:0]=(dataout_valid)?{dataout_cf1[35],dataout_cf1_t2[12:0]}:1439。b0。assign dataout_b[13:0]=(dataout_valid)?{dataout_cf2[35],dataout_cf2_t2[12:0]}:1439。b0。assign address_a[3:0]=(dataout_valid)?addra[4:1]:439。b0。assign address_b[3:0]=(dataout_valid)?addrb[4:1]:439。b0。always@(posedge clk or negedge rst_n) //input datain_valid sync。 if(!rst_n) valid=0。 else valid=d_valid。always@(posedge clk or negedge rst_n) //input datain sync。 if(!rst_n) datain[31:0]=0。 else if(d_valid) datain[31:0]={d_re[15:0],d_im_conj[15:0]}。always@(posedge clk or negedge rst_n) //input datain counter。 if(!rst_n) datain_t[4:0]=0。 else if(valid) datain_t[4:0]=datain_t[4:0]+1。always@(posedge clk or negedge rst_n)//write data into the pingpong ram if(!rst_n) begin datain_wr=1。 datain_blk=1。 end else if(d_valid) begin datain_wr=0。 da
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1