1. 程式人生 > >FPGA定點小數計算(Verilog版)第三篇——除法運算(一)

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俱樂部