FPGA中的小數運算

2021-10-23 22:12:19 字數 819 閱讀 6118

最近在影象演算法的中間遇到一下小數的運算問題,雖然之前也遇到很多次,但是這次記錄下來。

r = 1.164(y-16) + 1.596(cr-128)

g = 1.164(y-16) - 0.391(cb-128) - 0.813(cr-128)

b = 1.164(y-16) + 2.018(cb-128)

遇到的一些問題是,色彩空間的轉換問題,其中使用到的小數運算。

來看乙個例項   dout = data*1.8  + 32;  在整個算式中需要用到一次小數的乘法

加入quartus2中進行編譯 會發現 在小數乘法這一行會報錯,這說明小數是沒有辦法直接進行乘法的。

解決這個問題的一般思路就是,先對小數進行擴大,計算之後再進行相同倍數的縮小,當然其中避免不了精度的丟失,以及計算效率的問題。

經過上述思路,我們對程式進行簡單的變換,看一下**結果,可以發現 經過3個clk輸出的結果是正確的(有保留)。

綜合出來的rtl如圖所示,為了解決計算中的效率問題,提高整個時鐘的執行速度可以增加pipline進行優化。 

FPGA定點小數運算

謂定點小數,就是小數點的位置是固定的。我們是要用整數來表示定點小數,由於小數點的位置是固定的,所以就沒有必要儲存它 如果儲存了小數點的位置,那就是浮點數了 既然沒有儲存小數點的位置,那麼計算機當然就不知道小數點的位置,所以這個小數點的位置是我們寫程式的人自己需要牢記的。先以10進製為例。如果我們能夠...

FPGA中實現對數運算

fpga中實現對數運算主要有三種方法 1 在外部直接算好對數值,按照數值範圍做個表,存在ram裡,到時候查表。為了減少表深度,提高資源利用率,可以考慮去掉部分低位數值,損失一定的精度。2 使用cordic演算法求解對數。3 log10 x ln x log10 e log10 e 是常數可以手動先計...

FPGA內部計算小數

謂定點小數,就是小數點的位置是固定的。我們是要用整數來表示定點小數,由於小數點的位置是固定的,所以就沒有必要儲存它 如果儲存了小數點的位置,那就是浮點數了 既然沒有儲存小數點的位置,那麼計算機當然就不知道小數點的位置,所以這個小數點的位置是我們寫程式的人自己需要牢記的。先以10進製為例。如果我們能夠...