【HDL系列】除法器(3)——基2 SRT算法
目錄
一、除法表示
二、數字遞歸算法基礎公式
三、QDS(Quotient Digit Selection)函數
四、基2 SRT算法
一、除法表示
除法被定義如下:
其中,x是被除數,d是除數,q是商,rem是余數。
商的精度由ulp(unit of last position)來決定:
??? 如果ulp=1, 商q則是整數;
??? 如果ulp=r^(-n),n是商數個數,r是所有輸入操作數的基,此時商為小數。
二、數字遞歸算法基礎公式
在使用數字遞歸算法(Digit Recurrence Algorithms)進行除法操作時迭代n次,每次迭代中產生基r的商,其中商的最高位先產生。經過j+1次迭代后,商表示如下:
經過n次迭代后除法完成,產生了n個商數,商q表示為:
最終q的誤差需小于ulp,所以:
在第j+1次迭代中,每一步中產生的誤差為:
重新組合上式,兩式各乘以d和r的j+1次得:
以上左式定義一個新的中間變量w[j+1]如下:
W[j+1]為部分余數,其遞歸過程如下式所示:
上式是數字遞歸算法的基礎。
三、QDS(Quotient Digit Selection)函數
此處部分余數w[j+1]可以表示為:
因為w[j+1]=rw[j]-dq[j+1]; 表示在第j+1次迭代后得到的q[j+1]需使w[j+1]滿足以上條件;
W[j+1]迭代框圖?
W[j+1]迭代框圖是根據輸入w[j],r和d聯合計算而來,初始的w[j]=x,即被除數。其中:
Arithmetic Shift Left表示左移余數或者部分余數;
Divisor Multiple Generation表示將得到的商值q[j+1]乘以d
Subtraction計算w[j+1]的結果,即w[j+1] = r*w[j]-d*q[j+1]
Quotient Digit Selection,簡稱QDS,即商數選擇,該模塊根據輸入的部分余數r*w[j]和除數d得到商值q[j+1]。
我們來回憶下二進制恢復余數法(r=2)和二進制不恢復余數法(r=2)的QDS函數:
二進制恢復余數法的QDS函數:
二進制非恢復余數法的QDS函數:
以上恢復余數法的商數據集為{0,1},非恢復余數法的商數據集為{-1,1}。
四、基2 SRT算法
SRT算法是以D.Sweeney,J.E.Robertson和T.D.Tocher三名科學家的姓氏首字母組合命名而來的算法。他們幾乎在同時間段各自獨立發明了一種非恢復二進制除法的方法。
SRT算法旨在加速非恢復二進制除法,在商數選擇集中引入了0,且將QDS函數修改如下:
基2 SRT除法的Robertson圖基2 SRT將0引入到商集中,部分迭代則可只需要移位操作,減少了除法模塊的平均延時。但它與非恢復余數法的問題依舊是2w[j]與-d和+d的比較需要全精度才能得出q值。所以將除數d歸一化小數表示至區間[1/2, 1),引入新的分界點-1/2和1/2來替代-d和+d,下式可說明-d與+d的小數取值:
所以QDS將更新如下:
其Robertson圖如下:
基2 SRT除法的Robertson圖,d屬于區間[1/2, 1)部分和w[j+1]被限制在[-1/2, 1/2)區間內,2w[j]被歸一化且其二進制補碼表示如下:
其中u0為符號位。因此,在{-1,0,1}三個可能的值中選取合適的商q值,QDS函數只需要將移位的部分和2w[j]的最高2/3比特與-1/2和1/2比較:
q的選擇有三種情況:
這意味著QDS函數的實現只需要幾個簡單的與門和反相器即可,而不再需要將部分和與全精度的除數進行比較,極大節省了門電路面積,這也是相比于非恢復算法的改進之處。
五、基2 SRT除法例子
設被除數x=69,除數d=10,求商q和余數rem?
我們知道:69/10 = 6 … 9
q=6,rem=9
基于以上介紹,我們來看下69/10的基2 SRT除法如下圖:
從圖中可以看出,商q=0110=6,余數rem=1001=9,與期望一致。
基2 SRT Verilog設計較為簡單與以上過程基本類似,而對于速度、性能和面積來說卻還不夠。
?
后期會有一些本期的補充說明。
謝謝您的閱讀!
參考Arichitectures for Floating-Point Division
更新不易,如果對您有幫助,記得點贊關注哦。歡迎批評指正,謝謝鼓勵!
一起“紙上談芯”,共同學習:
總結
以上是生活随笔為你收集整理的【HDL系列】除法器(3)——基2 SRT算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html的em标签不用斜体,HTML元素
- 下一篇: 我的编程之路点滴记录(四)