專利名稱:一種具有數(shù)據(jù)前送結(jié)構(gòu)的浮點(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 + BXC己經(jīng)成為科學(xué)運(yùn)算和多媒體應(yīng)用中的一種基本操作。由于浮點(diǎn)乘加 融合操作在應(yīng)用程序中如此頻繁地出現(xiàn),用浮點(diǎn)乘加融合單元(簡(jiǎn)化為MAF單元)來(lái)實(shí)現(xiàn)該 操作己經(jīng)成為現(xiàn)代高性能商業(yè)處理器的一個(gè)很好的選擇。這種實(shí)現(xiàn)方式主要有以下兩個(gè)優(yōu)點(diǎn) (l)僅需要一次舍入,不是兩次;(2)通過(guò)共享一些組成模塊,可降低電路延遲和硬件開(kāi)銷。
乘加(MAF)指令需要3個(gè)操作數(shù)。例如,執(zhí)行A+(BXC)操作,當(dāng)把乘加指令中操作數(shù) A置為0時(shí)執(zhí)行的是乘法指令,把操作數(shù)B或C置為1時(shí),執(zhí)行的是加法指令。在已實(shí)現(xiàn)的 多數(shù)處理器中,浮點(diǎn)乘加運(yùn)算一般通過(guò)以下步驟來(lái)實(shí)現(xiàn)(見(jiàn)圖1):
首先對(duì)被乘數(shù)C做波茨編碼,然后用進(jìn)位保存壓縮加法器(CSA)組成的壓縮樹(shù)實(shí)現(xiàn)BXC, 得到兩個(gè)部分積。在進(jìn)行乘法的同時(shí),操作數(shù)A進(jìn)行取反和對(duì)齊移位操作。操作數(shù)A和BXC 的符號(hào)可能相同,也可能相反。如果A和BXC的符號(hào)相反,將A和BXC做有效減法,需要 得到A的補(bǔ)碼進(jìn)行相加,A需要取反。否則如果A和BXC的符號(hào)相同做有效加法,A不需要 取反。下面不管是否需要進(jìn)行取反操作,將通過(guò)取反器之后的A記為A,。
在IEEE-754標(biāo)準(zhǔn)中,單精度操作數(shù)的尾數(shù)是24比特,再加上2個(gè)額外的舍入位,A, v 比BXC的結(jié)果的最高位最多左移55位,或者比BXC結(jié)果的最高位最多右移106比特,即 移位范圍在[-55, 106]之間。在浮點(diǎn)乘加的設(shè)計(jì)中為了使移位簡(jiǎn)單化,規(guī)一化A的移位方向 為向右移位。所以A^最初置于BXC左端55比特的位置,A,在對(duì)齊中右移位的位數(shù)是 56- (exp (A) — (exp (B)十exp (C) -1024),其中,exp (A) , exp (B)和exp (C)分別是操作數(shù)A , B和 C的指數(shù)。
把對(duì)齊移位后的Ainv、和BXC壓縮后的部分積用壓縮比為3 : 2的進(jìn)位保存加法器(CSA)壓縮,得到兩個(gè)部分積,同時(shí)處理A求補(bǔ)時(shí)所需要的加1。利用2中壓縮后得到的兩個(gè)部分積進(jìn)行前導(dǎo)零預(yù)測(cè)(LZA, leading zero anticipator), 得到加法結(jié)果的規(guī)格化左移的位數(shù)。同時(shí)判斷最終結(jié)果的正負(fù)。在前導(dǎo)零預(yù)測(cè)和符合預(yù)測(cè)的同時(shí)做半加操作,并完成部分的加法運(yùn)算。進(jìn)行半加操作是 為了保證后面能正確地進(jìn)行舍入。由于符號(hào)預(yù)測(cè)所需要的時(shí)間比半加操作多,可在此時(shí)間空 隙里完成最終加法的一部分。加法結(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ī)格化移位。最終加法和舍入操作。圖1所示的現(xiàn)有技術(shù)的不足連續(xù)兩條指令存在數(shù)據(jù)相關(guān)時(shí),流水線將被迫等待兩個(gè)周期(三級(jí)流水實(shí)現(xiàn)時(shí),n級(jí)流 水實(shí)現(xiàn)時(shí)將等待n-l個(gè)周期),而在實(shí)際應(yīng)用中,數(shù)據(jù)相關(guān)又是一個(gè)非常普遍的現(xiàn)象。相對(duì)圖l所示的現(xiàn)有技術(shù),本發(fā)明設(shè)計(jì)實(shí)現(xiàn)了一種具有數(shù)據(jù)前送結(jié)構(gòu)的浮點(diǎn)乘加單元。 與現(xiàn)有技術(shù)的不同在于,將流水線中間兩級(jí)的結(jié)果提前饋送至第一級(jí)的輸入處,加速了指令 流的執(zhí)行效率,同時(shí)增加的硬件開(kāi)銷和延時(shí)都很小。發(fā)明內(nèi)容本發(fā)明的目的在于設(shè)計(jì)一種高性能的全流水線的雙精度高速的浮點(diǎn)乘加單元,對(duì)于發(fā)生 數(shù)據(jù)相關(guān)的指令進(jìn)行加速,提高浮點(diǎn)指令流的執(zhí)行效率。為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種具有數(shù)據(jù)前送結(jié)構(gòu)的浮點(diǎn)乘加單元。數(shù)據(jù)前送是指 在流水線實(shí)現(xiàn)的處理器中,如果前后兩條指令發(fā)生數(shù)據(jù)相關(guān),即后一條指令的原操作數(shù)采用 前一條指令的結(jié)果,則前一條指令的中間結(jié)果可以反饋到運(yùn)算單元的輸入,作為后一條指令 的操作數(shù)進(jìn)行運(yùn)算。本發(fā)明提供了一種雙精度的浮點(diǎn)乘加運(yùn)算單元,實(shí)現(xiàn)形式為A+BXC的乘加操作,其特征 在于,該設(shè)計(jì)的雙精度浮點(diǎn)乘加運(yùn)算單元由三級(jí)流水實(shí)現(xiàn),且操作數(shù)A和B可以是上一指令 的中間結(jié)果,可由三部分構(gòu)成A由55比特的Al、 A2和常數(shù)項(xiàng)C0N構(gòu)成,B由55比特的Bl、 B2和一個(gè)常數(shù)項(xiàng)構(gòu)成,A和B的常數(shù)項(xiàng)都可以是0或1,該浮點(diǎn)乘加單元含有第一級(jí)流水線由指數(shù)和符號(hào)處理單元(1)、第一個(gè)165比特移位對(duì)齊器(2)、按位取 反器(3)、第一個(gè)選通器(4)、以4為基的波茨編碼器(5)、第一個(gè)3 : 2的進(jìn)位保存加法器CSA組成的部分積壓縮樹(shù)(6)、第二個(gè)選通器(7)、 57比特的一次性移位器(8)和第二個(gè)3 : 2的CSA樹(shù)(9)組成;其中,指數(shù)和符號(hào)處理單元(1)根據(jù)操作數(shù)A 、 B、 C的指數(shù)和符號(hào)計(jì)算是否為有效減sub, <formula>formula see original document page 12</formula>其中,sign—A、 sign —B、 sign —C分別是操作數(shù)A 、 B、 C的符號(hào),根據(jù)IEEE 754標(biāo) 準(zhǔn),雙精度浮點(diǎn)數(shù)的符號(hào)為其最高位;④為異或操作; 計(jì)算A+BXC的臨時(shí)符號(hào)sign—pl,<formula>formula see original document page 12</formula>,計(jì)算A+BXC的指數(shù)差exp_ABC,<formula>formula see original document page 12</formula>其中,exp—A、 exp—B和exp—C分別是操作數(shù)A 、 B和C的指數(shù),根據(jù)IEEE 754標(biāo)準(zhǔn), 雙精度浮點(diǎn)數(shù)的符號(hào)指數(shù)為第2位到第12位;計(jì)算A+BXC的指數(shù)exp—pl,并確定A相對(duì)BXC移位對(duì)齊時(shí)的移位量mv, exp—pl和mv的計(jì)算方法如下<formula>formula see original document page 12</formula>第一個(gè)165比特移位對(duì)齊器(2)根據(jù)指數(shù)和符號(hào)處理單元(1)中得到的mv值,對(duì)Al、 A2、 C0N進(jìn)行移位,55比特的CON為00…01,即由54比特的0和最低位上的1構(gòu)成,Al和 A2的值分兩種情況考慮當(dāng)要執(zhí)行的指令與上一條指令無(wú)數(shù)據(jù)相關(guān)時(shí),或者雖發(fā)生了數(shù)據(jù)相關(guān),但是上一條指令 的結(jié)果不被用來(lái)作為該條指令的加數(shù)時(shí),55比特的Al的前53比特為輸入的被加數(shù)的尾數(shù), 后兩比特為O,根據(jù)IEEE 754標(biāo)準(zhǔn),雙精度浮點(diǎn)數(shù)的尾數(shù)為其第13位到64位,其為規(guī)格化 數(shù)時(shí)在最高位補(bǔ)l,否則在最高位補(bǔ)零,非規(guī)格化數(shù)將作為O看待,A2為0;要執(zhí)行的指令與上一條指令發(fā)生了數(shù)據(jù)相關(guān),且上一條指令的結(jié)果被用來(lái)作為該條指令 的加數(shù)時(shí),又分為兩種情況-上一條指令為乘法指令,則A1、 A2分別為第一級(jí)流水線的輸出sum—pl、 carry—pl的高 55比特,其中sum—pl、 carry—pl的為第二個(gè)3 : 2的CSA樹(shù)(9)輸出;上一條指令為加法指令或乘加指令,則A1、 A2分別為第二級(jí)流水線的輸出sum一p2、 carry—p2的高55比特,其中sum—p2、 carry—p2為第二個(gè)165比特的移位器(16)的輸出;Al、 A2、 CON移位后的輸出分別記為align—Al、 align—A2、 align_C0N,第一個(gè)165比特 移位對(duì)齊器(2)完成的功能可用下面的公式表達(dá) 一爿l =□ wv ,a/Zg"—爿2 =爿2口 ,,a/Zg" —CCW = CCWD mv,其中口表示右移;按位取反器(3),如果A的符號(hào)位和BXC的符號(hào)位不同,即指數(shù)和符號(hào)處理單元(1) 的輸出sub-l,對(duì)第一個(gè)165比特移位對(duì)齊器(2)的輸出結(jié)果align—Al、align_A2和align—CON 的每比特都做取反操作(也就是按位取反),否則不做任何操作直接將aligr^Al、 align—A2 和alignJ]ON輸出,以4為基的波茨編碼器(5)的輸出記為inv—Al、 inv一A2、 inv—CON;第一個(gè)選通器(4)根據(jù)控制信號(hào)ctrll決定是否將inv—C0N輸出到第二個(gè)3 : 2的CSA 樹(shù)(9)中,ctrll由是否發(fā)生數(shù)據(jù)相關(guān),以及符號(hào)預(yù)測(cè)邏輯(14)的輸出carry—llOLSBs決 定,當(dāng)發(fā)生數(shù)據(jù)相關(guān),且前一條指令的結(jié)果被作為后一條指令的加數(shù),同時(shí)carry一110LSBs =1時(shí),ctrll二l,此時(shí)第一個(gè)選通器(4)的輸出為irw—CON,否則第一個(gè)選通器(4)的輸 出為O;以4為基的波茨編碼器(5)對(duì)C的尾數(shù)進(jìn)行編碼,然后將編碼的結(jié)果分別與Bl、 B2 相乘得到54個(gè)部分積,這里C為輸入的被乘數(shù),根據(jù)IEEE 754標(biāo)準(zhǔn),雙精度浮點(diǎn)數(shù)的尾數(shù)為其第13位到64位,其為規(guī)格化數(shù)時(shí)在最高位補(bǔ)1,否則在最高位補(bǔ)零,非規(guī)格化數(shù)將作 為0看待;Bl和B2的值分兩種情況考慮當(dāng)要執(zhí)行的指令與上一條指令無(wú)數(shù)據(jù)相關(guān)時(shí),或者雖發(fā)生了數(shù)據(jù)相關(guān),但是上一條指令 的結(jié)果不被用來(lái)作為該條指令的乘數(shù)時(shí),55比特的Bl的前53比特為輸入的被乘數(shù)的尾數(shù), 后兩比特為0,根據(jù)IEEE 754標(biāo)準(zhǔn),雙精度浮點(diǎn)數(shù)的尾數(shù)為其第13位到64位,其為規(guī)格化 數(shù)時(shí)在最高位補(bǔ)l,否則在最高位補(bǔ)零,非規(guī)格化數(shù)將作為0看待,B2為0;要執(zhí)行的指令與上一條指令發(fā)生了數(shù)據(jù)相關(guān),且上一條指令的結(jié)果被用來(lái)作為該條指令 的乘數(shù)時(shí),又分為兩種情況上一條指令為乘法指令,則B1、 B2分別為第一級(jí)流水線的輸出SUm_pl、 carry—pl的高 55比特,其中sum—pl、 carry_pl的為第二個(gè)3 : 2的CSA樹(shù)(9)輸出;上一條指令為加法指令或乘加指令,則B1、 B2分別為第二級(jí)流水線的輸出sum—p2、 carry—p2的高55比特,其中sum—p2、 carry—p2為第二個(gè)165比特的移位器(16)的輸出;這54個(gè)部分積的被送入第二個(gè)3 : 2的進(jìn)位保存CSA壓縮樹(shù)(6)中,3 : 2 CSA樹(shù) 即由3 : 2 CSA組成的樹(shù),3個(gè)輸入經(jīng)過(guò)一個(gè)3: 2CSA將被壓縮成2個(gè)輸出,若設(shè)輸入為x、 y、 z,輸出為S、 C,則壓縮過(guò)程可表示如下C-((x&力l(x&z)IO&z))《1,這里\ &和|分別表示按位異或、按位與和按位或操作, <〈表示向左移位;將9級(jí)3 : 2 CSA級(jí)聯(lián),形成3 : 2 CSA樹(shù),就能將54個(gè)部分積壓縮為2個(gè),分別記為 s咖一BC、 carry一BC;第二個(gè)選通器(7)根據(jù)控制性號(hào)ctrl2決定是否將C輸出到57比特的一次性移位器(8) 中,ctrl2由是否發(fā)生數(shù)據(jù)相關(guān),數(shù)據(jù)相關(guān)的類型,以及14的輸出carry—110LSBs決定,當(dāng) 發(fā)生數(shù)據(jù)相關(guān),且前一條指令的結(jié)果被作為后一條指令的乘數(shù),同時(shí)carry一110LSBs二l時(shí), ctrl2 = l,此時(shí)第二個(gè)選通器(7)的輸出為C后面補(bǔ)上55比特的0后的結(jié)果,否則第二個(gè) 選通器(7)的輸出為0;sum_ BC、 carry— BC和第二個(gè)選通器(7)的輸出被送到57比特的一次性移位器(8) 中,由指數(shù)和符號(hào)處理單元(1)的輸出exp—ABC決定是否對(duì)它們分別進(jìn)行一次57位的移位exp—ABC〈52時(shí),SUm_ BC、 carry— BC和第二個(gè)選通器(7)的輸出將分別被左移57位,否則均不被移位,直接輸出;第二個(gè)3 : 2的CSA樹(shù)(9)對(duì)inv—Al、 inv—A2、 4的輸出、57比特的一次性移位器(8) 的3個(gè)輸出做3: 2壓縮,壓縮過(guò)程與第一個(gè)3 : 2的進(jìn)位保存加法器CSA組成的部分積壓 縮樹(shù)(6)中相似,不同的在于,當(dāng)指數(shù)和符號(hào)處理單元(1)中判斷出sub二l時(shí),在兩個(gè)進(jìn) 位保存加法器進(jìn)位字節(jié)的最低位置入l,第一個(gè)選通器(4)的控制信號(hào)ctrll等于l時(shí),還 要在第三個(gè)進(jìn)位保存加法器進(jìn)位字節(jié)的最低位置入1,最終6個(gè)輸入被壓縮為2個(gè)輸出,記 為sum—pl、 carry—pl;第二級(jí)流水線165比特的前導(dǎo)零預(yù)測(cè)單元(10)、第一個(gè)165比特的半加器(11)、第 二個(gè)165比特的半加器(12)和第三個(gè)165比特的半加器(13)、符號(hào)預(yù)測(cè)邏輯(14)、選擇 器(15)、第二個(gè)165比特的移位器(16)和與門(17)組成;其中,165比特的前導(dǎo)零預(yù)測(cè)單元(10),判斷第二個(gè)3 : 2的CSA樹(shù)(9)的輸出結(jié)果sum—pl 和carry—pl相加時(shí),前導(dǎo)零的數(shù)目,前導(dǎo)零數(shù)目即從最高位開(kāi)始,到第一個(gè)非0位之間的位 數(shù),若sum—pl和carry—pl相加結(jié)果為負(fù),則這里判斷的將是前導(dǎo)一的數(shù)目,即從最高位到 第一個(gè)非l位之間的位數(shù),具體的判斷方法為通過(guò)檢查某一位及其左右相鄰的位確定哪一位可能是最高位,設(shè)一預(yù)測(cè)位fi, 71 = swm _ / 1十can17 _ pl, G = — pl & ca 77 _ _pl, Z 二 swm — pl & c" 77 _ / 1/; = 7;., (g,+ z,)+5-, (z,+ ) , / > o其中sum—pl、 carry—pl為第二個(gè)3 : 2的CSA樹(shù)(9)的兩個(gè)輸出,—表示按位取反, 下標(biāo)i表示第i位,若f^l,而f尸0(j^, 1…i-l),則前導(dǎo)零個(gè)數(shù)LZN為i; 設(shè)類擁與輸入為x、 y,輸出為S、 C,則其原理可表示為c二o&力《i,第一個(gè)165比特的半加器(11)將第二個(gè)3:2的CSA樹(shù)(9)輸出的sum—pl和carry—pl sumHAp',s,[l carryHApos;將s咖—pl和carry—pl按位取反后作為半加器第二個(gè)165比特的半加器(12)的輸入, 其輸出為sum他,.nv禾口 carryIIAi ,并將carry貼而的最低位置為1;將s咖,n,和carryH—作為第三個(gè)165比特的半加器(13)的輸入,其輸出為sum,^和 carryHA。。m,并將carryi。m的最低位置為1,這樣^""W哪+ ,"^")"'就相當(dāng)于.連續(xù)兩條指令發(fā)生數(shù)據(jù)相關(guān)時(shí),若前一條指令為加法或乘加指令,流水線將需要停滯等 待一個(gè)時(shí)鐘周期,在這個(gè)停滯等待的時(shí)鐘周期里,符號(hào)預(yù)測(cè)模塊(14)的輸入為第二個(gè)165 比特的移位器(16)的輸出sum—p2、 carry—p2,否則符號(hào)預(yù)測(cè)模塊(14)的輸入為sum—pl、 carry—pl,符號(hào)預(yù)測(cè)模塊(14)預(yù)測(cè)若將兩個(gè)輸入相加,其結(jié)果的正負(fù),預(yù)測(cè)方法為判斷兩 輸入相加,最高位是否有進(jìn)位產(chǎn)生,若有進(jìn)位產(chǎn)生,則相加結(jié)果為負(fù),將輸出信號(hào)complement 賦為1,否則^^7^/^"纟=();同時(shí)符號(hào)預(yù)測(cè)模塊(14)還判斷將兩個(gè)輸入的低110比特相加,有無(wú)進(jìn)位產(chǎn)生,并根據(jù)判斷結(jié)果產(chǎn)生另一輸出carry一110LSBs:兩個(gè)輸入的低110比特相加,有進(jìn)位產(chǎn)生時(shí)carry—110LSBs二l,否則carry—110LSBs = 0;選擇器(15)根據(jù)符號(hào)預(yù)測(cè)的結(jié)果,從 和 中選擇一對(duì)作為輸出,其輸出記為sumHA、 carry,com/ /eweW = 0時(shí),sumHA =sumHAp。s , carryHA =carryHApos'c0w;7/emW = 1時(shí),sum^ =sumHAcom , carry^ =carryHAcom ;第二個(gè)165比特的移位器(16)根據(jù)前導(dǎo)零預(yù)測(cè)的結(jié)果,對(duì)選擇器(15)的輸出向左進(jìn) 行移位,移位量為L(zhǎng)ZN,移位后的輸出記為sum—p2和carry—p2;與門(17)對(duì)符號(hào)預(yù)測(cè)模塊(14)的輸出complement和指數(shù)和符號(hào)處理單元(1)的輸 出sign—pl進(jìn)行異或操作,得到A+BXC的符號(hào);第三級(jí)流水線由指數(shù)計(jì)算單元(18)、最終加/舍入單元(19)組成;其中,指數(shù)計(jì)算單元(18),根據(jù)指數(shù)和符號(hào)處理單元(1)中得到的exp一pl、 165比特的前導(dǎo) 零預(yù)測(cè)單元(10)中得到的LZN和最終加/舍入單元(19)中是否發(fā)生l位左移計(jì)算A+BXC 的指數(shù),若最終加/舍入單元(19)中不發(fā)生l位左移,則A+BXC的指數(shù)為exp — p1-£ZW, 否則需要進(jìn)行l(wèi)比特的修正,最終A+BXC的指數(shù)將表示為e;c;7 —pl-丄ZiV-l;在最終加/舍入單元(19)中,首先將第二個(gè)165比特的移位器(16)的輸出sum—p2和 carry—p2相加,結(jié)果記為ABC—added,JSC —— a必efif = — />2 + ccwr少—,然后根據(jù)ABC—added、和舍入模式進(jìn)行舍入,有4種舍入模式就近舍入(RN),向正無(wú) 窮舍入(RP),向負(fù)無(wú)窮舍入(脂),向零舍入(RZ),這四種舍入模式能減少到三個(gè)RN、 RI、 RZ;<formula>formula see original document page 17</formula>這里「一和b」分別表示向上取整和向下取整;對(duì)于負(fù)數(shù),舍入模式RP可等效為RI,脂可等效為RN;對(duì)于正數(shù),舍入模式RP可等效 為RN, RM可等效為RI;首先計(jì)算粘滯位st,若ABC—added的最高位為1 ,則w =| JSC —a必W[54:165],否則 W =| —a艦?zāi)?:165];然后根據(jù)st、 ABC—added和舍入模式是RI、 RN還是RZ,計(jì)算舍入結(jié)果的兩個(gè)臨時(shí)值, 分另U記為rounding—result—tmpl禾口 rounding—result—tmp2, rounding—result—tmpl的i十算 方法如下若,,若st^,或ABC—added [53]=1rounding—result—tmpl=ABC—added
+1; 否則rounding_result_tmpl=ABC—added
; 若RI二0,且RN:l,若ABC—added[53]=0,rounding—result_tmpl=ABC—added
; 若ABC—added [53] =1, _@_st=l,rounding—result—tmpl=ABC—added
+1; 若ABC—added[53]=1,且ABC—added[52]=1,rounding—result—tmpl二ABC一added
+1; 否則rounding—result—tmpl=ABC—added
; 若RI二0,且RN:O,rounding_result—tmpl=ABC—added
; rounding—result—tmp2的計(jì)算方法如下若RI:1,若st:l,或ABC—added [54] =1rounding—result—tmp2=ABC_added[l:53]+1; 否則rounding—result—tmp2=ABC_added[l:53]; 若RPO, iRN=l,若ABC—added[54]=0,rounding—result—tmp2=ABC—added[1:53]; 若ABC—added[54]=1,且st=l,rounding—result_tmp2=ABC—added[1:53]+l; 若ABC—added[54]=1,且ABC—added[53]=1,rounding—result—tmp2=ABC—added[1:53]+1; 否則rounding—result—tmp2=ABC—added[l:53]; 若RI二0,且RN二l,rounding—result—tmp2=ABC—added[l:53]; 最后根據(jù)ABC—added的最高位和rounding—result—tmpl的最高位從 rounding—result一tmpl禾口 rounding_result—trap2中選取一個(gè)作為最終A+BXC的尾數(shù),并決 定指數(shù)計(jì)算單元(18)中的指數(shù)是否需要l比特的修正若rounding_result_tmpl的最高位為1且ABC—added的最高位為0,或者ABC—added的 最高位為1時(shí),選取rounding—resultjmpl作為最終結(jié)果,指數(shù)計(jì)算單元(18)中不需要1 比特的修正,否則選取rounding—result—t即2作為最終結(jié)果,指數(shù)計(jì)算單元(18)中需要1 比特的修正。本發(fā)明采用三級(jí)流水線實(shí)現(xiàn),用VerilogHDL實(shí)現(xiàn),通過(guò)驗(yàn)證后用0. 18微米標(biāo)準(zhǔn)單元庫(kù) 進(jìn)行電路綜合。對(duì)綜合結(jié)果進(jìn)行時(shí)序分析,結(jié)果顯示最大延時(shí)為3.47納秒。用SPEC 2000評(píng) 估顯示,采用本發(fā)明后,相比普通的乘加單元,能夠獲得約25%的性能提升。
圖1是參考文獻(xiàn)1 : Floating-Point Multiply-Add-Fused with Reduced Latency中介紹的一種已有的乘加單元的結(jié)構(gòu)框圖;圖2是本發(fā)明的三級(jí)流水線實(shí)現(xiàn)的解決了數(shù)據(jù)相關(guān)的雙精度浮點(diǎn)乘加單元的結(jié)構(gòu)框圖; 圖3a是ex;^S + e;^ —C-exp —J < 52時(shí),A相對(duì)BXC移位對(duì)齊后在數(shù)據(jù)通道中擺放的示意圖;圖3a是ex戶—S + ex;7 —C-exp —^ 2 52時(shí),A相對(duì)B X C移位對(duì)齊后在數(shù)據(jù)通道中擺放的 示意圖;圖4是乘法壓縮樹(shù)具體實(shí)現(xiàn)的框圖,這一壓縮樹(shù)由4個(gè)165比特的CSA組成。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步的詳細(xì)描述。本發(fā)明采用三級(jí)流水線實(shí)現(xiàn),用VerilogHDL實(shí)現(xiàn),通過(guò)驗(yàn)證后用0. 18微米標(biāo)準(zhǔn)單元庫(kù) 進(jìn)行電路綜合。本發(fā)明的單精度并行浮點(diǎn)單元按時(shí)序劃分為了三個(gè)流水節(jié)拍,下面參照?qǐng)D2,對(duì)整個(gè)工 作過(guò)程進(jìn)行說(shuō)明。在本實(shí)施例中,仍以A+B X C表示一個(gè)乘加操作。第一級(jí)流水線A的移位對(duì)齊和BXC的波斯編碼、部分積壓縮,并經(jīng)3: 2CSA樹(shù)壓縮 后輸出。這里的A和B都可能來(lái)自上一條指令中間結(jié)果的回送,也就是說(shuō),它們都可能為55比特 的進(jìn)位保存表示的中間結(jié)果,組成A的兩部分用A1、 A2表示,組成B的兩部分用B1、 B2表示。Al和A2的值分兩種情況考慮當(dāng)要執(zhí)行的指令與上一條指令無(wú)數(shù)據(jù)相關(guān)時(shí),或者雖發(fā)生了數(shù)據(jù)相關(guān),但是上一條指令 的結(jié)果不被用來(lái)作為該條指令的加數(shù)時(shí),55比特的Al的前53比特為輸入的被加數(shù)的尾數(shù), 后兩比特為0,根據(jù)IEEE 754標(biāo)準(zhǔn),雙精度浮點(diǎn)數(shù)的尾數(shù)為其第13位到64位,其為規(guī)格化 數(shù)時(shí)在最高位補(bǔ)l,否則在最高位補(bǔ)零,本發(fā)明針對(duì)的是規(guī)格化數(shù),非規(guī)格化數(shù)將作為o看 待,A2為0;要執(zhí)行的指令與上一條指令發(fā)生了數(shù)據(jù)相關(guān),且上一條指令的結(jié)果被用來(lái)作為該條指令 的加數(shù)時(shí),又分為兩種情況上一條指令為乘法指令,則A1、 A2分別為第一級(jí)流水線的輸出sum—pl、 carry—pi (9的 輸出)的高55比特;上一條指令為加法指令或乘加指令,貝ijAl、 A2分別為第二級(jí)流水線的輸出sum—p2、 carry—p2 (16的輸出)的高55比特; Bl和B2的值也分兩種情況考慮當(dāng)要執(zhí)行的指令與上一條指令無(wú)數(shù)據(jù)相關(guān)時(shí),或者雖發(fā)生了數(shù)據(jù)相關(guān),數(shù)據(jù)相關(guān)的類型, 但是上一條指令的結(jié)果不被用來(lái)作為該條指令的乘數(shù)時(shí),55比特的Bl的前53比特為輸入的 被乘數(shù)的尾數(shù),后兩比特為0,根據(jù)IEEE 754標(biāo)準(zhǔn),雙精度浮點(diǎn)數(shù)的尾數(shù)為其第13位到64 位,其為規(guī)格化數(shù)時(shí)在最高位補(bǔ)l,否則在最高位補(bǔ)零,本發(fā)明針對(duì)的是規(guī)格化數(shù),非規(guī)格 化數(shù)將作為0看待,B2為0。要執(zhí)行的指令與上一條指令發(fā)生了數(shù)據(jù)相關(guān),且上一條指令的結(jié)果被用來(lái)作為該條指令 的乘數(shù)時(shí),又分為兩種情況-上一條指令為乘法指令,則B1、 B2分別為第一級(jí)流水線的輸出sum_pl、 carry—pl (9的 輸出)的高55比特。上一條指令為加法指令或乘加指令,則B1、 B2分別為第二級(jí)流水線的輸出sum—p2、 carry—p2 (16的輸出)的高55比特?;?的波茨編碼器5對(duì)C的尾數(shù)進(jìn)行編碼,然后將編碼的結(jié)果與Bl、 B2相乘得到54 個(gè)部分積,編碼后的54個(gè)部分積的被送入3 : 2的進(jìn)位保存(CSA)壓縮樹(shù)6中,CSA壓 縮樹(shù)的構(gòu)造分別在圖4中做了詳細(xì)的介紹,圖4中每一個(gè)單元模塊的輸入x、 y、 z為3個(gè)要 被壓縮的165比特的數(shù),輸出S、 C分別為壓縮后的165比特的和字節(jié)和進(jìn)位字節(jié),其邏輯關(guān) 系為C = ((x &少)I (x & z) I (j; & z))《1,這里~、 &和|分別表示按位異或、按位與和按位或操作,《表示向右移位。 圖4是一個(gè)將6個(gè)輸入壓縮為2個(gè)的3: 2CSA樹(shù)的結(jié)構(gòu)圖,其輸入in廣in6為6個(gè)165比特的數(shù),輸出為壓縮后得到的和、進(jìn)位字節(jié)。整個(gè)壓縮樹(shù)由4個(gè)165比特的CSA構(gòu)成,將6個(gè)輸入壓縮為兩個(gè),需要3級(jí)的CSA樹(shù)。這里C為輸入的被乘數(shù),根據(jù)IEEE 754標(biāo)準(zhǔn),雙精度浮點(diǎn)數(shù)的尾數(shù)為其第13位到64位,其為規(guī)格化數(shù)時(shí)在最高位補(bǔ)l,否則在最高位補(bǔ)零,本發(fā)明針對(duì)的是規(guī)格化數(shù),非規(guī)格化數(shù) 將作為0看待。當(dāng)乘數(shù)B來(lái)自前一條指令的中間結(jié)果第一級(jí)的輸出(S,_pl、 carry—pl)或第二級(jí)的 輸出(sum_p2、 carry—p2)時(shí),Bl、 B2僅取了中間結(jié)果的高55比特,中間結(jié)果的低110比 特相加可能有進(jìn)位產(chǎn)生,這一進(jìn)位是要考慮的,本發(fā)明中考慮這一進(jìn)位的方法是當(dāng)兩條指 令發(fā)生數(shù)據(jù)相關(guān)且前一指令的結(jié)果用做后一指令的一個(gè)乘數(shù),當(dāng)后一指令利用前一指令的中 間結(jié)果進(jìn)行計(jì)算時(shí),若前一指令中間結(jié)果的低110比特有進(jìn)位產(chǎn)生,則將7的控制信號(hào)ctrl2 置高,將C并入CSA樹(shù)6的輸出端,實(shí)現(xiàn)(Bl+B2+1) XC。A的移位對(duì)齊、取反與BXC的波斯編碼、部分積壓縮并行執(zhí)行。若A的符號(hào)與BXC的 符號(hào)不同,則需要對(duì)其求補(bǔ)。求一個(gè)數(shù)的補(bǔ)數(shù)的方法為取反后加一。求補(bǔ)所需的加l可利用 3: 2 CSA進(jìn)位字節(jié)最低位上的空位來(lái)實(shí)現(xiàn)。在普通的乘加單元(這里以A+BXC表示一個(gè)普通的乘加操作)中,對(duì)A移位對(duì)齊的方法 通常為將其從BXC的最高位左側(cè)26比特的位置開(kāi)始存放,然后根據(jù)指數(shù)差向右進(jìn)行移位。 在A的最初存放位置和BXC的最高位之間有兩個(gè)空位,目的是在A遠(yuǎn)大于BXC時(shí)確保能夠 正確的舍入。在本發(fā)明中,加數(shù)由兩部分構(gòu)成,若兩部分同時(shí)被移出數(shù)據(jù)通道,移出數(shù)據(jù)通 道的部分可能產(chǎn)生進(jìn)位,這一進(jìn)位的計(jì)算會(huì)增大延時(shí),且這種情況下粘滯位的計(jì)算也很復(fù)雜, 因此必須采用新的移位對(duì)齊策略,本發(fā)明中根據(jù)A、 B、 C的指數(shù)差,分兩種情況,分別采用 不同的移位對(duì)齊策略,這五種情況的劃分方法如下ex/ — 5 + ex/> — C _ — ^ < 52exp — 5 + ex/ — C — ex; — ^4 2 52其中,exp_A、 exp_B和exp一C分別是操作數(shù)A 、 B和C的指數(shù),根據(jù)IEEE 754標(biāo)準(zhǔn), 雙精度浮點(diǎn)數(shù)的指數(shù)為其第2位到第12位。各種情況下的數(shù)據(jù)通道,以及A移位對(duì)齊后相對(duì)于BXC在數(shù)據(jù)通道中的擺放情況如圖3 所示。A由Al、 A2兩部分構(gòu)成,還可能需要在最低位上加1 (這一加1由常數(shù)CON表示),但 是它們指數(shù)相同,在數(shù)據(jù)通道中移位的情況是一樣的,所以在圖3中都用A示意。exp —S + exp — C-ex; —^ < 52時(shí),數(shù)據(jù)通道的構(gòu)成如圖3 (a)所示,與普通的MAF — 樣,將A從165比特的數(shù)據(jù)通道的最高位開(kāi)始擺放,BXC的置于165比特?cái)?shù)據(jù)通道的低108 位上。若A的指數(shù)比BXC大57甚至更多時(shí),Al、 A2和C0N都不需移位,否則根據(jù)指數(shù)差與BXC對(duì)A1、 A2和C0N進(jìn)行移位對(duì)齊;exp —+ —C-exp —X 2 52時(shí),數(shù)據(jù)通道的構(gòu)成如圖3 (b)所示,將BXC的置于165 比特?cái)?shù)據(jù)通道的高108位上,然后根據(jù)指數(shù)差與BXC對(duì)Al、 A2和CON進(jìn)行移位對(duì)齊,當(dāng)Al、 A2和C0N的移位量大于110時(shí),它們將會(huì)有部分別移出數(shù)據(jù)通道,此時(shí)Al、 A2和C0N在B XC的最低位的右側(cè),可將A1、 A2和C0N放置在數(shù)據(jù)通道的最低55比特上,而不繼續(xù)移位。總結(jié)上述2中情況可發(fā)現(xiàn)Al、 A2和C0N永遠(yuǎn)不會(huì)被移出數(shù)據(jù)通道,所以沒(méi)有粘滯位產(chǎn)生,且被加數(shù)的求補(bǔ)將被大 大簡(jiǎn)化《g"_^^wg" —C (此時(shí)sub =1)時(shí)在3: 2CSA樹(shù)的兩個(gè)進(jìn)位保存壓縮器的 進(jìn)位字節(jié)的最低位上加1即可,這里e表示異或,sign—A、 sign 一B和sign 一C分別是操作 數(shù)A 、 B和C的符號(hào)位,根據(jù)IEEE 754標(biāo)準(zhǔn),雙精度浮點(diǎn)數(shù)的指數(shù)為其最高位。當(dāng)ctrl-l時(shí),還要增加一個(gè)求補(bǔ)所需的加1,在9的另一個(gè)進(jìn)位保存壓縮器的進(jìn)位字節(jié)的最低位上加 1即可。當(dāng)加數(shù)A來(lái)自前一條指令的中間結(jié)果第一級(jí)的輸出(sum—pl、 carry—pl)或第二級(jí)的 輸出(sum_p2、 carry—p2)時(shí),Al、 A2僅取了中間結(jié)果的高55比特,中間結(jié)果的低110比 特相加可能有進(jìn)位產(chǎn)生,這一進(jìn)位是要考慮的,本發(fā)明中考慮這一進(jìn)位的方法是當(dāng)兩條指 令發(fā)生數(shù)據(jù)相關(guān)且前一指令的結(jié)果用做后一指令的加數(shù),當(dāng)后一指令利用前一指令的中間結(jié) 果進(jìn)行計(jì)算時(shí),若前一指令中間結(jié)果的低110比特有進(jìn)位產(chǎn)生,則將4的控制信號(hào)ctrll置 高,將與Al、 A2最低位對(duì)齊的1同Al、 A2 —樣移位mv并由sub決定是否取反后并入到3的 輸出端。第二級(jí)流水線A、.B移位對(duì)齊后的結(jié)果和CXD的部分積壓縮后的結(jié)果經(jīng)3: 2CSA樹(shù)壓 縮后的結(jié)果進(jìn)行進(jìn)行前導(dǎo)零預(yù)測(cè)、符號(hào)預(yù)測(cè)、半加運(yùn)算以及規(guī)格化移位。將9的輸出分別記為sum一pl和carry—pl,在第二級(jí)流水線中將sum—pl和carry_pl輸 入到前導(dǎo)零預(yù)測(cè)單元10中,計(jì)算前導(dǎo)零個(gè)數(shù)(記為L(zhǎng)ZN)。如果下面直接對(duì)sum—pl和carry—pl進(jìn)行規(guī)格化移位,再相加,若相加結(jié)果為負(fù),還需 要對(duì)其求補(bǔ),增加了延時(shí)。避免這一延時(shí)的辦法是在前導(dǎo)零預(yù)測(cè)的同時(shí)判斷sum—pl和 carry_pl的符號(hào),若sum—pl和carry—pK0,則選擇sum—pl和carry_pl的補(bǔ)數(shù)表示進(jìn)行后 續(xù)的處理,如規(guī)格化移位、最終加和舍入等。這里求sum一pl和carry—pl的補(bǔ)數(shù)時(shí)所需的加 1是利用半加器15和16的進(jìn)位字節(jié)的最低位空位實(shí)現(xiàn)的。當(dāng)sum—pl和carry一pl的高55位作為中間結(jié)果回送時(shí),還需計(jì)算低110位的進(jìn)位,可利 用符號(hào)預(yù)測(cè)單元14來(lái)完成,計(jì)算結(jié)果記為carry—110LSBs。連續(xù)兩條指令發(fā)生數(shù)據(jù)相關(guān)時(shí),若前一條指令為加法或乘加指令,回送sum一p2、carry一p2 的高55位的同時(shí),還需回送sum—p2、 carry—p2的低110位的進(jìn)位,考慮到這種情況下流水 線將需要停滯等待一個(gè)時(shí)鐘周期,在這個(gè)停滯等待的時(shí)鐘周期里,可利用符號(hào)預(yù)測(cè)模塊14來(lái) 計(jì)算sum_p2、 carry—p2低110位的進(jìn)位。165比特的移位器16根據(jù)10中計(jì)算出的LZN對(duì)選擇器15的輸出進(jìn)行向右移位,其輸出 結(jié)果記為sum—p2、 carry—p2。第三級(jí)流水線利用第二級(jí)流水線輸出的sum—p2、 carry—p2完成最終加法和舍入。在19中,首先將sum一p2和carry—p2相加,結(jié)果記為ABC—added,然后根據(jù)舍入模式分 別將第54位和第55位作為舍入位時(shí)的結(jié)果,分別記為rounding—result—tmpl和 rounding一result—tmp2,若rounding—result一tmpl的最高位為1且ABC—added的最高位為0, 或者ABC一added的最高位為1時(shí),選取rounding—result—tmpl作為最終結(jié)果,否則選取 rounding—result—tmp2作為最終結(jié)果。18中根據(jù)1中計(jì)算出的數(shù)據(jù)通道的臨時(shí)指數(shù)和13中計(jì)算出的規(guī)格化移位量計(jì)算A+BXC 的指數(shù),然后根據(jù)19的運(yùn)算結(jié)果進(jìn)行修正若rounding—result—t卿2被選為最終結(jié)果,將 指數(shù)減l。本發(fā)明中僅回送中間結(jié)果的高55比特,但是精度并不低于普通的MAF中,先舍入成53 比特的尾數(shù),再用于下一條指令的計(jì)算,分析如下對(duì)于雙精度浮點(diǎn)數(shù),尾數(shù)為53位,浮點(diǎn)運(yùn)算中第54位被稱為監(jiān)督位(guard bit), 54 位之后的位被用來(lái)產(chǎn)生粘滯位,其屬性只有兩個(gè)全為0和不全為0,若采用普通的四舍五 入,粘滯位對(duì)結(jié)果是不產(chǎn)生影響的,在IEEE 754所規(guī)定的幾種舍入方式里,除截?cái)嗌崛耄?滯位都將影響最終結(jié)果,但是對(duì)結(jié)果精確度的影響很小。例如guard bit = 0,粘滯位為l,向無(wú)窮舍入時(shí),結(jié)果將為前53bits加1,但真實(shí)結(jié) 果更接近前53bits不加1的結(jié)果。所以可以僅回送guard bit及其更高的位。又因?yàn)橹虚g結(jié)果可能有一個(gè)前導(dǎo)零,所以應(yīng) 回送中間結(jié)果的前55bits,后面的位上可能有進(jìn)位產(chǎn)生,該進(jìn)位需要被考慮,本發(fā)明中很好 的處理了該進(jìn)位。
權(quán)利要求
1、一種具有數(shù)據(jù)前送結(jié)果的浮點(diǎn)乘加單元,實(shí)現(xiàn)形式為A+B×C的乘加操作,其特征在于,該設(shè)計(jì)的雙精度浮點(diǎn)乘加運(yùn)算單元由三級(jí)流水實(shí)現(xiàn),且操作數(shù)A和B可以是上一指令的中間結(jié)果,可由三部分構(gòu)成A由55比特的A1、A2和常數(shù)項(xiàng)CON構(gòu)成,B由55比特的B1、B2和一個(gè)常數(shù)項(xiàng)構(gòu)成,A和B的常數(shù)項(xiàng)都可以是0或1,該浮點(diǎn)乘加單元含有第一級(jí)流水線由指數(shù)和符號(hào)處理單元(1)、第一個(gè)165比特移位對(duì)齊器(2)、按位取反器(3)、第一個(gè)選通器(4)、以4為基的波茨編碼器(5)、第一個(gè)3:2的進(jìn)位保存加法器CSA組成的部分積壓縮樹(shù)(6)、第二個(gè)選通器(7)、57比特的一次性移位器(8)和第二個(gè)3:2的CSA樹(shù)(9)組成;其中,指數(shù)和符號(hào)處理單元(1)根據(jù)操作數(shù)A、B、C的指數(shù)和符號(hào)計(jì)算是否為有效減sub,sub=sign_Asign_Bsign_C,其中,sign_A、sign_B、sign_C分別是操作數(shù)A、B、C的符號(hào),根據(jù)IEEE 754標(biāo)準(zhǔn),雙精度浮點(diǎn)數(shù)的符號(hào)為其最高位;為異或操作;計(jì)算A+B×C的臨時(shí)符號(hào)sign_p1,sign_p1=sign_Bsign_C,計(jì)算A+B×C的指數(shù)差exp_ABC,exp_ABC=exp_B+exp_C-exp_A其中,exp_A、exp_B和exp_C分別是操作數(shù)A、B和C的指數(shù),根據(jù)IEEE 754標(biāo)準(zhǔn),雙精度浮點(diǎn)數(shù)的符號(hào)指數(shù)為第2位到第12位;計(jì)算A+B×C的指數(shù)exp_p1,并確定A相對(duì)B×C移位對(duì)齊時(shí)的移位量mv,exp_p1和mv的計(jì)算方法如下exp_ABC≤-58時(shí),exp_p1=exp_A,mv=0,52>exp_ABC>-58時(shí),exp_p1=exp_B+exp_C+57,mv=exp_ABC+57,109>exp_ABC≥52時(shí),exp_p1=exp_B+exp_C+1,mv=exp_ABC+1,exp_ABC≥109時(shí),exp_p1=exp_B+exp_C+1,mv=110,第一個(gè)165比特移位對(duì)齊器(2)根據(jù)指數(shù)和符號(hào)處理單元(1)中得到的mv值,對(duì)A1、A2、CON進(jìn)行移位,55比特的CON為00…01,即由54比特的0和最低位上的1構(gòu)成,A1和A2的值分兩種情況考慮(1)當(dāng)要執(zhí)行的指令與上一條指令無(wú)數(shù)據(jù)相關(guān)時(shí),或者雖發(fā)生了數(shù)據(jù)相關(guān),但是上一條指令的結(jié)果不被用來(lái)作為該條指令的加數(shù)時(shí),55比特的A1的前53比特為輸入的被加數(shù)的尾數(shù),后兩比特為0,根據(jù)IEEE 754標(biāo)準(zhǔn),雙精度浮點(diǎn)數(shù)的尾數(shù)為其第13位到64位,其為規(guī)格化數(shù)時(shí)在最高位補(bǔ)1,否則在最高位補(bǔ)零,非規(guī)格化數(shù)將作為0看待,A2為0;(2)要執(zhí)行的指令與上一條指令發(fā)生了數(shù)據(jù)相關(guān),且上一條指令的結(jié)果被用來(lái)作為該條指令的加數(shù)時(shí),又分為兩種情況1)上一條指令為乘法指令,則A1、A2分別為第一級(jí)流水線的輸出sum_p1、carry_p1的高55比特,其中sum_p1、carry_p1的為第二個(gè)3:2的CSA樹(shù)(9)輸出;2)上一條指令為加法指令或乘加指令,則A1、A2分別為第二級(jí)流水線的輸出sum_p2、carry_p2的高55比特,其中sum_p2、carry_p2為第二個(gè)165比特的移位器(16)的輸出;A1、A2、CON移位后的輸出分別記為align_A1、align_A2、align_CON,第一個(gè)165比特移位對(duì)齊器(2)完成的功能可用下面的公式表達(dá)align_A1=A1□mv,align_A2=A2□mv,align_CON=CON□mv,其中□表示右移;按位取反器(3),如果A的符號(hào)位和B×C的符號(hào)位不同,即指數(shù)和符號(hào)處理單元(1)的輸出sub=1,對(duì)第一個(gè)165比特移位對(duì)齊器(2)的輸出結(jié)果align_A1、align_A2和align_CON的每比特都做取反操作(也就是按位取反),否則不做任何操作直接將align_A1、align_A2和align_CON輸出,以4為基的波茨編碼器(5)的輸出記為inv_A1、inv_A2、inv_CON;第一個(gè)選通器(4)根據(jù)控制信號(hào)ctrl1決定是否將inv_CON輸出到第二個(gè)3:2的CSA樹(shù)(9)中,ctrl1由是否發(fā)生數(shù)據(jù)相關(guān),以及符號(hào)預(yù)測(cè)邏輯(14)的輸出carry_110LSBs決定,當(dāng)發(fā)生數(shù)據(jù)相關(guān),且前一條指令的結(jié)果被作為后一條指令的加數(shù),同時(shí)carry_110LSBs=1時(shí),ctrl1=1,此時(shí)第一個(gè)選通器(4)的輸出為inv_CON,否則第一個(gè)選通器(4)的輸出為0;以4為基的波茨編碼器(5)對(duì)C的尾數(shù)進(jìn)行編碼,然后將編碼的結(jié)果分別與B1、B2相乘得到54個(gè)部分積,這里C為輸入的被乘數(shù),根據(jù)IEEE 754標(biāo)準(zhǔn),雙精度浮點(diǎn)數(shù)的尾數(shù)為其第13位到64位,其為規(guī)格化數(shù)時(shí)在最高位補(bǔ)1,否則在最高位補(bǔ)零,非規(guī)格化數(shù)將作為0看待;B1和B2的值分兩種情況考慮(1)當(dāng)要執(zhí)行的指令與上一條指令無(wú)數(shù)據(jù)相關(guān)時(shí),或者雖發(fā)生了數(shù)據(jù)相關(guān),但是上一條指令的結(jié)果不被用來(lái)作為該條指令的乘數(shù)時(shí),55比特的B1的前53比特為輸入的被乘數(shù)的尾數(shù),后兩比特為0,根據(jù)IEEE 754標(biāo)準(zhǔn),雙精度浮點(diǎn)數(shù)的尾數(shù)為其第13位到64位,其為規(guī)格化數(shù)時(shí)在最高位補(bǔ)1,否則在最高位補(bǔ)零,非規(guī)格化數(shù)將作為0看待,B2為0;(2)要執(zhí)行的指令與上一條指令發(fā)生了數(shù)據(jù)相關(guān),且上一條指令的結(jié)果被用來(lái)作為該條指令的乘數(shù)時(shí),又分為兩種情況1)上一條指令為乘法指令,則B1、B2分別為第一級(jí)流水線的輸出sum_p1、carry_p1的高55比特,其中sum_p1、carry_p1的為第二個(gè)3:2的CSA樹(shù)(9)輸出;2)上一條指令為加法指令或乘加指令,則B1、B2分別為第二級(jí)流水線的輸出sum_p2、carry_p2的高55比特,其中sum_p2、carry_p2為第二個(gè)165比特的移位器(16)的輸出;這54個(gè)部分積的被送入第二個(gè)3:2的進(jìn)位保存CSA壓縮樹(shù)(6)中,3:2CSA樹(shù)即由3:2CSA組成的樹(shù),3個(gè)輸入經(jīng)過(guò)一個(gè)3:2CSA將被壓縮成2個(gè)輸出,若設(shè)輸入為x、y、z,輸出為S、C,則壓縮過(guò)程可表示如下S=x^y^z,C=((x&y)|(x&z)|(y&z))<<1,這里^、&和|分別表示按位異或、按位與和按位或操作,<<表示向左移位;將9級(jí)3:2 CSA級(jí)聯(lián),形成3:2 CSA樹(shù),就能將54個(gè)部分積壓縮為2個(gè),分別記為sum_BC、carry_BC;第二個(gè)選通器(7)根據(jù)控制性號(hào)ctrl2決定是否將C輸出到57比特的一次性移位器(8)中,ctrl2由是否發(fā)生數(shù)據(jù)相關(guān),數(shù)據(jù)相關(guān)的類型,以及14的輸出carry_110LSBs決定,當(dāng)發(fā)生數(shù)據(jù)相關(guān),且前一條指令的結(jié)果被作為后一條指令的乘數(shù),同時(shí)carry_110LSBs=1時(shí),ctrl2=1,此時(shí)第二個(gè)選通器(7)的輸出為C后面補(bǔ)上55比特的0后的結(jié)果,否則第二個(gè)選通器(7)的輸出為0;sum_BC、carry_BC和第二個(gè)選通器(7)的輸出被送到57比特的一次性移位器(8)中,由指數(shù)和符號(hào)處理單元(1)的輸出exp_ABC決定是否對(duì)它們分別進(jìn)行一次57位的移位exp_ABC<52時(shí),sum_BC、carry_BC和第二個(gè)選通器(7)的輸出將分別被左移57位,否則均不被移位,直接輸出;第二個(gè)3:2的CSA樹(shù)(9)對(duì)inv_A1、inv_A2、4的輸出、57比特的一次性移位器(8)的3個(gè)輸出做3:2壓縮,壓縮過(guò)程與第一個(gè)3:2的進(jìn)位保存加法器CSA組成的部分積壓縮樹(shù)(6)中相似,不同的在于,當(dāng)指數(shù)和符號(hào)處理單元(1)中判斷出sub=1時(shí),在兩個(gè)進(jìn)位保存加法器進(jìn)位字節(jié)的最低位置入1,第一個(gè)選通器(4)的控制信號(hào)ctrl1等于1時(shí),還要在第三個(gè)進(jìn)位保存加法器進(jìn)位字節(jié)的最低位置入1,最終6個(gè)輸入被壓縮為2個(gè)輸出,記為sum_p1、carry_p1;第二級(jí)流水線165比特的前導(dǎo)零預(yù)測(cè)單元(10)、第一個(gè)165比特的半加器(11)、第二個(gè)165比特的半加器(12)和第三個(gè)165比特的半加器(13)、符號(hào)預(yù)測(cè)邏輯(14)、選擇器(15)、第二個(gè)165比特的移位器(16)和與門(17)組成;其中,165比特的前導(dǎo)零預(yù)測(cè)單元(10),判斷第二個(gè)3:2的CSA樹(shù)(9)的輸出結(jié)果sum_p1和carry_p1相加時(shí),前導(dǎo)零的數(shù)目,前導(dǎo)零數(shù)目即從最高位開(kāi)始,到第一個(gè)非0位之間的位數(shù),若sum_p1和carry_p1相加結(jié)果為負(fù),則這里判斷的將是前導(dǎo)一的數(shù)目,即從最高位到第一個(gè)非1位之間的位數(shù),具體的判斷方法為通過(guò)檢查某一位及其左右相鄰的位確定哪一位可能是最高位,設(shè)一預(yù)測(cè)位fi,T=sum_p1carry_p1,G=sum_p1&carry_p1,
全文摘要
具有數(shù)據(jù)前送結(jié)構(gòu)的浮點(diǎn)乘加單元用于浮點(diǎn)運(yùn)算,實(shí)現(xiàn)形式為A+B×C的乘加操作,分三級(jí)流水線實(shí)現(xiàn)在第一級(jí)流水線中,對(duì)A進(jìn)行移位對(duì)齊,同時(shí)完成B×C的波斯編碼、部分積壓縮,并將A移位對(duì)齊后的結(jié)果和B×C的部分積壓縮后的結(jié)果經(jīng)3∶2進(jìn)位保存加法樹(shù)壓縮;在第二級(jí)流水線中,對(duì)前一級(jí)流水線的輸出進(jìn)行前導(dǎo)零預(yù)測(cè)、符號(hào)預(yù)測(cè)、半加運(yùn)算以及規(guī)格化移位;在第三級(jí)流水線中,完成最終加法和舍入,計(jì)算其指數(shù)。這里A和B都可能是前一條指令的中間結(jié)果。本發(fā)明的優(yōu)點(diǎn)在于,相鄰指令發(fā)生數(shù)據(jù)相關(guān)時(shí),能夠不等待或僅等待一個(gè)周期,提高了指令流的執(zhí)行效率。
文檔編號(hào)G06F7/48GK101221490SQ20071017997
公開(kāi)日2008年7月16日 申請(qǐng)日期2007年12月20日 優(yōu)先權(quán)日2007年12月20日
發(fā)明者李兆麟, 李恭瓊, 鄔健元 申請(qǐng)人:清華大學(xué)