欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種并行浮點(diǎn)乘加單元的制作方法

文檔序號(hào):6614042閱讀:193來源:國知局
專利名稱:一種并行浮點(diǎn)乘加單元的制作方法
技術(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中壓縮后得到的兩個(gè)部分積進(jìn)行前導(dǎo)零預(yù)測(cè)(LZA,leading zeroanticipator),得到加法結(jié)果的規(guī)格化左移的位數(shù)。同時(shí)判斷最終結(jié)果的正負(fù)。
4.在前導(dǎo)零預(yù)測(cè)和符合預(yù)測(cè)的同時(shí)做半加操作,并完成部分的加法運(yùn)算。進(jìn)行半加操作是為了保證后面能正確地進(jìn)行舍入。由于符號(hào)預(yù)測(cè)所需要的時(shí)間比半加操作多,可在此時(shí)間空隙里完成最終加法的一部分。
5.加法結(jié)果利用LZA預(yù)測(cè)的左移的位數(shù)進(jìn)行規(guī)格化左移。若3中符號(hào)預(yù)測(cè)部件判斷最終結(jié)果為負(fù),則選擇2中壓縮后得到的部分積的補(bǔ)數(shù)形式經(jīng)第4步處理后的結(jié)果進(jìn)行規(guī)格化移位。
6.最終加法和舍入操作。
圖1所示的現(xiàn)有技術(shù)的不足如下 (1)不能同時(shí)處理一個(gè)加法指令(A+B)和一個(gè)乘法指令(C×D),而需要兩個(gè)周期來完成這兩條指令,而分析一些應(yīng)用實(shí)例發(fā)現(xiàn),如果加法和乘法指令能同時(shí)進(jìn)行,能較大地提高指令流的執(zhí)行效率; (2)連續(xù)兩條指令存在數(shù)據(jù)相關(guān)時(shí),流水線將被迫等待兩個(gè)周期(三級(jí)流水線實(shí)現(xiàn)時(shí)),而在實(shí)際應(yīng)用中,數(shù)據(jù)相關(guān)又是一個(gè)非常普遍的現(xiàn)象。
圖1所示的現(xiàn)有技術(shù)的不足不能夠通過采用單獨(dú)的加法單元和乘法單元來解決,首先,會(huì)增大硬件開銷,其次,乘加指令需要拆分成兩條指令來執(zhí)行,降低了其執(zhí)行效率,且由于進(jìn)行了兩次舍入,降低了精度,最后,這種方案不能對(duì)發(fā)生了數(shù)據(jù)相關(guān)的指令進(jìn)行加速。通過采用一個(gè)乘加單元和一個(gè)加法單元能彌補(bǔ)圖1所示的現(xiàn)有技術(shù)的部分不足,但是其硬件開銷的增加太大,而且對(duì)于發(fā)生了數(shù)據(jù)相關(guān)的指令,這種解決方案同樣是無能為力。
相對(duì)圖1所示的現(xiàn)有技術(shù),本發(fā)明實(shí)現(xiàn)了形式為A+B+C×D的操作,稱為并行的乘加操作,有如下優(yōu)點(diǎn) (1)能夠同時(shí)處理一個(gè)加法指令(A+B)和一個(gè)乘法指令(C×D),實(shí)現(xiàn)了加法指令和乘法指令的指令級(jí)并行; (2)當(dāng)相鄰的兩條指令發(fā)生如下三種數(shù)據(jù)相關(guān)時(shí),能夠作為一條指令在進(jìn)行處理 a)第一條指令E=A+B,第二條指令F=E+C b)第一條指令E=A+B,第二條指令F=E+C×D c)第一條指令E=A+C×D,第二條指令F=E+B (3) 每條并行乘加指令運(yùn)算完成時(shí),都能同時(shí)得到乘法操作(C×D)的結(jié)果,而且可以單獨(dú)指定乘法的舍入模式。


發(fā)明內(nèi)容
本發(fā)明的目的在于設(shè)計(jì)一種高性能的全流水線的單精度高速的并行浮點(diǎn)乘加單元,提高浮點(diǎn)指令的并行度和執(zhí)行效率,同時(shí)保證較少的硬件開銷。
本發(fā)明特征在于,本發(fā)明提供了一種三級(jí)流水實(shí)現(xiàn)的單精度并行浮點(diǎn)乘加運(yùn)算單元,實(shí)現(xiàn)形式為A+B+(C×D)的乘加操作,A≥B,其特征在于,該浮點(diǎn)乘加單元含有三級(jí)流水,吞吐量為每周期一條指令,且同時(shí)能夠產(chǎn)生C×D的結(jié)果,該浮點(diǎn)乘加單元含有 第一級(jí)流水線由指數(shù)和符號(hào)處理單元(1)第一個(gè)74比特移位對(duì)齊器(2)、第二個(gè)74比特移位對(duì)齊器(3)、粘滯位計(jì)算器(4)、第一個(gè)按位取反器(5)、第二個(gè)按位取反器(6)、3:2的進(jìn)位保存加法器CSA(7)、以4為基的波茨編碼器(8)、3:2的進(jìn)位保存加法器CSA組成的部分積壓縮樹(9)、24比特加法器(10)和選擇器(11)組成;其中, 指數(shù)和符號(hào)處理單元(1),根據(jù)操作數(shù)A、B、C、D的指數(shù)和符號(hào)計(jì)算A+B+(C×D)的指數(shù)exp、C×D的指數(shù)exp_CD、是否為有效減sub、A+B+(C×D)的臨時(shí)符號(hào)sign、C×D的符號(hào)sign_CD,并確定A和B相對(duì)C×D移位對(duì)齊時(shí)的移位量mv_A、mv_B,以及A和B移位對(duì)齊后是否需要按位取反sub_A、sub_B,按位取反即對(duì)每一位進(jìn)行取反,也就是將0變?yōu)?,將1變?yōu)?; exp_CD=exp_C+exp_D, sub=sign_Asign_Csign_D, sign=sign_CD=sign_Csign_D, sub_A=sign_Asign_Csign_D, sub_B=sign_Bsign_Csign_D, 其中,sian_A、sign_B、sign_C和sign_D分別是操作數(shù)A、B、C和D的符號(hào),exp_A、exp_B、exp_C和exp_D分別是操作數(shù)A、B、C和D的指數(shù),根據(jù)IEEE 754標(biāo)準(zhǔn),單精度浮點(diǎn)數(shù)的符號(hào)為其最高位,指數(shù)為第2位到第8位;為異或操作; exp_CD-exp_A≤-51且sign_A≠sign_B時(shí), exp=exp_A, mv_A=0, mv_B=exp-exp_B, exp_CD-exp_A≤-51且sign_A=sign_B時(shí), exp=exp_A+1, mv_A=1, mv_B=exp-exp_B, -27>exp_CD-exp_A>-51時(shí), exp=exp_CD+51, mv_A=exp-exp_A, mv_B=exp-exp_B, 23≥exp_CD-exp_A≥-27時(shí), exp=exp_CD+27, mv_A=exp-exp_A, mv_B=exp-exp_B, exp_CD-exp_A>23時(shí), exp=exp_CD+1, mv_A=exp-exp_A, mv_B=exp-exp_B, 第一個(gè)74比特的移位器(2)根據(jù)指數(shù)和符號(hào)處理單元(1)中得到的mv_A值,對(duì)A的尾數(shù)man_A進(jìn)行向右移位,根據(jù)IEEE 754標(biāo)準(zhǔn),單精度浮點(diǎn)數(shù)的尾數(shù)為其第8位到32位,其為規(guī)格化數(shù)時(shí)在最高位補(bǔ)1,否則在最高位補(bǔ)零,非規(guī)格化數(shù)將作為0看待,移位后的輸出記為align_A, align_A=man_A□mv_A, 其中□表示右移; 第二個(gè)74比特的移位器(3)根據(jù)指數(shù)和符號(hào)處理單元(1)中得到的mv_B值,對(duì)B的尾數(shù)man_B進(jìn)行向右移位,移位后的輸出記為align_B, align_B=man_B□mv_B; 粘滯位計(jì)算單元(4),根據(jù)第二個(gè)74比特的移位器(3)的移位結(jié)果和指數(shù)和符號(hào)處理單元(1)中計(jì)算的sub_B計(jì)算粘滯位st1_B,mv_B>74時(shí),若sub_B=0且man_B移出74比特寬的數(shù)據(jù)通道的部分全為0,或者sub_B=1且man_B移出74比特寬的數(shù)據(jù)通道的部分全為1,則st1_B=0,否則st1_B=1; 第一個(gè)按位取反器(5),如果A的符號(hào)位和C×D的符號(hào)位不同,對(duì)第一個(gè)74比特的移位器(2)的輸出結(jié)果align_A做按位取反操作,否則不做任何操作直接將align_A輸出,第一個(gè)按位取反器(5)的輸出記為inv_A; 第二個(gè)按位取反器(6),如果B的符號(hào)位和C×D的符號(hào)位不同,對(duì)第二個(gè)74比特的移位器(3)的輸出結(jié)果align_B的每比特都做取反操作(也就是按位取反),否則不做任何操作直接將align_B輸出,第二個(gè)按位取反器(6)的輸出記為inv_B; 將第一個(gè)按位取反器(5)和第二個(gè)按位取反器(6)的輸出結(jié)果inv_A和inv_B,以及指數(shù)和符號(hào)處理單元(1)中得出的sub_A一起送入3:2 CSA(7)中作一次壓縮,得到sum_AB、carry_AB,其中 sum_AB=inv_A^inv_B^sub_A, carry_AB=((inv_A&inv_B)|(inv_A&sub_A)|(inv_A&sub_A))<<1, 并將sub_B和st1_B與操作的結(jié)果放在carry_AB的最低位上, carry_AB[73]=sub_B&st1_B, 這里^、&和|分別表示按位異或、按位與和按位或操作,<<表示向左移位; 基4的波茨編碼器(8)對(duì)C的尾數(shù)進(jìn)行編碼,然后將編碼的結(jié)果與D的尾數(shù)相乘得到13個(gè)部分積,這13個(gè)部分積的被送入3:2的進(jìn)位保存CSA壓縮樹(9)中,3:2 CSA樹即由3:2 CSA組成的樹,3個(gè)輸入經(jīng)過一個(gè)CSA將被壓縮成2個(gè)輸出,若設(shè)輸入為x、y、z,輸出為s、c,則壓縮過程可表示如下 s=x^y^z, c=((x&y)|(x&z)|(y&z))<<1, 將5級(jí)3:2 CSA級(jí)聯(lián),形成3:2 CSA樹,就能將13個(gè)部分積壓縮為2個(gè),分別記為sum_CD、carry_CD; sum CD和carry_CD的低24位被送到24比特的加法器(10)中,加法結(jié)果被總結(jié)成兩個(gè)信息輸出st1_CD和st1_CD_3MSB,其中記錄加法結(jié)果的低24位是否全為零,若全為零,則st1_CD=0,否則st1_CD=1;st1_CD_3MSB記錄25比特的加法結(jié)果的最高三位; 選擇器(11)根據(jù)指數(shù)和符號(hào)處理單元(1)中計(jì)算出的指數(shù)范圍從st1_B和st1_CD中選取一個(gè)作為st1輸出, -27>exp_CD_exp_A>-51時(shí),st1=st1_CD,其它情況下st1=st1_B; 第二級(jí)流水線由4:2 CSA(12)、74比特的前導(dǎo)零預(yù)測(cè)模塊(13)、第一個(gè)74比特的半加器(14)、第一個(gè)74比特的半加器(15)和第一個(gè)74比特的半加器(16)、符號(hào)預(yù)測(cè)邏輯(17)、選擇器(18)、74比特的移位器(19)和與門(20)組成;其中, 4:2 CSA(12)相當(dāng)與2個(gè)級(jí)聯(lián)的3:2,將四個(gè)輸入sum_AB、carry_AB、sum_CD和carry_CD壓縮為兩個(gè)sum和carry,其中sum_CD和carry_CD要根據(jù)指數(shù)和符號(hào)處理單元(1)中計(jì)算的指數(shù)范圍進(jìn)行移位后作為CSA的輸入,當(dāng)exp_CD-exp_A<-27時(shí),將sum_CD和carry_CD的前24位作為輸入,當(dāng)23≥exp_CD-exp_A≥-27時(shí),將sum_CD和carry_CD作為輸入,其他情況下(exp_CD-exp_A>23),將sum_CD和carry_CD向左移26比特后作為輸入,壓縮后將10中得到的st1_CD_3MSB的最高位存放在carry的最低位上; 74比特的前導(dǎo)零預(yù)測(cè)模塊(13),判斷12的輸出結(jié)果sum和carry相加時(shí),前導(dǎo)零的數(shù)目,前導(dǎo)零數(shù)目即從最高位開始,到第一個(gè)非0位之間的位數(shù),若sum和carry相加結(jié)果為負(fù),則這里判斷的將是前導(dǎo)一的數(shù)目,即從最高位到第一個(gè)非1位之間的位數(shù),具體的判斷方法為 通過檢查某一位及其左右相鄰的位確定哪一位可能是最高位,設(shè)一預(yù)測(cè)位fi, T=sumcarry,G=sum&carry,
其中sum、carry為(13)的兩個(gè)輸出,

表示將sum按位取反,Ti、Gi、Zi分別表示T、G、Z的第i位,若fi=1,而fj=0(j=0,1…i-1),則前導(dǎo)零個(gè)數(shù)(LZN)為i; 設(shè)半加器輸入為x、y,輸出為s、c,則其原理可表示為 s=x^y, c=(x&y)<<1, 第一個(gè)半加器(14)根據(jù)上述原理將4:2CSA(12)輸出的sum和carry處理為輸出sumHApos和carryHApos; 將sum和carry按位取反后作為半加器第二個(gè)半加器(15)的輸入,輸出為sumHAinv和carryHAinv,并將carryHAinv的最低位置為1; 將sumHAinv和carryHAinv按位取反后作為第三個(gè)半加器(16)的輸入,輸出為sumHAcom和carryHAcom,并將carryHAcom的最低位置為1,這樣sumHAcom+carryHAcom就相當(dāng)于sum+carry的補(bǔ)數(shù)形式了; 符號(hào)預(yù)測(cè)模塊(17),預(yù)測(cè)方法為判斷sum+carry最高位是否有進(jìn)位產(chǎn)生,若有進(jìn)位產(chǎn)生,則相加結(jié)果為負(fù),將輸出信號(hào)complement賦為1,否則complement=0; 選擇器(18)根據(jù)符號(hào)預(yù)測(cè)的結(jié)果,從sumHApos、carryHApos和sumHAcom、carryHAcom中選擇一對(duì)作為輸出,其輸出記為sumHA、carryHA, complement=0時(shí),sumHA=sumHApos,carryHA=carryHApos, complement=1時(shí),sumHA=sumHAcom,carryHA=carryHAcom; 74比特的移位器(19)根據(jù)前導(dǎo)零預(yù)測(cè)的結(jié)果,對(duì)選擇器(18)的輸出向左進(jìn)行移位,移位量為LZN,移位后的輸出記為sumnor和carrynor; 與門(20)對(duì)符號(hào)預(yù)測(cè)模塊(17)的輸出complement和指數(shù)和符號(hào)處理單元(1)的輸出sign進(jìn)行與操作,得到A+B+C×D的符號(hào); 第三級(jí)流水線由A+B+C×D的指數(shù)計(jì)算單元(21)、A+B+C×D的最終加/舍入單元(22)、C×D的指數(shù)修正單元(23)、C×D的最終加/舍入單元(24)組成;其中, A+B+C×D的指數(shù)計(jì)算單元(21),根據(jù)指數(shù)和符號(hào)處理單元(1)中得到的exp、74比特的前導(dǎo)零預(yù)測(cè)模塊(13)中得到的LZN和A+B+C×D的最終加/舍入單元(22)中是否發(fā)生1位左移計(jì)算A+B+C×D的指數(shù),若A+B+C×D的最終加/舍入單元(22)中不發(fā)生1位左移,則A+B+C×D的指數(shù)為exp-LZN,否則需要進(jìn)行1比特的修正,最終A+B+C×D的指數(shù)將表示為exp-LZN-1; 在A+B+C×D的最終加/舍入單元(22)中,首先將74比特的移位器(19)的輸出sumnor和carrynor相加,結(jié)果記為ABCD_added, ABCD_added=sumHAnor+carryHAnor, 然后根據(jù)ABCD_added、選擇器(11)中得到的st1和舍入模式進(jìn)行舍入,舍入模式有就近舍入(RN),向正無窮舍入(RP),向負(fù)無窮舍入(RM),向零舍入(RZ),從應(yīng)用的角度來看,這四種舍入模式能減少到三個(gè)RN、RI、RZ;


RZ(x)=x 這里

和x分別表示向上取整和向下取整; 對(duì)于負(fù)數(shù),舍入模式RP可等效為RI,RM可等效為RN;對(duì)于正數(shù),舍入模式RP可等效為RN,RM可等效為RI; 首先計(jì)算粘滯位st2,若ABCD_added的最高位為1,則st2=|abcd_added[25:74],否則st2=|abcd_added[26:74];整個(gè)的粘滯位st由st1和st2兩部分組成 st=st1|st2 然后根據(jù)st、ABCD added和舍入模式RI、RN或RZ,計(jì)算舍入結(jié)果的兩個(gè)臨時(shí)值,分別記為rounding_result_tmp1和rounding_result_tmp2,rounding_result_tmp1的計(jì)算方法如下 RI=1時(shí), 如果st=1或者ABCD_added[24]=1,rounding_result_tmp1=ABCD_added
+1; 否則rounding_result_tmp1=ABCD_added
; RI=0時(shí),若RN=1, 若ABCD_added[24]=0rounding_result_tmp1=ABCD_added
; 否則,st=1時(shí),rounding_result_tmp1=ABCD_added
+1; ABCD_added[23]=1時(shí),rounding_result_tmp1=ABCD_added
+1; 否則,rounding_result_tmp1=ABCD_added
; RI=0時(shí),若RN=0,rounding_result_tmp1=ABCD_added
; rounding_result_tmp2的計(jì)算方法如下 RI=1時(shí), 如果st=1或者ABCD_added[25]=1, rounding_result_tmp2=ABCD_added[1:24]+1; 否則rounding_result_tmp2=ABCD_added[1:24]; RI=0時(shí),若RN=1, 若ABCD_added[25]=0rounding_result_tmp2=ABCD_added[1:24]; 否則,st=1時(shí),rounding_result_tmp2=ABCD_added[1:24]+1; ABCD_added[24]=1時(shí),rounding_result_tmp2=ABCD_added[1:24]+1; 否則rounding_result_tmp2=ABCD_added[1:24]; RI=0時(shí),若RN=0,rounding_result_tmp2=ABCD_added[1:24]; 最后根據(jù)ABCD_added的最高位和rounding_result_tmp1的最高位從rounding_result_tmp1和rounding_result_tmp2中選取一個(gè)作為最終A+B+C×D的尾數(shù),并決定21中的指數(shù)是否需要1比特的修正 若rounding_result_tmp1的最高位為1且ABCD_added的最高位為0,或者ABCD_added的最高位為1時(shí),選取rounding_result_tmp1作為最終結(jié)果,21中不需要1比特的修正,否則選取rounding_result_tmp2作為最終結(jié)果,21中需要1比特的修正; C×D的指數(shù)修正單元(23)根據(jù)C×D的最終加/舍入單元(24)中是否進(jìn)行了一位的左移判斷是否需要對(duì)指數(shù)和符號(hào)處理單元(1)中輸出的exp_CD進(jìn)行修正后才能作為最終的C×D的指數(shù),若C×D的最終加/舍入單元(24)中判得需要進(jìn)行修正,則最終的C×D的指數(shù)為exp_CD-1,否則最終的C×D的指數(shù)為exp_CD; 在C×D的最終加/舍入單元(24)中,根據(jù)3:2的進(jìn)位保存加法器CSA組成的部分積壓縮樹(9)中得到的sum_CD、carry_CD的高24位和(10)中得到的st1_CD、st1_CD_3MSB,計(jì)算C×D的尾數(shù),并判定是否需要進(jìn)行1比特的修正; 首先將sum_CD、carry_CD的高24位和st1_CD_3MSB的最高位相加,得到CD_added CD_added=sum_CD
+carry_CD
+st1_CD_3MSB
, 然后用A+B+C×D的最終加/舍入單元(22)中類似的方法計(jì)算C×D的尾數(shù),先計(jì)算兩個(gè)臨時(shí)值rounding_result_CD_tmp1和rounding_result_CD_tmp2, rounding_result_CD_tmp1的計(jì)算方法如下 若RI=1,若st1_CD=1或st1_CD_3MSB[1]=1, rounding_result_CD_tmp1=CD_added+1;否則, rounding_result_CD_tmp1=CD_added; 若RI=0,且RN=1,若st1_CD_3MSB[1]=0, rounding_result_CD_tmp1=CD_added;否則,若st=1, rounding_result_CD_tmp1=CD_added+1;若st1_CD_3MSB[1]=1,且CD_added[23]=1, rounding_result_CD_tmp1=CD_added+1;e否則 rounding_result_CD_tmp1=CD_added; 若RI=0,且RN=0, rounding_result_CD_tmp1=CD_added; rounding_result_CD_tmp2的計(jì)算方法如下 若RI=1, 若st1_CD=1或st1_CD_3MSB[2]=1, rounding_result_CD_tmp2={CD_added[1:23],st1_CD_3MSB[1]}+1; 否則, rounding_result_CD_tmp2={CD_added[1:23],st1_CD_3MSB[1]}; 若RI=0,且RN=1,若st1_CD_3MSB[2]=0, rounding_result_CD_tmp2={CD_added[1:23],st1_CD_3MSB[1]}; 否則,若st=1, rounding_result_CD_tmp2={CD_added[1:23],st1_CD_3MSB[1]}+1;若st1_CD_3MSB[2]=1,且st1_CD_3MSB[1]=1, rounding_result_CD_tmp2={CD_added[1:23],st1_CD_3MSB[1]}+1;否則, rounding_result_CD_tmp2<={CD_added[1:23],st1_CD_3MSB[1]}; 若RI=0,且RN=0, rounding_result_CD_tmp2<={CD_added[1:23],st1_CD_3MSB[1]}; 若rounding_result_CD_tmp1的最高位為1且CD_added的最高位為0,或者CD_added的最高位為1時(shí),選取rounding_result_CD_tmp1作為C×D的最終結(jié)果,C×D的指數(shù)修正單元(23)中不需要1比特的修正,否則選取rounding_result_CD_tmp2作為C×D的最終結(jié)果,C×D的指數(shù)修正單元(23)中需要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í)為2.89納秒。用SPEC 2000評(píng)估顯示,采用本發(fā)明后,相比普通的乘加單元,能夠獲得約20%的性能提升。



