我們用軟體程式設計的時候,用到除法的時候,乙個/這樣的除號就搞定了。但是如果用硬體來實現除法,又是怎麼樣實現的了。
計算機儲存的數都是以二進位制數來儲存的,二進位制的除法和我們平常用到十進位制除法是一樣的。輾轉相除法。
計算如上圖,從最高位開始計算,如果大於除數,商為1。然後算下一位。直到算到最後一位,最後剩的結果為餘數。
原理是很簡單的,但是實現起來,還是有點麻煩的。下面就編寫**來實現硬體的除法。
這裡輸入的除數和被除數都是8位的數。簡單考慮,都是無符號數。即不考慮資料正負。輸出的商和餘數也都是8位表示。
從以上的計算,我們可看出,計算是首先將除數和被除數的最高的三位,比較,如果小於,則對應計算出來的商為1,然後被除數要減去除數,否則為0。然後再將除數和被除數的後面三位在比較,依次與被除數的最後3位比較完,輸出最後的結果。
而這裡,我們採用的方法是,將被除數,擴充套件成16位的資料,低8位為被除數的值,高八位的值全為0。開始訊號有效時,將被除數擴充套件成16位資料賦值給data,然後開始運算。比較data的高八位和除數的值,如果大於0,說明被除數大,將此時商置1,賦值給data的最低位,然後將data高8位資料減去除數。最後將data向左移位一位,準備下一次比較。最終計算8次後。data的高8位資料就為所求的餘數,低八位就為所求的商。
下面舉個例子說明:
初始:輸入被除數的值為78,輸入除數的值為34
**,比較簡單,只要知道了原理,**是很好編寫的。主要是要理解將被除數擴充套件為16位。然後再計算。
編寫測試**,測試:
**圖如下所示。
從**圖中,可看出,在輸入資料8個時鐘週期後,輸出最終的計算結果。
如果你想要快速入門、轉行做數字前端設計,不妨到移知官網學習這些課程,給自己一次蛻變的可能。晶元東西還是挺多的,要講的也太多。慢慢學吧。祝好運!
原文
除法器FPGA實現
timescale 1ns 1ps company engineer create date 2017 08 18 15 20 41 design name module name devided project name target devices tool versions descripti...
用位運算實現除法
複習一下 被除數 除數 商.餘數累減 最簡單的就是不斷地用被除數減去除數,直到被除數小於除數,此時減的次數就是商 加權累減 假設現在要計算a b,a為a位的二進位制數,b為b位的二進位制數 1 將b左移a b位,變成乙個a位的二進位制數b 與a的位數一樣 2 如果a大於等於b 則令a a b 商累加...
位運算實現乘除法
對於任何十進位制正整數 k 設其二進位制為 bn b2b1b0 其中 bi 為二進位制某位值,i 0,n 二進位制數 k b0 2 0 b1 2 1 b2 2 2 bn 2 n 故乘二有 k b0 2 1 b1 2 2 b2 2 3 bn 2 n 1 即左移一 k 00 2 0 b0 2 1 b1 ...