文/劉明,佳沐,許志良,傅文佳,張霆廷
基于Gold-Schmidt 迭代算法,筆者采用IEEE-754(2008)標準中的128 位浮點標準數(shù)據(jù)格式,模塊化地實現(xiàn)了浮點平方根運算單元的VLSI 電路設計。隨后,筆者對實現(xiàn)的128 位浮點平方根運算單元進行了仿真測試,結果表明,本文設計的硬件運算單元滿足全浮點域的精度要求。接著,筆者使用TSMC 65nm 標準工藝庫對該硬件運算單元做了邏輯綜合,結果表明,本文設計的硬件運算單元工作頻率可達800MHz,完成一次完整的128 位浮點計算需要4 個時鐘周期,最大計算誤差小于1 比特位,硬件電路面積為0.8216mm2,硬件功耗為13.87MW。
目前常見的開方算法有以下幾類。
(1)數(shù)字遞歸法。該方法操作簡單,易于實現(xiàn),但延遲較長,這點在精度較大的浮點數(shù)運算過程中表現(xiàn)得尤為明顯。
(2)函數(shù)迭代法。如Newton–Raphson 法、Householders 法和Gold-Schmidt 迭代算法,此類算法需要更多的硬件成本,卻不能保證運算結果的完全準確,此類算法的優(yōu)點是快速、可擴展、易于流水線化。
(3)高基數(shù)運算法。該方法運算速度快,但實現(xiàn)起來較為復雜,且通常需要消耗相當大的硬件面積。
(4)查表法。該方法簡單、快速,但硬件成本較高,可擴展性較差。
基于此,本文采用Gold-Schmidt 法來設計并實現(xiàn)高精度、低時延的浮點平方根運算單元。Gold-Schmidt 法的迭代公式如下:
式(1)中,ri表示平方根變量;xi表示調(diào)變因子x 變量;hi表示調(diào)變因子h 變量。
初始值設置如式(2)所示:
其 中,r0≈1/X1/2是1/X1/2的近似值(查表獲?。?。經(jīng)過n 次迭代,筆者得到xn=X1/2。此時,筆者結合式(1),得到Gold-Schmidt 法的迭代示意圖,如圖1 所示。
基于Gold-Schmidt 法的浮點平方根運算單元的結構如圖2所示。
如圖2 所示,sqrt_preconfig模塊主要負責對輸入的128 位浮點數(shù)data 進行異常檢測與預處理。首先,該模塊會將輸入的data分解為符號data_in_sign、指數(shù)data_in_exp以及尾數(shù)data_in_m,并計算指數(shù)偏差值exp_out;隨后,進行異常檢測,輸出異常檢測旗幟信號exception。exception 有5種可能的值:3′b000(輸入不存在異常情況),3′b001(輸入為非數(shù),輸出為非數(shù)),3′b010(輸入為負數(shù),輸出為非數(shù)),3′b011(輸入為正無窮,輸出為正無窮),3′b100(輸入為0,輸出為0)。同時,在檢查輸入浮點數(shù)的指數(shù)為奇數(shù)還是偶數(shù)后,該模塊還會調(diào)整尾數(shù)部分,例如將其由113 位調(diào)整為116 位,并輸出mantissa_out,以便后續(xù)sqrt_mantissa_calculation 模塊的分組計算。
在本研究中,仿真驗證共分為三大部分,分別是浮點異常驗證、邊界數(shù)據(jù)驗證和邏輯功能驗證。其中,浮點異常驗證主要針對的是輸入的非數(shù)(NaN)、正負無窮、0 或者不符合定義域的輸入數(shù)值,邊界數(shù)據(jù)驗證的一般是定義域邊界的輸入數(shù)值,而邏輯功能驗證的則是定義域內(nèi)的浮點正規(guī)數(shù)。
基于此,筆者對此次設計的浮點平方根運算單元進行大量的隨機數(shù)據(jù)測試,測試數(shù)據(jù)包括非數(shù)、正負無窮、0、浮點正規(guī)數(shù)以及邊界數(shù)。仿真驗證結果如表1 所示。
表1 浮點平方根運算單元仿真驗證結果對比
在電路設計得到仿真驗證之后,本文根據(jù)TSMC 65nm標準工藝庫,在0.9V 的工作電壓下完成了邏輯實現(xiàn)和綜合,最終得到有關硬件的工作頻率、面積等邏輯綜合結果,如表2 所示。
表2 浮點平方根運算單元綜合結果
本文對128 位浮點平方根運算單元實現(xiàn)了RTL 級(寄存器傳輸級)建模,并基于ModelSim硬件仿真平臺完成了平方根運算單元的邏輯功能的仿真驗證;在TSMC 65nm的標準工藝完成了邏輯實現(xiàn)和綜合。結果表明,本文所設計的浮點平方根運算硬件單元完成一次128位浮點計算需要4 個時鐘周期,計算誤差最大不超過128 位浮點尾數(shù)的最低位,滿足精度高、延遲低的特征。DC 邏輯綜合結果表明,當電路的工作頻率為800MHz 時,硬件電路面積為0.8216mm2,功耗為13.87MW。