圖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是exp_CD-exp_A≤-51且sign_A≠sign_B時(shí),A相對(duì)C×D移位對(duì)齊后在數(shù)據(jù)通道中擺放的示意圖; 圖3b是exp_CD-exp_A≤-51且sign_A=sign_B時(shí),A相對(duì)C×D移位對(duì)齊后在數(shù)據(jù)通道中擺放的示意圖; 圖3c是-27>exp_CD-exp_A>-51時(shí),A相對(duì)C×D移位對(duì)齊后在數(shù)據(jù)通道中擺放的示意圖; 圖3d是23≥exp_CD-exp_A≥-27時(shí),A相對(duì)C×D移位對(duì)齊后在數(shù)據(jù)通道中擺放的示意圖; 圖3e是exp_CD-exp_A>23時(shí),A相對(duì)C×D移位對(duì)齊后在數(shù)據(jù)通道中擺放的示意圖; 圖4是乘法壓縮樹具體實(shí)現(xiàn)的框圖,這一壓縮樹由11個(gè)49比特的CSA組成。

具體實(shí)施例方式 下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步的詳細(xì)描述。
本發(fā)明采用三級(jí)流水線實(shí)現(xiàn),用VerilogHDL實(shí)現(xiàn),通過驗(yàn)證后用0.18微米標(biāo)準(zhǔn)單元庫進(jìn)行電路綜合。
本發(fā)明的單精度并行浮點(diǎn)單元按時(shí)序劃分為了三個(gè)流水節(jié)拍,下面參照?qǐng)D2,對(duì)整個(gè)工作過程進(jìn)行說明。在本實(shí)施例中,仍以A+B+C×D表示一個(gè)并行乘加操作。且這里B小于等于A,這是由編譯器預(yù)先處理過的。
第一級(jí)流水線A、B的移位對(duì)齊和C×D的波斯編碼、部分積壓縮。
基4的波茨編碼器3對(duì)C的尾數(shù)進(jìn)行編碼,然后將編碼的結(jié)果與D的尾數(shù)相乘得到13個(gè)部分積,編碼后的13個(gè)部分積的被送入3:2的進(jìn)位保存(CSA)壓縮樹9中,CSA壓縮樹的構(gòu)造分別在圖4中做了詳細(xì)的介紹,圖4中每一個(gè)單元模塊的輸入x、y、z為3個(gè)要被壓縮的49比特的數(shù),輸出S、C分別為壓縮后的49比特的和字節(jié)和進(jìn)位字節(jié),其邏輯關(guān)系為 S=x^y^z, C=((x&y)|(x&z)|(y&z))<<1, 這里^、&和|分別表示按位異或、按位與和按位或操作,<<表示向右移位。
圖4的輸入in1~in13為波茨編碼后得到的13個(gè)部分積,輸出為壓縮后得到的和、進(jìn)位字節(jié),也就是圖2中9的輸出sum_CD和carry_CD。整個(gè)壓縮樹由11個(gè)49比特的CSA構(gòu)成,將13個(gè)部分積壓縮為兩個(gè),需要5級(jí)的CSA樹。
A、B的移位對(duì)齊、取反與C×D的波斯編碼、部分積壓縮并行執(zhí)行。若A或B的符號(hào)與C×D的符號(hào)不同,則需要對(duì)其求補(bǔ)。求一個(gè)數(shù)的補(bǔ)數(shù)的方法為取反后加一。求補(bǔ)所需的加1可利用3:2 CSA進(jìn)位字節(jié)最低位上的空位來實(shí)現(xiàn)。Ainv表示將A的尾數(shù)按位對(duì)齊并取反(如果A的符號(hào)位與B×C的符號(hào)位相同則不需取反)的輸出。
在普通的乘加單元(這里以A+C×D表示一個(gè)普通的乘加操作)中,對(duì)A移位對(duì)齊的方法通常為將其從C×D的最高位左側(cè)26比特的位置開始存放,然后根據(jù)指數(shù)差向右進(jìn)行移位。在A的最初存放位置和C×D的最高位之間有兩個(gè)空位,目的是在A遠(yuǎn)大于C×D時(shí)確保能夠正確的舍入。在EMAF中,有兩個(gè)加數(shù),必須采用新的移位對(duì)齊策略,本發(fā)明中根據(jù)A、C、D的指數(shù)差,分五種情況,分別采用不同的移位對(duì)齊策略,這五種情況的劃分方法如下 1)exp_CD-exp_A≤-51且sign_A≠sign_B 2)exp_CD-exp_A≤-51且sign_A=sign_B 3)-27>exp_CD-exp_A>-51 4)23≥exp_CD-exp_A≥-27 5)exp_CD-exp_A>23 其中,sign_A、sign_B、sign_C和sign_D分別是操作數(shù)A、B、C和D的符號(hào),exp_A、exp_B、exp_C和exp_D分別是操作數(shù)A、B、C和D的指數(shù),根據(jù)IEEE 754標(biāo)準(zhǔn),單精度浮點(diǎn)數(shù)的符號(hào)為其最高位,指數(shù)為第2位到第8位。
各種情況下的數(shù)據(jù)通道,以及A移位對(duì)齊后相對(duì)于C×D在數(shù)據(jù)通道中的擺放情況如圖3所示。圖3中沒有給出B在數(shù)據(jù)通道的擺放,這是因?yàn)锽對(duì)數(shù)據(jù)通道的形式不產(chǎn)生影響,而僅僅是先將其從數(shù)據(jù)通道的最高位開始存放,然后根據(jù)其與C×D的指數(shù)差,相對(duì)C×D進(jìn)行移位。
exp_CD-exp_A≤-51且sign_A≠sign_B時(shí),數(shù)據(jù)通道的構(gòu)成如圖3(a)所示,A遠(yuǎn)遠(yuǎn)大于C×D,將A從74比特的數(shù)據(jù)通道的最高位開始擺放,C×D的高24比特置于74比特?cái)?shù)據(jù)通道的低24位上,而其低24比特置于數(shù)據(jù)通道之外。若B與A的指數(shù)差小于等于24,則B移位對(duì)齊后,其最低位將在C×D最高位的左邊,C×D將完全不影響最終結(jié)果,除了舍入;若B與A的指數(shù)差大于24,則B移位對(duì)齊后,其最高位將在A最低位的右邊,B和C×D都將不影響最終A+B+C×D的結(jié)果??偨Y(jié)上述兩種情況可以發(fā)現(xiàn),B和C×D在這種情況下移出數(shù)據(jù)通道的部分對(duì)最終A+B+C×D的結(jié)果都沒有影響,也就不需要考慮了。
exp_CD-exp_A≤-51且sign_A=sign_B時(shí),數(shù)據(jù)通道的構(gòu)成如圖3(b)所示,將A從數(shù)據(jù)通道的第二位開始擺放,這是為了防止最終A+B+C×D的結(jié)果溢出數(shù)據(jù)通道,其它與前一種情況類似。
-27>exp_CD-exp_A>-51時(shí),數(shù)據(jù)通道的構(gòu)成如圖3(c)所示,C×D在數(shù)據(jù)通道中的擺放與前兩種情況相同,移位前將A置于74比特?cái)?shù)據(jù)通道的最高24比特上,然后根據(jù)A和C×D的指數(shù)差進(jìn)行移位,由于其指數(shù)差在-51到-27之間,移位后A的最低位在C×D最高位的左邊。當(dāng)B的移位量大于50時(shí),B和C×D都有一部分在數(shù)據(jù)通道之外,但是此時(shí)移位后的B和C×D都在A的最低位的右邊,不影響最終A+B+C×D的結(jié)果,可見不需要同時(shí)考慮B和C×D移出數(shù)據(jù)通道外的部分。注意此時(shí)C×D壓縮后的兩個(gè)部分積的低24比特可能有進(jìn)位產(chǎn)生,這個(gè)進(jìn)位是需要考慮的。
23≥exp_CD-exp_A≥-27時(shí),數(shù)據(jù)通道的構(gòu)成如圖3(d)所示,C×D放于數(shù)據(jù)通道的低48比特上,移位前將A置于74比特?cái)?shù)據(jù)通道的最高24比特上,然后根據(jù)A和C×D的指數(shù)差進(jìn)行移位,由于其指數(shù)差在-27到23之間,移位后A可能在數(shù)據(jù)通道的任意位置,但是不會(huì)移出數(shù)據(jù)通道。
exp_CD-exp_A>23時(shí),數(shù)據(jù)通道的構(gòu)成如圖3(e)所示,C×D放于數(shù)據(jù)通道的高48比特上,移位前將A置于74比特?cái)?shù)據(jù)通道的最高24比特上,然后根據(jù)A和C×D的指數(shù)差進(jìn)行移位,由于其指數(shù)差大于23,移位后A可能在數(shù)據(jù)通道第25比特右邊的任意位置,甚至?xí)瞥鰯?shù)據(jù)通道。當(dāng)A被移出數(shù)據(jù)通道時(shí),其最高位在C×D最低位的右邊,由于B小于等于A,此時(shí)B也遠(yuǎn)小于C×D,A和B都將不影響最終結(jié)果。
總結(jié)上述5中情況可發(fā)現(xiàn) 1)A永遠(yuǎn)不會(huì)有效的移出數(shù)據(jù)通道,也就是說,當(dāng)A移出數(shù)據(jù)通道時(shí)(僅在圖3(e)所示的情況下有可能),它將不影響最終A+B+C×D的結(jié)果,所以A的求補(bǔ)將被大大簡化sign_A≠sign_Csign_D(此時(shí)sub_A=1)時(shí)在數(shù)據(jù)通道的最低位加1即可,這里表示異或。
2)B在各種情況下都有可能移出數(shù)據(jù)通道,只有在sign_B≠sign_Csign_D(此時(shí)sub_B=1),且B移出數(shù)據(jù)通道的全為0(此時(shí)st1_B=0)時(shí),需要在數(shù)據(jù)通道的最低位加1完成B的求補(bǔ)。
3)移位后的B和C×D可能會(huì)同時(shí)有一部分在數(shù)據(jù)通道之外,但是這時(shí)B和C×D都對(duì)數(shù)據(jù)通道沒有影響,故不用考慮B和C×D同時(shí)在數(shù)據(jù)通道之外的部分相加后會(huì)不會(huì)有進(jìn)位產(chǎn)生的問題。
4)-27>exp_CD-exp_A>-51時(shí),C×D壓縮后的兩個(gè)部分積的低24比特可能有進(jìn)位產(chǎn)生,這個(gè)進(jìn)位是需要考慮的。
對(duì)A和B求補(bǔ)的加1由圖2的7部件完成,由于有兩個(gè)加1操作,這里引入了一個(gè)3:2CSA,A求補(bǔ)所需的加1作為CSA的一個(gè)輸入,而B求補(bǔ)所需的加1利用CSA輸出的進(jìn)位字節(jié)的最低位空位完成。由于乘法的編碼和部分積壓縮的延時(shí)大于A和B的移位對(duì)齊,這一CSA不會(huì)導(dǎo)致關(guān)鍵路徑的加大。, -27>exp_CD-exp_A>-51時(shí),C×D壓縮后的兩個(gè)部分積的低24比特的進(jìn)位會(huì)對(duì)最終結(jié)果產(chǎn)生影響,將這一進(jìn)位加入到數(shù)據(jù)通道的方法為將st1_CD_3MSB
置入圖2中4:2 CSA進(jìn)位字節(jié)的最低位上,其中st1_CD_3MSB為C×D壓縮后的兩個(gè)部分積sum_CD、carry_CD的低24位相加后的25比特結(jié)果的最高三位。
第二級(jí)流水線A、B移位對(duì)齊后的結(jié)果和C×D的部分積壓縮后的結(jié)果經(jīng)4:2 CSA壓縮后。進(jìn)行前導(dǎo)零預(yù)測(cè)、符號(hào)預(yù)測(cè)、半加運(yùn)算以及規(guī)格化移位。
在上一級(jí)流水線中已經(jīng)得到了A、B移位對(duì)齊的結(jié)果sum_AB、carry_AB(圖2里部件7的輸出)和C×D壓縮后的兩個(gè)部分積sum_CD、carry_CD,這里首先用一4:2 CSA將這四個(gè)輸入壓縮為兩個(gè),分別記為sum和carry,然后將sum和carry輸入到前導(dǎo)零預(yù)測(cè)單元13中,計(jì)算前導(dǎo)零個(gè)數(shù)(記為LZN)。
如果下面直接對(duì)sum和carry進(jìn)行規(guī)格化移位,再相加,若相加結(jié)果為負(fù),還需要對(duì)其求補(bǔ),增加了延時(shí)。避免這一延時(shí)的辦法是在前導(dǎo)零預(yù)測(cè)的同時(shí)判斷sum+carry的符號(hào),若sum+carry<0,則選擇sum和carry的補(bǔ)數(shù)表示進(jìn)行后續(xù)的處理,如規(guī)格化移位、最終加和舍入等。這里求sum和carry的補(bǔ)數(shù)時(shí)所需的加1是利用半加器15和16的進(jìn)位字節(jié)的最低位空位實(shí)現(xiàn)的。
74比特的移位器19根據(jù)13中計(jì)算出的LZN對(duì)選擇器18的輸出進(jìn)行向右移位,其輸出結(jié)果記為sumnor、carrynor。
第三級(jí)流水線利用第二級(jí)流水線輸出的sumnor、carrynor完成最終加法和舍入,計(jì)算A+B+C×D的指數(shù)。同時(shí)根據(jù)第一級(jí)流水線的輸出計(jì)算C×D的尾數(shù)和指數(shù)。
在22中,首先將sumnor和carrynor相加,結(jié)果記為ABCD_added,然后根據(jù)舍入模式分別將第25位和第26位作為舍入位時(shí)的結(jié)果,分別記為rounding_result_tmp1和rounding_result_tmp2,若rounding_result_tmp1的最高位為1且ABCD_added的最高位為0,或者ABCD_added的最高位為1時(shí),選取rounding_result_tmp1作為最終結(jié)果,否則選取rounding_result_tmp2作為最終結(jié)果。
21中根據(jù)1中計(jì)算出的數(shù)據(jù)通道的臨時(shí)指數(shù)和13中計(jì)算出的規(guī)格化移位量計(jì)算A+B+C×D的指數(shù),然后根據(jù)22的運(yùn)算結(jié)果進(jìn)行修正若rounding_result_tmp2被選為最終結(jié)果,將指數(shù)減1。
24計(jì)算C×D的尾數(shù),方法與22中計(jì)算A+B+C×D的尾數(shù)的方法類似,同樣23中要根據(jù)24的計(jì)算結(jié)果對(duì)C×D的指數(shù)進(jìn)行修正。
權(quán)利要求
1.一種并行的浮點(diǎn)乘加單元,實(shí)現(xiàn)形式為A+B+(C×D)的乘加操作,A≥B,其特征在于,該浮點(diǎn)乘加單元含有三級(jí)流水,吞吐量為每周期一條指令,且同時(shí)能夠產(chǎn)生C×D的結(jié)果,該浮點(diǎn)乘加單元含有
第一級(jí)流水線由指數(shù)和符號(hào)處理單元(1)第一個(gè)74比特移位對(duì)齊器(2)、第二個(gè)74比特移位對(duì)齊器(3)、粘滯位計(jì)算器(4)、第一個(gè)按位取反器(5)、第二個(gè)按位取反器(6)、3:2的進(jìn)位保存加法器CSA(7)、以4為基的波茨編碼器(8)、3:2的進(jìn)位保存加法器CSA組成的部分積壓縮樹(9)、24比特加法器(10)和選擇器(11)組成;其中,
指數(shù)和符號(hào)處理單元(1),根據(jù)操作數(shù)A、B、C、D的指數(shù)和符號(hào)計(jì)算A+B+(C×D)的指數(shù)exp、C×D的指數(shù)exp_CD、是否為有效減sub、A+B+(C×D)的臨時(shí)符號(hào)sign、C×D的符號(hào)sign_CD,并確定A和B相對(duì)C×D移位對(duì)齊時(shí)的移位量mv_A、mv_B,以及A和B移位對(duì)齊后是否需要按位取反sub_A、sub_B,按位取反即對(duì)每一位進(jìn)行取反,也就是將0變?yōu)?,將1變?yōu)?;
exp_CD=exp_C+exp_D,
sub=sign_Asign_Csign_D,
sign=sign_CD=sign_Csign_D,
sub_A=sign_Asign_Csign_D,
sub_B=sign_Bsign_Csign_D,
其中,sign_A、sign_B、sign_C和sign_D分別是操作數(shù)A、B、C和D的符號(hào),exp_A、exp_B、exp_C和exp_D分別是操作數(shù)A、B、C和D的指數(shù),根據(jù)IEEE 754標(biāo)準(zhǔn),單精度浮點(diǎn)數(shù)的符號(hào)為其最高位,指數(shù)為第2位到第8位;為異或操作;
exp_CD-exp_A≤-51且sign_A≠sign_B時(shí),
exp=exp_A,
mv_A=0,
mv_B=exp-exp_B,
exp_CD-exp_A≤-51且sign_A=sign_B時(shí),
exp=exp_A+1,
mv_A=1,
mv_B=exp-exp_B,
-27>exp_CD-exp_A>-51時(shí),
exp=exp_CD+51,
mv_A=exp-exp_A,
mv_B=exp-exp_B,
23≥exp_CD-exp_A≥-27時(shí),
exp=exp_CD+27,
mv_A=exp-exp_A,
mv_B=exp-exp_B,
exp_CD-exp_A>23時(shí),
exp=exp_CD+1,
mv_A=exp-exp_A,
mv_B=exp-exp_B,
第一個(gè)74比特的移位器(2)根據(jù)指數(shù)和符號(hào)處理單元(1)中得到的mv_A值,對(duì)A的尾數(shù)man_A進(jìn)行向右移位,根據(jù)IEEE 754標(biāo)準(zhǔn),單精度浮點(diǎn)數(shù)的尾數(shù)為其第8位到32位,其為規(guī)格化數(shù)時(shí)在最高位補(bǔ)1,否則在最高位補(bǔ)零,非規(guī)格化數(shù)將作為0看待,移位后的輸出記為align_A,
align_A=man_A□mv_A,
其中□表示右移;
第二個(gè)74比特的移位器(3)根據(jù)指數(shù)和符號(hào)處理單元(1)中得到的mv_B值,對(duì)B的尾數(shù)man_B進(jìn)行向右移位,移位后的輸出記為align_B,
align_B=man_B□mv_B;
粘滯位計(jì)算單元(4),根據(jù)第二個(gè)74比特的移位器(3)的移位結(jié)果和指數(shù)和符號(hào)處理單元(1)中計(jì)算的sub_B計(jì)算粘滯位st1_B,mv_B>74時(shí),若sub_B=0且man_B移出74比特寬的數(shù)據(jù)通道的部分全為0,或者sub_B=1且man_B移出74比特寬的數(shù)據(jù)通道的部分全為1,則st1_B=0,否則st1_B=1;
第一個(gè)按位取反器(5),如果A的符號(hào)位和C×D的符號(hào)位不同,對(duì)第一個(gè)74比特的移位器(2)的輸出結(jié)果align_A做按位取反操作,否則不做任何操作直接將align_A輸出,第一個(gè)按位取反器(5)的輸出記為inv_A;
第二個(gè)按位取反器(6),如果B的符號(hào)位和C×D的符號(hào)位不同,對(duì)第二個(gè)74比特的移位器(3)的輸出結(jié)果align_B的每比特都做取反操作(也就是按位取反),否則不做任何操作直接將align_B輸出,第二個(gè)按位取反器(6)的輸出記為inv_B;
將第一個(gè)按位取反器(5)和第二個(gè)按位取反器(6)的輸出結(jié)果inv_A和inv_B,以及指數(shù)和符號(hào)處理單元(1)中得出的sub_A一起送入3:2 CSA(7)中作一次壓縮,得到sum_AB、carry_AB,其中
sum_AB=inv_A^inv_B^sub_A,
carry_AB=((inv_A&inv_B)|(inv_A&sub_A)|(inv_A&sub_A))<<1,
并將sub_B和st1_B與操作的結(jié)果放在carry_AB的最低位上,
carry_AB[73]=sub_B&st1_B,
這里^、&和|分別表示按位異或、按位與和按位或操作,<<表示向左移位;
基4的波茨編碼器(8)對(duì)C的尾數(shù)進(jìn)行編碼,然后將編碼的結(jié)果與D的尾數(shù)相乘得到13個(gè)部分積,這13個(gè)部分積的被送入3:2的進(jìn)位保存CSA壓縮樹(9)中,3:2 CSA樹即由3:2 CSA組成的樹,3個(gè)輸入經(jīng)過一個(gè)CSA將被壓縮成2個(gè)輸出,若設(shè)輸入為x、y、z,輸出為s、c,則壓縮過程可表示如下
s=x^y^z,
c=((x&y)|(x&z)|(y&z))<<1,
將5級(jí)3:2 CSA級(jí)聯(lián),形成3:2 CSA樹,就能將13個(gè)部分積壓縮為2個(gè),分別記為sum_CD、carry_CD;
sum_CD和carry_CD的低24位被送到24比特的加法器(10)中,加法結(jié)果被總結(jié)成兩個(gè)信息輸出st1_CD和st1_CD_3MSB,其中記錄加法結(jié)果的低24位是否全為零,若全為零,則st1_CD=0,否則st1_CD=1;st1_CD_3MSB記錄25比特的加法結(jié)果的最高三位;選擇器(11)根據(jù)指數(shù)和符號(hào)處理單元(1)中計(jì)算出的指數(shù)范圍從st1_B和st1_CD中選取一個(gè)作為st1輸出,
-27>exp_CD-exp_A>-51時(shí),st1=st1_CD,其它情況下st1=st1_B;
第二級(jí)流水線由4:2 CSA(12)、74比特的前導(dǎo)零預(yù)測(cè)模塊(13)、第一個(gè)74比特的半加器(14)、第一個(gè)74比特的半加器(15)和第一個(gè)74比特的半加器(16)、符號(hào)預(yù)測(cè)邏輯(17)、選擇器(18)、74比特的移位器(19)和與門(20)組成;其中,4:2 CSA(12)相當(dāng)與2個(gè)級(jí)聯(lián)的3:2,將四個(gè)輸入sum_AB、carry_AB、sum_CD和carry_CD壓縮為兩個(gè)sum和carry,其中sum_CD和carry_CD要根據(jù)指數(shù)和符號(hào)處理單元(1)中計(jì)算的指數(shù)范圍進(jìn)行移位后作為CSA的輸入,當(dāng)exp_CD-exp_A<-27時(shí),將sum_CD和carry_CD的前24位作為輸入,當(dāng)23≥exp_CD-exp_A≥-27時(shí),將sum_CD和carry_CD作為輸入,其他情況下(exp_CD-exp_A>23),將sum_CD和carry_CD向左移26比特后作為輸入,壓縮后將10中得到的st1_CD_3MSB的最高位存放在carry的最低位上;
74比特的前導(dǎo)零預(yù)測(cè)模塊(13),判斷12的輸出結(jié)果sum和carry相加時(shí),前導(dǎo)零的數(shù)目,前導(dǎo)零數(shù)目即從最高位開始,到第一個(gè)非0位之間的位數(shù),若sum和carry相加結(jié)果為負(fù),則這里判斷的將是前導(dǎo)一的數(shù)目,即從最高位到第一個(gè)非1位之間的位數(shù),具體判斷方法為通過檢查某一位及其左右相鄰的位確定哪一位可能是最高位,設(shè)一預(yù)測(cè)位fi,
T=sumcarry,G=sum&carry,
其中sum、carry為(13)的兩個(gè)輸出,
表示將sum按位取反,Ti、Gi、Zi分別表示T、G、Z的第i位,若fi=1,而fj=0(j=0,1…i-1),則前導(dǎo)零個(gè)數(shù)(LZN)為i;
設(shè)半加器輸入為x、y,輸出為s、c,則其原理可表示為
s=x^y,
c=(x&y)<<1,
第一個(gè)半加器(14)根據(jù)上述原理將4:2CSA(12)輸出的sum和carry處理為輸出sumHApos和carryHApos;
將sum和carry按位取反后作為半加器第二個(gè)半加器(15)的輸入,輸出為sumHAinv和carryHAinv,并將carryHAinv的最低位置為1;
將sumHAinv和carryHAinv按位取反后作為第三個(gè)半加器(16)的輸入,輸出為sumHAcom和carryHAcom,并將carryHAcom的最低位置為1,這樣sumHAcom+carryHAcom就相當(dāng)于sum+carry的補(bǔ)數(shù)形式了;
符號(hào)預(yù)測(cè)模塊(17),預(yù)測(cè)方法為判斷sum+carry最高位是否有進(jìn)位產(chǎn)生,若有進(jìn)位產(chǎn)生,則相加結(jié)果為負(fù),將輸出信號(hào)complement賦為1,否則complement=0;
選擇器(18)根據(jù)符號(hào)預(yù)測(cè)的結(jié)果,從sumHApos、carryHApos和sumHAcom、carryHAcom中選擇一對(duì)作為輸出,其輸出記為sumHA、carryHA,
complement=0時(shí),sumHA=sumHApos,carryHA=carryHApos,
complement=1時(shí),sumHA=sumHAcom,carryHA=carryHAcom;
74比特的移位器(19)根據(jù)前導(dǎo)零預(yù)測(cè)的結(jié)果,對(duì)選擇器(18)的輸出向左進(jìn)行移位,移位量為LZN,移位后的輸出記為sumnor和carrynor;
與門(20)對(duì)符號(hào)預(yù)測(cè)模塊(17)的輸出complement和指數(shù)和符號(hào)處理單元(1)的輸出sign進(jìn)行與操作,得到A+B+C×D的符號(hào);
第三級(jí)流水線由A+B+C×D的指數(shù)計(jì)算單元(21)、A+B+C×D的最終加/舍入單元(22)、C×D的指數(shù)修正單元(23)、C×D的最終加/舍入單元(24)組成;其中,
A+B+C×D的指數(shù)計(jì)算單元(21),根據(jù)指數(shù)和符號(hào)處理單元(1)中得到的exp、74比特的前導(dǎo)零預(yù)測(cè)模塊(13)中得到的LZN和A+B+C×D的最終加/舍入單元(22)中是否發(fā)生1位左移計(jì)算A+B+C×D的指數(shù),若A+B+C×D的最終加/舍入單元(22)中不發(fā)生1位左移,則A+B+C×D的指數(shù)為exp-LZN,否則需要進(jìn)行1比特的修正,最終A+B+C×D的指數(shù)將表示為exp-LZN-1;
在A+B+C×D的最終加/舍入單元(22)中,首先將74比特的移位器(19)的輸出sumnor和carrynor相加,結(jié)果記為ABCD_added,
ABCD_added=sumHAnor+carryHAnor,
然后根據(jù)ABCD_added、選擇器(11)中得到的st1和舍入模式進(jìn)行舍入,舍入模式有就近舍入(RN),向正無窮舍入(RP),向負(fù)無窮舍入(RM),向零舍入(RZ),從應(yīng)用的角度來看,這四種舍入模式能減少到三個(gè)RN、RI、RZ;
RZ(x)=x
這里
和x分別表示向上取整和向下取整;
對(duì)于負(fù)數(shù),舍入模式RP可等效為RI,RM可等效為RN;對(duì)于正數(shù),舍入模式RP可等效為RN,RM可等效為RI;
首先計(jì)算粘滯位st2,若ABCD_added的最高位為1,則st2=|abcd_added[25:74],否則st2=|abcd_added[26:74];整個(gè)的粘滯位st由st1和st2兩部分組成
st=st1|st2,
然后根據(jù)st、ABCD_added和舍入模式RI、RN或RZ,計(jì)算舍入結(jié)果的兩個(gè)臨時(shí)值,分別記為rounding_result_tmp1和rounding_result_tmp2,rounding_result_tmp1的計(jì)算方法為RI=1時(shí),
如果st=1或者ABCD_added[24]=1,
rounding_result_tmp1=ABCD_added
+1;
否則
rounding_result_tmp1=ABCD_added
;
RI=0時(shí),若RN=1,
若ABCD_added[24]=0
rounding_result_tmp1=ABCD added

