亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種浮點(diǎn)乘加融合單元的五級(jí)流水線結(jié)構(gòu)的制作方法

文檔序號(hào):6608782閱讀:332來源:國知局
專利名稱:一種浮點(diǎn)乘加融合單元的五級(jí)流水線結(jié)構(gòu)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及浮點(diǎn)運(yùn)算單元設(shè)計(jì),是一種用于實(shí)現(xiàn)高性能浮點(diǎn)運(yùn)算的高速浮點(diǎn)乘加融合單元。

背景技術(shù)
文獻(xiàn)數(shù)據(jù)表明,幾乎50%的浮點(diǎn)乘法指令后面緊跟的指令為浮點(diǎn)加法或減法。因此,浮點(diǎn)乘加融合操作A+B×C已經(jīng)成為科學(xué)運(yùn)算和多媒體應(yīng)用中的一種基本操作。由于浮點(diǎn)乘加融合操作在應(yīng)用程序中如此頻繁地出現(xiàn),用浮點(diǎn)乘加融合單元(簡化為MAF單元)來實(shí)現(xiàn)該操作已經(jīng)成為現(xiàn)代高性能商業(yè)處理器的一個(gè)很好的選擇。這種實(shí)現(xiàn)方式主要有以下兩個(gè)優(yōu)點(diǎn)(1)僅需要一次舍入,不是兩次;(2)通過共享一些組成模塊,可降低電路延遲和硬件開銷。
乘加(MAF)指令需要3個(gè)操作數(shù)。例如,執(zhí)行A+(B×C)操作,當(dāng)把乘加指令中操作數(shù)A置為0時(shí)執(zhí)行的是乘法指令,把操作數(shù)B或C置為1時(shí),執(zhí)行的是加法指令。在已實(shí)現(xiàn)的多數(shù)處理器中,浮點(diǎn)乘加運(yùn)算一般通過以下步驟來實(shí)現(xiàn)(相關(guān)內(nèi)容請(qǐng)見參考文獻(xiàn)1Floating-Point Multiply-Add-Fused with Reduced Latency,實(shí)現(xiàn)過程的框圖見圖1) 1.首先對(duì)被乘數(shù)C做波茨編碼,然后用進(jìn)位保存壓縮加法器(CSA)組成的壓縮樹實(shí)現(xiàn)B×C,得到兩個(gè)部分積。在進(jìn)行乘法的同時(shí),操作數(shù)A進(jìn)行取反和對(duì)齊移位操作。操作數(shù)A和B×C的符號(hào)可能相同,也可能相反。如果A和B×C的符號(hào)相反,將A和B×C做有效減法,需要得到A的補(bǔ)碼進(jìn)行相加,A需要取反。否則如果A和B×C的符號(hào)相同做有效加法,A不需要取反。下面不管是否需要進(jìn)行取反操作,將通過取反器之后的A記為Ainv。
在IEEE-754標(biāo)準(zhǔn)中,單精度操作數(shù)的尾數(shù)是24比特,再加上2個(gè)額外的舍入位,Ainv比B×C的結(jié)果的最高位最多左移26位,或者比B×C結(jié)果的最高位最多右移48比特,即移位范圍在[-26,48]之間。在浮點(diǎn)乘加的設(shè)計(jì)中為了使移位簡單化,規(guī)一化A的移位方向?yàn)橄蛴乙莆?。所以Ainv初始是在B×C左移26比特的初始位置,Ainv在對(duì)齊中右移位的位數(shù)是27-(exp(A)-(exp(B)+exp(C)-127),其中,exp(A),exp(B)和exp(C)分別是操作數(shù)A,B和C的指數(shù)。
2.把對(duì)齊移位后的Ainv、和B×C壓縮后的部分積用壓縮比為3∶2的進(jìn)位保存加法器(CSA)壓縮,得到兩個(gè)部分積,同時(shí)處理A求補(bǔ)時(shí)所需要的加1。
3.利用2中壓縮后得到的部分積進(jìn)行前導(dǎo)零預(yù)測(LZA,leading zero anticipator)得到加法結(jié)果的規(guī)格化左移的位數(shù)。同時(shí)判斷最終結(jié)果的正負(fù)。
4.在前導(dǎo)零預(yù)測和符合預(yù)測的同時(shí)做半加操作,并完成部分的加法運(yùn)算。進(jìn)行半加操作是為了保證后面能正確進(jìn)行舍入。由于符號(hào)預(yù)測所需要的時(shí)間比半加操作多,可在此時(shí)間空隙里完成最終加法的一部分。
5.加法結(jié)果利用LZA預(yù)測的左移的位數(shù)進(jìn)行規(guī)格化左移。若3符號(hào)預(yù)測部件判斷最終結(jié)果為負(fù),則選擇2中壓縮后得到的部分積的補(bǔ)數(shù)形式經(jīng)4處理后的結(jié)果進(jìn)行規(guī)格化移位。
6.最終加法和舍入操作。
圖1所示的現(xiàn)有技術(shù)的不足如下 (1)未處理對(duì)前導(dǎo)零預(yù)測邏輯可能引入的一位左移進(jìn)行處理 (2)乘法結(jié)果采用兩個(gè)48位部分積表示,會(huì)引起一位溢出錯(cuò)誤, (3)加數(shù)移位對(duì)齊和規(guī)格化移位時(shí)需要移入‘0…0’或‘1…1’。加數(shù)為負(fù)或者最終結(jié)果的符號(hào)被檢測到為負(fù)時(shí)需要移入‘1…1’,用來在最低位加一求補(bǔ)時(shí)傳播進(jìn)位。其選擇邏輯在關(guān)鍵路徑上,增加了延時(shí)。


發(fā)明內(nèi)容
本發(fā)明的目的在于設(shè)計(jì)一種高性能的全流水線的單精度高速浮點(diǎn)乘加融合單元,同時(shí)保證較少的硬件開銷。
本發(fā)明的另一個(gè)目的是糾正已有運(yùn)算單元細(xì)節(jié)處不完善而造成精度損失之處,提供一個(gè)高精度的浮點(diǎn)乘加單元。
為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種五級(jí)流水實(shí)現(xiàn)的單精度浮點(diǎn)乘加運(yùn)算單元,實(shí)現(xiàn)形式為A+(B×C)的乘加操作,其吞吐量為每周期一條指令,如圖2所示,具體結(jié)構(gòu)如下 第一級(jí)流水線由指數(shù)處理單元1、以4為基的波茨編碼器3、3∶2的進(jìn)位保存加法器(CSA)組成的部分積壓縮樹4的一部分和符號(hào)處理單元2組成;其中, 指數(shù)處理單元1根據(jù)操作數(shù)A的指數(shù),B的指數(shù)和C的指數(shù)計(jì)算其指數(shù)差d d=exp(A)-(exp(B)+exp(C)-127), 其中,exp(A),exp(B)和exp(C)分別是操作數(shù)A,B和C的指數(shù),根據(jù)IEEE 754標(biāo)準(zhǔn),單精度浮點(diǎn)數(shù)的指數(shù)為其第2位到第8位,并計(jì)算A與B×C對(duì)齊時(shí)所需的移位量mv, mv=74-d, 確定數(shù)據(jù)通路的臨時(shí)指數(shù)Exp_temp,其計(jì)算方法為 若mv<0,則Exp_temp=exp(A);否則Exp_temp=exp(B)+exp(C)-127+27;這里加27是因?yàn)锽×C的結(jié)果在數(shù)據(jù)通道中靠右側(cè)擺放,如圖3(a)所示; 符號(hào)處理單元2根據(jù)操作數(shù)A的符號(hào),B的符號(hào)和C的符號(hào)計(jì)算臨時(shí)符號(hào)、是否為有效減(sub),根據(jù)IEEE 754標(biāo)準(zhǔn),單精度浮點(diǎn)數(shù)的符號(hào)位為其最高位,臨時(shí)符號(hào)由B×C的符號(hào)位表示。A的符號(hào)位與B×C的符號(hào)位不同時(shí),sub=1,否則sub=0; 基4的波茨編碼器3對(duì)C的尾數(shù)進(jìn)行編碼,然后將編碼的結(jié)果與B的尾數(shù)相乘得到13個(gè)部分積,根據(jù)IEEE 754標(biāo)準(zhǔn),單精度浮點(diǎn)數(shù)的尾數(shù)為其第9位到第32位,編碼后的13個(gè)部分積的被送入3∶2的進(jìn)位保存(CSA)壓縮樹4中,單個(gè)單字節(jié)CSA單元和CSA壓縮樹的構(gòu)造分別在圖4和圖5中做了詳細(xì)的介紹,其中圖5的輸入x、y、z為3個(gè)要被壓縮的字節(jié),輸出S、C分別為壓縮后的和字節(jié)和進(jìn)位字節(jié),圖6的輸入in1~in13為波茨編碼后得到的13個(gè)部分積,輸出為壓縮后得到的和、進(jìn)位,整個(gè)壓縮樹由11個(gè)49比特的CSA構(gòu)成,其中每個(gè)CSA由49個(gè)圖5中的單元結(jié)構(gòu)構(gòu)成,將13個(gè)部分積壓縮為兩個(gè),需要5級(jí)的CSA樹,為平衡各級(jí)流水線的延時(shí),這里將前兩級(jí)CSA樹放在第一級(jí)流水線中,而后面的三級(jí)CSA樹留到第二級(jí)流水線中執(zhí)行,最終壓縮的結(jié)果需要被處理后才能做為乘法結(jié)果,具體處理方法為部分積壓縮樹每一壓縮的結(jié)果都保留49位,最后一級(jí)壓縮后的兩個(gè)輸出的最高位都為1時(shí),將這兩個(gè)1改為0,否則若兩個(gè)最高位1個(gè)是1,另一個(gè)是0,而兩個(gè)次高位均為1時(shí),將這最高位的1個(gè)1和次高位的2個(gè)1都改為0,其與情況不需做修改; 第二級(jí)流水線由指數(shù)狀態(tài)劃分器5、74比特移位對(duì)齊器6、按位取反器7、粘滯位計(jì)算器8、3∶2的進(jìn)位保存加法器(CSA)組成的部分積壓縮樹4的一部分和一個(gè)3∶2 CSA組成;其中, 指數(shù)狀態(tài)劃分器5根據(jù)1中計(jì)算出的d和從2中得到的sub,將指數(shù)的狀態(tài)劃分為以下6種情況 1)d≥27 2)27>d≥3或d=2,sub=0 3)2≥d-48且sub=1 4)d=1或d=0,sub=0 5)-1≥d≥48且sub=0 6)d<-48 前導(dǎo)零預(yù)測模塊10將根據(jù)這里劃分的狀態(tài)進(jìn)行特殊的操作,介紹10時(shí)將會(huì)具體的介紹; 74比特的移位對(duì)齊器6根據(jù)指數(shù)處理單元1得到的mv值,對(duì)A的尾數(shù)進(jìn)行移,A最初被放置在B×C最高位的左邊,如圖3(a)所示,為保證d>27時(shí)能準(zhǔn)確地進(jìn)行舍入,將兩個(gè)額外位放在A和B×C最高位之間,d>27時(shí),A不移位,通過置入兩個(gè)額外位,舍入邏輯不再需要考慮B×C的結(jié)果,A右移的位數(shù)由d決定,有三種情況 1.mv≤0,B×C在A最低位的右邊。這種情況下,B×C僅影響粘滯位的計(jì)算,不需要移動(dòng)A;2.0<mv<74,A右移mv位。mv>50時(shí),A的一部分將被移到B×C最低位的右邊,這些移出位將被收集用來計(jì)算粘滯位st1; 3.mv≥74,A將被全部移到B×C最低位的右邊,僅影響粘滯位st1的計(jì)算; 計(jì)算粘滯位的部件8收集A向右移位對(duì)齊時(shí)移出數(shù)據(jù)通道的位,用以計(jì)算粘滯位,這里產(chǎn)生的粘滯位僅僅是整個(gè)乘加單元實(shí)現(xiàn)過程中產(chǎn)生的粘滯位的一部分,記為st1,在第四級(jí)流水線中還會(huì)產(chǎn)生粘滯位,后面介紹第四級(jí)流水線的時(shí)候?qū)?huì)詳細(xì)介紹;若sub=0,A被移出數(shù)據(jù)通道的位全為0時(shí),st1=0,否則st1=1;若sub=1,A被移出數(shù)據(jù)通道的位全為1時(shí),st1=0,否則st1=1; 按位取反器7,如果A的符號(hào)位和B×C的符號(hào)位不同,對(duì)A的尾數(shù)的每比特都做取反操作(也就是按位取反),如果A的符號(hào)位和B×C的符號(hào)位相同,則不作取反操作,并將操作結(jié)果和4的輸出結(jié)果一起送入3∶2CSA 9中作一次壓縮,其輸出結(jié)果記為sum、carry,它們?cè)跀?shù)據(jù)通道中的存在形式如圖3(c)所示;A的符號(hào)位和B×C的符號(hào)位不同時(shí),還要在A的最低位加1以完成對(duì)A的求補(bǔ),但是移位后,A的最低位可能在24位到74位之間的任一位置,我們希望將1加到一個(gè)固定的位置,檢查A的最低位在161位左邊和右邊兩種情況,可發(fā)現(xiàn)sub=1且st1=0時(shí)要在進(jìn)位字節(jié)的最低位加1,如圖3(c)所示,這一加1能正確的傳遞到A的最低位,3∶2CSA壓縮后進(jìn)位字節(jié)(carry)的最低位(74位)為空,1可加在這一位上; 第三級(jí)流水線由前導(dǎo)零檢測模塊10、74比特的半加器11、12和13、符號(hào)預(yù)測邏輯14、25比特的一次性移位器15和選擇器16組成;其中, 前導(dǎo)零檢測模塊10,根據(jù)5和9的輸出,以及d和sub的值確定后兩次規(guī)格化移位(分別由17、25完成)的移位量,下面闡述根據(jù)d和sub劃分的六種情況,詳細(xì)討論各種情況下如何確定前導(dǎo)零個(gè)數(shù)(結(jié)果為負(fù)時(shí)為前導(dǎo)一) 情況1d≥27 前導(dǎo)零個(gè)數(shù)(LZN)可能為0或1,不需要進(jìn)行移位,1位的左移不確定留到加法和舍入部分處理,17和25的移位量均為0; 情況227>d≥3或d=2,且sub=0 25的移位量為0,sub=1時(shí),17中的移位量為mv,其中mv為1中計(jì)算出的A相對(duì)B×C移位對(duì)齊時(shí)的移位量;sub=1時(shí),17中的移位量為mv-1,因?yàn)榇藭r(shí)為有效加法,加法器20中最高位可能產(chǎn)生進(jìn)位(Cout=1,Cout表示加法器20中最高位的進(jìn)位),17中的移位量最少為0,最多為25; 情況32≥d≥-48且sub=1 此時(shí)A和B×C非常接近,減法運(yùn)算可能損失很多有效位,這種情況下需要特殊的前導(dǎo)零預(yù)測邏輯,我們的實(shí)現(xiàn)方法如下 通過檢查某一位及其左右相鄰的位確定哪一位可能是最高位,設(shè)一預(yù)測位fi,
其中sum、carry為9的兩個(gè)輸出,若fi=1,而fj=0(j=0,1…i-1),則最高位為i或i+1, i≤26時(shí),17中的移位量為i,25中的移位量為0;否則17中的移位量為26,25中的移位量為i-26; 情況4sub=0,且d=1或0 17和25中的移位量均為0; 情況5-1≥d≥-48且sub=0 25中的移位量為0; 17中的移位量由BC_sum
,BC_sum[1],BC_carry
,BC_carry[1]確定,它們分別是4的兩個(gè)輸出的最高兩位,若 BC_sum
|BC_carry
|(BC_sum[1]&BC_carry[1])=1 則A與B×C相加,Cout=1,Cout為前面提到過的加法器20中最高位的進(jìn)位,這種情況下17中的移位量為0,否則Cout=0,17中的移位量為1; 情況6d<-48 B×C遠(yuǎn)大于A,A僅影響舍入邏輯,在17中只需左移一位,25中的移位量為0; 總結(jié)幾上各種情況可發(fā)現(xiàn)17、25中的最大的移位量僅為26位; 74比特的半加器11、12和13的引入是為了保證在第五級(jí)流水線中部件27、28僅產(chǎn)生一位進(jìn)位,為減少電路的延時(shí),這里同時(shí)對(duì)9輸出結(jié)果及其補(bǔ)數(shù)表示進(jìn)行處理,待部件14判斷出結(jié)果的正負(fù)后再用選擇器16選擇需要的結(jié)果,11的輸入為sum、carry,輸出結(jié)果為sum&carry,即對(duì)sum和carry作按位與操作,12的輸入為sum、carry,輸出結(jié)果為sum^carry,即對(duì)sum和carry作按位或操作,13的輸入為sum、carry按位取反,輸出結(jié)果為sum和carry分別按位取反后作按位與操作; 25比特的一次性移位器15,根據(jù)1的輸出d和2的輸出sub判斷是否對(duì)11、12、13的輸出進(jìn)行一次25比特的移位d>2,或者d=2且sub=0時(shí)進(jìn)行移位,否則不進(jìn)行移位,為得到sum、carry的補(bǔ)數(shù)表示,除了按位取反,還需要分別在最低位加1,這里的兩個(gè)加1采用的技巧為1個(gè)加在13的輸出的最低位,同時(shí)將數(shù)據(jù)通道向右拓展一位,然后在12和13的輸出的最低位分別置1,這樣就完成了另一個(gè)加1; 結(jié)果可能為負(fù)時(shí)將需要非常復(fù)雜的選擇,注意這里提到的負(fù)指的是A+B×C的符號(hào)與B×C的符號(hào)不同,避免這一麻煩同時(shí)減小電路時(shí)延的方法是提前判斷結(jié)果的正負(fù),結(jié)果為負(fù)時(shí)選擇9輸出的補(bǔ)數(shù)表示,這一判斷由符號(hào)預(yù)測模塊14完成,它在進(jìn)行前導(dǎo)零預(yù)測(10)、半加(11、12、13)以及一次性移位(15)的同時(shí)進(jìn)行,符號(hào)預(yù)測模塊14根據(jù)9的輸出結(jié)果sum和carry預(yù)測最終結(jié)果的正負(fù),結(jié)果僅在有效減(sub=1)時(shí)可能為負(fù)。有效減時(shí),A的補(bǔ)數(shù)始終被使用,因此結(jié)果僅在d>0時(shí)可能為負(fù),可能有兩種情況 1.d≥2時(shí)結(jié)果始終為負(fù); 2.d=0或d=1時(shí),要對(duì)A和B×C進(jìn)行全面的比較,具體方法是檢測sum加carry時(shí),最高位是否有進(jìn)位產(chǎn)生,若有,則符號(hào)判斷的結(jié)果為正; 選擇器16根據(jù)14判斷的結(jié)果從15的結(jié)果中選擇,若14判斷出結(jié)果為正,則選擇sum和carry一次性移位后的輸出,否則選擇sum和carry取補(bǔ)再移位后的輸出; 第四級(jí)流水線由26比特的規(guī)格化移位器17、最終結(jié)果的符號(hào)計(jì)算部件18、指數(shù)計(jì)算部件19、22位條件加法器20、進(jìn)位和粘滯位計(jì)算部件21和兩個(gè)與門22、23組成,其中, 26比特的規(guī)格化移位器17根據(jù)10中得到的移位量對(duì)16的輸出結(jié)果進(jìn)行移位,最大移位量為26; 最終結(jié)果的符號(hào)計(jì)算部件18將2中得到的B*C的符號(hào)和14得到的符號(hào)預(yù)測結(jié)果進(jìn)行異或操作,得到A+B*C的符號(hào); 指數(shù)計(jì)算部件19計(jì)算A+B*C的指數(shù),計(jì)算方法為1中得到的Exp_temp與三次規(guī)格化移位(由15、17、25完成)的移位量之和相加; 22位條件加法器20,將17輸出結(jié)果的高22比特相加得到sum0,sum0+1得到sum1; 部件21~23是完成舍入的部件的一部分; IEEE 754標(biāo)準(zhǔn)中規(guī)定了4種舍入模式就近舍入(RN),向正無窮舍入(RP),向負(fù)無窮舍入(RM),向零舍入(RZ),從應(yīng)用的角度來看,這四種舍入模式能減少到三個(gè)RN、RI、RZ,如表1所示; 表1
從數(shù)學(xué)意義上講,


這里



分別表示向上取整和向下取整; 21中利用17輸出的低49位計(jì)算其最高位進(jìn)位,利用17輸出結(jié)果的低50位和st1計(jì)算粘滯位;有左移的粘滯位的計(jì)算方法為17輸出的兩個(gè)數(shù)的低49位相加的結(jié)果為零,且st1=0時(shí),粘滯位的計(jì)算結(jié)果為0;無左移的粘滯位的計(jì)算方法為17輸出的兩個(gè)數(shù)的低50位相加的結(jié)果為零,且st1=0時(shí),粘滯位的計(jì)算結(jié)果為0;采用下面的方法可快速確定兩個(gè)數(shù)是否為0設(shè)兩個(gè)操作數(shù)為A=a0...an-1,B=b0...bn-1,記矢量E=e0...en-1,其中pi=ai&bi,ki=ai+bi,那么 22和23為兩個(gè)與門,22的輸入為RI和21中得到的無左移時(shí)的粘滯位,輸出進(jìn)入加法器28,23的輸入為RI和21中得到的有左移時(shí)的粘滯位,輸出進(jìn)入加法器27; 第五級(jí)流水線由指數(shù)修正部件24、24比特的規(guī)格化移位器25、兩個(gè)4位的加法器27和28、選擇器29和最低位修正部件30;其中, 盡管前面已進(jìn)行規(guī)格化移位,但由于10中采用的前導(dǎo)零邏輯有一位的不確定性,以及兩個(gè)數(shù)相加是否有進(jìn)位的不確定性,將17的輸出結(jié)果相加最高位可能為0,也就是說還可能需要一位左移;是否需要左移由sum0的最高位,sum1的最高位,以及21中得到的低49位向高位段的進(jìn)位決定,
其中c_no_left_shift為假設(shè)不需左移時(shí)4位全加結(jié)果(在28中得到)的最高位進(jìn)位; 若Left_shift=1,則指數(shù)修正部件24將19中得到的結(jié)果減1得到最終結(jié)果的指數(shù),否則不需減1; 第三步規(guī)格化移位在25中完成,其移位量在10中已計(jì)算出了; 22和23為兩個(gè)4位的加法器,它們有三個(gè)共同的輸入17中兩個(gè)輸出結(jié)果的23~26比特,以及RN+RI,一個(gè)不同的輸入分別為22和23的輸出; 選擇器29根據(jù)Left_shift的值從27和28的輸出中作選擇,若Left_shift=1,則選擇28的輸出作為輸出,否則選擇27的輸出; 29輸出結(jié)果的最高位為1時(shí),選擇器26選擇sum1經(jīng)部件25處理后的輸出作為輸出,否則選擇sum0經(jīng)25處理后的輸出; 最后,RN模式時(shí)最低位需要被修正,這由舍入位和粘滯位確定 LSBcorrected=0 if(~R)&sticky&RN=1 其中R為舍入位,本設(shè)計(jì)中為29的輸出的第3位,sticky為粘滯位,Left_shift=1,其值等于21中計(jì)算得的有左移時(shí)的粘滯位的值,否則為無左移時(shí)的粘滯位的值; 最終,對(duì)26和30的輸出結(jié)果進(jìn)行拼接——26的輸出,聯(lián)合30輸出的最高兩比特,就得到了A+B*C的尾數(shù); 本發(fā)明在實(shí)現(xiàn)細(xì)節(jié)上做了周密的考慮,保證了浮點(diǎn)乘加單元的高精度,具體表現(xiàn)在兩個(gè)方面 1.考慮了規(guī)格化移位所不能正確覆蓋的一位左移。
2.乘法結(jié)果采用兩個(gè)48位部分積表示,會(huì)引起一位溢出錯(cuò)誤,本發(fā)明中提出了一種消除該錯(cuò)誤的方法。
本發(fā)明的創(chuàng)新點(diǎn)總結(jié)如下 ●乘法結(jié)果采用兩個(gè)48位部分積表示,會(huì)引起一位溢出錯(cuò)誤,本發(fā)明中提出了一種消除該錯(cuò)誤的方法。
●采用最終加和舍入同時(shí)進(jìn)行的方法,減小了冗余,僅需要22位的加法器,同時(shí)能夠處理前導(dǎo)零預(yù)測(leading zero anticipate-LZA)可能引入的一位左移,遠(yuǎn)小于其他的MAF單元中加法器的寬度。
●由于規(guī)格化移位需要在加法之前完成,所以LZA不可能與加法并行完成。為減少延時(shí),我們根據(jù)A的移位對(duì)齊情況和指數(shù)差將規(guī)格化移位仔細(xì)的劃分成了六種情況,分別采用不同方法進(jìn)行LZA,同時(shí)分三步完成移位,最大移位量被減小到僅26位。而且僅一步規(guī)格化移位在關(guān)鍵路徑上,另外兩步在其它模塊中完成。由于移位器的延時(shí)主要產(chǎn)生于連線延時(shí),大幅度減少移位量能大大縮短連線長度,從而顯著地減小了電路延時(shí)。
●為得到一個(gè)操作數(shù)的補(bǔ)數(shù)表示,該操作數(shù)被按位取反后還需要在其最低位加1。雖然這個(gè)加1操作可以留到最終加和舍入部分,但是會(huì)增加邏輯復(fù)雜度和延時(shí),需要盡量避免,而32進(jìn)位保存加法器(carry save adder-CSA)中進(jìn)位字節(jié)的最低位是一個(gè)空位(因?yàn)檫@一位上不會(huì)有來自更低一位的進(jìn)位),可以被用來存放求補(bǔ)所需加的1。另一個(gè)辦法是將數(shù)據(jù)通路向右寬展一位,并在新的最低位上增加兩個(gè)1,相當(dāng)于在原來的最低位上加1。
本發(fā)明采用五級(jí)流水線實(shí)現(xiàn),用VerilogHDL實(shí)現(xiàn),通過驗(yàn)證后用0.18微米標(biāo)準(zhǔn)單元庫進(jìn)行電路綜合。對(duì)綜合結(jié)果進(jìn)行時(shí)序分析,結(jié)果顯示最大延時(shí)為1.82納秒。



圖1是參考文獻(xiàn)1Floating-Point Multiply-Add-Fused with Reduced Latency中介紹的一種已有的乘加單元的結(jié)構(gòu)框圖; 圖2是本發(fā)明的五級(jí)流水線實(shí)現(xiàn)的單精度浮點(diǎn)乘加單元的結(jié)構(gòu)框圖; 圖3a是A相對(duì)B×C移位對(duì)齊前在數(shù)據(jù)通道中擺放的示意圖; 圖3b是A相對(duì)B×C移位對(duì)齊后在數(shù)據(jù)通道中擺放的示意圖; 圖3c是A相對(duì)B×C移位對(duì)齊,并進(jìn)行3∶2進(jìn)位保存壓縮后數(shù)據(jù)通道中數(shù)據(jù)擺放的示意圖; 圖4是單字節(jié)3∶2進(jìn)位壓縮加法器(CSA)的具體實(shí)現(xiàn)圖; 圖5是乘法壓縮樹具體實(shí)現(xiàn)的框圖,這一壓縮樹由11個(gè)49字節(jié)的CSA組成; 圖6是乘法壓縮結(jié)果在數(shù)據(jù)通道中擺放的示意圖;
具體實(shí)施例方式 本發(fā)明的具體功能實(shí)現(xiàn)過程如下 A的移位對(duì)齊、取反與B×C的波斯編碼、部分積壓縮并行執(zhí)行。求補(bǔ)所需的加1利用3∶2 CSA進(jìn)位字節(jié)最低位上的空位實(shí)現(xiàn)。然后將Ainv與B×C壓縮后的部分積輸入到3∶2CSA中。Ainv表示將A的尾數(shù)按位對(duì)齊并取反(如果A的符號(hào)位與B×C的符號(hào)位相同則不需取反)的輸出。由于B×C的部分積只有48位,只需將Ainv的低48位輸入3∶2 CSA中,高55位與CSA輸出的和字節(jié)相連得到74位的和字節(jié)。在進(jìn)行乘法和對(duì)齊的同時(shí),判斷A的符號(hào)與B×C的符號(hào)是否相同,并計(jì)算指數(shù)差d。
下一步要確定規(guī)格化移位的移位量,也就是前導(dǎo)零的個(gè)數(shù)。由于前導(dǎo)零預(yù)測的延時(shí)大于第一步規(guī)格化移位和符號(hào)判斷,可在前導(dǎo)零預(yù)測的同時(shí)完成加法的一部分以縮短關(guān)鍵路徑。同時(shí)為確保最終加輸出的結(jié)果為正,需要進(jìn)行符號(hào)預(yù)測,結(jié)果為負(fù)時(shí)選取進(jìn)位保存加法器輸出結(jié)果的補(bǔ)數(shù)表示。
最后進(jìn)行最終加和舍入。由于前導(dǎo)零預(yù)測結(jié)果有1位的不確定性,最終結(jié)果有可能需要左移一位,因此舍入位置也有1位的不確定性。本發(fā)明采用條件加法器和精心設(shè)計(jì)的舍入邏輯解決了這一問題。
乘法結(jié)果采用兩個(gè)48位部分積表示,會(huì)引起一位溢出錯(cuò)誤,本發(fā)明中提出了一種消除該錯(cuò)誤的方法。
乘法模塊的實(shí)現(xiàn)過程如下 乘法采用以4為基的波斯編碼,僅無符號(hào)的B、C尾數(shù)部分被輸入到乘法電路中。部分積壓縮過程采用多級(jí)3∶2進(jìn)位保存加法器,將13個(gè)部分積壓縮為2個(gè)。
由于B和C的尾數(shù)均為24位,B×C的結(jié)果應(yīng)為48位,但是部分積表示時(shí)應(yīng)保留49位,最高位為符號(hào)位。由于僅無符號(hào)的B、C尾數(shù)部分被輸入到乘法電路中,如果將2個(gè)49位的壓縮后的部分積相加,符號(hào)位永遠(yuǎn)為0,因此可嘗試僅保留低48位。但是將2個(gè)48位的部分積相加時(shí)可能產(chǎn)生進(jìn)位溢出,這一錯(cuò)誤暗示兩個(gè)處于區(qū)間[1,2)的數(shù)相乘結(jié)果大于4,該進(jìn)位應(yīng)被拋棄。由于兩個(gè)部分積是與Ainv相加,而不是單獨(dú)相加,我們首先需要預(yù)測是否會(huì)出現(xiàn)進(jìn)位,然后進(jìn)行處理。一共有三種情況,具體如下 情況1.BC_49BitsCarry,BC_49BitsSum的最高位均為0。BC_49BitsCarry,BC_49BitsSum為49位的壓縮后的部分積,如圖6所示。這種情況下僅需要保留低48位。
情況2.BC_49BitsCarry,BC_49BitsSum的最高位均為1。假設(shè)BC_49BitsCarry與BC_49BitsSum的低48位相加有進(jìn)位,則該進(jìn)位與最高位上的兩個(gè)1相加,最終的符號(hào)位將為1,表明結(jié)果為負(fù)。這是不可能出現(xiàn)的,因此不可能產(chǎn)生進(jìn)位。
情況3.BC_49BitsCarry和BC_49BitsSum的最高位一個(gè)為0,另一個(gè)為1。這種情況下BC_49BitsCarry和BC_49BitsSum的低48位相加必有進(jìn)位溢出。如果想僅保留低48位,必須消去該進(jìn)位的影響。低48位只可能有兩種形式11.*+01.*或1*.*+1*.*,*表示剩下的位,可為0也可為1。11.*+00.*不可能出現(xiàn),因?yàn)檫@種情況下BC_49BitsCarry+BC_49BitsSum結(jié)果將為00.*,小于1,而B×C≥1。
BC_49BitsCarry+BC_49BitsSum為11.*+01.*時(shí),將這三個(gè)1改為0就可避免溢出,而為1*.*+1*.*時(shí),將兩個(gè)1改為0即可。
最終加法和舍入的實(shí)現(xiàn)過程如下 IEEE 754標(biāo)準(zhǔn)中規(guī)定了4種舍入模式就近舍入(RN),向正無窮舍入(RP),向負(fù)無窮舍入(RM),向零舍入(RZ)。從應(yīng)用的角度來看,這四種舍入模式能減少到三個(gè)RN、RI、RZ,如表1所示。
從數(shù)學(xué)意義上講,


