前面的文章我們介紹了關於FFT的硬體實現。關於FFT的逆運算IFFT,其實就是將實現FFT的過程反過來執行就可以了。
在實現過程中要注意很多問題。
同 FFT一樣,效率問題。以2048點為例,根據理論值計算,計算一次2048點的IFFT的時間應為130us。在採用流水線的方式下,實部計算和虛部計算均採用兩塊RAM實現流水線。
結構如上圖。在這種方式下,FPGA的片上RAM會消耗很多。
為了節省RAM,可以採用一塊RAM的流水線方式。在實現過程中要注意對RAM操作的reading-during-write,之前的文章介紹過了。這種方式速度會降低一半。
最節省的方式是使用控制器方式,但速度更低。這裡不再介紹。
上圖所示的IFFT流程,存在大量的組合邏輯,時序遠遠不夠,所以應當在組合邏輯中加入寄存器提高速度。但是,寄存器流水線的級數又影響到了讀寫兩塊RAM的切換,從而影響計算效率,所以這裡值得商榷。
由於設計中RAM輸出端沒有使用REG,所以1處應該加入REG,提高速度,否則1處會出現時序違規,1處的組合邏輯延遲很大。
2處和3處也是值得深入考慮的地方,加法器的輸出到乘法器的輸入,以及乘法器的輸出再到加法器的輸入,均是大量的組合邏輯,設計中一定要注意,不能僅僅完成功能仿真就可以了,一定要在綜合工具下綜合一下,看看時序是否滿足。實踐中,這兩處均加入REG。
4處是否再加REG需要看綜合後的結果。根據實際分析,4處加REG會降低計算效率,讀RAM和寫RAM來不及切換,這是根據自己的設計得出的結果。
由於FFT計算過程用到乘法器,所以在IFFT中需要用到除法器。如何減少除法器使用的資源或者將除法器更改為其他邏輯實現,需要深入探討。
版權所有權歸 卿萃科技,轉載請註明出處
作者:卿萃科技ALIFPGA
原文地址:卿萃科技FPGA極客空間 微信公眾號