否則,st=1時(shí),
rounding_result_tmp1=ABCD_added
+1;
ABCD_added[23]=1時(shí),
rounding_result_tmp1=ABCD_added
+1;
否則,
rounding_result_tmp1=ABCD_added
;
RI=0時(shí),若RN=0,
rounding_result_tmp1=ABCD_added

rounding_result_tmp2的計(jì)算方法如下
RI=1時(shí),
如果st=1或者ABCD_added[25]=1,
rounding_result_tmp2=ABCD_added[1:24]+1;
否則
rounding_result_tmp2=ABCD_added[1:24];
RI=0時(shí),若RN=1,
若ABCD_added[25]=0
rounding_result_tmp2=ABCD_added[1:24];
否則,st=1時(shí),
rounding_result_tmp2=ABCD_added[1:24]+1;
ABCD_added[24]=1時(shí),
rounding_result_tmp2=ABCD_added[1:24]+1;
否則,rounding_result_tmp2=ABCD_added[1:24];
RI=0時(shí),若RN=0,
rounding_result_tmp2=ABCD_added[1:24];
最后根據(jù)ABCD_added的最高位和rounding_result_tmp1的最高位從rounding_result_tmp1和rounding_result_tmp2中選取一個(gè)作為最終A+B+C×D的尾數(shù),并決定21中的指數(shù)是否需要1比特的修正
若rounding_result_tmp1的最高位為1且ABCD_added的最高位為0,或者ABCD_added的最高位為1時(shí),選取rounding_result_tmp1作為最終結(jié)果,21中不需要1比特的修正,否則選取rounding_result_tmp2作為最終結(jié)果,21中需要1比特的修正;
C×D的指數(shù)修正單元(23)根據(jù)C×D的最終加/舍入單元(24)中是否進(jìn)行了一位的左移判斷是否需要對(duì)指數(shù)和符號(hào)處理單元(1)中輸出的exp_CD進(jìn)行修正后才能作為最終的C×D的指數(shù),若C×D的最終加/舍入單元(24)中判得需要進(jìn)行修正,則最終的C×D的指數(shù)為exp_CD-1,否則最終的C×D的指數(shù)為exp_CD;
在C×D的最終加/舍入單元(24)中,根據(jù)3:2的進(jìn)位保存加法器CSA組成的部分積壓縮樹(9)中得到的sum_CD、carry_CD的高24位和(10)中得到的st1_CD、st1_CD_3MSB,計(jì)算C×D的尾數(shù),并判定是否需要進(jìn)行1比特的修正;
首先將sum_CD、carry_CD的高24位和st1_CD_3MSB的最高位相加,得到CD_added
CD_added=sum_CD
+carry_CD
+st1_CD_3MSB
,
然后用A+B+C×D的最終加/舍入單元(22)中類似的方法計(jì)算C×D的尾數(shù),先計(jì)算兩個(gè)臨時(shí)值rounding_result_CD_tmp1和rounding_result_CD_tmp2,
rounding_result_CD_tmp1的計(jì)算方法如下
若RI=1,
若st1_CD=1或st1_CD_3MSB[1]=1,
rounding_result_CD_tmp1=CD_added+1;
否則,
rounding_result_CD_tmp1=CD_added;
若RI=0,且RN=1,
若st1_CD_3MSB[1]=0,
rounding_result_CD_tmp1=CD_added;
否則,若st=1,
rounding_result_CD_tmp1=CD_added+1;
若st1_CD_3MSB[1]=1,且CD_added[23]=1,
rounding_result_CD_tmp1=CD_added+1;
e否則
rounding_result_CD_tmp1=CD_added;
若RI=0,且RN=0,
rounding_result_CD_tmp1=CD_added;
rounding_result_CD_tmp2的計(jì)算方法如下
若RI=1,
若st1_CD=1或st1_CD_3MSB[2]=1,
rounding_result_CD_tmp2={CD_added[1:23],st1_CD_3MSB[1]}+1;
否則,
rounding_result_CD_tmp2={CD_added[1:23],st1_CD_3MSB[1]};
若RI=0,且RN=1,
若st1_CD_3MSB[2]=0,
rounding_result_CD_tmp2={CD_added[1:23],st1_CD_3MSB[1]};
否則,若st=1,
rounding_result_CD_tmp2={CD_added[1:23],st1_CD_3MSB[1]}+1;
若st1_CD_3MSB[2]=1,且st1_CD_3MSB[1]=1,
rounding_result_CD_tmp2={CD_added[1:23],st1_CD_3MSB[1]}+1;
否則,
rounding_result_CD_tmp2<={CD_added[1:23],st1_CD_3MSB[1]};
若RI=0,且RN=0,
rounding_result_CD_tmp2<={CD_added[1:23],st1_CD_3MSB[1]};
若rounding_result_CD_tmp1的最高位為1且CD_added的最高位為0,或者CD_added的最高位為1時(shí),選取rounding_result_CD_tmp1作為C×D的最終結(jié)果,C×D的指數(shù)修正單元(23)中不需要1比特的修正,否則選取rounding_result_CD_tmp2作為C×D的最終結(jié)果,C×D的指數(shù)修正單元(23)中需要1比特的修正。
全文摘要
一種并行浮點(diǎn)乘加單元簡化了類似技術(shù),實(shí)現(xiàn)形式為A+B+C×D的乘加操作(A≥B),同時(shí)能夠得到C×D的結(jié)果,實(shí)現(xiàn)時(shí)分三級(jí)流水線在第一級(jí)流水線中,對(duì)A、B進(jìn)行移位對(duì)齊,同時(shí)完成C×D的波斯編碼、部分積壓縮;在第二級(jí)流水線中,將A、B移位對(duì)齊后的結(jié)果和C×D的部分積壓縮后的結(jié)果經(jīng)4∶2CSA壓縮后,然后進(jìn)行前導(dǎo)零預(yù)測(cè)、符號(hào)預(yù)測(cè)、半加運(yùn)算以及規(guī)格化移位;在第三級(jí)流水線中,完成A+B+C×D最終加法和舍入,計(jì)算其指數(shù),同時(shí)根據(jù)第一級(jí)流水線的輸出計(jì)算C×D的尾數(shù)和指數(shù)。本發(fā)明的優(yōu)點(diǎn)在于,能夠?qū)崿F(xiàn)指令級(jí)的并行能同時(shí)實(shí)行一條加法指令和一條乘法指令;還能對(duì)一些發(fā)生了數(shù)據(jù)相關(guān)的連續(xù)兩條指令進(jìn)行加速。
文檔編號(hào)G06F9/38GK101178645SQ20071017997
公開日2008年5月14日 申請(qǐng)日期2007年12月20日 優(yōu)先權(quán)日2007年12月20日
發(fā)明者李兆麟, 李恭瓊 申請(qǐng)人:清華大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
五华县| 望奎县| 鹰潭市| 兴隆县| 盘山县| 河津市| 栾川县| 团风县| 南和县| 襄垣县| 凤山市| 怀安县| 长沙县| 左权县| 横山县| 丰顺县| 项城市| 襄汾县| 乐昌市| 呼伦贝尔市| 平舆县| 涟水县| 德化县| 泸定县| 甘德县| 馆陶县| 福州市| 香港| 石景山区| 四川省| 凤台县| 遂平县| 双江| 洱源县| 望谟县| 平罗县| 鄂伦春自治旗| 二连浩特市| 南靖县| 万年县| 方城县|