這里



分別表示向上取整和向下取整。
最終加和舍入模塊非常類似于浮點(diǎn)乘法單元中相應(yīng)的模塊——盡管已進(jìn)行規(guī)格化移位,還可能需要一位左移。舍入完成后,根據(jù)最高位的值決定0-23位還是1-24位被用來作為最終結(jié)果。最高位為1時(shí),采用0-23位,否則采用1-24位。注意舍入本身可能導(dǎo)致最高位被置位,這就是舍入后溢出的情況。
如圖2所示,輸入被分為三部分高位段(第0-21位),中間段(第22-25位)和低位段(第26-74位)。下面詳細(xì)介紹每一部分的設(shè)計(jì)。
高位段。這部分被輸入到條件加法器中計(jì)算sum(sum0)和sum+1(sum1)。中位段的最高位進(jìn)位決定選擇sum0還是sum1。
中位段。這4位與低位段的最高位進(jìn)位相加, RN和RI模式時(shí)需在舍入位加1,RI模式時(shí)還需加粘滯位。注意不需進(jìn)行一位左移時(shí)舍入位為第24位,否則為第25位。
考慮到計(jì)算低位段進(jìn)位的延時(shí)較大,計(jì)算是否需要左移一位的信號(hào)的延時(shí)大于粘滯位的計(jì)算和4-bit全加,所以采用條件加法器,同時(shí)計(jì)算左移和不需左移,低位段有進(jìn)位和無進(jìn)位時(shí)的全加結(jié)果,然后根據(jù)左移信號(hào)和進(jìn)位選擇所需的結(jié)果。
是否需要左移由sum0的最高位,sum1的最高位,以及向高位段的進(jìn)位決定,
其中c_no_left_shift為假設(shè)不需左移時(shí)4位全加結(jié)果的最高位進(jìn)位。
一排半加器被用來確保舍入和低位處理時(shí)最多僅有一個(gè)向第21位的進(jìn)位,這一半加在3∶2CSA之后就已完成。
低位段被輸入到計(jì)算最高位的進(jìn)位以及粘滯位st2的電路中。
注意還要考慮A對(duì)齊時(shí)收集移出位得到的粘滯位st1,最終的粘滯位sticky=st1+st2。
權(quán)利要求
1.一種浮點(diǎn)乘加融合單元的五級(jí)流水線結(jié)構(gòu),其特征在于,含有一種五級(jí)流水實(shí)現(xiàn)的單精度浮點(diǎn)乘加運(yùn)算單元,實(shí)現(xiàn)了形式為A+(B×C)的乘加操作,其吞吐量為每周期一條指令,如圖2所示,具體結(jié)構(gòu)如下
第一級(jí)流水線由指數(shù)處理單元1、以4為基的波茨編碼器3、3∶2的進(jìn)位保存加法器(CSA)組成的部分積壓縮樹4的一部分和符號(hào)處理單元2組成;其中,
指數(shù)處理單元1根據(jù)操作數(shù)A的指數(shù),B的指數(shù)和C的指數(shù)計(jì)算其指數(shù)差d
d=exp(A)-(exp(B)+exp(C)-127),
其中,exp(A),exp(B)和exp(C)分別是操作數(shù)A,B和C的指數(shù),根據(jù)IEEE 754標(biāo)準(zhǔn),單精度浮點(diǎn)數(shù)的指數(shù)為其第2位到第8位,并計(jì)算A與B×C對(duì)齊時(shí)所需的移位量mv,
mv=74-d,
確定數(shù)據(jù)通路的臨時(shí)指數(shù)Exp_temp,其計(jì)算方法為
若mv<0,則Exp_temp=exp(A);否則Exp_temp=exp(B)+exp(C)-127+27;這里加27是因?yàn)锽×C的結(jié)果在數(shù)據(jù)通道中靠右側(cè)擺放,如圖3(a)所示;
符號(hào)處理單元2根據(jù)操作數(shù)A的符號(hào),B的符號(hào)和C的符號(hào)計(jì)算臨時(shí)符號(hào)、是否為有效減(sub),根據(jù)IEEE 754標(biāo)準(zhǔn),單精度浮點(diǎn)數(shù)的符號(hào)位為其最高位,臨時(shí)符號(hào)由B×C的符號(hào)位表示,A的符號(hào)位與B×C的符號(hào)位不同時(shí),sub=1,否則sub=0;
基4的波茨編碼器3對(duì)C的尾數(shù)進(jìn)行編碼,然后將編碼的結(jié)果與B的尾數(shù)相乘得到13個(gè)部分積,根據(jù)IEEE 754標(biāo)準(zhǔn),單精度浮點(diǎn)數(shù)的尾數(shù)為其第9位到第32位,編碼后的13個(gè)部分積的被送入3∶2的進(jìn)位保存(CSA)壓縮樹4中,單個(gè)單字節(jié)CSA單元和CSA壓縮樹的構(gòu)造分別在圖4和圖5中做了詳細(xì)的介紹,其中圖5的輸入x、y、z為3個(gè)要被壓縮的字節(jié),輸出S、C分別為壓縮后的和字節(jié)和進(jìn)位字節(jié),圖6的輸入in1~in13為波茨編碼后得到的13個(gè)部分積,輸出為壓縮后得到的和、進(jìn)位,整個(gè)壓縮樹由11個(gè)49比特的CSA構(gòu)成,其中每個(gè)CSA由49個(gè)圖5中的單元結(jié)構(gòu)構(gòu)成,將13個(gè)部分積壓縮為兩個(gè),需要5級(jí)的CSA樹,為平衡各級(jí)流水線的延時(shí),這里將前兩級(jí)CSA樹放在第一級(jí)流水線中,而后面的三級(jí)CSA樹留到第二級(jí)流水線中執(zhí)行,最終壓縮的結(jié)果需要被處理后才能做為乘法結(jié)果,具體處理方法為部分積壓縮樹每一壓縮的結(jié)果都保留49位,最后一級(jí)壓縮后的兩個(gè)輸出的最高位都為1時(shí),將這兩個(gè)1改為0,否則若兩個(gè)最高位1個(gè)是1,另一個(gè)是0,而兩個(gè)次高位均為1時(shí),將這最高位的1個(gè)1和次高位的2個(gè)1都改為0,其與情況不需做修改;
第二級(jí)流水線由指數(shù)狀態(tài)劃分器5、74比特移位對(duì)齊器6、按位取反器7、粘滯位計(jì)算器8、3∶2的進(jìn)位保存加法器(CSA)組成的部分積壓縮樹4的一部分和一個(gè)3∶2 CSA組成;其中,
指數(shù)狀態(tài)劃分器5根據(jù)1中計(jì)算出的d和從2中得到的sub,將指數(shù)的狀態(tài)劃分為以下6種情況
1)d≥27
2)27>d≥3或d=2,sub=0
3)2≥d≥-48且sub=1
4)d=1或d=0,sub=0
5)-1≥d≥-48且sub=0
6)d<-48
前導(dǎo)零預(yù)測模塊10將根據(jù)這里劃分的狀態(tài)進(jìn)行特殊的操作,介紹10時(shí)將會(huì)具體的介紹;
74比特的移位對(duì)齊器6根據(jù)指數(shù)處理單元1得到的mv值,對(duì)A的尾數(shù)進(jìn)行移,A最初被放置在B×C最高位的左邊,如圖3(a)所示,為保證d>27時(shí)能準(zhǔn)確地進(jìn)行舍入,將兩個(gè)額外位放在A和B×C最高位之間,d>27時(shí),A不移位,通過置入兩個(gè)額外位,舍入邏輯不再需要考慮B×C的結(jié)果,A右移的位數(shù)由d決定,有三種情況
1.mv≤0,B×C在A最低位的右邊,這種情況下,B×C僅影響粘滯位的計(jì)算,不需要移動(dòng)A;
2.0<mv<74,A右移mv位,mv>50時(shí),A的一部分將被移到B×C最低位的右邊,這些移出位將被收集用來計(jì)算粘滯位st1;
3.mv≥74,A將被全部移到B×C最低位的右邊,僅影響粘滯位st1的計(jì)算;
計(jì)算粘滯位的部件8收集A向右移位對(duì)齊時(shí)移出數(shù)據(jù)通道的位,用以計(jì)算粘滯位,這里產(chǎn)生的粘滯位僅僅是整個(gè)乘加單元實(shí)現(xiàn)過程中產(chǎn)生的粘滯位的一部分,記為st1,在第四級(jí)流水線中還會(huì)產(chǎn)生粘滯位,后面介紹第四級(jí)流水線的時(shí)候?qū)?huì)詳細(xì)介紹;若sub=0,A被移出數(shù)據(jù)通道的位全為0時(shí),st1=0,否則st1=1;若sub=1,A被移出數(shù)據(jù)通道的位全為1時(shí),st1=0,否則st1=1;
按位取反器7,如果A的符號(hào)位和B×C的符號(hào)位不同,對(duì)A的尾數(shù)的每比特都做取反操作(也就是按位取反),如果A的符號(hào)位和B×C的符號(hào)位相同,則不作取反操作,并將操作結(jié)果和4的輸出結(jié)果一起送入32CSA 9中作一次壓縮,其輸出結(jié)果記為sum、carry,它們?cè)跀?shù)據(jù)通道中的存在形式如圖3(c)所示;A的符號(hào)位和B×C的符號(hào)位不同時(shí),還要在A的最低位加1以完成對(duì)A的求補(bǔ),但是移位后,A的最低位可能在24位到74位之間的任一位置,我們希望將1加到一個(gè)固定的位置,檢查A的最低位在161位左邊和右邊兩種情況,可發(fā)現(xiàn)sub=1且st1=0時(shí)要在進(jìn)位字節(jié)的最低位加1,如圖3(c)所示,這一加1能正確的傳遞到A的最低位,32CSA壓縮后進(jìn)位字節(jié)(carry)的最低位(74位)為空,1可加在這位上;
第三級(jí)流水線由前導(dǎo)零檢測模塊10、74比特的半加器11、12和13、符號(hào)預(yù)測邏輯14、25比特的一次性移位器15和選擇器16組成;其中,
前導(dǎo)零檢測模塊10,根據(jù)5和9的輸出,以及d和sub的值確定后兩次規(guī)格化移位(分別由17、25完成)的移位量,下面闡述根據(jù)d和sub劃分的六種情況,詳細(xì)討論各種情況下如何確定前導(dǎo)零個(gè)數(shù)(結(jié)果為負(fù)時(shí)為前導(dǎo)一)
情況1d≥27
前導(dǎo)零個(gè)數(shù)(LZN)可能為0或1,不需要進(jìn)行移位,1位的左移不確定留到加法和舍入部分處理,17和25的移位量均為0;
情況227>d≥3或d=2,且sub=0
25的移位量為0,sub=1時(shí),17中的移位量為mv,其中mv為1中計(jì)算出的A相對(duì)B×C移位對(duì)齊時(shí)的移位量;sub=1時(shí),17中的移位量為mv-1,因?yàn)榇藭r(shí)為有效加法,加法器20中最高位可能產(chǎn)生進(jìn)位(Cout=1,Cout表示加法器20中最高位的進(jìn)位),17中的移位量最少為0,最多為25;
情況32≥d≥-48且sub=1
此時(shí)A和B×C非常接近,減法運(yùn)算可能損失很多有效位,這種情況下需要特殊的前導(dǎo)零預(yù)測邏輯,我們的實(shí)現(xiàn)方法如下
通過檢查某一位及其左右相鄰的位確定哪一位可能是最高位,設(shè)一預(yù)測位fi,G=sum&carry,
其中sum、carry為9的兩個(gè)輸出,若fi=1,而fj=0(j=0,1…i-1),則最高位為i或i+1,
i≤26時(shí),17中的移位量為i,25中的移位量為0;否則17中的移位量為26,25中的移位量為i-26;
情況4sub=0,且d=1或0
17和25中的移位量均為0;
情況5-1≥d≥-48且sub=0
25中的移位量為0;
17中的移位量由BC_sum
,BC_sum[1],BC_carry
,BC_carry[1]確定,它們分別是4的兩個(gè)輸出的最高兩位,若
BC_sum
|BC_carry
|(BC_sum[1]& BC_carry[1])=1
則A與B×C相加,Cout=1,Cout為前面提到過的加法器20中最高位的進(jìn)位,這種情況下17中的移位量為0,否則Cout=0,17中的移位量為1;
情況6d<-48
B×C遠(yuǎn)大于A,A僅影響舍入邏輯,在17中只需左移一位,25中的移位量為0;
總結(jié)幾上各種情況可發(fā)現(xiàn)17、25中的最大的移位量僅為26位;
74比特的半加器11、12和13的引入是為了保證在第五級(jí)流水線中部件27、28僅產(chǎn)生一位進(jìn)位,為減少電路的延時(shí),這里同時(shí)對(duì)9輸出結(jié)果及其補(bǔ)數(shù)表示進(jìn)行處理,待部件14判斷出結(jié)果的正負(fù)后再用選擇器16選擇需要的結(jié)果,11的輸入為sum、carry,輸出結(jié)果為sum&carry,即對(duì)sum和carry作按位與操作,12的輸入為sum、carry,輸出結(jié)果為sum^carry,即對(duì)sum和carry作按位或操作,13的輸入為sum、carry按位取反,輸出結(jié)果為sum和carry分別按位取反后作按位與操作;
25比特的一次性移位器15,根據(jù)1的輸出d和2的輸出sub判斷是否對(duì)11、12、13的輸出進(jìn)行一次25比特的移位d>2,或者d=2且sub=0時(shí)進(jìn)行移位,否則不進(jìn)行移位,為得到sum、carry的補(bǔ)數(shù)表示,除了按位取反,還需要分別在最低位加1,這里的兩個(gè)加1采用的技巧為1個(gè)加在13的輸出的最低位,同時(shí)將數(shù)據(jù)通道向右拓展一位,然后在12和13的輸出的最低位分別置1,這樣就完成了另一個(gè)加1;
結(jié)果可能為負(fù)時(shí)將需要非常復(fù)雜的選擇,注意這里提到的負(fù)指的是A+B×C的符號(hào)與B×C的符號(hào)不同,避免這一麻煩同時(shí)減小電路時(shí)延的方法是提前判斷結(jié)果的正負(fù),結(jié)果為負(fù)時(shí)選擇9輸出的補(bǔ)數(shù)表示,這一判斷由符號(hào)預(yù)測模塊14完成,它在進(jìn)行前導(dǎo)零預(yù)測(10)、半加(11、12、13)以及一次性移位(15)的同時(shí)進(jìn)行,符號(hào)預(yù)測模塊14根據(jù)9的輸出結(jié)果sum和carry預(yù)測最終結(jié)果的正負(fù),結(jié)果僅在有效減(sub=1)時(shí)可能為負(fù),有效減時(shí),A的補(bǔ)數(shù)始終被使用,因此結(jié)果僅在d>0時(shí)可能為負(fù),可能有兩種情況
1.d≥2時(shí)結(jié)果始終為負(fù);
2.d=0或d=1時(shí),要對(duì)A和B×C進(jìn)行全面的比較,具體方法是檢測sum加carry時(shí),
最高位是否有進(jìn)位產(chǎn)生,若有,則符號(hào)判斷的結(jié)果為正;
選擇器16根據(jù)14判斷的結(jié)果從15的結(jié)果中選擇,若14判斷出結(jié)果為正,則選擇sum和carry一次性移位后的輸出,否則選擇sum和carry取補(bǔ)再移位后的輸出;
第四級(jí)流水線由26比特的規(guī)格化移位器17、最終結(jié)果的符號(hào)計(jì)算部件18、指數(shù)計(jì)算部件19、22位條件加法器20、進(jìn)位和粘滯位計(jì)算部件21和兩個(gè)與門22、23組成,其中,
26比特的規(guī)格化移位器17根據(jù)10中得到的移位量對(duì)16的輸出結(jié)果進(jìn)行移位,最大移位量為26;
最終結(jié)果的符號(hào)計(jì)算部件18將2中得到的B*C的符號(hào)和14得到的符號(hào)預(yù)測結(jié)果進(jìn)行異或操作,得到A+B*C的符號(hào);
指數(shù)計(jì)算部件19計(jì)算A+B*C的指數(shù),計(jì)算方法為1中得到的Exp_temp與三次規(guī)格化移位(由15、17、25完成)的移位量之和相加;
22位條件加法器20,將17輸出結(jié)果的高22比特相加得到sum0,sum0+1得到sum1;
部件21~23是完成舍入的部件的一部分;
IEEE 754標(biāo)準(zhǔn)中規(guī)定了4種舍入模式就近舍入(RN),向正無窮舍入(RP),向負(fù)無窮舍入(RM),向零舍入(RZ),從應(yīng)用的角度來看,這四種舍入模式能減少到三個(gè)RN、RI、RZ,如表1所示;
從數(shù)學(xué)意義上講,
這里

