Verilog表示小數 定點小數

2021-09-30 01:54:34 字數 746 閱讀 2435

最近博主搞fpga影象處理,由於用作三維成像那麼精度必不可少啊,但是verilog又不像c等高階語言一樣,我隨便設個double就可以賦值啊啥的,那麼咋辦,定點小數就孕育而生了。當然verilog也可以用浮點數表示,這裡博主就不提及了。

何謂定點小數,顧名思義,就是小數字後的數目固定,即精度固定,這裡假設有乙個16位的變數,我們使它的精度為8位,那麼它的精度是多少呢? 其實就是1/2^8=0.00390625.這裡舉個例子說明

例如有個 reg [15:0] a=16'b0111_1011_1111_0000

我們不管符號位,那麼這個二進位制數是31728,但是它表示的定點小數是31728/2^8=123.9375

那麼這有什麼用呢?例如假設乙個小數b=2.3,我們假設其定點小數字數是5,那麼其定點小數為int(2.3*2^5)=73,其實際表示的小數為73/2^5=2.28125 看到麼,相差無幾,而其精度也有定點位數決定。

那麼我們假設x,x1,x2為實際小數,y1,y2,y3為定點小數,定位精度是n位,有如下關係

y1=y2+y3 <<=>>x1=x2+x3

y1=y2-y3 <<=>>x1=x2-x3

y1=y2/2^n*y3 <<=>>x1=x2*x3

y1=y2*2^n/y3 <<=>>x1=x2/x3

加減比較好理解,乘除為什麼需要移位呢?以乘法為例子

y1=x1*2^n

y2*y3=x2*x3*x^2n                  ==>>y1*2^n=y2*y3 證畢

Verilog基礎知識(定點小數運算)

第一部分 fpga內部計算小數 第二部分 fpga小數乘法 第一部分 fpga內部計算小數 來自 謂定點小數,就是小數點的位置是固定的。我們是要用整數來表示定點小數,由於小數點的位置是固定的,所以就沒有必要儲存它 如果儲存了小數點的位置,那就是浮點數了 既然沒有儲存小數點的位置,那麼計算機當然就不知...

DSP 定點小數運算

許多dsp晶元只支援整數運算,如果現在這些晶元上進行小數運算的話,定點小數運算應該是最佳選擇了,此外即使晶元支援浮點數,定點小數運算也是最佳的速度選擇。在dsp 世界中,由於dsp晶元的限制,經常使用定點小數運算。所謂定點小數,實際上就是用整數來進行小數運算。下面先介紹定點小數的一些理論知識,然後以...

FPGA定點小數運算

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