基于FPGA的移位寄存器流水線(xiàn)結構FFT處理器設計與實(shí)
對于移位寄存器,在實(shí)現時(shí),各級的前級移位寄存器深度為N/2-1,從本質(zhì)而言,是使運算開(kāi)始的時(shí)鐘上升沿到來(lái)時(shí),數據已經(jīng)出現在碟算模塊輸入線(xiàn)上,而不需要下一個(gè)時(shí)鐘的驅動(dòng)來(lái)移出寄存器,比如第二級移位寄存器的級數為63。這樣,運算周期正好是2的倍數,從而方便使用計數器的各位直接對開(kāi)關(guān)進(jìn)行控制。
同時(shí),計數器還可以用來(lái)產(chǎn)生所需旋轉因子的RAM地址。根據各級蝶形運算所需旋轉因子的規律,可以利用計數器的高位補零來(lái)產(chǎn)生查找表的地址。比如,對于第一級,因為需要在最低位第一次出現1時(shí)提供


控制和地址產(chǎn)生模塊的仿真結果如圖5所示,其中sel代表開(kāi)關(guān)控制,addr代表產(chǎn)生的地址。
3.2 蝶形運算模塊
蝶算模塊由一個(gè)復數加法器,一個(gè)復數減法器和一個(gè)旋轉因子的復數乘法器構成,如圖6所示。
旋轉因子乘法器通常由4次實(shí)數乘法和2次加/減法運算實(shí)現,但因為cos和sin的值可以預先存儲,通過(guò)下面的算法可以簡(jiǎn)化復數乘法器:
(1)存儲如下三個(gè)系數:C,C+S,C-S
(2)計算:E=X-Y和Z=C*E=C*(X-Y)
(3)用R=(C-S)*Y+Z,I=(C+S)*X-Z,
得到需要的結果。
這種算法使用了3次乘法,1次加法和2次減法,但是需要使用存儲3個(gè)表的ROM資源。
設計中數據的輸入為16位復數,所以將旋轉因子cos(2kπ/N),sin(2kπ/N)量化成帶符號數的16位二進(jìn)制數后,存儲到ROM中,由于值域不同,需要注意C+S和C-S的表要比C表多1位精度。
運算后的結果需要除以量化時(shí)乘以的倍數16b011111llllllllll。具體實(shí)現時(shí)由于除法運算在FPGA器件需要消耗較多的資源,設計中采用二進(jìn)制數移位的方法來(lái)實(shí)現除法運算。為了防止數據溢出,設計對輸出結果除以2。圖7為蝶形運算模塊的RTL級結構圖。
評論