(學習Verilog)4. FPGA浮點數表示及計算機數值表示規則

介紹了FPGA內部常用的有符號數,符號位,定點小數的表示方法。定點數硬件實現簡單,但表示的範圍有限,且部分的小數運算IP核只支持浮點數運算,因此這裡還需要提到浮點數的相關內容。

通過介紹FPGA浮點數的表示方法和用法,進而講述計算機浮點數的表示規則,這部分涉及數電,微機原理的基礎知識。


浮點數需要提到IEEE754標準,計算機的浮點數表示依照這個標準,以IEEE754的單精度浮點數為例。

IEEE754單精度浮點數為32位,分為符號位,8位的指數部分,23位的尾數部分;

以十進制下的12.5為例,首先12.5非負,所以符號位為0;

12.5轉換為二進制,1100.1,將其科學計數法化(正規化),變成了

(學習Verilog)4. FPGA浮點數表示及計算機數值表示規則

可知道此時2的指數為3,加上預設的偏移值127,得到了130,即1000 0010;這就是指數部分。

(1.1001)去掉整數得到尾數1001,剩餘尾數補0,這就是尾數部分。

所以最終的IEEE754單精度值為 0 1000 0010 1001 0000 0000 0000 0000 000

整合為16進制,為41 48 00 00 。


再以-0.375為例,符號位為1;

0.375轉換為二進制,0.011,科學計數法化(正規化),

(學習Verilog)4. FPGA浮點數表示及計算機數值表示規則

可知2的指數位-2,加上127為125,即0111 1101;

(1.1)去掉整數得到尾數1,剩餘尾數補0

最終為1 0111 1101 1000 0000 0000 0000 0000 000

整合為16進制,為BE C0 00 00。


反過來,通過浮點數的16進製表示,推出相應的10進制數,公式如下:

(學習Verilog)4. FPGA浮點數表示及計算機數值表示規則

s是符號位,決定數據的正負,fration是最後的23位對應的10進制小數,exponent是8位的指數部分,bias是預設的偏移值,32位中為127;

當然,這樣的計算方法沒有辦法表示0,所以做了特殊規定,當exponent為0時,相應的公式變成了這個樣子:

(學習Verilog)4. FPGA浮點數表示及計算機數值表示規則

當fration也為0時,就表示出0了。當exponent為最大值,fration為0,表示正/負無窮大;fration不為0會報NaN,不是一個數。


浮點數加法:

以正數相加為例, 0.3 + 0.7 = ?

  • 0.3 -> 3E 99 99 99
  • 0.7 -> 3F 33 33 33

可以知道,0.3的exponent為125,0.7的exponent為126;兩者的exponent不一致,需要進行移位操作保持一致。這裡移位的原則是小exponent向大exponent保持一致。所以0.3需要向右移動一位,保持exponent一致;

即(1) 0011 0011 0011 0011 0011 001 -> (0) 1001 1001 1001 1001 1001 100

然後進行兩者尾數相加,這部分跟定點數加法規則一致。

(學習Verilog)4. FPGA浮點數表示及計算機數值表示規則

得到結果3f 7f ff ff,轉換為10進製為0.9999999403953552;也就是說在計算機浮點數操作過程中,0.3+0.7不等於1,這也就是為什麼編程裡面浮點數不推薦直接做比較的原因,由於浮點數精度的原因,浮點數做比較更推薦使用與預設值做減法取絕對值,如果差值在一個很小的範圍內,則認為相等。

如果是正負相加,負數需要取補碼進行相加操作,並擴展符號位,觀察結果的正負性;如果結果的整數部分大於1,要進行科學計數法化(正規化)。


浮點數乘法:

  1. 尾數相乘,得到結果,以12.5和-0.375為例,相關的浮點數表示在介紹IEEE754環節已給出;

12.5 ->41 48 00 00 ; -0.375 -> BE C0 00 00

(學習Verilog)4. FPGA浮點數表示及計算機數值表示規則

2. 計算兩者的exponent差值,得到結果1;將1中的結果科學計數法化(正規化),得到最終的exponent為127+1+1=129;

3. 將兩者的符號位做異或計算,得到結果1,所以最終結果的符號位為1;最終結果為C0 96 00 00,轉換為10進制就是-4.6875 。


相對比而言,浮點數能夠表示更寬的數據範圍,但計算過程可能較為複雜,但是明白它的表示規則之後,將定點小數轉換成浮點數也並不難,這樣就可以用到浮點運算的IP核了。

經過各種處理之後的數據,為了平衡數據精度和資源佔用,又需要使用到數據截位,至於如何截位,將在下一篇裡面講到。


分享到:


相關文章: