FPGA定點小數計算(Verilog版)第三篇——除法運算(一)
更多精彩內容,請微信搜尋“FPGAer俱樂部”關注我們。
定點小數除法運算,相比加法和乘法來說要複雜很多了,但是演算法的基本思想還是很簡單的。和整數除法類似,演算法的核心思想就是,將除法運算轉換為移位和減法運算。從具體實現的角度來看,一般有兩種方式:
-
一種是除數不變,擴充套件並移位操作被除數
-
另一種是被除數不變,擴充套件並移位操作除數
本文采用的是第一種方法:
假設被除數與除數都是八位資料,這裡的演算法是:
將被除數,擴充套件成16位的資料,低8位為被除數的值,高八位的值全為0。有開始訊號,對16位資料data賦值,然後開始運算。比較data的高八位和除數的值,如果大於0,說明被除數大,將此時商置1,賦值給data的最低位,然後將被除數高八位減去除數。然後將data向左移位一位,繼續比較。最終計算8次後。Data的高8位資料就為所求的餘數,低八位就為所求的商。
原理說白了就是:先移位,在比較(作差),迭代八次……
重要說明:本演算法只支援正數,整數除法,需提前指定被除數和除數位數,且除數和被除數位數需相等。(改進的演算法會在後期和大家分享)
ChinaAET的程式碼語言功能太low,而且還不支援VerilogHDL,所以程式碼就直接貼圖了:
下面是Testbench:
以及ActiveHDL的指令碼檔案:
模擬結果如下:
使用Synplify Pro綜合並Map之後得到(Diamond中,MachXO3 6900C):
Design Summary
Number of registers: 42 out of 7485 (1%)
PFU registers: 42 out of 6864 (1%)
PIO registers: 0 out of 621 (0%)
Number of SLICEs: 32 out of 3432 (1%)
SLICEs as Logic/ROM: 32 out of 3432 (1%)
SLICEs as RAM: 0 out of 2574 (0%)
SLICEs as Carry: 15 out of 3432 (0%)
Number of LUT4s: 63 out of 6864 (1%)
Number used as logic LUTs: 33
Number used as distributed RAM: 0
Number used as ripple logic: 30
Number used as shift registers: 0
Number of PIO sites used: 38 + 4(JTAG) out of 207 (20%)
Number of block RAMs: 0 out of 26 (0%)
Number of GSRs: 1 out of 1 (100%)
本文轉載自:http://blog.chinaaet.com/justlxy/p/5100052068,如涉及侵權,請私信小編刪除。
============華 麗 的 分 割 線============
想加入我們FPGA學習交流群嗎?可以長按或掃描以下二維碼,稽核通過後我們邀請您加入。
這些微信群旨在打造一個提供給FPGA工程開發人員及興趣愛好者(統稱“FPGAer”)進行技術交流、答疑解惑和學習的平臺。而且我們也將會通過網路舉辦FPGA技術講座,分享相關研究文獻。
瞭解更多FPGA知識可以長按或掃描以下二維碼關注“FPGAer俱樂部”。