單精度浮點乘累加運算的FPGA流水線邏輯實現分析

       在利用FPGA進行卷積運算時會大量用到乘累加單元,如果用定點的方式則邏輯實現相對簡單,原因是定點的加法運算是利用組合邏輯電路來實現的沒有時鐘延遲,這就使得加法器的輸出在下一個時鐘採樣沿到來時立即反饋到輸入端,從而可以連續的相加並最終得到累加結果。這是定點實現的優勢,但是對於精度要求較高的場合,定點的方式顯然不能滿足要求,所以採用浮點的方式是必須的。而我們知道浮點的乘法邏輯和加法邏輯輸出都是有時鐘延遲的,對於乘法邏輯有延遲倒也無所謂,可以採用流水線的方式連續的輸出不會因此而降低速度,但是對於乘法邏輯由於其輸出要反饋到輸入,所以按照常規的方法,我們需要在送入數據後等上若干個時鐘週期等到結果出來後再反饋到輸入端進行累加運算。這樣做帶來的問題是計算的速度會大大降低。例如Altera自帶的浮點加法IP核輸出最快也要經過6個時鐘週期纔會有輸出,如果採用此浮點的IP覈計算,主時鐘爲100MHz,那麼累加運算輸出的速率會下降到100/7MHz,對於需要快速處理的場合,這樣顯然是不能滿足要求的。

爲了解決上述問題,有兩種方式可以解決。1:自己編寫浮點加法邏輯使輸出時鐘延遲儘可能的降低,在筆者的博客《單精度浮點數加法器FPGA實現---(同號相加)》和《單精度浮點數加法器FPGA實現---(異號相加)》給出了浮點加法的實現邏輯,可以實現2個時鐘的延遲就給出結果。2:將輸出以主時鐘速度反饋到輸入進行計算,等輸入數據結束後再對輸出的結果再進行處理,最終也會得到正確的結果,需要的時鐘數相對於定點的方式不會增加太多。

下面筆者將以輸入延遲爲2的浮點加法器來解釋方式2的工作原理,這裏假設輸入數據長度爲64。那麼工作流程如下圖所示:

可見在第71個時鐘週期時會輸出最終的求和結果,只比定點的方式多了7個時鐘週期,而且7個時鐘軸的長度和輸入數據長度沒有關係,只和加法器輸出的延遲有關,當輸入的數據越長,速度降低就越少。利用上述方法可以最終實現和定點方式一樣的速度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章