專利名稱:多用途乘法-加法功能單元的制作方法
技術(shù)領(lǐng)域:
本發(fā)明大體而言涉及微處理器,且具體而言涉及一種用于處理器核心的多用途乘 法陽加法單元。
背景技術(shù):
實時計算機動畫對處理器具有極高的要求。為滿足這些要求,專用圖形處理單元 通常構(gòu)建一其中有諸多(例如16個)核心平行運行的高度平行的架構(gòu),其中每一核心 包含多個(例如8個)平行管線,這些管線包含用于執(zhí)行該處理單元所支持的作業(yè)的 功能單元。這些作業(yè)一般包括各種整數(shù)及浮點算數(shù)運算(加法、乘法等等)、逐位的邏 輯運算、比較運算、格式轉(zhuǎn)換運算等等。這些管線一般為相同的設(shè)計,以便可由任一 管線處理任何所支持的指令;相應(yīng)地,各管線均需要完整的一組功能單元。傳統(tǒng)上,各功能單元一直專用于處理僅一個或兩個運算。例如,這些功能單元可 包括整數(shù)加法/減法單元、浮點乘法單元、 一個或多個二進制邏輯單元、及一個或多個 用于在整數(shù)與浮點格式之間進行轉(zhuǎn)換的格式轉(zhuǎn)換單元。隨著時間的進行,人們希望圖形處理單元支持的初等運算的數(shù)量一直在增加。人 們已提出了新的指令,例如三元"乘法-加法"(MAD)指令,其用于計算運算數(shù)A、 B及C的AfB+C。繼續(xù)增加功能單元來支持這些運算會引起許多問題。例如,由于任 一新的功能單元均須加入每一管線中,因而為僅增加額外單元所需的芯片面積可變得 非常大。新的功能單元也會增加功率消耗,此可能需要改善冷卻系統(tǒng)。這些因素會增 大芯片設(shè)計的困難及成本。此外,在功能單元的數(shù)量超過在一循環(huán)中可發(fā)出的指令數(shù) 量這一方面而言,各功能單元的處理容量的利用效率偏低。因此,希望提供所需芯片面積減小且可更有效利用的功能單元。發(fā)明內(nèi)容本發(fā)明的實施例提供多用途功能單元。在一個實施例中,所述多用途功能單元支 持所有如下運算整數(shù)及浮點運算數(shù)的加法、乘法及乘法-加法;測試運算,包括布爾 運算、最大及最小運算、三元比較運算及二元測試運算(例如大于、小于、等于或無 序運算);左移及右移運算;格式轉(zhuǎn)換運算,例如在整數(shù)與浮點格式之間、在一個整數(shù) 格式與另一整數(shù)格式之間、及在一個浮點格式與另一浮點格式之間進行轉(zhuǎn)換;對包括 指數(shù)函數(shù)及三角函數(shù)在內(nèi)的超越函數(shù)的自變數(shù)進行自變數(shù)歸約運算;及返回一浮點運 算數(shù)的小數(shù)部分的小數(shù)運算。在其他實施例中,所述多用途功能單元也可支持這些運 算及/或其他運算的任一子集。根據(jù)本發(fā)明的一個方面, 一種用于處理器的多用途功能單元包括輸入段、乘法管 線、測試管線、加法管線、指數(shù)管線及輸出段。所述輸入段經(jīng)配置以接收第一、第二 及第三運算數(shù)及一指示所要執(zhí)行的若干個所支持運算之一的操作碼,且進一步經(jīng)配置 以響應(yīng)于所述操作碼而產(chǎn)生控制信號。所述乘法管線耦接至輸入段并可響應(yīng)于所述控 制信號而進行配置,以計算第一與第二運算數(shù)的乘積及選擇所計算的乘積作為第一中 間結(jié)果。所述測試管線耦接至輸入段并可響應(yīng)于所述控制信號而進行配置,以對第一、 第二、及第三運算數(shù)中的一者或多者實施比較及選擇所述比較的結(jié)果作為第二中間結(jié) 果。所述加法管線耦接至乘法段及測試管線并可響應(yīng)于所述控制信號而進行配置,以 計算第一與第二中間結(jié)果的和及選擇所計算的和作為運算結(jié)果。所述指數(shù)管線耦接至輸入段并可響應(yīng)于控制信號而進行配置,以對第一、第二及第三運算數(shù)中的一者或多 者實施指數(shù)計算及選擇所述指數(shù)計算的結(jié)果作為指數(shù)結(jié)果。所述輸出段經(jīng)耦接以接收 運算結(jié)果及指數(shù)結(jié)果,并可響應(yīng)于控制信號而進行配置,以產(chǎn)生由所述操作碼指定的 所支持運算中所述的一者的最終結(jié)果。所支持的運算包括一浮點乘法-加法(FMAD) 運算、 一整數(shù)乘法-加法(MAD)運算、及至少一個比較測試運算??芍С指鞣N比較測試運算。例如,在一個實施例中,所述至少一個比較測試運算 包括從由如下運算組成的群組中選出的一個或多個運算最大(MAX)運算,最小 (MM)運算,及三元比較(CMP)運算。在另一實施例中,所述至少一個比較測試 運算包括從由如下運算總成的群組中選出的一個或多個二元測試(SET)運算大于 運算,小于運算,相等性運算,及無序運算,其中所述一個或多個二元測試運算中的 每一者均產(chǎn)生一布爾結(jié)果。在其中支持具有一布爾結(jié)果的SET運算的實施例中, 一輔 助結(jié)果路徑可耦接于測試管線與輸出段之間,并經(jīng)配置以將布爾輔助結(jié)果從所述測試
管線遞送至輸出段,且所述輸出段可響應(yīng)于所述控制信號而進一步配置,以在所述操 作碼指示其中一個SET運算的情況下根據(jù)布爾輔助結(jié)果來產(chǎn)生最終結(jié)果。還可支持其他運算。例如,所支持的運算可進一步包括逐位的布爾邏輯運算(例 如AND運算、OR運算及XOR運算);浮點加法(FADD)運算及整數(shù)加法(IADD) 運算,其中所述加法管線可響應(yīng)于所述控制信號而進一步進行配置,以實施FADD運 算及IADD運算;浮點乘法(FMUL)運算及整數(shù)乘法(IMUL)運算,其中所述乘法 管線可響應(yīng)于所述控制信號而進一步進行配置,以實施FMUL運算及IMUL運算;格 式轉(zhuǎn)換運算,其將第一運算數(shù)從輸入格式轉(zhuǎn)換成目標(biāo)格式;域映射(RRO)運算,例 如用于三角函數(shù)或指數(shù)函數(shù);及小數(shù)(FRC)運算,其返回第一運算數(shù)的小數(shù)部分。 可支持這些運算的各種子組合以及其他運算。根據(jù)本發(fā)明的另一方面, 一種微處理器包括一執(zhí)行核心,其具有經(jīng)配置以執(zhí)行程 序運算的功能單元。所述功能單元中的至少一者是一多用途功能單元,其能夠執(zhí)行若 干種所支持的運算,包括至少浮點乘法-加法(FMAD)運算、整數(shù)乘法-加法(IMAD) 運算、及至少一個比較測試運算。所述多用途功能單元包括輸入段、乘法管線、測試 管線、加法管線、指數(shù)管線及輸出段。所述輸入段經(jīng)配置以接收第一、第二及第三運 算數(shù)及一指示所要執(zhí)行的若干個所支持運算之一的操作碼,且進一步經(jīng)配置以響應(yīng)于 所述操作碼而產(chǎn)生控制信號。所述乘法管線耦接至輸入段并可響應(yīng)于所述控制信號而 進行配置,以計算第一與第二運算數(shù)的乘積及選擇所計算的乘積作為第一中間結(jié)果。 所述測試管線耦接至輸入段并可響應(yīng)于所述控制信號而進行配置,以對第一、第二、 及第三運算數(shù)中的一者或多者實施比較及選擇所述比較的結(jié)果作為第二中間結(jié)果。所 述加法管線耦接至乘法段及測試管線并可響應(yīng)于所述控制信號而進行配置,以計算第 一與第二中間結(jié)果的和及選擇所計算的和作為運算結(jié)果。所述指數(shù)管線耦接至輸入段 并可響應(yīng)于控制信號而進行配置,以對第一、第二及第三運算數(shù)中的一者或多者實施 指數(shù)計算及選擇所述指數(shù)計算的結(jié)果作為指數(shù)結(jié)果。所述輸出段經(jīng)耦接以接收運算結(jié) 果及指數(shù)結(jié)果,并可響應(yīng)于控制信號而進行配置,以產(chǎn)生由所述操作碼指定的所支持 運算中所述的一者的最終結(jié)果。根據(jù)本發(fā)明的再一方面,提供一種用于操作微處理器的功能單元的方法。接收操 作碼及一個或多個運算數(shù);所述操作碼指示要對所述一個或多個運算數(shù)實施的多種所 支持運算中的一個。響應(yīng)于所述操作碼及所述一個或多個運算數(shù),操作所述功能單元 中的乘法管線以產(chǎn)生第一中間結(jié)果,操作所述功能單元中的測試管線以產(chǎn)生第二中間 結(jié)果,及操作所述功能單元中的指數(shù)管線以產(chǎn)生指數(shù)結(jié)果及對齊控制信號。響應(yīng)于所 述操作碼及所述對齊控制信號而操作所述功能單元中的加法管線,以對第一與第二中 間結(jié)果進行相加并產(chǎn)生運算結(jié)果。操作所述功能單元中的輸出段,以根據(jù)所述運算結(jié) 果及指數(shù)結(jié)果來計算最終結(jié)果。所支持的運算包括浮點乘法-加法(FMAD)運算、整 數(shù)乘法-加法(IMAD)運算、及至少一個比較測試運算。根據(jù)本發(fā)明的又一方面, 一種用于處理器的多用途功能單元包括輸入段、乘法管
線、加法管線及輸出段。所述輸入段經(jīng)配置以接收第一、第二及第三運算數(shù)及一指示 所要執(zhí)行的若干個所支持運算之一的操作碼,且進一步經(jīng)配置以響應(yīng)于所述操作碼而 產(chǎn)生控制信號。所述乘法管線耦接至輸入段并可響應(yīng)于所述控制信號而進行配置,以 計算第一與第二運算數(shù)的乘積及選擇所計算的乘積作為第一中間結(jié)果。所述加法管線耦接至乘法段及測試管線并可響應(yīng)于所述控制信號而進行配置,以計算第一與第二中 間結(jié)果的和及選擇所計算的和作為運算結(jié)果。所述輸出段經(jīng)耦接以接收運算結(jié)果,.并 可響應(yīng)于控制信號而進行配置,以產(chǎn)生由所述操作碼指定的所支持運算中所述的一者 的最終結(jié)果。所支持的運算包括對第一、第二及第三運算數(shù)進行運算的浮點乘法-加法 (FMAD)運算及整數(shù)乘法-加法(IMAD)運算,且所述乘法管線及所述加法管線可 響應(yīng)于所述控制信號而進行進一步配置,以使得對于所述FMAD運算,所述最終結(jié)果 代表浮點值,而對于IMAD運算,所述最終結(jié)果代表整數(shù)值。亦可支持其他運算。例如,在一實施例中,所支持運算進一步包括對第一及第三 運算數(shù)進行運算的浮點加法(FADD)運算及整數(shù)加法(IADD)運算。在另一實施例 中,所支持運算進一步包括對第一及第二運算數(shù)進行運算的浮點乘法(FMUL)運算 及整數(shù)乘法(MUL)運算。在再一實施例中,所支持運算進一步包括絕對差(ISAD) 運算的整數(shù)和。根據(jù)本發(fā)明的另一方面, 一種微處理器包括具有若干功能單元的執(zhí)行核心,所述 功能單元經(jīng)配置以執(zhí)行程序運算。所述功能單元中的至少一者是多用途功能單元,其 能夠執(zhí)行若干種所支持的運算,包括至少浮點乘法-加法(FMAD)運算與整數(shù)乘法-加法(IMAD)運算。所述多用途功能單元包括輸入段、乘法管線、加法管線、及輸 出段。所述輸入段經(jīng)配置以接收第一、第二及第三運算數(shù)及一指示所要執(zhí)行的若干個 所支持運算之一的操作碼,且進一步經(jīng)配置以響應(yīng)于該操作碼而產(chǎn)生控制信號。所述 乘法管線耦接至輸入段并可響應(yīng)于所述控制信號而進行配置,以計算第一與第二運算 數(shù)的乘積及選擇所計算的乘積作為第一中間結(jié)果。所述加法管線耦接至乘法段及測試 管線并可響應(yīng)于所述控制信號而進行配置,以計算第一與第二中間結(jié)果的和及選擇所 計算的和作為運算結(jié)果。所述輸出段經(jīng)耦接以接收運算結(jié)果,并可響應(yīng)于控制信號而 進行配置,以產(chǎn)生由所述操作碼指定的所支持運算中所述的一者的最終結(jié)果。所述乘 法管線及所述加法管線可響應(yīng)于所述控制信號而進一步進行配置,以使得對于所述 FMAD運算,所述最終結(jié)果代表浮點值,而對于所述IMAD運算,所述最終結(jié)果代表 整數(shù)值。根據(jù)本發(fā)明的再一方面,提供一種操作微處理器的功能單元的方法。接收一操作 碼及一個或多個運算數(shù);所述操作碼指示要對所述一個或多個運算數(shù)實施的多個所支 持運算中的一者。響應(yīng)于所述操作碼及所述一個或多個運算數(shù),操作所述功能單元中 的乘法管線,以產(chǎn)生第一中間結(jié)果及第二中間結(jié)果。操作所述功能單元中的加法管線, 以對第一與第二中間結(jié)果進行相加并產(chǎn)生運算結(jié)果。所述功能單元中的輸出段根據(jù)所述運算結(jié)果來計算最終結(jié)果。所支持的運算包括浮點乘法-加法(FMAD)運算及整數(shù) 乘法-加法(MAD)運算。根據(jù)本發(fā)明的再一方面, 一種用于處理器的多用途功能單元包括輸入段、乘法管 線、測試管線、加法管線、及輸出段。所述輸入段經(jīng)配置以接收第一、第二及第三運 算數(shù)及一指示所要執(zhí)行的若干個所支持運算之一的操作碼,且進一步經(jīng)配置以響應(yīng)于 該操作碼而產(chǎn)生控制信號。所述乘法管線耦接至輸入段并可響應(yīng)于所述控制信號而進 行配置,以計算第一與第二運算數(shù)的乘積及選擇所計算的乘積作為第一中間結(jié)果。所 述測試管線耦接至輸入段并可響應(yīng)于所述控制信號而進行配置,以對第一、第二、及 第三運算數(shù)中的一者或多者實施比較及選擇所述比較的結(jié)果作為第二中間結(jié)果。所述 加法管線耦接至乘法段及測試管線并可響應(yīng)于所述控制信號而進行配置,以計算第一 與第二中間結(jié)果的和及選擇所計算的和作為運算結(jié)果。所述輸出段經(jīng)耦接以接收運算 結(jié)果,并可響應(yīng)于控制信號而進行配置,以產(chǎn)生由所述操作碼指定的所支持運算中所 述的一者的最終結(jié)果。所述多個所支持的運算包括對所述第一、第二及第三運算數(shù)進行運算的整數(shù)乘法-加法(TMAD)運算及對所述第一、第二、及第三運算數(shù)中的至少 一者進行運算的邏輯測試運算。在某些實施例中,所述邏輯測試運算可為一組二元測試(SET)運算中的一者, 所述一組二元測試運算包括至少相等性測試、大于測試及小于測試。在一個實施例中, 所述邏輯測試運算的第一、第二及第三運算數(shù)可為整數(shù)運算數(shù)或浮點運算數(shù)。在某些 實施例中,所述所支持的運算還包括對所述第一、第二、及第三運算數(shù)進行運算的浮 點乘法-加法(FMAD)運算。在其他實施例中,所述所支持的運算還包括逐位布爾 AND運算、逐位布爾OR運算、及逐位布爾XOR運算。根據(jù)本發(fā)明的另一方面, 一種微處理器包括執(zhí)行核心,其具有經(jīng)配置以執(zhí)行程序 運算的功能單元。所述功能單元中的至少一者是多用途功能單元,其能夠執(zhí)行若干種 所支持的運算,包括對第一、第二、及第三運算數(shù)進行運算的乘法-加法(MAD)運 算、以及對所述第一、第二、及第三運算數(shù)中的至少一者進行運算的邏輯測試運算。 所述多用途功能單元包括輸入段、乘法管線、測試管線、加法管線、及輸出段。所述 輸入段經(jīng)配置以接收第一、第二及第三運算數(shù)及一指示所要執(zhí)行的若干個所支持運算 之一的操作碼,且進一步經(jīng)配置以響應(yīng)于所述操作碼而產(chǎn)生控制信號。所述乘法管線 耦接至輸入段并可響應(yīng)于所述控制信號而進行配置,以計算所述第一與第二運算數(shù)的 乘積及選擇所計算的乘積作為第一中間結(jié)果。所述測試管線耦接至輸入段并可響應(yīng)于 所述控制信號而進行配置,以對所述第一、第二、及第三運算數(shù)中的一者或多者實施 比較及選擇所述比較的結(jié)果作為第二中間結(jié)果。所述加法管線耦接至乘法段及測試管 線并可響應(yīng)于所述控制信號而進行配置,以計算第一與第二中間結(jié)果的和及選擇所計 算的和作為運算結(jié)果。所述輸出段經(jīng)耦接以接收所述運算結(jié)果,并可響應(yīng)于所述控制 信號而進行配置,以產(chǎn)生由所述操作碼指定的所支持運算中所述的一者的最終結(jié)果。
支持運算中的一個。響應(yīng)于所述操作碼及所述一個或多個運算數(shù),操作所述功能單元 中的乘法管線以產(chǎn)生第一中間結(jié)果,及操作所述功能單元中的測試管線以產(chǎn)生第二中 間結(jié)果。操作所述功能單元中的加法管線,以對第一與第二中間結(jié)果進行相加并產(chǎn)生 運算結(jié)果。操作所述功能單元中的輸出段,以根據(jù)所述運算結(jié)果來計算最終結(jié)果。所 支持的運算包括對第一、第二、及第三運算數(shù)進行運算的乘法-加法(MAD)運算、以及對所述第一、第二、及第三運算數(shù)中的至少一者進行運算的邏輯測試運算。根據(jù)本發(fā)明的又一方面, 一種用于處理器的多用途功能單元包括輸入段、乘法管 線、加法管線、指數(shù)管線及輸出段。所述輸入段經(jīng)配置以接收第一、第二及第三運算 數(shù)及一指示所要執(zhí)行的若干個所支持運算之一的操作碼,且進一步經(jīng)配置以響應(yīng)于所 述操作碼而產(chǎn)生控制信號。所述乘法管線耦接至輸入段并可響應(yīng)于所述控制信號而進 行配置,以計算第一與第二運算數(shù)的乘積及選擇所計算的乘積作為第一中間結(jié)果。所 述加法管線耦接至乘法段及測試管線并可響應(yīng)于所述控制信號而進行配置,以計算第 一與第二中間結(jié)果的和及選擇所計算的和作為運算結(jié)果。所述指數(shù)管線耦接至輸入段 并可響應(yīng)于控制信號而進行配置,以對第一、第二、及第三運算數(shù)中的一者或多者實 施指數(shù)計算及選擇所述指數(shù)計算的結(jié)果作為指數(shù)結(jié)果。所述輸出段經(jīng)耦接以接收運算 結(jié)果及指數(shù)結(jié)果,并可響應(yīng)于控制信號而進行配置,以產(chǎn)生由所述操作碼指定的所支 持運算中所述的一者的最終結(jié)果。所述所支持的運算包括對所述第一、第二及第三運算數(shù)進行運算的乘法-加法(MAD)運算以及將所述第一運算數(shù)從輸入格式轉(zhuǎn)換成目 標(biāo)格式的格式轉(zhuǎn)換運算。可支持整數(shù)運算與浮點運算的各種組合。例如,在一個實施例中,支持整數(shù)MAD 運算,且還支持其中輸入格式與目標(biāo)格式中的至少一者為整數(shù)格式的格式轉(zhuǎn)換運算。 在另一實施例中,支持浮點MAD運算,且還支持其中輸入格式與目標(biāo)格式中的至少 一者為浮點格式的格式轉(zhuǎn)換運算。在再一實施例中,MAD運算可選擇性地為浮點MAD 運算或整數(shù)MAD運算。根據(jù)本發(fā)明的另一方面, 一種微處理器包括一執(zhí)行核心,其具有經(jīng)配置以執(zhí)行程 序運算的功能單元。所述功能單元中的至少一者是一多用途功能單元,其能夠執(zhí)行若 干種所支持的運算,至少包括對第一、第二及第三運算數(shù)進行運算的乘法-加法(MAD) 運算、以及將所述第一運算數(shù)從輸入格式轉(zhuǎn)換成目標(biāo)格式的格式轉(zhuǎn)換運算。所述多用 途功能單元包括輸入段、乘法管線、加法管線、指數(shù)管線及輸出段。所述輸入段經(jīng)配 置以接收第一、第二及第三運算數(shù)及一指示所要執(zhí)行的若干個所支持運算之一的操作 碼,且進一步經(jīng)配置以響應(yīng)于所述操作碼而產(chǎn)生控制信號。所述乘法管線耦接至輸入 段并可響應(yīng)于所述控制信號而進行配置,以計算第一與第二運算數(shù)的乘積及選擇所計 算的乘積作為第一中間結(jié)果。所述加法管線耦接至乘法段及測試管線并可響應(yīng)于所述 控制信號而進行配置,以計算第一與第二中間結(jié)果的和及選擇所計算的和作為運算結(jié) 果。所述指數(shù)管線耦接至輸入段并可響應(yīng)于控制信號而進行配置,以對第一、第二及 第三運算數(shù)中的一者或多者實施指數(shù)計算及選擇所述指數(shù)計算的結(jié)果作為指數(shù)結(jié)果。所述輸出段經(jīng)耦接以接收運算結(jié)果及指數(shù)結(jié)果,并可響應(yīng)于控制信號而進行配置,以 產(chǎn)生由所述操作碼指定的所支持運算中所述的一者的最終結(jié)果。根據(jù)本發(fā)明的再一方面,提供一種用于操作微處理器的功能單元的方法。接收操 作碼及一個或多個運算數(shù);所述操作碼指示要對所述一個或多個運算數(shù)實施的多種所 支持運算中的一個。響應(yīng)于所述操作碼及所述一個或多個運算數(shù),操作所述功能單元 中的乘法管線以產(chǎn)生第一中間結(jié)果及第二中間結(jié)果,及操作所述功能單元中的測試管 線以產(chǎn)生第二中間結(jié)果。操作所述功能單元中的指數(shù)管線以產(chǎn)生指數(shù)結(jié)果及對齊控制 信號。響應(yīng)于所述對齊控制信號而操作所述功能單元中的加法管線,以對第一與第二 中間結(jié)果進行相加并產(chǎn)生運算結(jié)果。所述所支持的運算包括對所述第一、第二及第三 運算數(shù)進行運算的乘法-加法(MAD)運算以及將所述第一運算數(shù)從輸入格式轉(zhuǎn)換成 目標(biāo)格式的格式轉(zhuǎn)換運算。下文具體實施方式
部分與附圖一起將使人們能夠更好地了解本發(fā)明的性質(zhì)及優(yōu)點。
圖1是根據(jù)本發(fā)明一實施例的計算機系統(tǒng)的方塊圖; 圖2是根據(jù)本發(fā)明一實施例的執(zhí)行核心的一部分的方塊圖; 圖3是根據(jù)本發(fā)明一實施例可在多用途乘法-加法(MMAD)單元中實施的運算 的列表;圖4是根據(jù)本發(fā)明一實施例的MMAD單元的方塊圖; 圖5是圖4所示MMAD單元的運算數(shù)格式化方塊的方塊圖; 圖6A是圖4所示MMAD單元的左乘法器方塊的方塊圖; 圖6B是圖4所示MMAD單元的指數(shù)乘積塊的方塊圖; 圖6C是圖4所示MMAD單元的逐位邏輯塊的方塊圖; 圖7A是圖4所示MMAD單元的乘法器塊的方塊圖; 圖7B是圖4所示MMAD單元的指數(shù)和塊的方塊圖; 圖8A是圖4所示MMAD單元的右乘法器塊的方塊圖; 圖8B是圖4所示MMAD單元的比較邏輯塊的方塊圖; 圖9是圖4所示MMAD單元的對齊塊的方塊圖; 圖10是圖4所示MMAD單元的小數(shù)和塊的方塊圖; 圖11是圖4所示MMAD單元的正規(guī)化塊的方塊圖;及 圖12是圖4所示MMAD單元的輸出控制塊的方塊圖。
具體實施方式
本發(fā)明的實施例提供一種高速多用途功能單元,其用于任何能夠?qū)嵤┐罅扛咚儆?br>
算的處理系統(tǒng),例如圖形處理器。在一個實施例中,所述功能單元支持三元乘法-加法("MAD")運算一其通過包含乘法器樹及加法器電路的管線以整數(shù)或浮點格式來計算 輸入運算數(shù)A、 B、 C的A*B+C。通過利用MAD管線的硬件,所述功能單元還支持 其他整數(shù)及浮點算術(shù)運算。所述功能單元可進一步擴展至僅以少量的額外電路來支持 各種比較、格式轉(zhuǎn)換、及逐位運算。I. 系統(tǒng)概述A.圖形處理器圖1是根據(jù)本發(fā)明一實施例的計算機系統(tǒng)100的方塊圖。計算機系統(tǒng)100包括通 過總線106進行通信的中央處理器(CPU) 102及系統(tǒng)存儲器104。從耦接至總線106 的一個或多個用戶輸入裝置108 (例如鍵盤、鼠標(biāo))接收用戶輸入。在基于像素的顯 示裝置110 (例如傳統(tǒng)的基于CRT或LCD的監(jiān)視器)上提供視覺輸出,顯示裝置110 是在耦接至系統(tǒng)總線106的圖形處理子系統(tǒng)112的控制下工作。系統(tǒng)盤128及其他組 件一例如一個或多個可拆卸存儲裝置129 (例如軟盤驅(qū)動器、光盤(CD)驅(qū)動器、及 /或DVD驅(qū)動器) 一也可耦接至系統(tǒng)總線106。系統(tǒng)總線106可使用各種總線協(xié)議中 的一種或多種來構(gòu)建,這些總線協(xié)議包括PCI (外圍組件互連)、AGP (高級圖形處理) 及/或PCI-Express (PCI-E);可提供例如北橋及南橋(未顯示)等恰當(dāng)?shù)?橋式"芯 片來互連各種組件及/或總線。圖形處理子系統(tǒng)112包括圖形處理單元(GPU) 114及圖形存儲器116—其可例 如使用一個或多個集成電路裝置(例如可編程處理器、應(yīng)用專用集成電路(ASIC)及 存儲裝置)來構(gòu)建。GPU114包括渲染模塊120、存儲器接口模塊122、及掃描輸出模 塊124。渲染模塊120可經(jīng)配置以實施與如下有關(guān)的各種任務(wù)根據(jù)經(jīng)由系統(tǒng)總線106 所提供的圖形數(shù)據(jù)來產(chǎn)生像素數(shù)據(jù)(例如執(zhí)行各種2D及/或3D渲染算法),與圖形存 儲器116交互作用以存儲友更新像素數(shù)據(jù),及類似作業(yè)。渲染模塊120較佳經(jīng)配置以 根據(jù)由在CPU 102上執(zhí)行的各種程序所提供的2-D或3-D景象數(shù)據(jù)來產(chǎn)生像素數(shù)據(jù)。 可根據(jù)需要來改變渲染模塊120的特定配置,且由于對于理解本發(fā)明而言無關(guān)緊要, 因而不再對其加以贅述。與渲染模塊120及掃描輸出控制邏輯124進行通信的存儲器接口模塊122管理與 圖形存儲器116進行的所有交互作用。存儲器接口模塊122還可包括用于將從系統(tǒng)總 線106接收的像素數(shù)據(jù)寫入至圖形存儲器116而不由渲染模塊120處理的路徑??筛?據(jù)需要改變存儲器接口模塊122的特定配置,且由于其對于理解本發(fā)明而言無關(guān)緊要, 因而不再對其加以贅述。圖形存儲器116—其可使用一般常規(guī)設(shè)計的一個或多個集成電路存儲裝置來構(gòu)建 -可包含各種物理或邏輯子分區(qū),例如像素緩沖器126。像素緩沖器126存儲圖像(或 圖像的一部分)的像素數(shù)據(jù),所述像素數(shù)據(jù)由掃描輸出控制邏輯124讀取并加以處理, 然后傳輸至顯示裝置IIO進行顯示。所述像素數(shù)據(jù)可例如根據(jù)經(jīng)由系統(tǒng)總線106提供 至GPU 114的渲染模塊120的2D或3D景象數(shù)據(jù)來產(chǎn)生,或者由在GPU 102上執(zhí)行
的各種過程來產(chǎn)生并經(jīng)由系統(tǒng)總線106提供至像素緩沖器126??膳cGPU 114集成于單個芯片上或構(gòu)建于單獨芯片上的掃描輸出模塊124從像素 緩沖器118讀取像素顏色數(shù)據(jù)并將所述數(shù)據(jù)傳送至顯示裝置110進行顯示。在一個實 施例中,掃描輸出模塊124同步地運行,無論在GPU114中或系統(tǒng)100中的其他位置 中可進行的任何其他活動如何,均以規(guī)定的刷新速率(例如80 Hz)來掃描輸出像素 數(shù)據(jù)幀。在某些實施例中,所述規(guī)定的刷新速率可以是用戶可選擇的參數(shù),且可根據(jù) 顯示格式來改變掃描輸出次序(例如交錯掃描或漸進掃描)。掃描輸出模塊124也可實 施其他作業(yè),例如調(diào)節(jié)特定顯示硬件的顏色值及/或通過將來自像素緩沖器126的像素 數(shù)據(jù)與視頻數(shù)據(jù)或游標(biāo)覆蓋圖像等等相組合來產(chǎn)生合成屏幕圖像,所述視頻數(shù)據(jù)或游 標(biāo)覆蓋圖像等等可例如從圖形存儲器116、系統(tǒng)存儲器104或另一數(shù)據(jù)源(未顯示) 獲得??筛鶕?jù)需要來改變掃描輸出模塊124的特定配置,且由于其對于理解本發(fā)明而 言無關(guān)緊要,因而不再對其加以贅述。在系統(tǒng)100的工作過程中,CPU102執(zhí)行各種程序,例如操作系統(tǒng)程序、應(yīng)用程 序、及圖形處理子系統(tǒng)112的驅(qū)動程序。所述驅(qū)動程序可構(gòu)建傳統(tǒng)的應(yīng)用程序界面 (API),例如OpenGL、 Microsoft DirectX或D3D,這些應(yīng)用程序界面(API)使應(yīng)用 程序及操作系統(tǒng)程序能夠調(diào)用圖形處理子系統(tǒng)112的各種功能,此在所屬領(lǐng)域中眾所 周知。可借助恰當(dāng)?shù)拿罹彌_器使圖形處理子系統(tǒng)112的操作與其他系統(tǒng)操作不同步。應(yīng)了解,本文所述的系統(tǒng)只是例示性的,且也可具有各種變化形式及修改形式。 GPU可使用任何適當(dāng)?shù)募夹g(shù)來構(gòu)建,例如構(gòu)建為一個或多個集成電路裝置。GPU可安 裝于可包含一個或多個這種處理器的擴展卡上,直接安裝于系統(tǒng)母板上、或集成至系 統(tǒng)芯片組組件中(例如集成至一個常用PC系統(tǒng)架構(gòu)的北橋芯片中)。所述圖形處理子 系統(tǒng)可包括任意量的專用圖形存儲器(某些實施方案可不具有專用圖形存儲器),并可 使用系統(tǒng)存儲器與專用圖形存儲器的任意組合形式。具體而言,可根據(jù)需要將像素緩 沖器構(gòu)建于專用圖形存儲器或系統(tǒng)存儲器中。掃描輸出電路可與GPU相集成或者提供 于單獨的芯片上,并可例如使用一個或多個ASIC、可編程處理器元件、其他集成電路 技術(shù)、或其任一組合來構(gòu)建。此外,可將實施本發(fā)明的GPU并入各種裝置中,包括通 用計算機系統(tǒng)、視頻游戲控制臺及其他專用計算機系統(tǒng)、DVD播放器、例如移動電話 或個人數(shù)字助理等手持式裝置、等等。B. 執(zhí)行核心圖2是根據(jù)本發(fā)明一實施例的執(zhí)行核心200的方塊圖。執(zhí)行核心200—其可構(gòu)建 于例如用于上述GPU 114的渲染模組120的可編程著色器中一經(jīng)配置以執(zhí)行任意指令 序列來實施各種計算。執(zhí)行核心200包括提取及調(diào)度單元202、發(fā)出單元204、多用途 乘法-加法(MMAD)功能單元220、若干(M)個其他功能單元(FU) 222、及寄存 器文件224。每一功能單元220、 222經(jīng)配置以實施規(guī)定的運算。下文將說明MMAD 單元220所實施的運算。其他功能單元222可為一般的常規(guī)設(shè)計,并可支持各種操作, 例如超越函數(shù)計算(例如正弦及余弦、指數(shù)及對數(shù)等等)、互反、紋理過濾、存儲器訪
問(例如加載及存儲操作)、整數(shù)或浮點算術(shù)等等。在執(zhí)行核心200的操作過程中,提取及調(diào)度單元202從指令存儲器(未顯示)獲得指令,對其進行解碼,并將其作為具有相關(guān)聯(lián)運算數(shù)參考或運算數(shù)數(shù)據(jù)的操作碼調(diào)度至發(fā)出單元204。對于每一指令,發(fā)出單元204均例如自寄存器文件224獲得任何 參考運算數(shù)。當(dāng)用于指令的所有運算數(shù)均準備好時,發(fā)出單元204通過將操作碼及運 算數(shù)發(fā)送至MMAD單元220或另一功能單元222來發(fā)出指令。發(fā)出單元204較佳使 用操作碼來選擇要執(zhí)行給定指令的恰當(dāng)功能單元。提取及調(diào)度電路202及發(fā)出電路204 可使用傳統(tǒng)的微處理器架構(gòu)及技術(shù)來構(gòu)建,且由于其對于理解本發(fā)明而言無關(guān)緊要, 因而不再對其加以贅述。MMAD單元220及其他功能單元222接收操作碼及相關(guān)聯(lián)的運算數(shù),并對運算 數(shù)執(zhí)行規(guī)定的運算。結(jié)果數(shù)據(jù)是以結(jié)果值(OUT)及條件碼(COND)的形式提供, 所述條件碼(COND)提供關(guān)于結(jié)果值OUT的一般信息,例如其是正的還是負的還是 一特殊值(在下文中予以說明)。在某些實施例中,條件碼COND也可指示在功能單 元的操作過程中是否出現(xiàn)錯誤或異常。結(jié)果數(shù)據(jù)通過數(shù)據(jù)傳送路徑226轉(zhuǎn)發(fā)至寄存器 文件224 (或另一目的地)。應(yīng)了解,圖2所示執(zhí)行核心只是例示性的,且也可具有各種變化形式及修改形式。 提取及調(diào)度單元202和發(fā)出單元204可根據(jù)需要構(gòu)建任何所需的微架構(gòu),包括具有有 序或無序指令發(fā)出模式、推測性執(zhí)行模式的標(biāo)量或超級標(biāo)量架構(gòu)等等。在某些架構(gòu)中, 發(fā)出器可為多個功能單元發(fā)出包含操作碼^或運算數(shù)的長指令字。所述執(zhí)行核心也可 包含一管線式功能單元序列,其中來自一個級中各功能單元的結(jié)果轉(zhuǎn)接至后續(xù)級的功 能單元,而非直接轉(zhuǎn)接至寄存器文件;這些功能單元可通過單個長指令字或單獨的指 令加以控制。所屬領(lǐng)域的技術(shù)人員根據(jù)本文的教示內(nèi)容將知,MMAD單元220可在任 何微處理器中構(gòu)建為功能單元,并非僅限于圖形處理器或任一特定處理器或執(zhí)行核心 架構(gòu)。C. MMAD單元根據(jù)本發(fā)明的一實施例,執(zhí)行核心200包括MMAD單元220, MMAD單元220 支持對多達三個運算數(shù)(在此處標(biāo)記為A、 B及C)進行諸多整數(shù)及浮點運算。在一 個實施例中,MMAD單元220構(gòu)建一用于計算整數(shù)或浮點運算數(shù)的A*B+C的乘法-加法(MAD)管線,并利用其管線內(nèi)的各種電路來實施諸多其他整數(shù)及浮點運算。 MMAD單元220的運算由發(fā)出電路204進行控制,發(fā)出電路204如上文所述將運算數(shù) 及操作碼提供至MMAD單元220。由發(fā)出電路204隨每一組運算數(shù)提供的操作碼控制 MMAD單元220的行為,從而選擇性地對該組運算數(shù)實施其各種運算中的一種。MMAD單元220較佳經(jīng)設(shè)計以按各種格式處理運算數(shù),包括按整數(shù)及浮點兩種 格式。在本文所述的各實施例中,MMAD單元220處理兩種浮點格式(在本文中稱作 fp32及fpl6)及六種整數(shù)格式(在本文中稱作u8、 u16、 u32、 s8、 s16、 s32)。現(xiàn)在 將對這些格式進行說明。"Fp32"是指標(biāo)準正EE 754單精度浮點格式,其中由符號位、八個指數(shù)位及23 個有效數(shù)字位來表示一正規(guī)的浮點數(shù)。所述指數(shù)向上偏置127,從而使用從1至254 的整數(shù)來表示處于2"26至2127范圍內(nèi)的指數(shù)。對于"正規(guī)"數(shù)而言,將所述23個有效 數(shù)字位解釋為一24位的尾數(shù)的小數(shù)部分,其中以隱含的1作為整數(shù)部分。將在指數(shù)位 中全為零的數(shù)稱為非正規(guī)數(shù),并將其解釋為在尾數(shù)中不具有隱含的前導(dǎo)數(shù)字1;這些 數(shù)可代表例如計算中的下溢。將在指數(shù)位中全為1且在有效數(shù)字位中為0的(正或負) 數(shù)稱作(正或負)INF;此種數(shù)可代表例如計算中的溢出。將在指數(shù)位中全為1且在 有效數(shù)字位中為非零數(shù)的數(shù)稱作非數(shù)(NaN),并可用于例如代表未定義的值。將0也 視為一特殊數(shù),且通過將所有指數(shù)位及有效數(shù)字位均設(shè)定為0來表示。"Fpl6"是指在圖形處理中常常使用的半精度格式。fpl6格式類似于fp32,只是 fpl6具有5個指數(shù)位及10個有效數(shù)字位。將指數(shù)向上偏置15,且將正規(guī)數(shù)的有效數(shù) 字解釋為一 11位的尾數(shù)的小數(shù)部分,其中以隱含的"1"作為整數(shù)部分。特殊數(shù)(包 括非正規(guī)數(shù)、INF、 NaN及0)的定義類似于fp32。在本文中以開頭的"s"或"u"及一表示總的位數(shù)(例如8、 16、 32)的數(shù)來規(guī) 定整數(shù)格式,"s"或"u"指示該格式是帶符號還是不帶符號;因此,s32是指帶符號 的32位整數(shù),u8是指不帶符號的八位整數(shù),依此類推。對于帶符號的格式,較佳使 用2補數(shù)反數(shù)。因此,u8的范圍是
,而s8的范圍是[-8,7]。在本文使用的所有 格式中,最高有效位(MSB)處于位字段的左側(cè),而最低有效位(LSB)處于右側(cè)。應(yīng)了解,在本文中定義及提及具體格式是為了便于進行例解,且MMAD單元可 支持這些各種的任一組合或支持不同格式。除處理不同運算數(shù)格式之外,MMAD單元220較佳經(jīng)配置以支持諸多種不同的 運算。例如,圖3是可由本文所述的MMAD單元220的一實施例實施的運算類型的 列表??砂?amp;32或fpl6格式對運算數(shù)實施浮點算術(shù)運算(列于302處),并返回輸入 格式的結(jié)果。在某些實施例中,僅支持一種格式(例如&32)的浮點算術(shù)。連同加法 (FADD)、乘法(FMUL)、及乘法-加法(FMAD)運算一起,支持各種運算數(shù)比較 運算。這些運算包括三元條件選擇運算(FCMP),如果C大于或等于O而B則不, 則選擇A;及最大運算(FMAX),其返回運算數(shù)A與B中較大的一者;以及最小運 算(FMDST),其返回這兩者中較小的一者。二元測試運算(FSET)對運算數(shù)A及B 實施諸多種二元關(guān)系測試中的一種,并返回一指示是否滿足所述測試的布爾值。在該 實施例中,可測試的二進制關(guān)系包括大于(A>B)、小于(A<B)、等于(A = B)、 及無序(A B,如果A或B之一是NaN,則其為真)、以及否定(例如A^B)、及各 種組合測試(例如A〉B、 AoB、 A -B等等)??砂慈我庹麛?shù)格式對運算數(shù)實施整數(shù)算術(shù)運算(列于304處),并以輸入格式返 回結(jié)果。所支持的整數(shù)算術(shù)運算包括加法(IADD)、乘法(MUL)、乘法-加法(MAD)、 條件選擇(ICMP)、最大(IMAX)、最小(IMIN)、及二元測試(ISET),所有這些運 算的定義均類似于對應(yīng)的浮點運算。還支持絕對差(ISAD)運算,其是計算IA-BI+C。
位運算(列于306處)將運算數(shù)視為32位的字段。邏輯運算(LOP)包括二元 布爾運算AND (A&B)、 OR (A舊)及XOR (AAB)。 LOP的結(jié)果是一 32位字段,其 指示對運算數(shù)A及B的對應(yīng)位實施運算的結(jié)果。還支持左移(SHL)及右移(SHR) 運算,其中運算數(shù)A用于提供將要移位的所述位字段,而運算數(shù)B用于規(guī)定移位量。 右移可為邏輯移位(其中在新的MSB位置上插入O)或算術(shù)移位(使符號位擴展至新 的MSB位置上)。格式轉(zhuǎn)換運算(列于308處)將運算數(shù)A從一種格式轉(zhuǎn)換成另一種格式。"F2F" 大體是指從一種浮點格式轉(zhuǎn)換成另一種浮點格式。在某些實施例中,這些轉(zhuǎn)換也可包 括以2W (N為整數(shù))換算運算數(shù)。此外,也支持使整數(shù)圓整化的F2F轉(zhuǎn)換。"F2I"是 指從浮點格式轉(zhuǎn)換成整數(shù)格式。如同F(xiàn)2F轉(zhuǎn)換一樣,可以2"換算運算數(shù)。"I2F" —般 是指整數(shù)-浮點轉(zhuǎn)換;這些運算可與求反或絕對值運算以及2"換算相結(jié)合。"121"是指 從一種整數(shù)格式轉(zhuǎn)換成另一種整數(shù)格式;這些轉(zhuǎn)換也可與絕對值或求反運算相結(jié)合。 "FRC"是"小數(shù)"運算,其返回浮點輸入運算數(shù)的小數(shù)部分。fp32自變數(shù)歸約運算(列于310處)也稱作范圍歸約運算(RRO),用于將超越 函數(shù)(例如sin(x)、 cos(x)或2"的自變數(shù);c限制至方便的數(shù)值間隔中,從而可由一經(jīng) 適當(dāng)配置的功能單元(其可為例如圖2中的功能單元222中的一者)來計算超越函數(shù)。 在該實施例中,在將超越函數(shù)指令發(fā)至功能單元之前,將其自變數(shù)作為運算數(shù)A提供 至MMAD單元220。對于正弦及余弦函數(shù),將運算數(shù)A映射至間隔[0,27U)中;對于 指數(shù)函數(shù)(也標(biāo)記為EX2),將運算數(shù)A表示為數(shù)A^/,其中iV是整數(shù)且/處于間隔[0, l)中。如在此項技術(shù)中所知,此種自變數(shù)歸約可通過將所述一組可能的自變數(shù)限制至 有界范圍來簡化超越函數(shù)的功能單元的設(shè)計。第II及第m部分描述MMAD單元220,其可實施圖3中所示的所有運算。第n 部分描述MMAD單元220的電路結(jié)構(gòu),且第III部分描述可如何使用該電路結(jié)構(gòu)來執(zhí) 行圖3中所列的運算。應(yīng)了解,本文所述的MMAD單元220只是例示性的,且也可 使用電路塊的恰當(dāng)組合來支持其他功能或不同的功能組合。II. 實例性MMAD單元結(jié)構(gòu)圖4是根據(jù)本發(fā)明一實施例支持圖3中所示的所有運算的MMAD單元220的簡 化方塊圖。在該實施例中,MMAD單元220構(gòu)建一用于所有運算的八級式管線。在每 一處理器循環(huán)中,MMAD單元220均可通過運算數(shù)輸入路徑402、 404、 406接收(例 如從圖2中的發(fā)出單元204)三個新的運算數(shù)(A0、 Bo、 Co)及通過操作碼路徑408 接收一指示所要實施的運算的操作碼。在該實施例中,所述運算可以是圖3中所示的 任一運算。除所述運算之外,所述操作碼還較佳指示運算數(shù)的輸入格式(且還有要對 結(jié)果使用的輸出格式,其既可與輸入格式相同也可與輸入格式不同)。應(yīng)注意,圖3 中所示的運算可具有與其相關(guān)的多個操作碼;例如,可存在一個用于使用fp32運算數(shù) 的FMUL運算的操作碼及一用于使用fpl6運算數(shù)的FMUL的不同操作碼,等等。MMAD單元220通過所有管線級0-7來處理每一運算,并在信號路徑410上產(chǎn)生
32位的結(jié)果值(OUT)及在信號路徑412上產(chǎn)生對應(yīng)的條件碼(COND)。視架構(gòu)而 定,這些信號可傳播至例如寄存器文件224 (如在圖2中所示),或者傳播至處理器核 心的其他元件。在一個實施例中,每一級均對應(yīng)于一處理器循環(huán);在其他實施例中, 在一個級中所示的元件可在多個處理器循環(huán)中進行劃分,或者可將兩個(或更多個) 級的元件組合成一個處理器循環(huán)。 一個實施方案是十個級(循環(huán))、1.5GHz。
第II.A部分提供對MMAD管線的概述,且第II.B-I部分詳細說明每一級的電路塊。
A. MMAD管線
參照如何在FMAD運算期間使用第0-2級的電路塊便可對管線具有最初的了解。 第0級是運算數(shù)格式化級,其可視需要構(gòu)建于發(fā)出單元204或MMAD單元220中, 以通過恒定不變的方式來對齊及表示運算數(shù)(其可具有少于32位)。第1-3級實施 FMAD運算的乘法(A*B=P)部分,而第4-6級則實施加法(P+C)部分。在第7級 中,將最終結(jié)果格式化,以將其分配于信號路徑410、 412上。第7級還包括控制邏輯, 以用于如下文所述在出現(xiàn)特殊數(shù)輸入、溢流、下溢或其他條件時產(chǎn)生特殊輸出。
為利于進行本說明,將MMAD單元220的三個主要內(nèi)部數(shù)據(jù)路徑在圖4中由虛 線邊界表示,且在本文中將其稱作"尾數(shù)路徑"413、"指數(shù)路徑"415、及"測試路徑" 417。盡管這些名稱表明由在每一路徑上所示各種電路塊在某些運算(例如FMAD或 比較)期間所實施的功能,然而將顯而易見,可以與運算相關(guān)的方式將沿任一內(nèi)部數(shù) 據(jù)路徑413、 415、 417的電路塊用于各種各樣的應(yīng)用中。
沿尾數(shù)路徑413,第l-3級包括對浮點運算數(shù)A及B的尾數(shù)進行相乘的電路塊。 第2級中的乘法器塊414是由一左乘法器塊416及一右乘法器塊418支持。乘法結(jié)果 在第3級末端處在路徑421上作為結(jié)果R3a提供。第4-6級包括對齊塊420及小數(shù)和 塊422,對齊塊420及小數(shù)和塊422使結(jié)果R3a與通過測試路徑417在路徑419上作 為結(jié)果R3b提供的浮點運算數(shù)C的尾數(shù)對齊并相加。在正規(guī)化塊423中將最終的尾數(shù) 正規(guī)化,并在第6級的輸出處在路徑425上作為結(jié)果R6提供。
指數(shù)路徑415對浮點運算數(shù)A、 B及C的指數(shù)部分(標(biāo)記為Ea、 Eb、 Ec)實施 恰當(dāng)?shù)倪\算,以支持FMAD運算。第1級中的指數(shù)乘積塊424 (例如)通過對Ea及 Eb進行相加并減去偏置量.(例如127)來計算乘積A*B的指數(shù),同時第2級中的指數(shù) 和塊426確定和(AfB)+C的有效最終指數(shù)(EFE)及指數(shù)差(Ediff),所述指數(shù)差(Ediff) 用于控制第4級中對齊塊420的操作。沿指數(shù)路徑415的后續(xù)電路塊,包括第3級中 的Rshift計數(shù)塊428、第4級中的指數(shù)遞增塊430、第6級中的指數(shù)遞減塊432,根據(jù) 尾數(shù)結(jié)果的特性來調(diào)節(jié)指數(shù)EFE,從而在路徑427上提供最終指數(shù)E0。
測試路徑417的電路塊主要用于除FMAD以外的運算,特別是整數(shù)及浮點比較 運算。測試路徑417包括處于第1級中的逐位邏輯塊434及處于第3級中的比較邏輯 塊436;這些元件的運算將在下文中進行說明。在FMAD運算期間,測試路徑412將 運算數(shù)C的尾數(shù)在第3級的輸出處傳播至路徑419。
與主要數(shù)據(jù)路徑并行地,MMAD單元220還通過第1級中的特殊數(shù)檢測電路438 來處理特殊數(shù)(例如在fp32或fpl6運算數(shù)的情形中是NaN、 INF、非正規(guī)數(shù)及0), 特殊數(shù)檢測電路438在路徑429上產(chǎn)生特殊數(shù)信號(SPC)。特殊數(shù)檢測電路438 —其 接收所有三個運算數(shù)A、 B及C一可為一般的傳統(tǒng)設(shè)計,且特殊數(shù)信號SPC可每一運 算數(shù)包括數(shù)個(例如3個)位,以通過預(yù)定的特殊數(shù)代碼來指示每一運算數(shù)的特殊數(shù) 狀態(tài)??蓪⑺鎏厥鈹?shù)信號SPC提供給各個下游電路塊,包括第7級的輸出控制塊440, 輸出控制塊440在適當(dāng)時使用所述特殊數(shù)信號SPC以特殊值覆蓋來自管線(例如R6 及E0)的結(jié)果;其實例將在下文中進行說明。在管線的末端處,輸出控制塊420在信號路徑410上提供結(jié)果OUT并在信號路 徑412上提供條件碼COND。所述條件碼一其較佳包括比所述結(jié)果少的位數(shù)一載送關(guān) 于所述結(jié)果的性質(zhì)的一般信息。例如,所述條件碼可包含指示所述結(jié)果是否是正的、 負的、0、 NaN、 INF、非正規(guī)數(shù)等等的位。如在此項技術(shù)中所知,當(dāng)隨結(jié)果提供條件 碼時,該結(jié)果的后續(xù)使用者有時可在其處理中使用條件碼而非結(jié)果本身。在某些實施 例中,可使用條件碼來指示在執(zhí)行運算過程中出現(xiàn)異?;蚱渌录T谄渌麑嵤├?, 可完全省略條件碼。除數(shù)據(jù)路徑外,MMAD單元220還提供控制路徑,其在圖4中由第0級中的控 制塊442表示??刂茐K442接收操作碼并產(chǎn)生各種與操作碼相關(guān)的控制信號(在本文 中一般標(biāo)記為"OPCTL"),所述與操作碼相關(guān)的控制信號可通過管線與數(shù)據(jù)傳播同步 地傳播至每一電路塊。(在圖4中未顯示OPCTL信號與各種電路塊的連接。)如下文 所述,OPCTL可用于響應(yīng)于所述操作碼而啟用、禁用、及以其他方式控制MMAD單 元220的各種電路塊的操作,以便可使用同一些管線元件來實施不同的運算。本文中 所提及的各種OPCTL信號可包括操作碼本身或者從操作碼導(dǎo)出(例如由構(gòu)建于控制 塊442中的組合邏輯導(dǎo)出)的某種其他信號。在某些實施例中,可在數(shù)個管線級中使 用多個電路塊來構(gòu)建控制塊442。應(yīng)了解,在給定運算期間提供至不同塊的OPCTL信 號既可為同一信號也可為不同的信號。根據(jù)本發(fā)明的揭示內(nèi)容,所屬領(lǐng)域的一般技術(shù) 人員將能夠構(gòu)造適合的OPCTL信號。應(yīng)注意,給定級的各電路塊可能需要不同的處理時間量,且一特定級所需的時間 可因運算而異。相應(yīng)地,MMAD單元220也可包括各種定時及同步電路(在圖4中未 顯示),以控制數(shù)據(jù)在不同路徑上從一個管線級向下一管線級的傳播。可使用任何恰當(dāng) 的定時電路(例如鎖存器、傳輸門等等)。B.第0級中的元件在該實施例中,將8位(16位)整數(shù)運算數(shù)作為32位運算數(shù)的八(16)個LSB 遞送至MMAD單元220,并將fpl6運算數(shù)以一 "填充"格式遞送,其中將三個額外 的位(全部為0)插入五個指數(shù)位的左側(cè)并將13個額外的位(全部為0)插入十個小 數(shù)位的右側(cè)。在第0級中,格式化塊400較佳對某些運算的所接收運算數(shù)實施進一步 的格式化。
圖5是一方塊圖,其顯示格式化塊400的組件。每一所接收運算數(shù)Ao、 Bo、 Co 沿多個路徑并行地傳送,其中對每一路徑應(yīng)用不同的轉(zhuǎn)換。八位上轉(zhuǎn)換器504、 505、 506通過對最高有效位(MSB)進行符號擴展來將8位整數(shù)轉(zhuǎn)換成32位整數(shù)。類似地, 16位上轉(zhuǎn)換器508、 509、 510通過符號擴展將16位整數(shù)轉(zhuǎn)換成32位整數(shù)。對于運算 數(shù)A, fpl6上轉(zhuǎn)換器塊512通過將指數(shù)偏置從15調(diào)節(jié)至127而將fpl6運算數(shù)提升至 fp32。選擇多路復(fù)用器(mux) 514、 515、 516根據(jù)OPCTL信號為每一運算數(shù)選擇正確 的輸入格式,所述OPCTL信號對應(yīng)于運算數(shù)格式(其由上文所述的操作碼加以規(guī)定)。 在多路復(fù)用器514-516之后,每一運算數(shù)路徑還包括條件反相器電路518、 519、 520, 所述條件反相器電路518、 519、 520可用于通過使所有位反轉(zhuǎn)而產(chǎn)生運算數(shù)的1補數(shù)。 條件反相器電路518-520由OPCTL信號及運算數(shù)的符號位進行控制。可在其中實施求 反的具體情形將在下文中進行說明。在某些實施例中,對于fpl6及fp32運算數(shù),在內(nèi)部使用一33位的表示形式。在 此種表示形式中,在有效數(shù)字位前面帶有隱含的前導(dǎo)l,從而在fp32 (&16)情況下傳 播24 (11)個尾數(shù)位。在其他實施例中,可使呈少于32位的格式的整數(shù)運算數(shù)在32 位字段中任意對齊,且格式化塊400可將這些運算數(shù)移位至內(nèi)部32位數(shù)據(jù)路徑的LSB 。 類似地,可不經(jīng)填充地遞送fpl6運算數(shù),且格式化塊400可如上文所述插入填充或者 實施其他對齊操作。C.第l級中的元件重新參見圖4,格式化塊400將運算數(shù)A、 B及C提供至第1級的各個數(shù)據(jù)路徑。 第1級在尾數(shù)路徑413中包括左乘法器塊416,在指數(shù)路徑415中包括指數(shù)乘積塊424, 且在測試路徑417中包括逐位邏輯塊434,以及如上文所述的特殊數(shù)檢測塊438。圖6A是左乘法器塊416的方塊圖。左乘法器塊416為使用Booth 3算法進行的 乘法準備被乘數(shù)(運算數(shù)A)及乘數(shù)(運算數(shù)B);實際的乘法是在第2級的乘法器塊 414中實施。在整數(shù)運算數(shù)A及B的情形中,左乘法器塊416對整個運算數(shù)進行運算; 在浮點運算數(shù)的情形中,左乘法器塊416對包含隱式或顯式前導(dǎo)"1"的尾數(shù)部分進行 運算。因而,在本說明提及運算數(shù)時,應(yīng)了解,可根據(jù)需要使用整個運算數(shù)或僅使用 尾數(shù)部分。如在圖6A中所示,左乘法器塊416包括"3X"加法器612、 Booth3編碼器614、 及選擇乘法器(mux) 616。 3X加法器612—其可為一般的常規(guī)設(shè)計一接收運算數(shù)A (被乘數(shù))并計算3A (例如通過A+2A進行相加)以供乘法器塊414使用。將運算數(shù) A及所計算的3A轉(zhuǎn)接至第2級。Booth3編碼器614—其可為一般的常規(guī)設(shè)計一接收 運算數(shù)B(乘數(shù))并執(zhí)行常規(guī)Booth3編碼,從運算數(shù)B的各個位產(chǎn)生交疊的4位式段。 在其他實施例中,可使用除Booth3以外的乘法算法,且可使用任何恰當(dāng)?shù)淖蟪朔ㄆ麟?路來取代本文所述的特定電路。選擇mux 616由OPCTL信號進行控制,以在運算數(shù)B、運算數(shù)B的經(jīng)Booth3編
碼型式、及以經(jīng)Booth3編碼的形式存儲于寄存器618、 620中的常數(shù)乘數(shù)(例如1/2兀 及1.0)之間進行選擇。所選的值作為結(jié)果BB提供至第2級。對于FMUL或IMUL 運算,選擇運算數(shù)B的經(jīng)Booth3編碼的型式。在其他運算中,可對選擇mux 616進 行控制,以使運算數(shù)B繞過Booth3編碼器614 (例如對于下文所述的比較運算)或者 選擇來自寄存器618、 620的常數(shù)乘數(shù)中的一者(例如,對于下文所述的自變數(shù)歸約或 格式轉(zhuǎn)換運算)。在其他實施例中,對于其中使用常數(shù)乘數(shù)的運算,可將所述乘數(shù)作為 運算數(shù)Bo提供于MMAD單元220的輸入端處,或者可在左乘法器塊416的輸入端處 選擇乘法器的未經(jīng)Booth編碼的表示形式,然后使用編碼器614對其進行Booth編碼。圖6B是顯示指數(shù)乘積塊424的方塊圖。對于浮點算術(shù)運算,指數(shù)乘積塊424接 收運算數(shù)A及B的指數(shù)位(Ea, Eb)并在第一加法器電路622中將其相加,以計算乘 積八*8的指數(shù)。指數(shù)乘積塊424還包括第二加法器電路624,其將一偏置量p (其可 為正數(shù)、負數(shù)、或0)加至和Ea+Eb。偏置量寄存器626存儲一個或多個候選偏置值, 并使用OPCTL信號以與運算相關(guān)的方式來選擇恰當(dāng)?shù)钠昧?。例如,在FMUL運算 期間,當(dāng)將兩個經(jīng)過偏置的指數(shù)Ea與Eb相加時,可使用偏置量P來校正或fp32 指數(shù)偏置量。在其他運算期間,可如下文所述為偏置量P選擇不同的值。在指數(shù)乘積塊 424的輸出端處,選擇mux 628響應(yīng)于OPCTL信號而在所述和與所述兩個輸入指數(shù)之 間進行選擇。將結(jié)果Eab在路徑431上傳播至第2級。較佳比輸入指數(shù)Ea、 Eb多使用一個位來表示結(jié)果Eab,從而能夠在下游檢測到 指數(shù)飽和(溢出)。例如,如果指數(shù)Ea及Eb分別為八位,則Eab可為九位。圖6C是顯示逐位邏輯塊434的方塊圖。運算數(shù)A及B提供至AND2電路630、 OR2電路632、及XOR2電路634。這些電路中的每一者一其可為一般的常規(guī)設(shè)計一 對運算數(shù)A及B的對應(yīng)位實施指定的邏輯運算,從而提供32位的候選結(jié)果。并行地 操作條件反相器635,以使運算數(shù)C在FRC運算期間反相并在其他運算期間不加改變 地傳送運算數(shù)C。選擇mux 636響應(yīng)于OPCTL信號而選擇各種邏輯運算的結(jié)果或運 算數(shù)C (或其反數(shù))中的一者,所選數(shù)據(jù)(Rl)在路徑433上經(jīng)第2級傳播。選擇 mux 636的OPCTL信號經(jīng)配置以針對MAD、 ADD或CMP運算來選擇運算數(shù)C;將 選擇所述邏輯運算結(jié)果中恰當(dāng)?shù)囊徽邅碛糜谶壿嬤\算;且將傳播來自XOR2電路634 的結(jié)果以用于SET運算。對于某些運算,在下游組件中不使用結(jié)果R1;在這些情形 中,可作出任一選擇。第1級還包括"I2F字節(jié)"電路444,如在圖4中所示。在I2F格式轉(zhuǎn)換操作期間 所使用的該電路選擇運算數(shù)A的八個MSB作為字節(jié)A并將字節(jié)A通過路徑435傳播 至第2級。I2F字節(jié)電路444還包括AND樹(未顯示),其判定是否運算數(shù)A的24 個LSB全部為1。路徑437上的AND樹輸出信號(And24)可為單個位,如果運算數(shù) A的所有24個LSB均為1,則將所述單個位設(shè)定為l,否則設(shè)定為0。D.第2級中的元件重新參見圖4,第2級包括位于尾數(shù)路徑413上的乘法器塊414及位于指數(shù)路徑 415上的指數(shù)和塊426。在測試路徑417上,路徑433將數(shù)據(jù)Rl —直傳播至第3級, 而不進行進一步處理。圖7A為包括乘法器樹700的乘法器塊414的方塊圖。在乘法器樹700中,Booth 多路復(fù)用器704從第1級接收運算數(shù)A、所計算結(jié)果3A及經(jīng)Booth3編碼的運算數(shù)BB , 并執(zhí)行Booth乘法算法。如在此項技術(shù)中所習(xí)知,Booth乘法涉及到選擇與經(jīng)Booth3 編碼的乘數(shù)BB中每一位組相對應(yīng)的部分乘積(其將為被乘數(shù)A的倍數(shù))。使用一進位 -保存加法器(CSA)樹對所得到的部分乘積進行相加,在該實施例中,所述進位-保 存加法器(CSA)樹由三個(3:2) CSA706組成,所述三個(3:2) CSA706向兩個(3:2) CSA708進行饋入,而所述兩個(3:2) CSA 708又對一個(4:2) 39位CSA710進行 饋入。Booth多路復(fù)用器704及CSA 706、 708、 710可為一般的傳統(tǒng)設(shè)計。所述最終 輸出是呈冗余(和,進位)表示形式的乘積AfB。和及進位字段較佳寬于運算數(shù)(例 如在一個實施例中為48位)??商娲鸀槠渌朔ㄆ麟娐罚▓?zhí)行不同于Booth乘法 的算法的電路。在一個實施例中,所述乘法器支持多達24位x24位乘法??墒褂么隧椉夹g(shù)中所知 的多種乘法運算(例如多種16位xl6位乘法運算)來合成較大運算元(例如32位整 數(shù))的乘積。在其他實施例中,所述乘法器可具有不同的大小,并可支持例如多達32 位x32位乘法。這些設(shè)計選項對于本發(fā)明而言無關(guān)緊要,并可基于例如芯片面積及性 能等考慮因素。乘法器塊414還包括運算數(shù)A及B的旁通路徑,具體而言,選擇mux711從乘法 器樹700接收運算數(shù)A及和字段,同時另一選擇mux 713從乘法器樹410接收運算數(shù) B及進位字段。Mux711、 713由共用OPCTL信號加以控制,以便選擇運算數(shù)(A, B) 或乘法結(jié)果(和,進位)作為結(jié)果R2a及R2b,并將其傳播至路徑715、 717上。對于 乘法或MAD運算,將選擇和及進位結(jié)果。對于其他運算,例如ISAD或最大或最小 運算,將如下文所述選擇運算數(shù)A及B。應(yīng)注意,較佳使結(jié)果路徑715、 717寬于正 規(guī)運算數(shù)(例如48位相對于32位);相應(yīng)地,當(dāng)mux711、713選擇運算數(shù)A及B時, 可根據(jù)需要使用前導(dǎo)或后隨的0來填充運算數(shù)A及B。圖7B是指數(shù)和塊702的方塊圖,指數(shù)和塊702包括差值電路714、選擇mux 716 及八位優(yōu)先權(quán)編碼器718。差值電路714在路徑431上接收乘積指數(shù)Eab及在路徑439 上接收運算數(shù)C的指數(shù)部分(Ec),并計算差值(Eab-Ec)。在浮點加法或MAD運算 期間,差值電路714在路徑721上提供代表所述差值的符號的信號Sdiff。該信號用于 控制選擇mux 716選擇Eab與Ec中的較大者作為和(A+B)+C的有效最終指數(shù)(EFE)。 信號EFE在路徑723上向下游傳播。差值(Ediff)自身一其既可為正也可為負一在路 徑725上向下游組件傳播。對于除浮點加法或MAD以外的運算,指數(shù)和塊702可用 于其他用途;相應(yīng)地,差值電路714接收OPCTL信號,所述OPCTL信號控制信號 Sdiff及Ediff的產(chǎn)生,如下文所述。在I2F轉(zhuǎn)換運算期間使用優(yōu)先權(quán)編碼器718在運算數(shù)A的八個MSB中識別前導(dǎo) 1 (若有)的位置。將MSB (字節(jié)A信號)通過路徑435提供至優(yōu)先權(quán)編碼器718, 且優(yōu)先權(quán)編碼器的輸出BP代表從前導(dǎo)1的位位置導(dǎo)出的指數(shù)(如果所有八個MSB均 為0,則輸出BP可為0)。在I2F轉(zhuǎn)換運算期間,差值電路714還在如下文所述的輸 出選擇期間使用信號And24。 E.第3級中的元件第3級在尾數(shù)路徑413上包括右乘法器塊418、在指數(shù)路徑415上包括Rshift計 數(shù)電路428、并在測試路徑417上包括比較邏輯436。圖8A是右乘法器塊418,其包括中間乘積(IP)加法器804、粘附位邏輯808、 整數(shù)mux 810、輸入選擇mux812及輸出選擇mux814。響應(yīng)于OPCTL信號,輸入選 擇mux 812在路徑717 (來自第2級中的乘法器塊414)上的結(jié)果R2b與存儲于寄存 器816中的常數(shù)運算數(shù)(值l)之間進行選擇。如下文所述,在其中需要運算數(shù)A的 2補數(shù)的某些格式轉(zhuǎn)換運算期間,用于mux 812的OPCTL信號選擇所述常數(shù)運算數(shù)。 在這些情形中,在第O級中使運算數(shù)A反相,并使用IP加法器804加上1。對于其他 運算,mux 812可選擇結(jié)果R2b。IP加法器804對結(jié)果R2a及R2b (或R2a與常數(shù)運算數(shù))進行相加,以產(chǎn)生一和 RP。 IP加法器804還通過路徑805將所述和RP的兩個MSB (RP2)提供至比較邏輯 塊806。在乘法或MAD運算的情形中,所述和RP是A*B的乘積。對于其他運算而 言,所述和RP可代表A+B (例如,當(dāng)使運算數(shù)A及B繞過乘法器樹700時)或~A+1 (例如當(dāng)在第0級中使運算數(shù)A反相并使其繞過乘法器樹700、且輸入mux 812選擇 常數(shù)運算數(shù)時)。如上文所述,結(jié)果R2a及R2b可寬于正規(guī)運算數(shù)(例如48位);相應(yīng)地,IP加 法器804可構(gòu)建為48位加法器,且路徑RP可為49位寬以容納進位。右乘法器塊802 較佳將和RP減至具有正規(guī)運算數(shù)寬度(例如32位)的結(jié)果R3a,例如通過丟棄LSB。 粘附位邏輯808—其可為一般的常規(guī)設(shè)計一較佳收集粘附位SB3 (所丟棄的位中的某 些或全部)并將其提供至下游組件,下游組件可如下文所述使用粘附位來進行舍入。 與此并行地,整數(shù)mux810處理整數(shù)運算數(shù);mux810響應(yīng)于OPCTL信號而選擇所述 49位和RP的上部32位或下部32位。所述選擇取決于運算數(shù)R2a及R2b在寬路徑715 、 717上如何對齊。輸出mux 814響應(yīng)于取決于所述運算的OPCTL信號而選擇來自浮點路徑或整數(shù) 路徑的結(jié)果R3a,并在路徑421上提供R3a。此外, 一旁通路徑817使結(jié)果R2a能夠 繞過IP加法器804并由輸出mux814加以選擇;因此,R2a(其可為運算數(shù)A)可作 為結(jié)果R3a在路徑421上傳播。重新參見圖4, Rshift計數(shù)電路428可響應(yīng)于OPCTL信號。在FMAD (或FADD) 運算中,Rshift計數(shù)電路428使用路徑725上的指數(shù)差Ediff來確定浮點加數(shù)(例如 八*8及0是否正確對齊。具體而言,具有較小指數(shù)的加數(shù)將右移,從而可使用較大 的指數(shù)對其進行表示。相應(yīng)地,Rshift計數(shù)電路428使用指數(shù)差Ediff的符號來判定A*B或C是否具有較大的指數(shù),并產(chǎn)生如下文所述來控制將哪一加數(shù)右移的交換控制 信號(SwapCtl)。 Rshift計數(shù)電路428還使用指數(shù)差Ediff的量值來產(chǎn)生如下文所述控 制如何快地使所選加數(shù)右移的移位量信號(RshAmt)。可例如根據(jù)加數(shù)的寬度對移位 量進行鉗制。這些信號在路徑441上傳播至對齊塊420。借助OPCTL信號,利用Rshift計數(shù)電路428來用于其中可使用右移的其他運算。 這些應(yīng)用的實例如下文所述。圖8B是顯示比較邏輯塊436的方塊圖,比較邏輯塊436包括AB符號電路820、 二元測試邏輯單元822及選擇mux 824。比較邏輯塊436經(jīng)配置以接收輸入Rl、 R2a 及R2b,并選擇其中一個來作為結(jié)果R3b在路徑419上傳播。在為MAD或加法運算 的情形中,接收運算數(shù)C作為輸入Rl并使其不加修改地傳播過比較邏輯塊436。對 于其他運算(包括LOP、 CMP、 MAX、 MIN及SET)而言,比較邏輯塊436可選擇 其輸入中的不同的一者。AB符號電路820在路徑805上從IP加法器804 (圖8A)接收兩個MSB RP2。 在為最大(FMAX或MAX)、最小(FMTN或TMIN)、或二元測試(FSET或ISET) 運算的情形中,較佳在第0級中由條件反相器519使運算數(shù)B反相(參見圖5),并使 用如上文所述的選擇mux將運算數(shù)A及B旁通至IP加法器804。在這些情形中,結(jié) 果RP是差值A(chǔ)-B,且MSBRP2指示所述差值是否是負的(意味著B〉A(chǔ))。 AB符號 電路820接收MSB并產(chǎn)生符號信號Sab (例如如果A-B是負的,則將一位的信號置 高,否則將其置低)。所述符號信號Sab通過路徑821提供至二元測試邏輯單元822 及下游組件。除符號信號Sab外,二元測試邏輯單元822還通過路徑429從第1級(圖4)的 特殊數(shù)檢測塊438接收特殊數(shù)信號SPC、 OPCTL信號、及從第1級的逐位邏輯電路 434接收結(jié)果R1。結(jié)果R1對于條件選擇運算(FCMP、 ICMP)而言是運算數(shù)C,或 者對于其中第3級中的二元測試邏輯單元822現(xiàn)用的其他運算而言是XOR單元634 的輸出。響應(yīng)于這些輸入信號,二元測試邏輯單元822產(chǎn)生用于控制選擇mux 824的操作 的比較選擇信號(CSEL)、以及在路徑825上傳播至第7級的布爾結(jié)果信號(BSEL), 如在圖4中所示。CSEL信號也可通過路徑827傳播至下游組件。CSEL及BSEL信號的產(chǎn)生是與運算相關(guān)的。在FMAX、 IMAX、 FMIN或IMIN的情形中,使運算數(shù)A及B繞過乘法器樹700 (圖7A)并作為結(jié)果R2a及R2b提供。二元測試邏輯822產(chǎn)生CSEL信號,以根據(jù)符號信號Sab來選擇這兩個運算數(shù)中的一 個。對于條件選擇運算(FCMP、 ICMP)而言,路徑433上的結(jié)果R1是運算數(shù)C。 特殊數(shù)信號SPC尤其指示運算數(shù)C是否為0 (或者任何其他特殊數(shù))。二元測試邏輯 822使用運算數(shù)C的符號位及特殊數(shù)信號SPC來判定是否滿足條件0 0并相應(yīng)地選 擇運算數(shù)A (R2a)及B (R2b)中的一者。對于二元測試運算(FSET、ISET), 二元測試邏輯822產(chǎn)生布爾真或假信號BSEL。 該信號通過路徑825提供至第7級,在第7級中使用其來產(chǎn)生布爾結(jié)果的恰當(dāng)?shù)?2 位表示形式。在此種情形中,路徑433上的結(jié)果Rl提供32位的XOR2結(jié)果。二元測 試邏輯822實施四個基本測試"無序"(A B),"等于"(A-B),"大于"(A>B) 及"小于"(A<B)。如果A與B中的至少一者為INF或NaN—此可參照特殊數(shù)信號 SPC加以確定,則A B測試的結(jié)果是布爾真。如果路徑R1上X0R結(jié)果的所有位均 為0,則A-B測試的結(jié)果是布爾真。如果路徑Sab上的符號信號指示A-B是負數(shù), 則A〈B測試的結(jié)果是布爾真。如果其他三個測試的結(jié)果均是假,則A〉B測試的結(jié) 果是布爾真??赏ㄟ^逆反這四個基本測試的結(jié)果來求解否定測試(不等于、不大于、 不小于、非無序)??赏ㄟ^對來自這四個基本測試或其否定測試的結(jié)果構(gòu)造適當(dāng)?shù)牟紶?OR來支持其他組合測試(例如A〈B等等)。在一個實施例中,二元測試邏輯822經(jīng) 配置以并行地執(zhí)行多個測試并根據(jù)OPCTL信號來選擇結(jié)果BSEL。可選擇mux 824的 任何輸入作為結(jié)果R3b,因為該結(jié)果在SET運算期間將被忽略。R 第4級中的元件重新參見圖4,第4級包括對齊塊420及指數(shù)遞增塊430。圖9是顯示對齊塊420的方塊圖。在FMAD或FADD運算期間,使用對齊塊420 使尾數(shù)對齊,以準備進行浮點加法。對齊塊420還用于在如下文所述的其他運算期間 實施右移。Rshift計數(shù)電路428通過路徑441為對齊塊420提供控制信號。對齊塊420包括"小的"交換mux 904及"大的"交換mux 906,交換mux 904 及906分別從路徑421、 419接收輸入R3a及R3b。小的交換mux 904及大的交換mux 906處于來自Rshift計數(shù)電路428的SwapCtl信號的共同控制之下,以便當(dāng)小的交換 mux 904將輸入R3a、 R3b中的一者指引至小運算數(shù)路徑908內(nèi)時,大的交換mux 906 將另一輸入R3b、 R3a指引入大的運算數(shù)路徑910內(nèi)。在FMAD運算情形中,運算數(shù) 對應(yīng)于(A*B)及C,且將具有較小指數(shù)的運算數(shù)指引至小的運算數(shù)路徑908內(nèi)。小運算數(shù)路徑908包括右移電路912、.粘附位邏輯914、移位mux 916、及條件反 相器918。右移電路912將小運算數(shù)路徑908上的數(shù)據(jù)位右移,其中移位量(例如0 至32位)受來自Rshift計數(shù)電路804的RshAmt信號的控制。在一個實施例中,可通 過RshAmt信號或通過單獨的OPCTL信號(未顯示)來控制右移電路912實施算術(shù)移 位或邏輯移位。粘附位邏輯914捕獲由右移電路912移出的LSB中的某些或全部,并通過路徑 915將粘附位SB4提供至第5級,以供如下文所述用于舍入。在一個實施例中,粘附 位邏輯914還通過SB3從第3級(參見圖8A)接收粘附位SB3;可響應(yīng)于OPCTL信 號來控制粘附位邏輯914是傳播所接收的粘附位SB3還是產(chǎn)生新的粘附位。提供移位mux916,以在前一乘法的結(jié)果向下一位位置進位時調(diào)節(jié)對齊。其也可 用于在移位量RshAmt所基于的指數(shù)差(Ediff)為負值的情形中支持對齊移位的正確 實施。這些情形可通過如下方式來處理在Rshift計數(shù)電路428中將Ediff值反相以獲 得RshAmt、然后操作移位mux 916來實施進一步的右移1位。在某些實施例中,移 位mux916也可用于支持其中在不使用額外專用邏輯情況下當(dāng)將運算數(shù)移位32位時應(yīng) 返送回0的運算。條件反相器918可將小運算數(shù)路徑918上的運算數(shù)反相或者不響應(yīng)于OPCTL信 號及在某些情形中不響應(yīng)于其他信號,例如來自比較邏輯塊436 (參見圖8B)的CSEL 信號或Sab信號。條件反相可用于例如在第5級期間實施減法運算。輸出信號R4a在 路徑909上提供至第5級。大運算數(shù)路徑910包括條件0電路920及移位mux 922。條件0電路920—其可 響應(yīng)于OPCTL信號一可用于將路徑910上的運算數(shù)替換為0。這例如在其中希望將 R3a或R3b不加修改地傳遞過第5級的加法器(在下文中說明)的運算期間使用。對 于FMAD運算,條件0電路920不現(xiàn)用,且大的運算數(shù)不加修改地通過。移位mux 922, 如移位mux 916 —樣,可用于在前一乘法出現(xiàn)進位的情況下調(diào)節(jié)對齊。將來自大運算數(shù)路徑410的輸出信號R4b在路徑911上提供至第5級。重新參見圖4,指數(shù)遞增塊430在路徑723上接收有效最終指數(shù)EFE并在路徑421 上接收乘積結(jié)果R3a (或者僅乘積結(jié)果的最高有效位)。在FMAD或FMUL運算期間, 指數(shù)遞增塊430檢測所述48位和與右乘法器塊418中的進位結(jié)果(R2a、 R2b)的相 加的結(jié)果是否向第49位位置進位。如果是,則將有效最終指數(shù)EFE遞增1。將經(jīng)修改 (或未經(jīng)修改)的有效最終指數(shù)EFE2通過路徑443提供至第4級。G.第5級中的元件第5級包括小數(shù)和塊422。在加法及MAD運算期間,該塊實施加法。使用其的 所有運算的舍入也在該級中執(zhí)行。圖10是小數(shù)和塊422的方塊圖,小數(shù)和塊422包括加1加法器1002、 AND2電 路1004、反相器1006、舍入邏輯單元1008及選擇mux 1010。在路徑909、 911上從 對齊塊420接收加數(shù)R4a及R4b。加1加法器1002—其可為一般的傳統(tǒng)設(shè)計一其將所 述加數(shù)相加以產(chǎn)生Sum (和)輸出,并對所述和加上l以產(chǎn)生Sum+l (和+l)輸出。 反相器1006將所述和輸出反相,以產(chǎn)生-Sum (-和)輸出。這些輸出支持2補數(shù)算法 以及舍入。并行地,AND2電路1004對運算數(shù)R4a及R4b的對應(yīng)位實施邏輯AND運算,并 提供32位的結(jié)果。AND2電路1004是在如下文所述的FRC運算期間使用。在其他運 算期間,可繞過AND2電路1004或者將其置于低功率空閑狀態(tài)中。舍入邏輯1008—其可為一般的傳統(tǒng)設(shè)計一接收OPCTL信號、在路徑821上從比 較邏輯塊436 (參見圖8B)接收符號信號Sab、在路徑915上接收粘附位SB4、及從 加1加法器1002接收所選的MSB及LSB。響應(yīng)于這些信號,舍入邏輯1008指示mux 1010選擇Sum、 Sum+1、 -Sum及AND2輸出中的一者作為結(jié)果R5;在路徑1011上 傳播所選結(jié)果R5。結(jié)果R5的選擇取決于若干種考慮因素。例如,舍入邏輯1008較佳執(zhí)行對正EE
標(biāo)準算法所規(guī)定的四種舍入模式(最近、底限、頂限及截取),其中不同的模式可能選 擇不同的結(jié)果??墒褂肙PCTL信號或另一控制信號(未顯示)來規(guī)定其中一種舍入 模式。另外,所述選擇還將取決于格式(整數(shù)還是浮點數(shù))、所述結(jié)果是正的還是負的、 是不是請求絕對值、及類似考慮因素??蓤?zhí)行用于根據(jù)各種舍入模式來舍入正數(shù)及負 數(shù)的傳統(tǒng)規(guī)則。對于FRC運算,選擇AND2電路1004的輸出;對于其他運算,則可 忽略該輸出。H. 第6級中的元件重新參見圖4,第6級包括正規(guī)化塊423及指數(shù)遞減塊432。在FMAD、 FMUL 或FADD運算期間,正規(guī)化塊423運行以通過將結(jié)果左移直到前導(dǎo)位是1為止來對齊 尾數(shù)R5。由于在該上下文中,左移意味著乘以2,因而將左移量提供至指數(shù)遞減塊432, 指數(shù)遞減塊432相應(yīng)地減小指數(shù)EFE,從而產(chǎn)生最終指數(shù)EO。在其他運算期間,利用 正規(guī)化塊423如下文所述實施左移。圖11是正規(guī)化塊423的方塊圖。優(yōu)先權(quán)編碼器1108在路徑1011上接收加法結(jié) 果R5,并確定前導(dǎo)1的位置。該信息提供至移位控制電路1110,由移位控制電路1110 產(chǎn)生左移量信號LshAmt。 LshAmt信號提供至左移電路1112且還提供至指數(shù)遞減塊 432 (圖4)。左移電路1112將結(jié)果R5左移規(guī)定的位數(shù),并在路徑425上提供結(jié)果R6。 指數(shù)遞減塊432根據(jù)LshAmt信號減小指數(shù)EFE2,并在路徑427上提供所得到的最終 指數(shù)EO。移位控制電路1110還接收OPCTL信號、從路徑443接收EFE2信號、及從路徑 429接收特殊數(shù)信號SPC,從而能夠在其他上下文中利用左移電路1112來實施左移, 這些上下文的實例在下文中進行說明。I. 第7級中的元件重新參見圖4,第7級包括輸出控制塊440,所述輸出控制塊440對最終結(jié)果(OUT 及COND)進行格式化及選擇以通過路徑410、 412遞送至MMAD單元220外部的組 件。圖12是輸出控制塊440的方塊圖。對于浮點運算,格式塊1210通過路徑427接 收最終指數(shù)EO及通過路徑425接收最終尾數(shù)R6。對于浮點運算,格式塊1210使用值 EO及R6來產(chǎn)生由OPCTL信號所規(guī)定的&32或^16格式的結(jié)果Rdata。對于整數(shù)運算,格式塊1210接收結(jié)果R6并舍棄指數(shù)E0。格式塊1210可使指數(shù) 結(jié)果R6不加修改地通過或應(yīng)用恰當(dāng)?shù)母袷交鐚τ谑褂蒙儆?2位的整數(shù)格式, 在32位結(jié)果的恰當(dāng)位置上使有效位對齊。在某些實施例中,格式塊1210還對溢出或 下溢(例如溢至所規(guī)定整數(shù)格式的最大或最小值)的整數(shù)輸出進行鉗制。將經(jīng)過格式化的結(jié)果Rdata作為輸入提供至一最終選擇mux 1212,所述最終選擇 mux 1212在所述結(jié)果Rdata與一個或多個預(yù)定值之間進行選擇來作為路徑410上的最 終結(jié)果OUT。在一個實施例中,預(yù)定值包括呈fpl6及fp32格式的特殊數(shù)NaN及INF、 以及32位的布爾真值(例如Oxl)及假值(例如OxO)。所選最終結(jié)果OUT還提供至 條件碼電路1218,由條件碼電路1218根據(jù)所述結(jié)果產(chǎn)生條件碼COND。由于結(jié)果的
格式部分地取決于操作碼,因而條件碼電路1218接收一指示預(yù)期格式的OPCTL信號。條件碼的實例已在上文進行了說明。在浮點算術(shù)運算期間,指數(shù)飽和邏輯1216接收最終指數(shù)E0并判定是否已出現(xiàn)指 數(shù)溢出(或下溢)。所述判定較佳部分地基于一指示是在使用fpl6格式還是在使用fp32 格式的OPCTL信號。來自指數(shù)飽和邏輯1216的指數(shù)飽和信號Esat提供至最終結(jié)果選 擇邏輯1214。最終結(jié)果選擇邏輯1214響應(yīng)于各控制信號的組合而控制最終選擇mux 1212的操 作,所述控制信號包括OPCTL信號、路徑429 (來自第l級)上的特殊數(shù)信號SPC、 路徑825 (來自第3級)的布爾選擇信號BSEL、及指數(shù)飽和信號Esat。最終結(jié)果的選 擇根據(jù)運算及結(jié)果格式、以及特殊數(shù)或飽和的出現(xiàn)而變化。例如,在浮點算術(shù)運算的情形中,最終結(jié)果選擇邏輯1214較佳使用特殊數(shù)信號 SPC來為涉及到特殊數(shù)(例如將該NaN加到任意數(shù)或乘以任意數(shù)的結(jié)果是NaN,等等) 的算術(shù)構(gòu)建規(guī)則。當(dāng)輸入運算數(shù)(A、 B或C)中的一者為特殊數(shù)時,最終結(jié)果選擇邏 輯1214指令mux 1212優(yōu)先于所述結(jié)果Rdata而選擇對應(yīng)的特殊數(shù)。此外,倘若出現(xiàn) 指數(shù)溢出或下溢狀態(tài),最終結(jié)果選擇邏輯1214還使用飽和信號Esat來選擇特殊數(shù)(例 如INF或0)。在二元測試(FSET、 ISET)運算情形中,最終結(jié)果選擇邏輯1214使用布爾選擇 信號BSEL在布爾真輸出與邏輯假輸出之間進行選擇而忽略數(shù)值結(jié)果Rdata。 J. 運算數(shù)旁通或官通路徑如上文所述,MMAD單元220提供旁通或直通路徑,從而使運算數(shù)不加修改地 傳播過各種電路塊。例如,運算數(shù)A在第1級中直通過左乘法器塊416 (參見圖6A)。 運算數(shù)A可進一步作為結(jié)果R2a繞過第2級中的乘法器樹700 (參見圖7A)、作為結(jié) 果R3a繞過第3級)中的IP加法器804 (參見圖8A、及作為結(jié)果R4a直通過第4級 中的小運算數(shù)路徑908 (參見圖9)。此外,條件0單元920可將結(jié)果R4b強制至0, 以便通過第5級中的加1加法器1002將運算數(shù)A與0相加(參見圖10)。如果隨后 mux 1010選擇Sum結(jié)果,則結(jié)果R5為運算數(shù)A。類似地,運算數(shù)B可繞過第1級中的左乘法器塊416 (參見圖6A)而到達路徑B 并作為結(jié)果R2b繞過第2級中的乘法器樹700 (參見圖7A)。運算數(shù)C可作為結(jié)果Rl 直通過第1級中的逐位邏輯塊434 (參見圖6C),并作為結(jié)果R3b直通過第3級中的 比較邏輯塊436 (參見圖8B)。在該實施例中,不為運算數(shù)B及C提供進一步的旁通 路徑;在替代實施例中,如果需要,可提供進一步的旁路(例如類似于針對運算數(shù)A 所示的旁路)。因此,第III部分中的操作說明涉及旁通或直通至特定級的各種運算數(shù);應(yīng)了解, 沿循旁通或直通過某些級的路徑未必要求在后續(xù)級中繼續(xù)沿循旁通路徑。另外,在一 個級中經(jīng)過修改的值可在下一個級中沿循旁通路徑。當(dāng)在運算期間旁通過特定電路塊 時,可將該塊設(shè)定為非現(xiàn)用狀態(tài),以減小功率消耗,或者使其正常工作,但忽略其輸
出,例如借助選擇mux或其他電路元件。應(yīng)了解,本文所述的MMAD單元只是例示性的,且也可存在變化及修改形式。 本文所述的許多電路塊提供傳統(tǒng)功能,并可使用此項技術(shù)中所習(xí)知的技術(shù)進行構(gòu)建; 相應(yīng)地,在本文中省略了對這些塊的詳細說明??筛淖儗Σ僮麟娐返膮^(qū)塊劃分,并可 組合或改變各區(qū)塊。此外,如在下文中將顯而易見,也可修改或改變管線級的數(shù)量及 對特定級進行的特定電路塊或運算的指配。為特定實施方案進行的電路塊選擇及布置 將取決于所支持的一組運算,且所屬領(lǐng)域的技術(shù)人員將知,并非本文所述的所有塊均 是為所述運算的每一種可能組合所必需的。III. MMAD單元運算的實例MMAD單元220較佳利用上文所述的電路塊以面積有效的方式支持在圖3中所 列的所有運算。相應(yīng)地,MMAD單元220的運算至少在某些方面取決于正在執(zhí)行哪一 運算。以下各部分對使用MMAD單元220執(zhí)行圖3中所列的每一運算進行說明。A.浮點運算MMAD單元220所支持的浮點運算顯示于圖3中的302處。對于算術(shù)運算(FADD、 FMUL、FMAD),使用指數(shù)路徑415來計算指數(shù),同時使用尾數(shù)路徑413來計算尾數(shù)。 其他浮點運算(FCMP、 FMIN、 FMAX及FSET)利用如下性質(zhì)在&32及格式 中,可通過將各個數(shù)視為仿佛其是32位無符號整數(shù)一樣來精確地確定相對量值;這些 運算是使用尾數(shù)路徑413及測試路徑417進行處理。1. FMAD運算FMAD運算計算以fpl6或fp32格式提供至MMAD單元220的運算數(shù)A、B及C 的A+B+C,以與輸入運算數(shù)相同的格式返送回結(jié)果。在第O級中,接收運算數(shù)Ao、 Bo及Q并通過選擇mux 514-516的操作將其不加 修改地穿過格式化塊400傳遞至運算數(shù)A、 B及C (圖5)。在第1級中,左乘法器塊416根據(jù)運算數(shù)A的尾數(shù)部分計算3A,且Booth3對運 算數(shù)B的尾數(shù)部分進行編碼,從而在路徑BB上傳播經(jīng)Booth編碼的尾數(shù)。指數(shù)乘積 塊424接收運算數(shù)A及B的整數(shù)部分(Ea, Eb)并計算Ea+Eb,其中較佳使用偏置量 P在所述和中重建正確的fpl6或fp32指數(shù)偏置量。將運算數(shù)C的尾數(shù)部分遞送至逐位 邏輯塊434,其中mux 636 (圖6C)選擇運算數(shù)C并將其作為結(jié)果Rl傳播至路徑433 上。運算數(shù)C的指數(shù)部分(Ec)在路徑439上路由至指數(shù)路徑415。在第1級期間, 特殊數(shù)檢測塊438判定運算數(shù)A、 B或C中的任一者是否是特殊數(shù)并在路徑429上產(chǎn) 生恰當(dāng)?shù)奶厥鈹?shù)信號SPC以供在第7級中使用。在第2級中,乘法器塊414計算AfB的尾數(shù)部分,并選擇和字段及進位字段作 為結(jié)果R2a及R2b。指數(shù)和塊426在路徑431上接收路徑Eab上的乘積指數(shù)并在路徑 439上接收運算數(shù)C的指數(shù)部分(Ec)。差值單元704 (圖7B)計算Eab-Ec并在路徑 725上傳播結(jié)果Ediff。此外,根據(jù)Eab-Ec的符號,選擇Eab與Ec中的一者作為有效 最終指數(shù)EFE。運算數(shù)C的尾數(shù)(Rl)直通過路徑433。在第3級中,右乘法器塊418將所述和與進位結(jié)果R2a與R2b相加,從而在路徑 421上提供結(jié)果R3a。粘附位邏輯808 (圖8A)可進行操作,但在該實施例中,粘附 位SB3路徑在后續(xù)級中被忽略,因而乘積A*B被截斷而非進行舍入。Rshift計數(shù)塊428 使用路徑725上的Ediff的符號來確定哪一運算數(shù)進行移位以進行浮點加法,并產(chǎn)生對 應(yīng)的SwapCtl信號。Rshift計數(shù)塊428還使用路徑Ediff上的值的量值來確定對所選運 算數(shù)進行移位的位數(shù),并產(chǎn)生恰當(dāng)?shù)腞shAmt信號。比較邏輯436使運算數(shù)C的尾數(shù) 部分作為結(jié)果R3b直通過路徑419。在第4級中,對齊塊420接收乘積A*B的尾數(shù)作為結(jié)果R3a并接收運算數(shù)C的 尾數(shù)作為結(jié)果R3b。根據(jù)來自Rshift計數(shù)塊804的SwapCtl信號,交換mux 904、 906 (圖9)將所述運算數(shù)中的一者指引至小運算數(shù)路徑908內(nèi)并將另一者指引至大運算 數(shù)路徑910內(nèi)。右移電路912使小運算數(shù)右移,其中粘附位邏輯914根據(jù)所移出的位 來產(chǎn)生粘附位SB4。將所得到的對齊的加數(shù)R4a、 R4b提供于路徑909、 911上。指數(shù) 遞增塊430 (圖4)接收乘積AfB的尾數(shù)(R3a),并如上文所述使有效最終指數(shù)EFE 遞增或不遞增。在路徑443上傳播結(jié)果EFE2。在第5級中,小數(shù)和塊422接收對齊的加數(shù)R4a及R4b。加1加法器1002 (圖 10)產(chǎn)生Sum (和)及Sum+l (和+l)輸出,且反相器1006提供反相的Sum。舍入 邏輯1008在路徑SB4上接收粘附位,并根據(jù)所述粘附位、所選舍入模式、及在加1 加法器1002中計算出的和的符號來控制選擇mux 1010在Sum與Sum+1輸出之間進 行選擇。所得到的尾數(shù)R5在路徑1011上進行傳播。在第6級中,正規(guī)化塊423將尾數(shù)R5正規(guī)化。優(yōu)先權(quán)編碼器1108 (圖11)檢測 前導(dǎo)1的位置,并將該數(shù)據(jù)提供至移位控制單元1110,由移位控制單元1110產(chǎn)生對 應(yīng)的LshAmt信號。左移塊1112使尾數(shù)左移并將結(jié)果R6傳播至路徑425上。指數(shù)遞 減塊432 (圖4)相應(yīng)地下調(diào)有效最終指數(shù)EFE2并將所得到的最終指數(shù)E0傳播至路 徑427上。在第7級中,輸出控制電路440產(chǎn)生最終結(jié)果。格式塊1210 (圖12)接收指數(shù) E0及尾數(shù)R6,并以正確格式(例如fp32或fp16)在Rdata上產(chǎn)生正規(guī)數(shù)。飽和邏輯 1216根據(jù)所規(guī)定格式來評價指數(shù)EO,檢測任何溢出,并產(chǎn)生恰當(dāng)?shù)娘柡托盘朎sat。 最終結(jié)果選擇邏輯1214接收飽和信號Esat以及特殊數(shù)信號SPC。對于該運算而言, 最終結(jié)果選擇邏輯1214指引mux 1212選擇結(jié)果Rdata,除非Esat或SPC信號指示最 終結(jié)果應(yīng)為特殊數(shù)。在該情形中,選擇恰當(dāng)?shù)奶厥鈹?shù)作為最終結(jié)果。如上文所述,對 于其中所述輸入運算數(shù)中的一者為特殊數(shù)的情形,最終結(jié)果選擇邏輯1214可執(zhí)行與正EE 754相符的規(guī)則(或其他規(guī)則)。 2.FMUL及FADD運算對于浮點乘法(FMUL), MMAD單元220接收被乘數(shù)作為運算數(shù)A并接收乘數(shù) 作為運算數(shù)B;較佳為運算數(shù)C提供值O.O (浮點O)。然后,執(zhí)行上文所述的FMAD 運算,以產(chǎn)生乘積A*B(+0.0),只是在第4級中,粘附位914(圖9)較佳使來自第3 級的粘附位SB3直通過,從而能夠?qū)Τ朔e進行舍入。在某些實施例中,可借助第4級 中的條件0塊920 (圖9)將運算數(shù)C強制至O,以便可為運算數(shù)C提供任意值。對于浮點加法(FADD), MMAD單元220接收加數(shù)作為運算數(shù)A及C。在一個 實施例中,通過將運算數(shù)B設(shè)定為1.0以計算(A*1.0) +0來實施1^八0運算;可例 如通過將浮點1.0作為運算數(shù)B提供至MMAD單元220或者通過操作左乘法器選擇 mux 616(圖6A)以選擇來自寄存器620的經(jīng)Booth3編碼的1.0,來實施將運算數(shù)B 設(shè)定為1.0。在FADD的一替代實施方案中,將運算數(shù)B設(shè)定為O.O (例如通過將浮點0作為 輸入運算數(shù)提供至MMAD單元220),并將運算數(shù)A及B旁通至第3級,其中可由右 乘法器塊418中的IP加法器804 (圖8A)來計算和A+0.0,或者在一替代實施例中, 可將運算數(shù)A作為結(jié)果R3a進一步繞過IP加法器804。各后續(xù)級如對于FMAD運算 一樣進行操作來計算A+C。3.FMIN及FMAX運算浮點最大(FMIN)及最小(FMIN)運算返送回其兩個運算數(shù)中較大或較小的一 者。如上文所述,這些及其他基于比較的運算是使用尾數(shù)路徑413及測試路徑417的 組件進行處理。MMAD單元220接收運算數(shù)A及B以對其實施FMAX或FMIN運算; 運算數(shù)C可設(shè)定為任意值。對于FMIN及FMAX運算,將運算數(shù)B在第O級中反相(反相成 B),且使運算 數(shù)A及 B的所有32個位分別作為結(jié)果R2a及R2b直通至第3級。在第3級中,IP 加法器804 (圖8A)計算和A+ B (即A-B)。將該結(jié)果RP2的兩個MSB提供至比較 邏輯塊436。應(yīng)注意,盡管運算數(shù)A及B為浮點數(shù),然而由于fp32及fpl6格式的定 義方式,為便于進行比較運算,可仿佛其為整數(shù)一樣對其進行相減。在比較邏輯塊436中,AB符號電路820 (圖8B)在路徑RP2上接收信號并產(chǎn)生 恰當(dāng)?shù)姆栃盘朣ab。 二元測試邏輯822如上文所述作出選擇對于FMAX,如果 (A+~B)是負的(即如果B大于A),則選擇B,相反則選擇A;對于FMIN,如果 (A+~B)是負的,則選擇A,相反則選擇A。應(yīng)注意,未對A-B的情形進行特殊對 待,因為FMIN或FMAX選擇這兩個運算數(shù)中的任一個均將得到正確的結(jié)果。二元測 試邏輯822產(chǎn)生一恰當(dāng)?shù)腃SEL信號,所述CSEL信號指令mux 824將R2a (運算數(shù) A)及R2b (運算數(shù) B)中恰當(dāng)?shù)囊徽咦鳛榻Y(jié)果R3b傳播。在第4級中,小的交換mux 904(圖9)選擇將結(jié)果R3b傳播至小運算數(shù)路徑908, 同時大的交換mux 906選擇結(jié)果R3a—由于在第3級中的運算,其可為A-B。 Rshift 計數(shù)電路428可用于產(chǎn)生SwapCtl信號的恰當(dāng)狀態(tài),以響應(yīng)于OPCTL信號而形成該 結(jié)果,而無論指數(shù)如何。在大運算數(shù)路徑910中,操作條件0塊914以將結(jié)果R4b清 零。在小運算數(shù)路徑908中,使結(jié)果R3b作為結(jié)果R4a直通過。如果在第3級中選擇 運算數(shù) B (其在第0級中反相),則可使用條件反相電路918使結(jié)果R4a再反相。為 檢測此種情形,條件反相電路918可從路徑827接收CSEL信號(參見圖8B)。
在第5級中,加1加法器1002 (圖10)將R4a (A或B)與R4b (0)相加。mux 1010選擇Sum結(jié)果(即所選運算數(shù)A或B)作為結(jié)果R5。在第6級中,移位控制電路1110 (圖11)通過將LshAmt設(shè)定為0來對OPCTL 信號作出響應(yīng),以使結(jié)果R5作為結(jié)果R6不加修改地傳播。在第7級中,格式塊1210 (圖12)可提供未經(jīng)改動的結(jié)果R6作為結(jié)果Rdata。 倘若A或B為特殊數(shù),則最終結(jié)果選擇邏輯1214可操作mux 1212,以使用恰當(dāng)?shù)奶?殊數(shù)來覆蓋結(jié)果Rdata。例如,如果A或B是NaN,則可將FMAX或FMIN結(jié)果強制 至NaN。4. FSET運算對于二元測試(FSET)運算,MMAD單元220接收運算數(shù)A及B;可提供任意 值作為運算數(shù)A。如同上文所述的FMIN及FMAX運算一樣,在第0級處將運算數(shù)B 反相,并將運算數(shù)A及 B旁通至第3級,在第3級中使用PP加法器802 (圖8A)對 其進行相減,將MSBRP2提供至比較邏輯塊436。在第1級中,在使運算數(shù)A及 B直通的同時,逐位邏輯塊434操作,其中mux 636 (圖6C)選擇X0R2單元634的結(jié)果作為結(jié)果Rl進行傳播。在第3級中,AB符號電路820 (圖8B)接收信號RP2并產(chǎn)生符號信號Sab。 二 元測試邏輯822接收Sab信號、X0R2結(jié)果(Rl)、特殊數(shù)信號SPC、及OPCTL信號, 所述OPCTL信號規(guī)定要實施哪一二元測試。二元測試邏輯822如上文所述執(zhí)行其測 試(參見第II.E部分),并將布爾結(jié)果BSEL傳播至路徑825上。布爾結(jié)果BSEL在路徑825上傳播至第7級。第4至6級中的各種電路塊可依據(jù) 碰巧出現(xiàn)于恰當(dāng)信號路徑中的任何信號進行操作,或者可將其禁用。在第4-6級中所 執(zhí)行的任何運算的結(jié)果均將被輸出控制塊440忽略。在第7級中,最終結(jié)果選擇邏輯1214接收布爾結(jié)果BSEL并操作最終選擇mux 1212以相應(yīng)地在布爾真(例如Oxl)與假(例如0x0)值之間進行選擇。結(jié)果BSEL 正確地反映所述運算數(shù)為特殊數(shù),且最終結(jié)果選擇邏輯1214可在FSET運算期間忽略 特殊數(shù)信號SPC。5. FCMP運算對于三元條件選擇運算(FCMP), MMAD單元接收運算數(shù)A、 B及C。運算數(shù)A 及B分別作為結(jié)果R2a及R2b直通至第3級。運算數(shù)C作為結(jié)果Rl直通至第3級。在第3級中,二元測試邏輯822 (圖8B)接收運算數(shù)C (Rl)及特殊數(shù)信號SPC。 如上文所述(參見第II.E部分),二元測試邏輯822使用這些信號來判定是否滿足條件 C>0。如果C〉0,則二元測試邏輯822指令mux 824選擇運算數(shù)A (R2a),否則選 擇運算數(shù)B (R2b)。由于NaN既不大于也不等于O,因而當(dāng)運算數(shù)C為NaN時,將 選擇運算數(shù)B。所選的值以上文針對FMIN及FMAX運算所述的方式作為結(jié)果R3b傳播至第7 級。(結(jié)果R3a可為來自IP加法器804 (圖8A)的運算數(shù)A及B的和,或者可選擇
運算數(shù)A作為結(jié)果R3a;在這兩種情形中,結(jié)果R3a均不影響最終結(jié)果。)在第7級 中,最終結(jié)果選擇邏輯1214較佳檢測其中運算數(shù)C是NaN的情形并以NaN值來覆蓋 所傳播的結(jié)果。B.整數(shù)算術(shù)整數(shù)運算數(shù)不包括指數(shù)位。在本文所使用的格式中,使用2補數(shù)來表示整數(shù);所 屬領(lǐng)域的一般技術(shù)人員將知,也可替代為其他表示形式。如下文所述,整數(shù)算術(shù)運算 大體類似于其浮點對應(yīng)形式,只是不使用指數(shù)邏輯。1. IMAD對于整數(shù)MAD(IMAD)運算,MMAD單元220使用尾數(shù)路徑413來計算A*B+C。 盡管某些整數(shù)格式可不帶符號,然而MMAD單元220較佳將所有格式均視為帶符號 的32位2補數(shù)表示形式;無論實際格式如何,此均會內(nèi)在地得到正確結(jié)果。在第0級中,如果需要,則通過對8位輸入格式使用塊504-506 (圖5)或者使用 塊508-510 (對16位格式),將運算數(shù)A、 B及C擴展至32位。在第1級中,左乘法器塊416計算3A及運算數(shù)B的Booth3編碼。逐位邏輯塊 434將運算數(shù)C作為結(jié)果Rl進行傳播。在第2級中,乘法器塊414計算A*B并選擇所述乘積的和字段及進位字段作為 結(jié)果R2a及R2b。在第3級中,右乘法器塊418使用IP加法器804 (圖8A)將所述和字段與進位 字段相加。整數(shù)mux810選擇上部32位,且選擇mux 812選擇此作為結(jié)果R3a。比較 邏輯塊436將運算數(shù)C (Rl)作為結(jié)果R3b進行傳播。在第4級中,對齊單元420接收R3a (乘積A+B)及R3b (運算數(shù)C)。由于整數(shù) 加法不要求尾數(shù)對齊,因而Rshift計數(shù)電路428可對所有IMAD運算以一致的狀態(tài)產(chǎn) 生SwapCtl信號,從而始終將例如R3a (R3b)指引至小(大)運算數(shù)路徑908 (910) (圖9),或者反之。另一選擇為,如果所述運算數(shù)中的一者為負的,則可將該運算數(shù) 路由至小運算數(shù)路徑908并由條件反相器918進行反相。^!附位邏輯914操作以在路 徑915上產(chǎn)生粘附位SB4。在第5級中,加1加法器1002 (圖IO)將值R4a及R4b (表示AfB及C)相力口, 且舍入邏輯1008根據(jù)所接收運算數(shù)的符號及粘附位SB4來選擇Sum、 Sum+1及 Sum 輸出中恰當(dāng)?shù)囊徽?。將結(jié)果R5傳播至路徑1011上。在第6級上,將結(jié)果R5不加修改地直通過正規(guī)化塊423。在第7級中,格式化塊1210接收結(jié)果R6,并在需要時將其格式化以與輸入運算 數(shù)格式相匹配。格式化塊1210較佳還檢測任何溢出并將結(jié)果值Rdata鉗制至輸入格式 的最大允許值。最終結(jié)果選擇邏輯1214選擇路徑Rdata上的值作為最終結(jié)果OUT。2. 乘法(IMUL)及加法(IADD)類似于上文所述的FMUL及FADD運算,整數(shù)乘法(IMUL)及加法(IADD) 運算利用MAD管線。對于IMAD運算,MMAD單元220接收被乘數(shù)作為運算數(shù)A
并接收乘數(shù)作為運算數(shù)B;較佳為運算數(shù)C提供值O (整數(shù)0)。然后,執(zhí)行上文所述的IMAD運算,以產(chǎn)生乘積AtB(+0),只是在第4級中,粘附位邏輯914 (圖9)較佳 使粘附位SB3直通過,從而能夠?qū)Τ朔e進行舍入。在某些實施例中,可借助第4級中 的條件0塊920 (圖9)將運算數(shù)C強制為O,從而可提供任意值作為運算數(shù)C。對于整數(shù)加法(IADD), MMAD單元220接收加數(shù)作為運算數(shù)A及C。在一個 實施例中,通過將運算數(shù)B設(shè)定為1來實施IMAD運算,以計算(A*l) +C;可例如 通過將整數(shù)1作為運算數(shù)B提供至MMAD單元220或通過操作左乘法器選擇mux 616 (圖6A)以選擇例如來自寄存器620或不同寄存器的經(jīng)Booth3編碼的整數(shù)l,來實 施將運算數(shù)B設(shè)定為1。在IADD的一替代實施方案中,運算數(shù)B設(shè)定為O (例如通過將整數(shù)O作為輸入 運算數(shù)提供至MMAD單元220),并將運算數(shù)A及B旁通至第3級,其中可由IP加 法器804 (圖8A)在右乘法器塊802中計算和A+0,或者在一不同的實施例中,可將 運算數(shù)A作為結(jié)果R3a繞過IP加法器804。各后續(xù)級如在IMAD運算中一樣進行操 作來計算A+C。3.絕對差之和ISAD對于整數(shù),支持絕對差之和(ISAD)運算。該運算計算IA-BI+C。在第0級中, 接收運算數(shù)A、 B及C,并由反相器519使運算數(shù)B反相(圖5)以得到運算數(shù) B。 然后使運算數(shù)直通過第1及第2級。在第3級中,右乘法器塊418通過在IP加法器804 (圖8A)中對A及 B相加來 計算A-B,并傳播結(jié)果R3a。在比較邏輯塊436 (圖8B)中,AB符號電路820檢測 A-B的符號,并產(chǎn)生對應(yīng)的符號信號Sab,所述符號信號Sab在路徑821上轉(zhuǎn)接至第4 及第5級。二進制測試邏輯822控制選擇mux 824以將運算數(shù)C作為結(jié)果R3b進行傳 播。在第4級中,求解A-B的絕對值。具體而言,用于ISAD運算的SwapCtl信號控 制交換mux 904及906 (圖9),從而將結(jié)果R3a (即A-B)路由至小運算數(shù)路徑908 并將結(jié)果R3b (即運算數(shù)C)路由至大運算數(shù)路徑910。小運算數(shù)路徑908上的條件 反相器918從AB符號電路820接收Sab信號,且如果符號為負,則將運算數(shù)(A-B) 反相。因此,結(jié)果R4a對應(yīng)于非負整數(shù),而運算數(shù)C (其可為正整數(shù)或負整數(shù))作為 結(jié)果R4b傳播。在第5級中,加1加法器1002對來自路徑R4a及R4b的值相加。根據(jù)Sab信號, 舍入邏輯1008選擇Sum或Sum+l輸出,以便以2補數(shù)形式提供正確的答案。具體而 言,如果A-B不是負的,則結(jié)果應(yīng)為(A-B) +C—其為Sum輸出。如果A-B是負的, 則結(jié)果是C-(A-B),其以2補數(shù)形式表示為C+ (A-B)+1—其是因在第4級中進行條件 反相而得到的Sum+l輸出。在第6及7級中,如在其他整數(shù)算術(shù)運算中一樣,結(jié)果R5直通地傳播。在某些 實施例中,第7級的格式化塊1214 (圖12)如上文所述檢測并處理溢出。 4. 比較運算IMIN, Max, ISET如上文所述,可通過將運算數(shù)作為整數(shù)對待來執(zhí)行浮點比較FMIN、FMAX、FSET。 A.3 and ffi.A.4.相應(yīng)地,整數(shù)比較運算IMIN、 IMAX及ISET的實施方式完全類似于上 文在第III.A.3及第III.A.4部分中所述的浮點比較的實施方式。5. 條件選擇運算ICMP整數(shù)條件選擇運算(ICMP)也完全類似于其浮點對應(yīng)運算,且該運算在MMAD 單元220中的處理與上文在第III.A.5部分中所述的FCMP的實施方式相同。 C 逐位邏輯運算除整數(shù)及浮點算術(shù)功能外,MMAD單元220還支持各種逐位邏輯運算(在圖3 中列于306處),所述逐位邏輯運算操縱其運算數(shù)的各個位,而無論這些位可能代表什 么。這些運算包括逐位布爾運算AND、 OR及XOR、以及移位運算SHL (左移)及 SHR (右移)。1. 布爾運算AND, OR, XOR布爾運算主要由第1級中的逐位邏輯塊434進行處理。對于這些運算,MMAD 單元接收兩個32位運算數(shù)A及B (由于運算數(shù)C被忽略,因而其可設(shè)定為任意值) 及一指示所需布爾運算的操作碼。這些運算數(shù)直通過第o級。在第1級中,逐位邏輯塊434接收運算數(shù)A及B,并使用邏輯電路630、 632、 634 (圖6C)對運算數(shù)A及B并行地執(zhí)行逐位AND、 OR及XOR運算。選擇mux 636 接收一指示請求哪一布爾運算的OPCTL信號,并將對應(yīng)結(jié)果作為Rl進行傳播。運算 數(shù)A及B可直通過第1級中的左乘法器塊416及第2級中的乘法器塊414。在第3級中,比較邏輯塊436將布爾運算結(jié)果Rl作為結(jié)果R3b進行傳播。右乘 法器塊418可對A與B相加,或者只是將A作為結(jié)果R3a進行傳播;在這兩種情形 中,結(jié)果R3a均將被舍棄。在第4級中,交換mux 904及906 (圖9)將結(jié)果R3b指引至小運算數(shù)路徑908 上并將結(jié)果R3a指引至大運算數(shù)路徑910上。在小運算數(shù)路徑908上,使結(jié)果R3b (所 需結(jié)果)不加修改地作為結(jié)果R4a進行傳播。在大運算數(shù)路徑910上,條件0電路920 響應(yīng)于OPCTL信號而將結(jié)果R4b清零。在第5級中,加1加法器1002 (圖IO)將R4b (0)加至R4a (布爾運算結(jié)果), 且mux 1010選擇Sum結(jié)果作為結(jié)果R5。在第6級中,不對結(jié)果R6應(yīng)用移位。在第 7級中,將結(jié)果R6作為最終結(jié)果不作任何進一步修改地進行傳播;這些運算不存在溢 出或其他特殊狀態(tài)。2. 移位運算SHL, SHRMMAD單元220還實施移位運算,以將位字段左移(SHL)或右移(SHR)。對 于這兩種運算,將所要移位的32位字段作為運算數(shù)A提供至MMAD單元220,并較 佳通過將八位整數(shù)值插入運算數(shù)B的^32指數(shù)位位置中而將移位量提供至MMAD單 元220。由于大于31的移位量沒有意義,因而八位即足以載送移位量數(shù)據(jù)。在這些運 算中,運算數(shù)B的符號及小數(shù)位被忽略,且因此可設(shè)定為任意值,運算數(shù)C也可如此。SHL運算利用第6級中的左移電路1112 (圖ll)。如上文在第II.J部分中所述, 運算數(shù)A直通至第5級的輸出R5。指示移位量的運算數(shù)B的整數(shù)部分Eb也并行地在 路徑443上直通過指數(shù)路徑415傳遞至結(jié)果EFE2。更具體而言,在第1級中,通過選 擇mux 628 (圖6B)的操作使移位量Eb旁通過指數(shù)乘積塊424。在第2級中,差值塊 714 (圖7B)通過指令mux 716選擇輸入Eab (其為Eb)作為輸出EFE而對OPCTL 信號作出響應(yīng)。指數(shù)遞增塊902使EFE信號不加修改地直通至路徑443。在第6級中,移位控制塊1110(圖11 )在路徑443上接收移位量Eb作為信號EFE2 , 并產(chǎn)生一反應(yīng)該量的LshAmt信號。在某些實施例中,如果Eb過大,則移位控制塊 1110可將LshAmt信號鉗制為例如31位。響應(yīng)于LshAmt信號,左移電路1112將運 算數(shù)A (結(jié)果R5)左移恰當(dāng)?shù)奈粩?shù),較佳根據(jù)需要插入后隨的0。將經(jīng)左移的結(jié)果R6 傳播至路徑425上。在某些實施例中,指數(shù)遞增塊432將移位量信號EFE2作為最終 指數(shù)E0不加修改地進行傳播。在第7級中,較佳不加修改地提供結(jié)果R6作為最終結(jié)果OUT。在某些實施例中, 第7級還包括在移位量超過31時將結(jié)果鉗制至0的邏輯;該邏輯可并入飽和邏輯1216 內(nèi),飽和邏輯1216可接收移位量作為最終指數(shù)EO。SHR運算利用第4級(圖9)中的右移電路912。 SHR運算可實施為既支持其中 在每一新MSB中插入0的邏輯移位模式,也支持其中將符號位擴展至新MSB中的算 術(shù)移位模式;操作碼較佳為每一SHR運算選擇一種模式。如上文所述,提供所要移位的運算數(shù)作為運算數(shù)A,并使用fp32運算數(shù)B的指 數(shù)位來提供移位量。如上文在第II.J部分中所述,使運算數(shù)A直通過第3級的輸出(結(jié) 果R3a)。移位量Eb并行地傳播至Rshift計數(shù)電路804。更具體而言,在第1級中,通過選 擇mux 628 (圖6B)的操作使移位量Eb旁通過指數(shù)乘積塊424而到達路徑431。在第 2級中,差值塊714 (圖7B)指令mux 716選擇Eab值作為差值Ediff??珊雎訣FE 信號,并可根據(jù)需要選擇任一候選值;在某些實施例中,提供Eab值作為EFE值。在第3級中,Rshift計數(shù)電路428產(chǎn)生對應(yīng)于Ediff信號(即Eb)的RshAmt信 號。可將RshAmt信號鉗制至例如31位。在某些實施例中,Rshift計數(shù)電路408根據(jù) 其所接收OPCTL信號來判定所請求的是邏輯移位還是算術(shù)移位,并在RshAmt信號中 包含對應(yīng)的"移位類型"位。在第4級中,小的交換mux904 (圖9)將運算數(shù)A指引至小運算數(shù)路徑908上。 在大運算數(shù)路徑910上,由條件0電路920將結(jié)果R4b清零。在小運算數(shù)路徑908上, 右移電路912接收RshAmt信號,并將運算數(shù)A右移規(guī)定的位數(shù)。在某些實施例中, 右移電路912檢測RshAmt信號中的移位類型位(邏輯移位或算術(shù)移位),并在將運算 數(shù)右移時相應(yīng)地在新MSB中插入0或1。在第5級中,由加1加法器1002 (圖IO)將結(jié)果R4a (經(jīng)右移的運算數(shù)A)加至 R4b (0),并選擇其作為結(jié)果R5。在第6級中,結(jié)果R5傳播過正規(guī)化塊423而不進 行進一步移位。在第7級中,較佳將結(jié)果R6不加修改地用作最終結(jié)果OUT。在某些 實施例中,第7級還包括用于在移位量Eb超過31時將結(jié)果鉗制至0的邏輯;該邏輯 可并入飽和邏輯1216中,飽和邏輯可如上文針對左移運算所述接收Eb。 D.格式轉(zhuǎn)換運算MMAD單元220還支持各種整數(shù)格式與浮點格式之間的轉(zhuǎn)換。在某些實施例中, 格式轉(zhuǎn)換不與上文所述的算術(shù)運算同時實施,但可將某些其他運算與格式轉(zhuǎn)換相結(jié)合。 例如,可將各種轉(zhuǎn)換運算與以^進行換算(其中N為整數(shù))及/或與確定運算數(shù)的絕 對值或求反相結(jié)合。下文將說明各種浮點格式之間及各種整數(shù)格式之間的轉(zhuǎn)換。1.浮點至浮點轉(zhuǎn)換(F2F)所支持的浮點至浮點(F2F)轉(zhuǎn)換運算包括從fpl6直接轉(zhuǎn)換至fp32,或者反之; 這些轉(zhuǎn)換還可包含絕對值、求反、及/或2^換算。另外,還支持從fpl6至fpl6及從fp32 至fp32的整數(shù)-舍入轉(zhuǎn)換。在所有情形中,均將所要轉(zhuǎn)換的數(shù)作為運算數(shù)A提供至 MMAD單元220,且當(dāng)要進行^換算時,使用f^32的運算數(shù)B的八個指數(shù)位Eb來 提供換算因數(shù)N。對于印16及fp32格式,提供符號位,并可通過操縱符號位來實施 絕對值及求反。這些操縱方式在所屬領(lǐng)域中眾所周知,且不再加以贅述。從fol6至fo32的直接轉(zhuǎn)換使用第0級中的上轉(zhuǎn)換器512 (圖5)來產(chǎn)生運算數(shù)A 的fp32表示形式。上轉(zhuǎn)換器512調(diào)節(jié)指數(shù)偏置量以對應(yīng)于fp32 (例如通過加上 127-15=112)并對小數(shù)附加13個后隨的0。只要運算數(shù)A不是fpl6非正規(guī)數(shù),該轉(zhuǎn) 換便是正確的。在第1級中,特殊數(shù)檢測塊414判定運算數(shù)A是否是fpl6非正規(guī)數(shù)、 INF、或NaN,并在路徑SPC上產(chǎn)生恰當(dāng)?shù)男盘枴H缟衔脑诘贗I.J部分中所述,運算數(shù)A的尾數(shù)部分直通至第5級的輸出(結(jié)果 R5)。運算數(shù)A及B的指數(shù)部分Ea、 Eb分別遞送至第1級中的指數(shù)乘積塊424;在此 種情形中,指數(shù)Eb是指數(shù)換算因數(shù)N。在指數(shù)乘積塊424中對指數(shù)Ea與Eb相加, 從而實現(xiàn)2W換算,其中將結(jié)果Eab傳播至路徑431。在第2級中,指數(shù)和塊426將結(jié) 果Eab作為有效最終指數(shù)EFE進行傳播。在第3級中,Rshift計數(shù)電路428通過產(chǎn)生 進行0移位的信號、忽略可存在于路徑725上的任何Ediff信號而對OPCTL信號作出 響應(yīng)。在第4級中,指數(shù)遞增塊430將指數(shù)EFE不加修改地轉(zhuǎn)接至路徑433上(作為 EFE2)。第6級用于處理fpl6非正規(guī)數(shù),所有fpl6非正規(guī)數(shù)均可表示為fp32形式的正規(guī) 數(shù)。如上文所述,將非正規(guī)數(shù)解釋為具有最小所允許指數(shù)且在尾數(shù)中不具有隱含的整 數(shù)1 。在第6級中,優(yōu)先權(quán)編碼器1108 (圖11)確定前導(dǎo)1在運算數(shù)A的尾數(shù)部分中 的位置。如果特殊數(shù)信號SPC指示運算數(shù)A是fpl6非正規(guī)數(shù),則移位控制電路1110 根據(jù)前導(dǎo)l的位置產(chǎn)生LshAmt信號;否則,移位控制電路1110產(chǎn)生對應(yīng)于0移位的 LshAmt信號。左移電路1112對尾數(shù)R5應(yīng)用規(guī)定的移位,從而產(chǎn)生正規(guī)化尾數(shù)R6。 指數(shù)遞減塊432 (圖4)使指數(shù)EFE2遞減對應(yīng)的量。
第7級用于處理其中輸入是fp16 INF或NaN的情形。具體而言,如果特殊數(shù)信 號SPC指示此種值,則最終結(jié)果選擇邏輯1214 (圖12)根據(jù)需要選擇典范fp32 INF 或NaN值。此外,由于2W換算可使指數(shù)飽和,因而飽和邏輯1216較佳還用于檢測此 種飽和并使得選擇恰當(dāng)?shù)奶厥鈹?shù)(例如INF)作為最終結(jié)果。從fo32至fol6的官接轉(zhuǎn)換涉及到將指數(shù)從八位減小到五位并將有效數(shù)字從23位 減小至10位??筛鶕?jù)需要對有效數(shù)字進行舍入或截斷。此種舍入利用第4級中的對齊 單元420 (圖9)及第5級中的舍入邏輯1008 (圖IO)。如上文在第II.J部分中所述, 運算數(shù)A的尾數(shù)部分(較佳包含顯式的前導(dǎo)l)直通至第3級的輸出(結(jié)果R3a)。在第1級中,運算數(shù)A的指數(shù)部分Ea直通過指數(shù)乘積塊424;可如上文所述通 過加上運算數(shù)B的指數(shù)部分Eb來應(yīng)用2W換算。使結(jié)果Eab在路徑431上傳播。在第2級中,指數(shù)和塊426例如通過使用差值電路714 (圖7B)減去112,將指 數(shù)重新偏置至fpl6偏置量,并提供結(jié)果作為有效最終指數(shù)EFE。在其他實施例中,也 可使用偏置量P及指數(shù)乘積塊424 (圖6B)的加法器624來實施重新偏置。指數(shù)和塊 426較佳還檢測fpl6指數(shù)溢出(INF或NaN)及下溢(非正規(guī)數(shù))。對于溢出情況, 將指數(shù)鉗制至其最大值。對于下溢情況,指數(shù)和塊426對差值Ediff進行設(shè)定以指示下 溢量(例如112-Eab),并將有效最終指數(shù)EFE設(shè)定為0 (最小指數(shù))。對于除下溢以 外的其他情況,可將差值Ediff設(shè)定為0。在第3級中,Rshift計數(shù)電路428使用Ediff信號來確定所要應(yīng)用的右移量并產(chǎn)生 適合的RshAmt信號。對于fp32至&16轉(zhuǎn)換,缺省的移位是移13位(從而使結(jié)果R4a 的11個LSB載送fpl6尾數(shù))。將差值Ediff加至該缺省值,以使^16非正規(guī)數(shù)可最多 右移24位。移位量多于24位會得到一 fpl6 0;相應(yīng)地,Rshift計數(shù)電路804可在該運 算中將移位量鉗制至24位。在第4級中,交換mux 904 (圖9)將運算數(shù)A的尾數(shù)指引至小運算數(shù)路徑908 上。在大運算數(shù)路徑910上,由條件0單元920將結(jié)果R4b清零。在小運算數(shù)路徑908 上,右移電路912根據(jù)RshAmt信號對尾數(shù)進行右移,且粘附位邏輯914較佳產(chǎn)生粘 附位SB4。在第5級中,由加1加法器1002 (圖10)將結(jié)果R4a (運算數(shù)A的尾數(shù))加至 R4b (0)。舍入邏輯1008接收粘附位SB4并根據(jù)所需舍入模式在Sum與Sum+l輸出 之間進行選擇;如同其他運算一樣,可選擇任何IEEE舍入模式。舍入邏輯1008所選 的結(jié)果R5a傳播至路徑1011上。在第6級中,正規(guī)化塊423使結(jié)果R5不加修改地直通過。在第7級中,格式塊1210 (圖12)使用最終指數(shù)E0及尾數(shù)R6將fi)16結(jié)果格式 化。指數(shù)飽和邏輯1216檢測fpl6指數(shù)溢出,且最終結(jié)果選擇邏輯1214通過以fpl6 INF 覆蓋所述結(jié)果而對此種溢出作出響應(yīng)。此外,由第1級中的特殊數(shù)檢測塊438檢測到 的fp32 INF或NaN輸入可使fpl6 INF或NaN成為輸出。F2F整數(shù)舍入運算是針對其中輸入格式與輸出格式相同(fp32至fp32或fpl6至fpl6)的情形來實施。整數(shù)舍入會消除由運算數(shù)所表示的數(shù)的小數(shù)部分,且舍入可使用任一種標(biāo)準IEEE舍入模式(頂限、底限、截取及最近)。如同fp32至fp6轉(zhuǎn)換一樣, MMAD單元220利用第4級的右移電路912及第5級的舍入邏輯1008來支持整數(shù)舍 入。可將以2^進行換算與該運算相結(jié)合。如上文在第II.J部分中所述,運算數(shù)A的尾數(shù)直通至第3級的輸出(結(jié)果R3a)。 為支持整數(shù)舍入,使用第1及2級中的指數(shù)邏輯來確定二元點的位置。在第l級中, 除應(yīng)用任何2W換算之外,指數(shù)乘積塊424 (參見圖6B)還減去偏置量p (例如對于fp32 為127,或者對于fpl6為15)并提供結(jié)果作為Eab。如果結(jié)果Eab小于O,則該數(shù)為 純小數(shù)。在第2級中,指數(shù)和塊426將結(jié)果Eab提供至路徑725 (作為信號Ediff)及 723 (作為信號EFE)。在第3級中,Rshift計數(shù)電路428根據(jù)信號Ediff來確定右移量RshAmt。較佳將 移位量選擇成使得對于經(jīng)移位的尾數(shù),真正的二元點恰好位于LSB的右側(cè)。例如,對 于fp32輸入,當(dāng)Eab。3時,移位量將為(23-Eab)位,而當(dāng)Eab> 23時,移位量將 為0位。Rshift計數(shù)電路428比較該量,并向?qū)R塊420提供恰當(dāng)?shù)腞shAmt信號。在第4級中,小的交換mux904 (圖9)將運算數(shù)A指引至小運算數(shù)路徑908上; 在大運算數(shù)路徑910上,條件0電路920將結(jié)果R4b清零。在小運算數(shù)路徑908上, 右移電路912根據(jù)RshAmt信號實施右移,且粘附位邏輯914產(chǎn)生粘附位SB4。在第5級中,加1加法器1002 (圖10)對結(jié)果R4a (運算數(shù)A的尾數(shù))與R4b (0)相加,且舍入邏輯1008根據(jù)舍入模式與路徑504上的粘附位在Sum與Sum+1 結(jié)果之間進行選擇。在第6級中,將結(jié)果R5重新正規(guī)化回至輸入格式。優(yōu)先權(quán)編碼器1108 (圖ll) 檢測前導(dǎo)l的位置,且移位控制電路1110產(chǎn)生對應(yīng)的LshAmt信號,所述LshAmt信 號指令左移電路1112將尾數(shù)左移恰當(dāng)?shù)奈粩?shù),并插入后隨的O。指數(shù)遞減塊432 (圖 4)較佳配置成忽略LshAmt信號,并不加修改地提供指數(shù)EFE2作為最終指數(shù)E0。在第7級中,將結(jié)果格式化并作為輸出進行傳播。較佳使指數(shù)飽和邏輯1216運 行,因為2^換算可能會引起飽和??蓹z測特殊數(shù)輸入(例如INF或NaN),并如上文 所述返送回對應(yīng)的特殊數(shù)結(jié)果。2.浮點至整數(shù)轉(zhuǎn)換(F2I)類似于上文所述的整數(shù)舍入F2F轉(zhuǎn)換,在MMAD單元220中實施浮點至整數(shù)轉(zhuǎn) 換(F21)。將所要轉(zhuǎn)換的浮點數(shù)以fpl6或fp32格式作為運算數(shù)A提供至MMAD單元 220??扇缟衔乃鐾ㄟ^在fb32運算數(shù)B的指數(shù)位中提供換算參數(shù)AT來實施以2進行 的換算。在一個實施例中,目標(biāo)整數(shù)格式可為16位或32位,帶符號或不帶符號,其 中所述目標(biāo)格式是通過操作碼加以規(guī)定。在第O級中,如果運算數(shù)A為fpl6格式,則上轉(zhuǎn)換器512(圖5)如上文所述將 其提升至fp32格式。在該級中也可應(yīng)用絕對值及求反。對于絕對值而言,將符號位設(shè) 定為正。對于求反而言,將符號位翻轉(zhuǎn)。如果在進行可適用的求反之后,符號位為負
且請求得到帶符號的整數(shù)表示形式,則由條件反相器518使尾數(shù)部分反相并還傳播一 請求得到負結(jié)果的符號控制信號(在圖4中未顯示)。對于F2F整數(shù)舍入運算,第1-4級如上文所述進行,其中第3級的Rshift控制電 路428產(chǎn)生一移位量RshAmt,當(dāng)對尾數(shù)進行右移并使用第4級的右移電路912 (圖9) 來應(yīng)用移位時,所述移位量RshAmt將二元點剛好置于LSB的右側(cè)。粘附位邏輯914 可產(chǎn)生粘附位SB4。在第5級中,加1加法器1002 (圖10)將結(jié)果R4a (運算數(shù)A的尾數(shù))與R4b (0)相加,從而產(chǎn)生Sum與Sum+l輸出。舍入邏輯1008根據(jù)可適用的舍入模式且 對于帶符號的整數(shù)格式而言,根據(jù)來自第O級的符號控制信號是否指示負的結(jié)果,在 Sum與Sum+1輸出之間進行選擇,以便獲得正確的2補數(shù)表示形式。 在第6級中,使經(jīng)過右移的尾數(shù)R5不加修改地直通過。在第7級中,指數(shù)飽和邏輯1216 (圖12)判定輸入浮點值是否超過目標(biāo)整數(shù)格 式中的最大值。如果是,則最終結(jié)果選擇邏輯1214可將結(jié)果鉗制至最大值(例如所有 位均設(shè)定為l)。當(dāng)輸入運算數(shù)為INF時,可將輸出鉗制至最大整數(shù)值;類似地,當(dāng)輸 入運算數(shù)為NaN時,也可將輸出鉗制至所需值,例如0。遞送經(jīng)過正確格式化的整數(shù) 作為最終結(jié)果OUT。對于具有少于32位的整數(shù)格式,可根據(jù)需要使結(jié)果在32位字段 內(nèi)右對齊或左對齊。3.整數(shù)至浮點轉(zhuǎn)換(I2F)在一個實施例中,支持整數(shù)至浮點(I2F)轉(zhuǎn)換運算,以將任何帶符號或不帶符 號的整數(shù)格式轉(zhuǎn)換成fp32,以及將八位及十六位帶符號或不帶符號的格式轉(zhuǎn)換成fpl6。 如同其他轉(zhuǎn)換一樣,支持可選的求反、絕對值及,換算。將運算數(shù)A以整數(shù)格式提 供至MMAD單元220,并可如上文所述在浮點運算數(shù)B的指數(shù)位中提供換算參數(shù)W。在第0級中,在需要時,由上轉(zhuǎn)換器504、 508 (圖5)將運算數(shù)A上轉(zhuǎn)換成32 位。所述上轉(zhuǎn)換可使用符號擴展或0擴展。如果運算數(shù)A是負的,則由條件反相器518 將其反相,并傳播一指示A是否反相的符號控制信號。該信號可用于設(shè)定浮點結(jié)果的 符號位。(如果請求絕對值,則始終將符號位設(shè)定為其正的狀態(tài)。)將浮點數(shù)的指數(shù)初始化以對應(yīng)于231,然后根據(jù)前導(dǎo)1在整數(shù)中的實際位置將其 向下調(diào)整。對于尾數(shù),將整數(shù)的32位右移至為將該整數(shù)放于浮點尾數(shù)字段(在fp32 情況下為24位,在fpl6情況下為ll位)內(nèi)所需的程度。具體而言,在其中該整數(shù)的 八個MSB中任一者為非0的情形中進行從32位整數(shù)向fp32的轉(zhuǎn)換期間,以及在其中 該整數(shù)的五個MSB中的任一者為非O的情形中進行從16位整數(shù)向fpl6的轉(zhuǎn)換期間, 實施右移。當(dāng)進行右移時,可使用任何IEEE舍入模式對浮點結(jié)果進行舍入。更具體而言,在第1級中,12F字節(jié)電路444根據(jù)輸入格式從運算數(shù)A中提取八 個MSB。對于32位整數(shù)輸入,提取32位字段的八個MSB;對于在32位字段中右對 齊的16位整數(shù)格式,丟棄所述32位字段中的前16位,并提取接下來的八個MSB。 對于8位的整數(shù),可提取最后八個位;然而,如在下文中將顯而易見,I2F字節(jié)電路
444的結(jié)果不用于8位整數(shù)輸入。如在上文中所述,12F字節(jié)電路444還包括AND樹, 其測試是否其余位全部為1;該測試的結(jié)果(信號And24)在路徑437上傳播。指數(shù) 乘積塊424并行地將信號Eab設(shè)定為31加上fpl6 (15)或fp32 (127)的恰當(dāng)偏置量。 當(dāng)使用2^換算時,指數(shù)乘積塊424還如上文所述加上換算參數(shù)AT。在第2級中,指數(shù)和塊426 (圖7B)的優(yōu)先權(quán)編碼器718確定前導(dǎo)1在運算數(shù)A 的MSB內(nèi)的位置。差值電路714選擇優(yōu)先權(quán)編碼器結(jié)果作為指數(shù)差值Ediff并選擇指 數(shù)Eab作為有效最終指數(shù)EFE。在某些實施例中,差值電路714使用信號And24來判 定對運算數(shù)加上1來求解2補數(shù)是否將在所述八個MSB中得到非0位,并相應(yīng)地調(diào) 節(jié)優(yōu)先權(quán)編碼器結(jié)果。也可將類似的邏輯并入優(yōu)先權(quán)編碼器718內(nèi)。如上文在第IU 部分中所述,將運算數(shù)A旁通至乘法器塊414的輸出(結(jié)果R2a)。在第3級中,如果在第0級中將運算數(shù)A反相(此可根據(jù)上文所述的符號控制信 號加以確定),則使用mux812 (圖8A)將運算數(shù)B強制至1并由IP加法器804將其 加至運算數(shù)A,從而完成2補數(shù)反相。否貝jj,將運算數(shù)A旁通至路徑421。因此,根 據(jù)需要為fpl6或fp32格式的尾數(shù)保證結(jié)果'R3a為正的。還在第3級中,Rshift計數(shù)電路428使用信號Ediff來判定是否應(yīng)對尾數(shù)進行移位, 且在應(yīng)對尾數(shù)進行移位時確定移位量。如果為表示整數(shù)(不包括前導(dǎo)0)所需的位數(shù) 超過浮點格式中的有效數(shù)字位數(shù),則較佳使用右移。例如,在從32位整數(shù)格式轉(zhuǎn)換成 印32期間,如果前導(dǎo)1處于第1至第8位位置中的任一者上,則應(yīng)對尾數(shù)進行右移; 在從16位整數(shù)格式轉(zhuǎn)換成^16期間,如果前導(dǎo)1處于第1至第5位位置中的任一者 上,則應(yīng)對尾數(shù)進行右移。如上文所示,來自優(yōu)先權(quán)編碼器718的信號Ediff即反映該 信息,且Rshift計數(shù)電路428產(chǎn)生恰當(dāng)?shù)男盘朢shAmt。在第4級中,小的交換mux 904 (圖9)將尾數(shù)(結(jié)果R3a)指引至小運算數(shù)路 徑908上。右移電路912根據(jù)RshAmt信號對尾數(shù)進行右移。粘附位邏輯908產(chǎn)生粘 附位SB4。在大運算數(shù)路徑910上,條件0電路920將結(jié)果R4b清零。在第5級中,加1加法器1002 (圖10)將R4a (尾數(shù))與R4b (0)相加,且舍 入邏輯1008根據(jù)舍入模式與粘附位SB4在Sum與Sum+1之間進行選擇。在第6級中,將尾數(shù)R5正規(guī)化成浮點表示形式。正規(guī)化塊423對尾數(shù)進行左移, 以將前導(dǎo)1置于MSB位置,且指數(shù)遞減塊432相應(yīng)地向下調(diào)節(jié)指數(shù)EO。在第7級中,尾數(shù)R6及指數(shù)EO由格式塊1210 (圖12)格式化成fp32或fpl6 數(shù),并提供至最終選擇mux 1212。飽和邏輯1216可現(xiàn)用,且在某些情形中,例如在 從ul6轉(zhuǎn)換成fpl6時,可出現(xiàn)飽和。當(dāng)出現(xiàn)飽和時,可選擇恰當(dāng)浮點格式的溢出值(例 如INF)。應(yīng)注意,由于優(yōu)先權(quán)編碼器718 (圖7B)是八位編碼器,因而在該實施例中不支 持從32位整數(shù)向fpl6的I2F轉(zhuǎn)換。所屬領(lǐng)域的一般技術(shù)人員將知,優(yōu)先權(quán)編碼器的 大小是設(shè)計選擇問題,且可通過提供一更大的優(yōu)先權(quán)編碼器(例如21位)來支持此種 轉(zhuǎn)換。 在另一實施例中,在已實施2補數(shù)反相之后,優(yōu)先權(quán)編碼器718可移動至管線中 的一點(例如在IP加法器804之后)。在此種情形中,將不需要使用AND數(shù)來檢測加 1運算的效果。4. 整數(shù)至整數(shù)(121)轉(zhuǎn)換支持整數(shù)至整數(shù)(121)轉(zhuǎn)換運算,以將任意整數(shù)格式轉(zhuǎn)換成任何其他整數(shù)格式, 包括將帶符號格式轉(zhuǎn)換成不帶符號格式,以及反之。支持求反(2補數(shù))及絕對值選 項。在該實施例中,應(yīng)用下面的規(guī)則來處理I2I轉(zhuǎn)換中的溢出。首先,為將帶符號格 式轉(zhuǎn)換成不帶符號格式,將所有負值鉗制至0。第二,為將較大格式(即具有更多位 的格式)轉(zhuǎn)換成較小格式(即具有較少位的格式),將溢出鉗制至較小格式中的最大允 許值。第三,為將較小格式轉(zhuǎn)換成較大的不帶符號格式,對正值進行O擴展;而為轉(zhuǎn) 換成較大的帶符號格式,則使用符號擴展。在第O級中,接收運算數(shù)A。如果輸入格式小于32位,則使用符號擴展(或?qū)?于不帶符號的輸入格式而言使用O擴展)將運算數(shù)A上轉(zhuǎn)換成32位(參見圖5)。然 后,如上文在第II.J部分中所述,將運算數(shù)A直通至第3級的輸出(結(jié)果R3a)。在第 4級中,小的交換mux904 (圖9)將運算數(shù)A指引至小運算數(shù)路徑908上;在大運算 數(shù)路徑910上,條件0電路920將結(jié)果R4b清零。在小運算數(shù)路徑908上,條件反相 器918根據(jù)是請求求反還是請求絕對值以及在請求絕對值的情況下運算數(shù)A是正還是 負來將運算數(shù)A反相或不反相。在第5級中,加1加法器1002 (圖IO)將R4a (運算數(shù)A)與R4b (0)相加。 如果在第4級中將運算數(shù)A反相,則選擇Sum+1輸出,從而使結(jié)果為2補數(shù)形式。 所述結(jié)果R5不加修改地直通過第6級。在第7級中,在格式化塊1210 (圖12)中將輸出格式化。為轉(zhuǎn)換成較大的帶符 號格式,格式化塊1210較佳應(yīng)用符號擴展。格式化塊1210還將結(jié)果鉗制至給定格式 的最大允許整數(shù);例如,對于正數(shù),如果在目標(biāo)格式的MSB位置的左側(cè)存在1,則將 輸出設(shè)定為全l。5. 小數(shù)(FRC)運算小數(shù)(FRC)運算返送回浮點(例如*32)運算數(shù)A的小數(shù)部分。在FRC運算 期間,MMAD單元320使用運算數(shù)A的指數(shù)部分來確定二元點在運算數(shù)A的尾數(shù)內(nèi) 的位置,并應(yīng)用一掩碼,所述掩碼將二元點左側(cè)的所有位(整數(shù)位)設(shè)定為O并保留 二元點右側(cè)的位(小數(shù)位)。在第O級中,接收浮點(例如fpl6或fp32)運算數(shù)A,并可在需要時將其上轉(zhuǎn) 換成fp32。將運算數(shù)C作為(或可強制至) 一全O字段進行輸入。如上文在第II.J部 分中所述,使運算數(shù)A直通至第3級的輸出(結(jié)果R3a)。在第1級中,在使運算數(shù)A直通過的同時,逐位邏輯塊434中的條件反相器635 (圖6C)將運算數(shù)C反相,以獲得一全1字段,且選擇mux 636選擇該字段作為結(jié)
果R1。在其他實施例中,可使用選擇mux636或另一電路來選擇例如來自恰當(dāng)寄存器 (未顯示)的全1字段。如上文在第II.J部分中所述,所述結(jié)果R1 (全l字段)直通 至第3級的輸出(結(jié)果R3b)。還是在第1級中,指數(shù)乘積塊424從運算數(shù)A的指數(shù)部分Ea中減去指數(shù)偏置量 (例如對于fp32運算數(shù)而言為127),并將該值作為指數(shù)Eab進行轉(zhuǎn)接。在第2級中, 指數(shù)和塊426提供Eab作為指數(shù)差值Ediff及作為有效最終指數(shù)EFE。在第3級中,Rshift計數(shù)電路428根據(jù)A的未偏置的指數(shù)(Eab)及用于將結(jié)果 R3a及R3b分別指引至大運算數(shù)路徑及小運算數(shù)路徑上的恰當(dāng)SwapCtl信號,產(chǎn)生移 位信號RshAmt。在第4級中,大的交換mux906 (圖9)將運算數(shù)A (結(jié)果R3a)指引至大運算數(shù) 路徑910上,且小的交換mux 904將所述由l形成的字段(結(jié)果R3b)指引至小運算 數(shù)路徑908上。響應(yīng)于RshAmt信號,右移電路912通過將所述由1形成的字段右移 而形成掩碼;較佳使用邏輯右移。所述掩碼作為結(jié)果R4a在路徑909上直通過條件反 相器918。應(yīng)注意,如果運算數(shù)A的未偏置的指數(shù)為0或負值,則RshAmt信號較佳 對應(yīng)于O移位。對于正的指數(shù),適合進行非O移位,并可將移位限制至例如24位。大的運算數(shù)路徑910使運算數(shù)A作為結(jié)果R4b在路徑911上不加修改地直通過。 并行地,指數(shù)遞增塊430 (圖4)使有效最終指數(shù)EFE作為EFE2不加修改地直通過。在第5級中,AND2電路1004 (圖10)運行以對運算數(shù)A應(yīng)用掩碼R4a (作為 R4b接收到)。所述掩碼將運算數(shù)A的整數(shù)位清零,而對小數(shù)位則沒有影響。選擇mux 1010選擇來自AND2電路1004的輸出—其是A的小數(shù)位。在第6級中,正規(guī)化塊423對結(jié)果R5進行優(yōu)先權(quán)編碼及正規(guī)化,且指數(shù)遞減塊 432對有效最終指數(shù)EFE2進行相應(yīng)調(diào)整,以獲得最終指數(shù)EO。在第7級中,包含指數(shù)EO的結(jié)果R6通過格式塊1210 (圖12)被格式化為fp32 (或fpl6)數(shù),并提供至最終選擇mux 1212以共選擇。如果需要,可在運算數(shù)A為 INF或NaN的情形中,使用特殊數(shù)邏輯來覆蓋所計算結(jié)果。E.域映射(RRO)域映射運算一也稱作自變數(shù)歸約或值域歸約(RRO) —也在MMAD單元220中 實施。這些運算支持在單獨算術(shù)單元中計算各種超越函數(shù),所述單獨算術(shù)單元可例如 構(gòu)建為圖2中的另一功能單元222。在一個實施例中,MMAD單元220實施域映射運 算,所述域映射運算將三角函數(shù)(例如sin(x)及cos(x))及指數(shù)函數(shù)(2X)的浮點自變 數(shù);c減小至一受限值域。因此,對于RRO, MMAD單元220是作為運算數(shù)A提供的 fp32數(shù);c。1. 三角函數(shù)的RRO計算sin(x)及cos(x)的功能單元一般通過要求首先將自變數(shù)x減小至27uK+;cQ (其 中K為整數(shù)且0^c^2兀)來利用這些函數(shù)的周期性。然后,可使用;co來計算三角函數(shù)。 在某些實施方案中,將;co規(guī)定為小數(shù);cF;co/27C,其中0^c^1。在本發(fā)明的一個實施例中,MMAD單元220通過如下方式來計算三角RRO的x^ 利用MAD管線的乘法級(圖4中的第1-3級)來執(zhí)行乘以1/2:i的浮點乘法,且其余 級提取所述結(jié)果的小數(shù)部分。由于乘法的有限數(shù)值精度,結(jié)果是近似值,但所述近似 值對于其中一般不出現(xiàn)非常大的;c值的應(yīng)用(例如圖形)而言足以滿足要求。以特殊32位定點格式提供三角RRO的輸出,所述定點格式包含符號位、 一位的 特殊數(shù)旗標(biāo)、五個預(yù)留位及25個小數(shù)位。當(dāng)將特殊數(shù)旗標(biāo)設(shè)定為邏輯真時,結(jié)果是特 殊數(shù),且可使用所述預(yù)留位或小數(shù)位中的某些或全部來指示那種特殊數(shù)(例如INF或 NaN)。在第0級中,以*32格式提供自變數(shù)x作為運算數(shù)AQ并使其作為運算數(shù)A直通過。在第1級中,指數(shù)乘積塊424使運算數(shù)A的指數(shù)部分Ea作為指數(shù)Eab直通過。 在左乘法器電路416中,乘法器616 (圖6A)選擇來自寄存器618的1/2tt的所存儲 Booth3編碼表示形式作為路徑BB上的乘數(shù)。在第2級中,指數(shù)和塊426選擇指數(shù)Ea作為有效最終指數(shù)EFE及差值Ediff。乘 法器塊614計算A,1/27C)并提供所述乘積的和字段及進位字段作為結(jié)果R2a及R2b。在第3級中,Rshift計數(shù)電路428根據(jù)信號Ediff來判定是否應(yīng)實施右移,以使定 點結(jié)果的二元點正確對齊。例如,如果指數(shù)為負,則可能需要進行右移。如果需要進 行右移,則Rshift計數(shù)電路428提供恰當(dāng)?shù)囊莆涣啃盘朢shAmt。還在第3級中,EP 加法器804 (圖8A)對所述和字段與進位字段(R2a, R2b)相加,以產(chǎn)生所述乘積。 mux 814選擇上部32位作為結(jié)果R3a。粘附位邏輯808可產(chǎn)生粘附位SB3以供此后在 舍入中使用。在第4級中,指數(shù)遞增塊430可在需要時調(diào)整指數(shù)以反映IP加法器804中的進 位,如在上文所述的FMUL及FMAD運算期間所作的調(diào)整。在對齊單元420中,小 的交換mux 904 (圖9)將乘積R3a指引至小運算數(shù)路徑908上,其中右移電路912 應(yīng)用由Rshift計數(shù)電路428所確定的任何右移量。將結(jié)果R4a傳播至路徑909。如果 應(yīng)用右移,則粘附位邏輯914可產(chǎn)生新的粘附位SB4;反之,粘附位邏輯914可轉(zhuǎn)接 粘附位SB3作為粘附位SB4。在大運算數(shù)路徑910中,條件0單元920將結(jié)果R4b清 零。在第5級中,加1加法器1002 (圖IO)將結(jié)果R4a (乘積)與R4b (0)相加。 在某些實施例中,不使用舍入邏輯1008;在其他實施例中,舍入邏輯1008可對來自 路徑SB4的粘附位進行處理。(由于RRO是近似值,因而進行舍入未必會提高結(jié)果的 精確度。)在第6級中,正規(guī)化塊423在需要時應(yīng)用左移,以對二元點進行正確定位(例如 如果指數(shù)是正的)。路徑EFE2上的有效最終指數(shù)由移位控制電路1110用于確定左移 量,并由左移電路1112實施移位。將該移位結(jié)果R6提供于路徑425上。指數(shù)遞減塊 432可在需要時相應(yīng)地遞減最終指數(shù)E0,盡管在第7級中將忽略該指數(shù)。在第7級中,由格式塊1210 (圖12)使用路徑R6上的結(jié)果的符號位及25個位 來產(chǎn)生上文所述格式的最終32位結(jié)果Rdata。較佳響應(yīng)于來自第1級中特殊數(shù)檢測塊 439的特殊數(shù)信號SPC而設(shè)定結(jié)果Rdata中的特殊數(shù)旗標(biāo);當(dāng)檢測到特殊數(shù)時,可使 用某些小數(shù)位或預(yù)留位來指示為那種特殊數(shù)。2.指數(shù)函數(shù)EX2的RRO如在所屬領(lǐng)域中所知,可通過如下方式在算術(shù)功能單元中實施以2為基數(shù)的指數(shù) 函數(shù)(EX2(jc)=2x),分解jc-M+y,其中M是整數(shù)且f處于間隔[O.O, 1.0)中,然后計 算2"*/。計算2〃是很平常的(移位及指數(shù)加法),且計算/可使用查找表來實現(xiàn)。在一個實施例中,MMAD單元220通過提取自變數(shù)x的小數(shù)部分來對EX2函數(shù) 實施RRO。該RR0有些類似于上文在F2F轉(zhuǎn)換的上下文中所述的整數(shù)舍入運算,但在此種情形中,保留二元點右側(cè)的位。指數(shù)RRO的輸出是特殊32位格式,其帶有一符號位、 一位的特殊數(shù)旗標(biāo)、七個 整數(shù)位及23個小數(shù)位。當(dāng)特殊數(shù)旗標(biāo)設(shè)定為邏輯真時,結(jié)果是特殊數(shù),且可使用某些 或所有整數(shù)位或小數(shù)位來指示為那種特殊數(shù)。在第0級中,將自變數(shù);c以fp32格式提供至MMAD單元作為運算數(shù)AQ并作為 運算數(shù)A直通過。在第1級中,指數(shù)乘積塊424自指數(shù)Ea中減去127 (fp32偏置量),從而產(chǎn)生結(jié) 果Eab。如下文所述,結(jié)果Eab將在后續(xù)級中用于使二元點對齊,以便在其右側(cè)存在 23個位且在左側(cè)存在7個位。在左乘法器電路416 (參見圖6A)中,mux616選擇來 自寄存器620的經(jīng)Booth3編碼的表示形式。在第2級中,指數(shù)和塊426使Eab作為有效最終指數(shù)EFE及差值Ediff直通過。 乘法器塊414將運算數(shù)A乘以1.0并提供所述乘積的和字段及進位字段作為結(jié)果R2a 及R2b。在第3級中,Rshift計數(shù)電路428根據(jù)差值信號Ediff判定是否需要進行右移以使 二元點對齊;例如根據(jù)Ediff是正還是負來進行判定。如果需要進行右移,則Rshift 計數(shù)電路428產(chǎn)生RshAmt信號來反映移位量一其是根據(jù)Ediff的量值加以確定。同樣 在第3級中,IP加法器804 (圖8A)將所述和字段與進位字段R2a與R2b相加,以 產(chǎn)生所述乘積,且mux 814選擇上部32位作為結(jié)果R3a。粘附位邏輯808可產(chǎn)生粘附 位SB3。在第4級中,指數(shù)遞增塊430調(diào)整指數(shù)以反映IP加法器804的任何進位。在對 齊單元420中,小的交換mux 904 (圖9)將乘積結(jié)果R3a指引至小運算數(shù)路徑908 上,其中右移電路912應(yīng)用由Rshift計數(shù)電路804所確定出的任何右移量,從而產(chǎn)生 結(jié)果R4a。如果應(yīng)用右移,則粘附位邏輯914可根據(jù)右移量產(chǎn)生新的粘附位SB4;反 之,可傳播粘附位SB3作為粘附位SB4。在大運算數(shù)路徑910中,條件0單元920將 結(jié)果R4b清零。在第5級中,力卩1加法器1002 (圖10)將結(jié)果R4a (乘積A* 1)與R4b (0)相
加。在某些實施例中,舍入邏輯1008選擇Sum輸出作為結(jié)果R5;在其他實施例中, 舍入邏輯1008可使用粘附位SB4在Sum與Sum+1輸出之間進行選擇。在第6級中,正規(guī)化塊423應(yīng)用左移(如果需要)使二元點正確對齊(例如,如 果指數(shù)為正的)。有效最終指數(shù)EFE2由移位控制電路lllO用于確定左移量,且由左 移電路1112實施移位。將該移位結(jié)果R6提供于路徑425上。如果需要,指數(shù)遞減塊 432可相應(yīng)地遞減所述指數(shù)。在第7級中,格式塊1210 (圖12)將結(jié)果R6轉(zhuǎn)換成具有七個整數(shù)位及23個小 數(shù)位的定點表示形式??墒褂弥笖?shù)飽和邏輯1216來檢測飽和,在此種情形中,可選擇 INF (呈上文所述的特殊輸出格式)作為結(jié)果。IV.其他實施例盡管上文參照具體實施例來說明本發(fā)明,然而所屬領(lǐng)域中的技術(shù)人員將知,也可 存在諸多修改形式。例如,可將MMAD單元構(gòu)建成支持更多、更少的功能或相組合 的不同功能,及支持任意格式或格式組合的運算數(shù)及結(jié)果。也可改變本文所述的各種旁通路徑及直通路徑。 一般而言,當(dāng)描述任一電路塊的 旁通路徑時,該路徑可由該塊中的恒等運算(即對其運算數(shù)不具有任何影響的運算, 例如加上0)來代替,反之亦然。在給定運算期間被旁通過的電路塊可置于空閑狀態(tài) (例如降低功率的狀態(tài))或者正常運行,使下游的塊忽略其結(jié)果,例如通過選擇mux 或其他電路的運行。將MMAD管線劃分成各個級是任意進行的。所述管線可包含任意數(shù)量的級,且 可根據(jù)需要而改變每一級中組件的組合。在本文中歸屬于特定塊的功能也可分散于各 管線級中;例如, 一乘法器數(shù)可占據(jù)多個級。也可修改各種塊的功能。例如,在某些實施例中,可使用不同的加法器電路或乘 法器電路,且并不要求使用Booth3編碼(或任何其他編碼)進行乘法。此外,為便于理解,上文是以電路塊形式來說明MMAD單元;所屬領(lǐng)域的技術(shù) 人員將知,可使用各種各樣的電路組件及布局來實施這些塊,且在本文中所述的塊并 不僅限于特定的一組組件或?qū)嶓w布局??筛鶕?jù)需要使各個塊在實體上相組合或相分離。處理器可在執(zhí)行核心中包含一個或多個MMAD單元。例如,當(dāng)需要發(fā)出超級標(biāo) 量指令(即在每一循環(huán)中發(fā)出多于一個指令)時,可構(gòu)建多個MMAD單元,且不同 的MMAD單元可支持不同的功能組合。處理器也可包含多個執(zhí)行核心,且每一核心 可具有其自身的MMAD單元。此外,盡管上文參照圖形處理器來說明本發(fā)明,然而所屬領(lǐng)域的技術(shù)人員將了解, 本發(fā)明也可用于其他處理器中,例如數(shù)字協(xié)處理器、矢量處理器或通用處理器中。因此,盡管上文參照具體實施例來說明本發(fā)明,然而應(yīng)了解,本發(fā)明旨在涵蓋歸 屬于上文權(quán)利要求書范圍內(nèi)的所有修改及等價形式。
權(quán)利要求
1、一種用于處理器的多用途功能單元,其包括輸入段,其經(jīng)配置以接收第一、第二及第三運算數(shù)及一指示所要實施的多個所支持運算中的一者的操作碼,且進一步經(jīng)配置以響應(yīng)于所述操作碼而產(chǎn)生多個控制信號;乘法管線,其耦接至所述輸入段并可響應(yīng)于所述控制信號而進行配置,以計算所述第一與第二運算數(shù)的乘積并選擇所述所計算乘積作為第一中間結(jié)果;測試管線,其耦接至所述輸入段并可響應(yīng)于所述控制信號而進行配置,以對所述第一、第二、及第三運算數(shù)中的一者或多者實施比較及選擇所述比較的結(jié)果作為第二中間結(jié)果;加法管線,其耦接至所述乘法段及所述測試管線并可響應(yīng)于所述控制信號而進行配置,以計算所述第一與第二中間結(jié)果的和并選擇所述所計算的和作為運算結(jié)果;指數(shù)管線,其耦接至所述輸入段并可響應(yīng)于所述控制信號而進行配置,以對所述第一、第二及第三運算數(shù)中的一者或多者實施指數(shù)計算及選擇所述指數(shù)計算的結(jié)果作為指數(shù)結(jié)果;及輸出段,其經(jīng)耦接以接收所述運算結(jié)果及所述指數(shù)結(jié)果,并可響應(yīng)于所述控制信號而進行配置,以產(chǎn)生由所述操作碼指定的所述所支持運算中的所述一者的最終結(jié)果,其中所述多個所支持的運算包括浮點乘法-加法(FMAD)運算、整數(shù)乘法-加法(IMAD)運算、及至少一個比較測試運算。
2、 如權(quán)利要求1所述的多用途功能單元,其中所述加法管線可響應(yīng)于所述控制 信號而進一步配置,以便在所述操作碼指定所述比較測試運算的情況下,在將所述第 一與第二中間結(jié)果相加之前以0值取代所述第一中間結(jié)果。
3、 如權(quán)利要求5所述的多用途功能單元,其中所述至少一個比較測試運算包括 選自由如下運算組成的群組中的一種或多種運算最大(MAX)運算,最小(MIN) 運算,及三元比較(CMP)運算。
4、 如權(quán)利要求3所述的多用途功能單元,其中所述至少一個比較測試運算包括 所述MAX運算、所述MIN運算、及所述CMP運算,且其中所述測試管線可響應(yīng)于 所述控制信號而進一步配置以使在所述操作碼指定所述MAX運算的情況下,所述第二中間結(jié)果對應(yīng)于所述第一 運算數(shù)與所述第二運算數(shù)中的較大者;在所述操作碼指定所述MIN運算的情況下,所述第二中間結(jié)果對應(yīng)于所述第一 運算數(shù)與所述第二運算數(shù)中的較小者;及在所述操作碼指定所述CMP運算的情況下,所述第二中間結(jié)果在所述第三運算 數(shù)小于0時對應(yīng)于所述第二運算數(shù),反之則對應(yīng)于所述第一運算數(shù)。
5、 如權(quán)利要求1所述的多用途功能單元,其中所述至少一個比較測試運算包括選自由如下運算組成的群組中的一種或多種二元測試(SET)運算大于運算,小于 運算,相等性運算,及無序運算,其中所述一種或多種二元測試運算中的每一者均得 到布爾結(jié)果。
6、 如權(quán)利要求5所述的多用途功能單元,其進一步包括輔助結(jié)果路徑,其耦接于所述測試管線與所述輸出段之間,并經(jīng)配置以將布爾輔 助結(jié)果從所述測試管線遞送至所述輸出段,其中所述輸出段可響應(yīng)于所述控制信號而進一步配置,以在所述操作碼指定所述 SET運算中的一者的情況下,根據(jù)所述布爾輔助結(jié)果來產(chǎn)生所述最終結(jié)果。
7、 如權(quán)利要求1所述的多用途功能單元,其中所述多個所支持的運算進一步包括逐位布爾邏輯運算。
8、 如權(quán)利要求7所述的多用途功能單元,其中所述逐位布爾邏輯運算可選自由 AND運算、OR運算及XOR運算組成的群組,且其中所述測試管線包括AND電路,其經(jīng)配置以產(chǎn)生所述第一與第二運算數(shù)的逐位邏輯AND作為第一輸出;OR電路,其經(jīng)配置以產(chǎn)生所述第一與第二運算數(shù)的逐位邏輯OR作為第二輸出; XOR電路,其經(jīng)配置以產(chǎn)生所述第一與第二運算數(shù)的逐位邏輯XOR作為第三輸 出;及選擇電路,其可響應(yīng)于所述控制信號而進行配置,以便在所述操作碼指定所述 AND、 OR及XOR運算中的一者的情況下,所述第二中間結(jié)果是所述第一、第二及第 三輸出中對應(yīng)的一者。
9、 如權(quán)利要求1所述的多用途功能單元,其中所述多個所支持的運算進一步包 括浮點加法(FADD)運算及整數(shù)加法(IADD)運算,其中所述加法管線可響應(yīng)于所 述控制信號而進一步配置以實施所述FADD運算及所述IADD運算。
10、 如權(quán)利要求9所述的多用途功能單元,其中所述乘法管線可響應(yīng)于所述控制 信號而進一步配置,以便在所述操作碼指定所述FADD運算或所述IADD運算的情況 下,選擇所述第一運算數(shù)作為所述第一中間結(jié)果。
11、 如權(quán)利要求1所述的多用途功能單元,其中所述多個所支持的運算進一步包 括浮點乘法(FMUL)運算及整數(shù)乘法(IMUL)運算,其中所述乘法管線可響應(yīng)于所 述控制信號而進一步配置,以實施所述FMUL運算及所述MUL運算。
12、 如權(quán)利要求11所述的多用途功能單元,其中所述加法管線可響應(yīng)于所述控 制信號而進一步配置,以便在所述操作碼指定所述FMUL運算或所述IMUL運算的情 況下,在將所述第一與第二中間結(jié)果相加之前以O(shè)值來取代所述第二中間結(jié)果。
13、 如權(quán)利要求1所述的多用途功能單元,其中所述多個所支持的運算進一步包 括將所述第一運算數(shù)從輸入格式轉(zhuǎn)換成目標(biāo)格式的格式轉(zhuǎn)換運算。
14、 如權(quán)利要求1所述的多用途功能單元,其中所述多個所支持運算進一步包括 域映射(RRO)運算。
15、 如權(quán)利要求14所述的多用途功能單元,其中所述RRO運算減小供用于計算 三角函數(shù)的所述第一運算數(shù)。
16、 如權(quán)利要求14所述的多用途功能單元,其中所述RRO運算減小供用于計算 指數(shù)函數(shù)的所述第一運算數(shù)。
17、 如權(quán)利要求1所述的多用途功能單元,其中所述多個所支持運算進一步包括 返送回所述第一運算數(shù)的小數(shù)部分的小數(shù)(FRC)運算。
18、 如權(quán)利要求1所述的多用途功能單元,其中所述加法管線包括 對齊電路,其可響應(yīng)于所述控制信號而進行配置,以便在所述操作碼指定所述FMAD運算的情況下,根據(jù)來自所述指數(shù)管線的對齊信號對所述第一及第二中間結(jié)果 中的一者進行右移;及正規(guī)化電路,其可響應(yīng)于所述控制信號而進行配置,以便在所述操作碼指定所述 FMAD運算的情況下,對所述第一與第二中間結(jié)果之和進行左移。
19、 如權(quán)利要求18所述的多用途功能單元,其中所述多個所支持運算進一步包 括分別將所述第一運算數(shù)左移及右移的左移(SHL)運算及右移(SHR)運算,且其 中在所述操作碼指定所述SHL運算的情況下,所述正規(guī)化電路應(yīng)用所述左移;及 在所述操作碼指定所述SHR運算的情況下,所述對齊電路應(yīng)用所述右移。
20、 一種用于處理器的多用途功能單元,所述功能單元包括-輸入段,其經(jīng)配置以接收第一、第二及第三運算數(shù)及一指示所要實施的多個所支 持運算中一者的操作碼,且進一步經(jīng)配置以響應(yīng)于所述操作碼而產(chǎn)生多個控制信號;乘法管線,其耦接至所述輸入段并可響應(yīng)于所述控制信號而進行配置,以計算所 述第一與第二運算數(shù)的乘積并選擇所述所計算的乘積作為第一中間結(jié)果;加法管線,其耦接至所述乘法段及所述測試管線并可響應(yīng)于所述控制信號而進行 配置,以計算所述第一與第二中間結(jié)果的和并選擇所述所計算的和作為運算結(jié)果;及輸出段,其經(jīng)耦接以接收所述運算結(jié)果并可響應(yīng)于所述控制信號而進行配置,以 產(chǎn)生由所述操作碼指定的所述所支持運算中的所述一者的最終結(jié)果,其中所述多個所支持運算包括對所述第一、第二及第三運算數(shù)進行運算的浮點乘 法-加法(FMAD)運算及整數(shù)乘法-加法(IMAD)運算,及其中所述乘法管線及所述加法管線可響應(yīng)于所述控制信號而進一步配置,以使得 對于所述FMAD運算,所述最終結(jié)果代表浮點值,且對于所述IMAD運算,所述最終 結(jié)果代表整數(shù)值。
21、 如權(quán)利要求20所述的多用途功能單元,其中所述乘法管線包括 乘法器樹,其經(jīng)配置以計算兩個因數(shù)的乘積;及指數(shù)邏輯塊,其可響應(yīng)于所述控制信號而進行配置,以根據(jù)所述第一與第二運算 數(shù)各自的指數(shù)來計算乘積指數(shù)并計算所述乘積指數(shù)與所述第三運算數(shù)的指數(shù)的和指 數(shù),其中在所述操作碼指定所述FMAD運算的情況下,所述乘法器樹將所述第一與 第二運算數(shù)各自的尾數(shù)相乘且所述指數(shù)邏輯塊計算所述乘積指數(shù)與所述和指數(shù)。
22、 如權(quán)利要求20所述的多用途功能單元,其中所述多個所支持運算進一步包 括對所述第一及第三運算數(shù)進行運算的浮點加法(FADD)運算及整數(shù)加法(IADD) 運算。
23、 如權(quán)利要求22所述的多用途功能單元,其中所述乘法管線包括 乘法器樹,其經(jīng)配置以計算第一因數(shù)與第二因數(shù)的乘積;及左乘法選擇電路,其可響應(yīng)于所述控制信號而進行配置,以選擇所述第一運算數(shù) 作為所述第一因數(shù)及選擇所述第二運算數(shù)或?qū)?yīng)于1的值作為所述第二因數(shù),其中在所述操作碼指定所述FADD或IADD運算的情況下,所述左乘法選擇電路 使用所述對應(yīng)于1的值來覆蓋所述第二運算數(shù)。
24、 如權(quán)利要求22所述的多用途功能單元,其中所述乘法管線進一步包括-旁通路徑,其經(jīng)配置以便在所述操作碼指定所述FADD或IADD運算的情況下,提供所述第一運算數(shù)作為所述第一中間結(jié)果及提供所述第三運算數(shù)作為所述第二中間 結(jié)果。
25、 如權(quán)利要求20所述的多用途功能單元,其中所述多個所支持運算進一步包 括對所述第一及第二運算數(shù)進行運算的浮點乘法(FMUL)運算及整數(shù)乘法(IMUL) 運算。
26、 如權(quán)利要求25所述的多用途功能單元,其中所述加法管線包括 加法器電路,其經(jīng)配置以計算第一加數(shù)與第二加數(shù)的和;及 對齊塊,所述對齊塊具有-導(dǎo)引電路,其可響應(yīng)于所述控制信號而進行配置,以選擇所述第一及第二中 間結(jié)果中的一者作為小運算數(shù)及選擇所述第一及第二中間結(jié)果中的另一者作為 大運算數(shù);右移電路,其可響應(yīng)于所述控制信號而進行配置,以對所述小運算數(shù)應(yīng)用右 移及選擇所述經(jīng)移位的小運算數(shù)作為所述第一加數(shù);條件0電路,其可響應(yīng)于所述控制信號而進行配置,以選擇所述大運算數(shù)或 O值作為所述第二加數(shù),其中在所述操作碼指定所述FMUL或IMUL運算的情況下,選擇所述第一 中間結(jié)果及所述0值作為所述第一及第二加數(shù)。
27、 如權(quán)利要求20所述的多用途功能單元,其中所述乘法管線包括 乘法器樹,其經(jīng)配置以計算具有第一及第二字段的冗余表示形式的第一與第二因數(shù)的乘積;左乘法選擇電路,其可響應(yīng)于所述控制信號而進行配置,以選擇所述第一及第二 運算數(shù)作為所述第一及第二因數(shù);中間乘積加法器,其經(jīng)配置以計算兩個輸入值的整數(shù)和及提供所述整數(shù)和作為所 述第一中間結(jié)果;及右乘法選擇電路,其耦接于所述乘法器樹與所述中間乘積加法器之間,并可響應(yīng) 于所述控制信號而進行配置,以可選擇地將所述第一字段及所述第二字段或者所述第 一運算數(shù)及所述第二運算數(shù)提供至所述中間乘積加法器。
28、如權(quán)利要求27所述的多用途功能單元,其中所述多個所支持運算進一步包 括絕對差的整數(shù)和(ISAD)運算,且其中在所述操作碼指定所述ISAD運算的情況下所述輸入段將所述第一運算數(shù)及所述第二運算數(shù)的反相型式提供至所述乘法管線;所述右乘法選擇電路將所述第一運算數(shù)及所述第二運算數(shù)的反相型式提供至所 述中間乘積加法器;及所述加法管線計算所述第一中間結(jié)果與所述第三運算數(shù)的和。
全文摘要
本發(fā)明揭示一種多用途功能單元,其可經(jīng)配置以支持多種運算,包括乘法-加法及比較測試運算、以及其他整數(shù)及/或浮點算術(shù)運算、布爾運算、及格式轉(zhuǎn)換運算。
文檔編號G06F7/38GK101133389SQ200580042412
公開日2008年2月27日 申請日期2005年11月9日 優(yōu)先權(quán)日2004年11月10日
發(fā)明者斯圖爾特·F·奧伯曼, 明·Y·西烏 申請人:輝達公司