分別表示向上取整和向下取整;
21中利用17輸出的低49位計(jì)算其最高位進(jìn)位,利用17輸出結(jié)果的低50位和st1計(jì)算粘滯位;有左移的粘滯位的計(jì)算方法為17輸出的兩個(gè)數(shù)的低49位相加的結(jié)果為零,且st1=0時(shí),粘滯位的計(jì)算結(jié)果為0;無左移的粘滯位的計(jì)算方法為17輸出的兩個(gè)數(shù)的低50位相加的結(jié)果為零,且st1=0時(shí),粘滯位的計(jì)算結(jié)果為0;采用下面的方法可快速確定兩個(gè)數(shù)是否為0設(shè)兩個(gè)操作數(shù)為A=a0...an-1,B=b0...bn-1,記矢量E=e0...en-1,其中pi=ai&bi,ki=ai+bi,那么A+B=0 if
22和23為兩個(gè)與門,22的輸入為RI和21中得到的無左移時(shí)的粘滯位,輸出進(jìn)入加法器28,23的輸入為RI和21中得到的有左移時(shí)的粘滯位,輸出進(jìn)入加法器27;
第五級(jí)流水線由指數(shù)修正部件24、24比特的規(guī)格化移位器25、兩個(gè)4位的加法器27和28、選擇器29和最低位修正部件30;其中,
盡管前面已進(jìn)行規(guī)格化移位,但由于10中采用的前導(dǎo)零邏輯有一位的不確定性,以及兩個(gè)數(shù)相加是否有進(jìn)位的不確定性,將17的輸出結(jié)果相加最高位可能為0,也就是說還可能需要一位左移;是否需要左移由sum0的最高位,sum1的最高位,以及21中得到的低49位向高位段的進(jìn)位決定,
其中c_no_left_shift為假設(shè)不需左移時(shí)4位全加結(jié)果(在28中得到)的最高位進(jìn)位;
若Left_shift=1,則指數(shù)修正部件24將19中得到的結(jié)果減1得到最終結(jié)果的指數(shù),否則不需減1;
第三步規(guī)格化移位在25中完成,其移位量在10中已計(jì)算出了;
22和23為兩個(gè)4位的加法器,它們有三個(gè)共同的輸入17中兩個(gè)輸出結(jié)果的23~26比特,以及RN+RI,一個(gè)不同的輸入分別為22和23的輸出;
選擇器29根據(jù)Left_shift的值從27和28的輸出中作選擇,若Left_shift=1,則選擇28的輸出作為輸出,否則選擇27的輸出;
29輸出結(jié)果的最高位為1時(shí),選擇器26選擇sum1經(jīng)部件25處理后的輸出作為輸出,否則選擇sum0經(jīng)25處理后的輸出;
最后,RN模式時(shí)最低位需要被修正,這由舍入位和粘滯位確定
LSBcorrected=0 if(~R)&sticky&RN=1
其中R為舍入位,本設(shè)計(jì)中為29的輸出的第3位,sticky為粘滯位,Left_shift=1,其值等于21中計(jì)算得的有左移時(shí)的粘滯位的值,否則為無左移時(shí)的粘滯位的值;
最終,對(duì)26和30的輸出結(jié)果進(jìn)行拼接——26的輸出,聯(lián)合30輸出的最高兩比特,就得到了A+B*C的尾數(shù)。
全文摘要
本發(fā)明公開了一種單精度浮點(diǎn)乘加單元的全流水線設(shè)計(jì),實(shí)現(xiàn)了形式為A+B×C的乘加運(yùn)算,分五級(jí)流水線實(shí)現(xiàn)在第一級(jí)流水線中,計(jì)算指數(shù)差,并完成乘法的一部分;在第二級(jí)流水線中,根據(jù)指數(shù)差將A與B×C對(duì)齊,有效減時(shí)取反,完成剩下的乘法,同時(shí)將指數(shù)劃分成六種狀態(tài),不同狀態(tài)下規(guī)格化移位量的計(jì)算方法將不同;在第三級(jí)流水線中,預(yù)測前導(dǎo)零數(shù)目,同時(shí)同步預(yù)測最終結(jié)果的符號(hào),最后進(jìn)行第一步規(guī)格化移位;在第四級(jí)流水線中,首先完成第二步規(guī)格化移位,然后進(jìn)行加法和舍入的一部分;最后一級(jí)流水線中,完成加法和舍入,修正指數(shù)項(xiàng),第三步規(guī)格化移位在舍入的間隔里完成。本發(fā)明的優(yōu)點(diǎn)在于在硬件開銷較小的情況下實(shí)現(xiàn)了高性能、高精度。
文檔編號(hào)G06F7/57GK101174200SQ200710099408
公開日2008年5月7日 申請(qǐng)日期2007年5月18日 優(yōu)先權(quán)日2007年5月18日
發(fā)明者李兆麟, 李恭瓊, 軒 張 申請(qǐng)人:清華大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1