本發(fā)明提供一種用于執(zhí)行多個(gè)浮點(diǎn)數(shù)相加的裝置及方法,可用于圖像處理器、數(shù)字處理器、智能設(shè)備及片上網(wǎng)絡(luò)數(shù)據(jù)運(yùn)算等。
背景技術(shù):
隨著大數(shù)據(jù)時(shí)代的來臨,數(shù)據(jù)的運(yùn)算量也隨之大幅增加,對(duì)運(yùn)算的速度也提出了更高的要求。無論是圖像還是數(shù)字等處理器,都必須滿足低延遲、準(zhǔn)確度高的運(yùn)算要求。浮點(diǎn)數(shù)加法,作為最基本且最常用的浮點(diǎn)數(shù)運(yùn)算之一,如何加速此類運(yùn)算,也顯得尤為重要,并引起了廣泛的討論和研究。
現(xiàn)有的操作數(shù)相加的加速裝置,主要分為兩種,串行進(jìn)位加法樹和進(jìn)位保存加法樹。
圖1示出了串行進(jìn)位加法樹的結(jié)構(gòu),即采用二叉樹的結(jié)構(gòu),對(duì)待運(yùn)算的操作數(shù)兩兩相加,而后向上傳遞,直至得到最終結(jié)果。顯然,該結(jié)構(gòu)支持多浮點(diǎn)數(shù)并行相加,加速了加法運(yùn)算,但是在進(jìn)位傳播時(shí),需要消耗大量的時(shí)鐘延遲,而且,運(yùn)算結(jié)果和操作數(shù)的順序也有一定的關(guān)系,運(yùn)算結(jié)果的精度損失較大。
圖2示出了進(jìn)位保存加法樹的結(jié)構(gòu),即利用華萊士樹的結(jié)構(gòu),將由每一級(jí)全加器的進(jìn)位生成的部分連接到下一級(jí)的高位,通過連線實(shí)現(xiàn)進(jìn)位傳遞,避免復(fù)雜的進(jìn)位傳遞邏輯,降低了進(jìn)位傳遞的延遲。然而,這種方法并不能直接用于浮點(diǎn)數(shù)的加法,并且,操作數(shù)的順序不同,也可能帶來計(jì)算誤差。
另外,常用算法中,大多將浮點(diǎn)數(shù)加法和浮點(diǎn)數(shù)的累加混合在一起,這種混合操作,就要求運(yùn)算器必需同時(shí)支持這兩種運(yùn)算,并且運(yùn)算結(jié)果和給定的操作數(shù)順序無關(guān)。
技術(shù)實(shí)現(xiàn)要素:
(一)要解決的技術(shù)問題
本發(fā)明的目的在于,提供一種能夠執(zhí)行多個(gè)浮點(diǎn)數(shù)相加的裝置和方法,具有運(yùn)算延遲低、結(jié)果精度損失小的優(yōu)點(diǎn)。
(二)技術(shù)方案
本發(fā)明提供一種用于執(zhí)行多個(gè)浮點(diǎn)數(shù)相加的裝置,浮點(diǎn)數(shù)包括符號(hào)位、指數(shù)位和尾數(shù)位,裝置包括:
預(yù)處理模塊,用于對(duì)所述多個(gè)浮點(diǎn)數(shù)進(jìn)行預(yù)處理,以使多個(gè)浮點(diǎn)數(shù)的指數(shù)位和符號(hào)位一致;
加法運(yùn)算模塊,用于對(duì)預(yù)處理后的多個(gè)浮點(diǎn)數(shù)相加,得到累加結(jié)果及該累加結(jié)果的待移位值,所述累加結(jié)果包括符號(hào)位、指數(shù)位和尾數(shù)位;
規(guī)格化處理模塊,用于根據(jù)待移位值對(duì)所述累加結(jié)果的符號(hào)位、指數(shù)位和尾數(shù)位進(jìn)行移位,得到規(guī)格化的累加結(jié)果。
進(jìn)一步,預(yù)處理模塊包括:
比較選擇模塊,用于以二叉樹的形式對(duì)所述多個(gè)浮點(diǎn)數(shù)的指數(shù)位進(jìn)行兩兩比較,選擇出最大的指數(shù)位;
計(jì)算移位模塊,用于根據(jù)每個(gè)浮點(diǎn)數(shù)和具有最大指數(shù)位的浮點(diǎn)數(shù)的指數(shù)位的關(guān)系來求得每個(gè)浮點(diǎn)數(shù)需要進(jìn)行邏輯移位的位數(shù)n,并對(duì)相應(yīng)浮點(diǎn)數(shù)的尾數(shù)位進(jìn)行邏輯移位,以使每一個(gè)浮點(diǎn)數(shù)的指數(shù)位均等于所述最大的指數(shù)位,同時(shí),令每一個(gè)浮點(diǎn)數(shù)的符號(hào)位與指數(shù)位最大的浮點(diǎn)數(shù)的符號(hào)位一致,其中,浮點(diǎn)數(shù)在改變符號(hào)位時(shí),對(duì)其尾數(shù)位取補(bǔ)碼。
進(jìn)一步,計(jì)算移位模塊求得邏輯移位的位數(shù)n,包括:
計(jì)算最大的指數(shù)位和待邏輯移位的浮點(diǎn)數(shù)的指數(shù)位的差值δe;
若具有最大指數(shù)位的浮點(diǎn)數(shù)為規(guī)格化浮點(diǎn)數(shù),而待邏輯移位的浮點(diǎn)數(shù)為非規(guī)格化浮點(diǎn)數(shù),則令n=δe-1;否則,令n=δe。
進(jìn)一步,計(jì)算移位模塊對(duì)浮點(diǎn)數(shù)的尾數(shù)位進(jìn)行邏輯移位,包括:
在所述浮點(diǎn)數(shù)的尾數(shù)位的最高位前補(bǔ)上1位隱藏位,其中,對(duì)于規(guī)格化浮點(diǎn)數(shù),隱藏位的值為1,對(duì)于非規(guī)格化浮點(diǎn)數(shù),隱藏位的值為0;
在浮點(diǎn)數(shù)的尾數(shù)位的最低位后增加k個(gè)“0”,作為有效位;
對(duì)增加有效位和隱藏位的尾數(shù)位右移n位,以舍棄尾數(shù)位最低的n位;
將移位后的尾數(shù)位的最低位作為粘滯位,將粘滯位與舍棄的n位進(jìn)行“或”運(yùn)算,用運(yùn)算結(jié)果更新粘滯位,得到最終所需的浮點(diǎn)數(shù)的尾數(shù)位。
進(jìn)一步,加法運(yùn)算模塊包括:
華萊士樹模塊,用于采用華萊士樹結(jié)構(gòu)將多個(gè)浮點(diǎn)數(shù)相加,直至歸約為兩個(gè)數(shù);
最終結(jié)果累加模塊,用于將該兩個(gè)數(shù)相加,得到第一累加結(jié)果,并將該兩個(gè)數(shù)的反碼相加,得到第二累加結(jié)果,根據(jù)第一累加結(jié)果的最高位選擇第一累加結(jié)果或者第二累加結(jié)果,作為累加結(jié)果;
前導(dǎo)零預(yù)測(cè)模塊,用于對(duì)該兩個(gè)數(shù)進(jìn)行邏輯運(yùn)算,確定累加結(jié)果第一個(gè)有效數(shù)字位的位置,以得到累加結(jié)果的待移位值。具體而言,假設(shè)該兩個(gè)數(shù)為a和b,首先利用傳播函數(shù)
進(jìn)一步,規(guī)格化處理模塊根據(jù)待移位值對(duì)累加結(jié)果進(jìn)行邏輯移位,以使累加結(jié)果的第一個(gè)有效數(shù)字位處于最高位,并對(duì)邏輯移位后的累加結(jié)果進(jìn)行規(guī)格化,得到累加結(jié)果的符號(hào)位、指數(shù)位和尾數(shù)位。
本發(fā)明還提供一種用于執(zhí)行多個(gè)浮點(diǎn)數(shù)相加的方法,浮點(diǎn)數(shù)包括符號(hào)位、指數(shù)位和尾數(shù)位,方法包括:
s1,對(duì)多個(gè)浮點(diǎn)數(shù)進(jìn)行預(yù)處理,以使多個(gè)浮點(diǎn)數(shù)的指數(shù)位和符號(hào)位一致;
s2,對(duì)預(yù)處理后的多個(gè)浮點(diǎn)數(shù)相加,得到累加結(jié)果及該累加結(jié)果的待移位值,所述累加結(jié)果包括符號(hào)位、指數(shù)位和尾數(shù)位;
s3,根據(jù)待移位值對(duì)累加結(jié)果的符號(hào)位、指數(shù)位和尾數(shù)位進(jìn)行移位,得到規(guī)格化的累加結(jié)果。
進(jìn)一步,步驟s1包括:
s11,以二叉樹的形式對(duì)多個(gè)浮點(diǎn)數(shù)的指數(shù)位進(jìn)行兩兩比較,選擇出最大的指數(shù)位;
s12,根據(jù)每個(gè)浮點(diǎn)數(shù)和具有最大指數(shù)位的浮點(diǎn)數(shù)的指數(shù)位的關(guān)系來求得每個(gè)浮點(diǎn)數(shù)需要進(jìn)行邏輯移位的位數(shù)n,并對(duì)相應(yīng)浮點(diǎn)數(shù)的尾數(shù)位進(jìn)行邏輯移位,以使每一個(gè)浮點(diǎn)數(shù)的指數(shù)位均等于所述最大的指數(shù)位,同時(shí),令每一個(gè)浮點(diǎn)數(shù)的符號(hào)位與指數(shù)位最大的浮點(diǎn)數(shù)的符號(hào)位一致,其中,浮點(diǎn)數(shù)在改變符號(hào)位時(shí),對(duì)其尾數(shù)位取補(bǔ)碼。
進(jìn)一步,步驟s12中,求得邏輯移位的位數(shù)n,包括:
計(jì)算最大的指數(shù)位和待邏輯移位的浮點(diǎn)數(shù)的指數(shù)位的差值δe;
若具有最大指數(shù)位的浮點(diǎn)數(shù)為規(guī)格化浮點(diǎn)數(shù),而待邏輯移位的浮點(diǎn)數(shù)為非規(guī)格化浮點(diǎn)數(shù),則令n=δe-1;否則,令n=δe。
進(jìn)一步,步驟s12中,對(duì)浮點(diǎn)數(shù)的尾數(shù)位進(jìn)行邏輯移位,包括:
在浮點(diǎn)數(shù)的尾數(shù)位的最高位前補(bǔ)上1位隱藏位,其中,對(duì)于規(guī)格化浮點(diǎn)數(shù),隱藏位的值為1,對(duì)于非規(guī)格化浮點(diǎn)數(shù),隱藏位的值為0;
在浮點(diǎn)數(shù)的尾數(shù)位的最低位后增加k個(gè)“0”,作為有效位;
對(duì)增加有效位和隱藏位的尾數(shù)位右移n位,以舍棄尾數(shù)位最低的n位;
將移位后的尾數(shù)位的最低位作為粘滯位,將粘滯位與舍棄的n位進(jìn)行“或”運(yùn)算,用運(yùn)算結(jié)果更新粘滯位,得到最終所需的浮點(diǎn)數(shù)的尾數(shù)位。
進(jìn)一步,步驟s2包括:
s21,采用華萊士樹結(jié)構(gòu)將多個(gè)浮點(diǎn)數(shù)相加,直至歸約為兩個(gè)數(shù);
s22,將該兩個(gè)數(shù)相加,得到第一累加結(jié)果,并將該兩個(gè)數(shù)的反碼相加,得到第二累加結(jié)果,根據(jù)指數(shù)位最大的浮點(diǎn)數(shù)的符號(hào)位,選擇第一累加結(jié)果或者第二累加結(jié)果,作為所述累加結(jié)果;
s23,對(duì)該兩個(gè)數(shù)進(jìn)行邏輯運(yùn)算,確定累加結(jié)果第一個(gè)有效數(shù)字位的位置,以得到累加結(jié)果的待移位值。
進(jìn)一步,步驟s3包括,根據(jù)累加結(jié)果的待移位值對(duì)累加結(jié)果進(jìn)行邏輯移位,以使累加結(jié)果的第一個(gè)有效數(shù)字位處于最高位,并對(duì)邏輯移位后的累加結(jié)果進(jìn)行規(guī)格化,得到累加結(jié)果的符號(hào)位、指數(shù)位和尾數(shù)位。
(三)有益效果
本發(fā)明能夠?qū)Χ鄠€(gè)相同標(biāo)準(zhǔn)的浮點(diǎn)數(shù)進(jìn)行加法運(yùn)算,解決了一次操作完成多個(gè)操作數(shù)的加法運(yùn)算的問題,同時(shí)增設(shè)有效數(shù)字位和粘滯位,降低運(yùn)算結(jié)果的精度損失;利用華萊士樹等結(jié)構(gòu)進(jìn)行運(yùn)算,降低了硬件的復(fù)雜性,提高了運(yùn)算速度。
附圖說明
圖1是現(xiàn)有技術(shù)中串行進(jìn)位加法樹的結(jié)構(gòu)示意圖。
圖2是現(xiàn)有技術(shù)中華萊士樹的結(jié)構(gòu)示意圖。
圖3是本發(fā)明提供的執(zhí)行多個(gè)浮點(diǎn)數(shù)相加的裝置的示意圖。
圖4是本發(fā)明中指數(shù)位兩兩比較的示意圖。
圖5是本發(fā)明中選擇最大指數(shù)位的示意圖。
圖6是本發(fā)明中計(jì)算移位模塊的示意圖。
圖7是本發(fā)明中最終結(jié)果累加模塊的示意圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合具體實(shí)施例,并參照附圖,對(duì)本發(fā)明進(jìn)一步詳細(xì)說明。
圖3是本發(fā)明提供的執(zhí)行多個(gè)浮點(diǎn)數(shù)相加的裝置的示意圖,如圖3所示,裝置包括預(yù)處理模塊、加法運(yùn)算模塊和規(guī)格化處理模塊,預(yù)處理模塊包括比較選擇模塊和計(jì)算移位模塊,加法運(yùn)算模塊包括華萊士樹模塊、最終結(jié)果累加模塊和前導(dǎo)零預(yù)測(cè)模塊。
現(xiàn)有x個(gè)相同標(biāo)準(zhǔn)的y位浮點(diǎn)數(shù)進(jìn)行相加,第i個(gè)浮點(diǎn)數(shù)用fi表示,其中,x、y和i均為正整數(shù),且1≤i≤x。
在預(yù)處理模塊中,將每個(gè)浮點(diǎn)數(shù)fi,拆分為符號(hào)位部分si,指數(shù)位部分ei和尾數(shù)位部分mi,即fi=(si,ei,mi)。通過比較選擇模塊進(jìn)行兩兩選擇比較操作,如圖4所示,即若ea>eb,則選擇a,否則選擇b。而后,如圖5所示,利用二叉樹結(jié)構(gòu),依次選擇出具有最大指數(shù)位的浮點(diǎn)數(shù)fmax,其符號(hào)位、指數(shù)位、尾數(shù)位分別為smax,emax,mmax。
圖6是本發(fā)明中計(jì)算移位模塊的示意圖,即分別求得每個(gè)浮點(diǎn)數(shù)fi與最大指數(shù)位的浮點(diǎn)數(shù)fmax的指數(shù)的差值δe。若fmax為規(guī)格化浮點(diǎn)數(shù),fi為非規(guī)格化浮點(diǎn)數(shù),那么對(duì)fi的尾數(shù)部分進(jìn)行邏輯移位的位數(shù)n=δe-1;否則,n=δe。而后相應(yīng)地對(duì)每個(gè)浮點(diǎn)數(shù)fi的尾數(shù)部分mi進(jìn)行邏輯移位。移位操作結(jié)束后,相當(dāng)于該x個(gè)浮點(diǎn)數(shù)的指數(shù)位相同,尾數(shù)位可以直接進(jìn)行運(yùn)算。具體操作是,首先將尾數(shù)位mi的最高位前補(bǔ)上1個(gè)隱藏位,當(dāng)該浮點(diǎn)數(shù)fi為規(guī)格化浮點(diǎn)數(shù)時(shí),隱藏位的值為1;當(dāng)該浮點(diǎn)數(shù)fi為非規(guī)格化浮點(diǎn)數(shù)時(shí),隱藏位為0。尾數(shù)位最低位后增添k個(gè)“0”作為有效位。此時(shí),尾數(shù)位總位數(shù)等于移位后總位數(shù),即原尾數(shù)位數(shù)+隱藏位位數(shù)+新增有效數(shù)字位數(shù)。而后,根據(jù)之前求得的待邏輯移位的位數(shù)n對(duì)每個(gè)浮點(diǎn)數(shù)fi進(jìn)行移位,這里先右移n位,以舍棄尾數(shù)位最低的n位;再將移位后的尾數(shù)位的最低位作為粘滯位,與舍棄的n位作“或”運(yùn)算,運(yùn)算結(jié)果更新為粘滯位的值即得到所需的移位后尾數(shù)位的最終結(jié)果。最后,判斷每個(gè)浮點(diǎn)數(shù)fi的符號(hào)位部分si與最大指數(shù)位的浮點(diǎn)數(shù)fmax的符號(hào)位部分smax是否相同,相同則無需任何操作,不同則將尾數(shù)部分取其補(bǔ)碼,便于后面運(yùn)用加法器直接進(jìn)行運(yùn)算。
在加法運(yùn)算模塊中,利用如圖2所示的華萊士樹結(jié)構(gòu),對(duì)移位后的各個(gè)浮點(diǎn)數(shù)的尾數(shù)相加,直到歸約為兩個(gè)數(shù),記為sum1和carry1,輸出至最終結(jié)果累加模塊和前導(dǎo)零預(yù)測(cè)模塊。華萊士樹結(jié)構(gòu)用簡單的硬件快速將處理后的多個(gè)浮點(diǎn)數(shù)相加歸約成兩個(gè)數(shù)相加,即每次利用i個(gè)全加器,把j個(gè)i位的數(shù)相加轉(zhuǎn)換成2*j/3個(gè)i+1位的數(shù)相加,再用一層全加器轉(zhuǎn)換成4*j/9個(gè)數(shù)相加,直到轉(zhuǎn)換成2個(gè)數(shù)。
最終結(jié)果累加模塊利用雙通路計(jì)算出運(yùn)算結(jié)果,該結(jié)構(gòu)如圖7所示。一條通路對(duì)sum1和carry1直接進(jìn)行相加,另一條通路對(duì)二者的反碼進(jìn)行相加,最后根據(jù)第一條通路的所得結(jié)果的最高位,若最高位的值為0,則選擇第一條通路的結(jié)果作為累加部分的最終結(jié)果tmp_sum并輸出,否則,選擇第二條通路的結(jié)果作為累加部分的最終結(jié)果tmp_sum并輸出。前導(dǎo)零預(yù)測(cè)模塊,利用前導(dǎo)零預(yù)測(cè)(leadingzeroanticipator,lza)方法,首先對(duì)輸入的sum1和carry1按位求得其傳播函數(shù)
在規(guī)格化處理模塊中,根據(jù)前導(dǎo)零預(yù)測(cè)模塊分的第一個(gè)有效數(shù)字位的位置num_shift對(duì)最終結(jié)果tmp_sum進(jìn)行邏輯移位,移動(dòng)位數(shù)為num_shift,而后進(jìn)行規(guī)格化,分別得到最終結(jié)果的符號(hào)位sresult、指數(shù)位eresult和尾數(shù)位mresult,,組合得到最終結(jié)果sumresult={sresult,eresult,mresult}。
本發(fā)明提供一實(shí)施例,是4個(gè)16位浮點(diǎn)數(shù)相加,即x=4,y=16。其中,浮點(diǎn)數(shù)標(biāo)準(zhǔn)采用ieee754的half類型浮點(diǎn)數(shù)標(biāo)準(zhǔn),即每個(gè)浮點(diǎn)數(shù)由1位符號(hào)位,5位指數(shù)位和10位尾數(shù)位組成。
在如圖3所示的裝置中,輸入4個(gè)浮點(diǎn)數(shù)并用二進(jìn)制表示為f1=0001001010000001,f2=0001110011110000,f3=00011001011111111,f4=0010010011011001,拆分為符號(hào)位、指數(shù)位、尾數(shù)位的格式,即{s,e,m},用二進(jìn)制表示得到f1={0,00100,1010000001},f2={0,00111,0011110000},f3={0,00110,01011111111},f4={0,01001,0011011001}。利用如圖4所示裝置,分別比較f1、f2的指數(shù)位e1=00100、e2=00111,選出較大的指數(shù)值emax(e1,e2)=00111,和比較f3、f4的指數(shù)位e3=00110、e4=01001,選出較大的指數(shù)值emax(e3,e4)=01001,而后利用如圖5所示的樹狀結(jié)構(gòu),比較emax(e1,e2)=00111和emax(e3,e4)=01001,選擇出較大的指數(shù)位emax=01001,該浮點(diǎn)數(shù)用fmax=f4=0010010011011001表示,符號(hào)位和尾數(shù)位分別為smax=0和mmax=0011011001。
而后,分別求得f1、f2、f3、f4的指數(shù)位e1、e2、e3、e4與emax的差值,δe1=5、δe2=2、δe3=3、δe4=0。由于f1、f2、f3、f4均為規(guī)格化浮點(diǎn)數(shù),故待移位的位數(shù)n=δe,即n1=δe1=5、n2=δe2=2、n3=δe3=3、n4=δe4=0。這里為了降低運(yùn)算過程中的精度損失,增加三位有效數(shù)字位,即k=3,并令最低位為粘滯位。移位時(shí),由于該實(shí)施例采用ieee754標(biāo)準(zhǔn),故首先fmax、f1、f2、f3、f4的尾數(shù)位部分的最高位前補(bǔ)上1位隱藏位,并判斷它們是否為規(guī)格化浮點(diǎn)數(shù)。由于f1、f2、f3、f4均為規(guī)格化浮點(diǎn)數(shù),也就是令fmax、f1、f2、f3、f4的隱藏位的值為1。而后,將尾數(shù)位的最低位后面補(bǔ)上3個(gè)“0”,即達(dá)到了預(yù)設(shè)的總位數(shù):原尾數(shù)位數(shù)+隱藏位位數(shù)+新增有效數(shù)字位數(shù)=10+1+3=14位,接著,根據(jù)指數(shù)差n進(jìn)行右移,舍棄最低的n位;將舍棄的n位的數(shù)值與最后一位粘滯位進(jìn)行“或”運(yùn)算,用運(yùn)算結(jié)果更新粘滯位的值,得到所需的移位后尾數(shù)位的最終結(jié)果。以f1為例,由上面可得其尾數(shù)部分為1010000001,最高位增加一位隱藏位,由于f1為規(guī)格化浮點(diǎn)數(shù),故該隱藏位的值為1,得到11010000001;在最低位后面補(bǔ)3個(gè)0,并定義最低位為粘滯位,得到11010000001000。由于n1=5,所以我們需要移動(dòng)5位,故最右面的5位01000均需要舍棄,得到00000110100000;將該被舍棄的5位數(shù)字01000與粘滯位0進(jìn)行“或”運(yùn)算,得到1,用該結(jié)果更新粘滯位,即粘滯位的值為1得到移位后的結(jié)果為00000110100001。又以f2為例,由上面可得其尾數(shù)部分為0011110000,最高位增加一位隱藏位,由于f2為規(guī)格化浮點(diǎn)數(shù),故該隱藏位的值為1,在最低位后面補(bǔ)3個(gè)0,并定義最低位為粘滯位,得到10011110000000。由于n2=2,所以我們需要移動(dòng)2位,故最右面的2位00均需要舍棄,得到00100111100000;將該被舍棄的2位數(shù)字00與粘滯位0進(jìn)行“或”運(yùn)算,得到0,用該結(jié)果更新粘滯位,即粘滯位的值為0,得到移位后的結(jié)果為00100111100000。最后,對(duì)浮點(diǎn)數(shù)f1、f2、f3、f4的符號(hào)位s1、s2、s3、s4與smax進(jìn)行比較,結(jié)果均為0,即均為正數(shù),故無需對(duì)其尾數(shù)部分再進(jìn)行取補(bǔ)的操作。
如圖3所示,將預(yù)處理的結(jié)果輸入到加法運(yùn)算模塊。利用圖2示出的華萊士樹結(jié)構(gòu),對(duì)四個(gè)14位預(yù)處理后的尾數(shù)進(jìn)行處理。這里,本發(fā)明考慮使用兩級(jí)華萊士樹結(jié)構(gòu),首先通過一級(jí)4-2華萊士樹結(jié)構(gòu)部分,進(jìn)行相加,而后將結(jié)果分別輸入到第二級(jí)3-2華萊士樹結(jié)構(gòu)部分和前導(dǎo)零預(yù)測(cè)部分進(jìn)行運(yùn)算。3-2華萊士樹將運(yùn)算結(jié)果最終歸約為兩個(gè)數(shù),即sum1=11011000000100和carry1=110100010,輸出至最終結(jié)果累加部分。在該部分中,利用雙通路計(jì)算出運(yùn)算結(jié)果,一條通路對(duì)sum1和carry1直接進(jìn)行相加,另一條通路對(duì)二者先取反碼,而后進(jìn)行相加。由于第一條通路所得結(jié)果的最高位為0,故選擇得到第一條通路的結(jié)果作為累加部分的最終結(jié)果,即tmp_sum=0011100101001000,輸出至第三模塊。前導(dǎo)零預(yù)測(cè)部分是將第一級(jí)4-2華萊士樹的輸出結(jié)果利用前導(dǎo)零預(yù)測(cè)算法(lza算法)計(jì)算得到累加部分的最終結(jié)果規(guī)格化待移動(dòng)的位數(shù)用二進(jìn)制表示為num_shift=10,輸出至第三模塊。其中,前導(dǎo)零預(yù)測(cè)部分和第二級(jí)華萊士樹部分是并行執(zhí)行的。
如圖3所示,規(guī)格化處理模塊利用lza算法,根據(jù)tmp_sum和第一模塊得到的fmax進(jìn)行邏輯操作,得到最終結(jié)果的符號(hào)位sresult=0;根據(jù)第一模塊得到的fmax、第二模塊累加部分得到的tmp_sum和前導(dǎo)零預(yù)測(cè)部分的輸出結(jié)果num_shift進(jìn)行邏輯操作,得到最終結(jié)果的指數(shù)位eresult=01001;根據(jù)前導(dǎo)零預(yù)測(cè)部分的輸出結(jié)果num_shift、第一模塊得到的fmax對(duì)第二模塊得到的tmp_sum進(jìn)行移位并規(guī)格化得到最終結(jié)果的尾數(shù)位mresult=11001100101001。最后,將三者組合得到最終結(jié)果sumresult={sresult,eresult,mresult}={0,01001,11001100101001}=00100111001100101001。
綜上所述,能夠快速高效的完成多個(gè)相同標(biāo)準(zhǔn)的浮點(diǎn)數(shù)的加法操作,增加了一次運(yùn)算支持的操作數(shù)數(shù)量,降低了運(yùn)算延遲,加速了運(yùn)算過程,降低了運(yùn)算結(jié)果的精度損失。
以上所述的具體實(shí)施例,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。