FPGA筆記之 FPGA浮點運算的實現

2021-09-28 00:24:53 字數 1940 閱讀 9556

ieee-754標準數值表示包括:浮點數,特殊值(零,無窮大,非標準數值,nan), 單精度、雙精度、單精度擴充套件格式的浮點數。

(1)浮點格式。在ieee-754標準中,所有的浮點數都用二進位制模板表示:

其中,s域表示符號位,e域表示指數,m域表示尾數(對數的一部分或小數)。 對於標準浮點數,預設總是存在1個隱含的引導位「1」。例如,二進位制數1.0011或十進位制數1.1875用ieee-754標準格式表示時其m域的值為0011,在標識格式中不儲存隱含的引導位「1」。對於非標準浮點數,引導位可以是「1」或「0」。對於零,無窮大和nan, m域沒有隱含的引導位「1」或者沒有明確的引導位。

(2)單精度浮點數。單精度浮點數用32位二進位制數表示,其中最高位( bit[31], msb)為符號位,即s域; bit[30:23]為 e域,這8位資料表示指數;最低的23位(bit[22:0], lsb )為m域,用於表示浮點數的小數部分。

(3)雙精度浮點數。雙精度浮點數用64位二進位制數表示,其中最高位( bit[63], msb)為符號位,即s域; bit[62:52]為e域, 這11位表示指數;最低的52位(bit[51:0], lsb)為m域,用於表示浮點數的小數部分。

所以它表示的浮點數y值如下所示

浮點加法運算的實現包括以下幾個步驟符號判斷、: 對階、尾數加減操作、規格化、捨入操作、溢位判斷。具體實現時通常把規格化、捨入操作、溢位判斷作為乙個步驟實現。浮點數的格式顯然可以分為兩部分, 即符號和資料的絕對值。若符號相同則符號不便絕對值相加; 若符號不同則須比較兩絕對值的大小然後兩絕對值作差運算。符號不同時首先判斷和的符號, 顯然若兩浮點數的階不同時和的符號當與階數大的運算元相同; 若階數不同則繼續比較對階操作首先比較兩浮點數的階數大小。然後需要兩數對階。對階的原則是小階對大階,小階對大階的好處是,當小階不同於大階時,只需要移除小階數的尾數部分的低位部分。加法流程圖見下圖

浮點數的乘法運算相對比較簡單,只需要將兩個運算元的符號位進行異或運算,再將階碼部分做和、尾數部分做積即可。同時需要檢查運算元的運算結果是否有溢位問題。乘法流程如下圖:

下圖為altera提供的浮點加法運算ip核設定介面。

ip核設定為64位輸入與輸出、延遲14個時鐘週期輸出結果、選擇速度優化、使能『加、減』動態切換功能。模組功能引腳見下表

模組引腳功能

訊號名稱

訊號方向

說明dataa

i資料輸入符合ieee-754標準

datab

i資料輸入符合ieee-754標準

add_sub

i加減法功能動態切換,高電平執行加操作

clki

系統時鐘

result

o運算輸出

nano

nan異常輸出

overflow

ooverflow異常輸出,

underflow

ounderflow異常輸出

zero

o零輸出

接下來例化加法模組,然後寫乙個tb進行功能**,**結果下圖所示,其中innum1和innum2為兩個加數,outnum為運算結果數。

在fpga中做運算時特別是浮點運算時,相比arm和dsp總是顯得力不從心,但fpga 來實現浮點運算成為具有高速、低成本、開發周期短等優點。並且使用ip核進行開發fpga可以大大縮短演算法在fpga上實現的週期。

本文為筆者學習筆記,筆者經驗不足,能力有限,如有紕漏望即使提出。

FPGA定點運算

1 定點小數運算 所謂定點小數,實際上就是用整數來進行小數運算。以16bit的儲存單位最多可以表示0x0000到0xffff,65536種狀態,如果表示無符號整數的話,就是從0到65535.如果需要表示負數的話,那麼最高位就是符號位,而剩下的15位就可以表示32768種狀態。對於計算機來說,符號並沒...

FPGA學習筆記(一) 初識FPGA

該隨筆中部分內容 自小梅哥 fpga field programmable gate array,現場可程式設計門陣列 正如其名,fpga內部有大量的可程式設計邏輯功能塊,使用verilog hdl 硬體描述語言 實現設計。玩過微控制器的小夥伴剛接觸fpga可能會有點困惑,其實fpga與微控制器最大...

FPGA之axi iic ip學習筆記

今天有空來學習一下xilinx的axi iic ip。下面的鏈結是xilinx官網關於axi iic的資料手冊,大家點一下就可以看了 pg090 axi iic pdf 資料手冊先給我們這個ip的頂層框圖。這個看起來好像不是很複雜,下面咱們一起來學習學習這個ip。在這裡我還沒搞明白sda和scl的 ...