VHDL中的除法如何實現?

如何用VHDL來描述整數除法,有哪些演算法邏輯?


精度要求不高的話都是將除法轉換為乘法加移位

例如:

a/5=a*(1/5*1024)/1024

即約等於a*205再右移10bit

看不懂那就補充下細節,

fpga里沒有除法單元,只有乘法單元,這種方式的本質是把除法轉換成了查表、乘法和移位(右移幾n位就是除以2的n次方),

a/1=a*(1/1*1024)/1024=a*1024/1024

a/2=a*(1/2*1024)/1024=a*512/1024

a/3=a*(1/3*1024)/1024=a*314/1024

a/4=a*(1/4*1024)/1024=a*256/1024

a/5=a*(1/5*1024)/1024=a*205/1024

···

a/255=a*(1/255*1024)/1024=a*4/1024

實現計算過程時把(1024,512,314,256,205...,4)存到一個rom里,除以多少就取第幾個數乘a,除1024再等效為右移10bit。


整數除法……,提問的,自己的作業具體要求都沒搞清楚吧。

如果是沒有時間要求(cycle),就按照小學學到的除法計算方法——比較、減、移位……循環就可以了啊。最後得到商和餘數。這個不需要說明了吧。

如果有拍數要求:

常數除法,就和有一個回答的一樣,轉換為a*m/(2^n);

如果是減少範圍的除數,給出一個查找表最簡單,比如只有除2~9,那就做一個1/2~1/9的表即可。a/b就轉化為a*LUT(b),LUT(b)的精度視情況而定;

較高精度要求又需要計算速度的就是用牛頓迭代了。

不過估計作業沒那麼高要求吧,呵呵。


一切FPGA中的計算都是對加法的各種處理, 除法本質也是一樣

從這個思路出發, 或許你就可以明天它的指數機制


可以看看關於數制的東西,我記得自己動手寫cpu裡面有除法,只不過他是用hdl,,自己轉換一下


我和jacky吳的觀點大體是一樣的

如果是做FPGA開發,直接調用IP就好

如果是想做個玩具,隨便找本書或者上網搜下有一堆

如果是想搞個大新聞,建議參考論文,我以前看過一篇上海交大的碩士畢業論文,等下回家幫你找下


如果做FPGA開發,調用ip好了…想鑽研,你能百度到怎麼手寫


推薦閱讀:

PCIE開發筆記(七)DLL介紹(上)
大話Verilog——Verilog入門(一)
對MOS管驅動電路一知半解?這裡有你想要知道的一切
北理882數字電路複習_001
Verilog有限狀態機比較

TAG:數字電路 | VerilogHDL | 微機原理與介面技術 |