因為在普通的fpga晶元裡面,暫存器只可以表示無符號型,不可以表示小數,所以在計算比較精確的數值時,就需要做一些處理,不過在altera在arria 10
中增加了硬核浮點dsp模組,這樣更加適合硬體加速和做一些比較精確的計算。
浮點數和定點數的區別:定點數的小數點是固定的,而浮點數的小數點的位置不確定,舉個例子,定點數 1.1*1.1 = 1.2(定點一位小數),浮點數1.1*1.1
=1.21,浮點數的小數點發生了移動,而定點數捨棄了一位,小數點的位置沒有變。
在verilog裡面,如果用用16位二進位制表達定點小數,最高位就是符號位。我們把小數點之後的n位叫做qn,例如小數點之後有12位叫做q12格式的定點小數
而q0就是我們所說的整數。
q12的最大正數是0111.1111_1111_1111,第乙個0是符號位,後面的數都是1,那麼這個數的十進位制就是0x7fff/2^12=7.99999......,為啥是除2^12呢,因為是
十二位小數,0.1111_1111_1111接近與整數1,這樣看有多少個1.
反過來,乙個實際的數轉換成qn型的定點小數就是就是乘上2^n
舉個例子:
2.1*2.2 = 4.62
先轉換成定點數 2.1 * 2^!2 = 8601.6 = 8602
2.1 * 2^12 = 9011.2 = 9011
定點數相乘 8602*9011 = 77512622
定點數轉實際的數
因為是兩個定點數相乘,所以,小數字變成24位 。整數字變成6位
77512622/2^24=4.62011.....和i結果差距很小
最後記錄有符號數的計算
正數 原碼 = 反碼 = 補碼
負數 反碼 = 原碼的符號位不變,其他位取反
補碼 = 反碼 + 1
舉個例子 : 00110010 + 10000011(負數補碼)=10110101,因為結果是負數的補碼,換算成原碼是11001011,和的絕對值是1001011
浮點數定點化表示
例 12.918進行定點化,11位的位寬帶來的量化誤差是多少?4位用來表示整數,7位用來表示小數。解析度為 1 2 7 0.0078125 0.918 0.0078125 118 118 0.0078125 0.921875 量化誤差 0.921875 0.918 0.003875 0.5 解析度,...
FPGA中浮點數的定點化筆記
fpga中浮點數的定點化筆記 關於基本相關知識參考該部落格 浮點數的定點化 fpga 1.基礎概念 浮點數 簡單來說,就是小數點的位置不是固定的 定點數 簡單來說,小數點的位置是固定的,也就是整數字寬與小數的位寬是固定的 以下部分內容摘自該博文 因為在普通的fpga晶元裡面,暫存器只可以表示無符號型...
浮點數定點化的初步認識
fpga只能處理定點數,alteral stratix 10可以支援硬浮點,如軍方雷達 機器視覺等硬體加速。浮點數 2.918 3.1415986 浮點轉定點 如16位,表示範圍32767 32768 定義小數需求多少位 如12位 整數需求多少位 如3位 最高位為符號位 針對有符號數,1位 對於低1...