基于FPGA的移位寄存器流水線結(jié)構(gòu)FFT處理器設(shè)計(jì)與實(shí)
對(duì)于移位寄存器,在實(shí)現(xiàn)時(shí),各級(jí)的前級(jí)移位寄存器深度為N/2-1,從本質(zhì)而言,是使運(yùn)算開(kāi)始的時(shí)鐘上升沿到來(lái)時(shí),數(shù)據(jù)已經(jīng)出現(xiàn)在碟算模塊輸入線上,而不需要下一個(gè)時(shí)鐘的驅(qū)動(dòng)來(lái)移出寄存器,比如第二級(jí)移位寄存器的級(jí)數(shù)為63。這樣,運(yùn)算周期正好是2的倍數(shù),從而方便使用計(jì)數(shù)器的各位直接對(duì)開(kāi)關(guān)進(jìn)行控制。
同時(shí),計(jì)數(shù)器還可以用來(lái)產(chǎn)生所需旋轉(zhuǎn)因子的RAM地址。根據(jù)各級(jí)蝶形運(yùn)算所需旋轉(zhuǎn)因子的規(guī)律,可以利用計(jì)數(shù)器的高位補(bǔ)零來(lái)產(chǎn)生查找表的地址。比如,對(duì)于第一級(jí),因?yàn)樾枰谧畹臀坏谝淮纬霈F(xiàn)1時(shí)提供,第二次出現(xiàn)1時(shí)提供,…,以此類(lèi)推,周期為128,所以可以使用計(jì)數(shù)器的低七位作為地址。對(duì)于第二級(jí),由于所需要的地址為偶數(shù),可以由計(jì)數(shù)器的[6:1]和最低位置O產(chǎn)生。表l為8點(diǎn)時(shí)使用三位計(jì)數(shù)器輸出旋轉(zhuǎn)因子的地址情況。本文引用地址:http://www.ex-cimer.com/article/191644.htm
控制和地址產(chǎn)生模塊的仿真結(jié)果如圖5所示,其中sel代表開(kāi)關(guān)控制,addr代表產(chǎn)生的地址。
3.2 蝶形運(yùn)算模塊
蝶算模塊由一個(gè)復(fù)數(shù)加法器,一個(gè)復(fù)數(shù)減法器和一個(gè)旋轉(zhuǎn)因子的復(fù)數(shù)乘法器構(gòu)成,如圖6所示。
旋轉(zhuǎn)因子乘法器通常由4次實(shí)數(shù)乘法和2次加/減法運(yùn)算實(shí)現(xiàn),但因?yàn)閏os和sin的值可以預(yù)先存儲(chǔ),通過(guò)下面的算法可以簡(jiǎn)化復(fù)數(shù)乘法器:
(1)存儲(chǔ)如下三個(gè)系數(shù):C,C+S,C-S
(2)計(jì)算:E=X-Y和Z=C*E=C*(X-Y)
(3)用R=(C-S)*Y+Z,I=(C+S)*X-Z,
得到需要的結(jié)果。
這種算法使用了3次乘法,1次加法和2次減法,但是需要使用存儲(chǔ)3個(gè)表的ROM資源。
設(shè)計(jì)中數(shù)據(jù)的輸入為16位復(fù)數(shù),所以將旋轉(zhuǎn)因子cos(2kπ/N),sin(2kπ/N)量化成帶符號(hào)數(shù)的16位二進(jìn)制數(shù)后,存儲(chǔ)到ROM中,由于值域不同,需要注意C+S和C-S的表要比C表多1位精度。
運(yùn)算后的結(jié)果需要除以量化時(shí)乘以的倍數(shù)16b011111llllllllll。具體實(shí)現(xiàn)時(shí)由于除法運(yùn)算在FPGA器件需要消耗較多的資源,設(shè)計(jì)中采用二進(jìn)制數(shù)移位的方法來(lái)實(shí)現(xiàn)除法運(yùn)算。為了防止數(shù)據(jù)溢出,設(shè)計(jì)對(duì)輸出結(jié)果除以2。圖7為蝶形運(yùn)算模塊的RTL級(jí)結(jié)構(gòu)圖。
評(píng)論