專利名稱:資源復(fù)用的浮點simd指令的執(zhí)行裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及浮點SIMD(單指令多數(shù)據(jù))指令的算術(shù)邏輯執(zhí)行裝置,尤其是復(fù)用單 精度或雙精度浮點運算資源的算術(shù)邏輯執(zhí)行裝置。
背景技術(shù):
現(xiàn)有技術(shù)中,根據(jù)Oberman的技術(shù)報告,在浮點運算中浮點加減執(zhí)行單元的使用 頻度約為陽%。浮點加減法執(zhí)行速度的加快對提升浮點算術(shù)邏輯部件的性能具有重要意 義。浮點加減法的執(zhí)行包含以下步驟指數(shù)相減、尾數(shù)對階移位、尾數(shù)相加、舍入 操作和結(jié)果封裝。圖1示出了典型的單精度或雙精度的浮點加減運算的數(shù)據(jù)通路。其 中Iianstruction Issue)表示該流水線級為指令發(fā)射級,El (Execution Ist)表示該 流水線級為運算執(zhí)行第一級,E2 (Execution 2nd)表示該流水線級為運算執(zhí)行第二級, E3 (Execution 3rd)表示該流水線級為運算執(zhí)行第三級。尾數(shù)取補碼電路11根據(jù)運算類型(加法或減法)來計算其中一個浮點源操作數(shù) 的補碼,從而統(tǒng)一加法運算和減法運算。該電路需要一個25Λ4位的加法器來完成單精度 /雙精度浮點數(shù)的尾數(shù)取補運算。指數(shù)相減電路12計算兩個浮點源操作數(shù)的指數(shù)差,以控制尾數(shù)對階移位電路13。 單精度/雙精度浮點數(shù)的指數(shù)相減運算需要一個9/12位的加法器。尾數(shù)對階移位電路13對指數(shù)較小的浮點源操作數(shù)進行移位操作,使兩個操作數(shù) 的指數(shù)相等。該電路需要一個48/106位的移位器來完成單精度/雙精度浮點數(shù)的尾數(shù)移 位操作。尾數(shù)相加電路14計算出兩個操作數(shù)的尾數(shù)和。單精度/雙精度浮點數(shù)的尾數(shù)相 加運算需要一個27/56位的加法器。舍入操作電路15根據(jù)尾數(shù)和以及尾數(shù)對階移位13提供的信息對尾數(shù)和進行舍入 操作。該電路需要一個26/55位的舍入加法器來完成舍入操作。結(jié)果封裝電路16對舍入操作后的尾數(shù)和以及指數(shù)進行規(guī)格化調(diào)整,得到最終的 計算結(jié)果。結(jié)果封裝時,單精度/雙精度浮點數(shù)的尾數(shù)移位需要一個26/55位的移位器;單 精度/雙精度浮點數(shù)的指數(shù)調(diào)整需要一個8/11位的加法器。
發(fā)明內(nèi)容
為了克服已有的算術(shù)邏輯執(zhí)行裝置處理單精度和雙精度浮點運算時執(zhí)行速度較 慢的不足,本發(fā)明提供一種能夠加快單精度浮點運算的執(zhí)行速度的資源復(fù)用的浮點SIMD 指令的執(zhí)行裝置。本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是一種資源復(fù)用的浮點SIMD指令的執(zhí)行裝置,該執(zhí)行裝置包括尾數(shù)取補碼電路,用于將操作數(shù)尾數(shù)取補碼,統(tǒng)一加減法運算邏輯,包括雙精度浮點數(shù)的取補加法器,單精度指令復(fù)用雙精度浮點數(shù)的取補加法器的低路;指數(shù)相減電路,用于得到兩組操作數(shù)的指數(shù)差和大小關(guān)系,為尾數(shù)對階移位電路 準備控制信號,包括指數(shù)相減加法器,所述指數(shù)相減加法器分為高路和低路,單精度指令復(fù) 用指數(shù)相減加法器的低路;尾數(shù)對階移位電路,用于選擇較小的操作數(shù)尾數(shù)進行對階移位,使得浮點加減法 的兩個操作數(shù)指數(shù)相等,提供尾數(shù)相加電路的輸入數(shù)據(jù),包括雙精度浮點數(shù)的尾數(shù)對階移 位器,所述尾數(shù)對階移位器包括高路的尾數(shù)對階小移位器和低路的尾數(shù)對階小移位器,單 精度指令復(fù)用低路的小移位器;尾數(shù)相加電路,用于完成兩個操作數(shù)尾數(shù)的相加,得到補碼表示的尾數(shù)和,為舍入 操作做準備,包括雙精度尾數(shù)相加加法器,單精度指令復(fù)用所述雙精度尾數(shù)相加加法器的 低路;尾數(shù)和舍入操作電路,用于完成浮點加減法的舍入操作,包括雙精度舍入加法器, 單精度指令復(fù)用所述雙精度舍入加法器;結(jié)果封裝電路,用于對尾數(shù)和和指數(shù)進行規(guī)格化調(diào)整,將運算結(jié)果表示成規(guī)格化 的浮點形式,包括雙精度尾數(shù)和規(guī)格化調(diào)整的大移位器,所述大移位器包括低路規(guī)格化小 移位器和高路規(guī)格化小移位器,單精度指令復(fù)用低路規(guī)格化小移位器,還包括指數(shù)規(guī)格化 調(diào)整的加法器,所述加法器包括低路指數(shù)規(guī)格化加法器和高路指數(shù)規(guī)格化加法器,單精度 指令復(fù)用低路指數(shù)規(guī)格化加法器,雙精度指令復(fù)用低路指數(shù)規(guī)格化加法器和部分的高路指 數(shù)規(guī)格化加法器;所述執(zhí)行裝置還包括SIMD邏輯運算指令;在所述尾數(shù)取補碼電路中,SIMD邏輯運算指令的低路操作數(shù)的尾數(shù)取補碼操作復(fù) 用雙精度浮點數(shù)的取補加法器的低路,SIMD邏輯運算指令的高路操作數(shù)的尾數(shù)取補碼操作 復(fù)用雙精度浮點數(shù)的取補加法器的高路;在所述指數(shù)相減電路中,SIMD邏輯運算指令的低路操作數(shù)的指數(shù)相減操作復(fù)用指 數(shù)相減加法器的低路,SIMD邏輯運算指令的高路操作數(shù)的指數(shù)相減操作復(fù)用指數(shù)相減加 法器的高路;在所述尾數(shù)對階移位電路中,SIMD邏輯運算指令的低路操作數(shù)的尾數(shù)對階移位操 作復(fù)用雙精度浮點數(shù)的尾數(shù)對階移位器低路的尾數(shù)對階小移位器,SIMD邏輯運算指令的高 路操作數(shù)的尾數(shù)對階移位操作復(fù)用雙精度浮點數(shù)的數(shù)相減加法器高路的尾數(shù)對階小移位 器;在所述尾數(shù)相加電路中,SIMD邏輯運算指令的低路操作數(shù)的尾數(shù)相加操作復(fù)用雙 精度浮點數(shù)的尾數(shù)相加加法器的低路,SIMD邏輯運算指令的高路操作數(shù)的尾數(shù)相加操作復(fù) 用雙精度浮點數(shù)的尾數(shù)相加加法器的高路;在所述尾數(shù)和舍入操作電路中,SIMD邏輯運算指令的低路操作數(shù)的尾數(shù)和舍入操 作復(fù)用雙精度舍入加法器的低路,SIMD邏輯運算指令的高路操作數(shù)的尾數(shù)和舍入操作復(fù)用 雙精度舍入加法器的高路;在所述結(jié)果封裝電路中,SIMD邏輯運算指令的低路操作數(shù)的對尾數(shù)和進行規(guī)格化 調(diào)整操作復(fù)用低路規(guī)格化小移位器,SIMD邏輯運算指令的高路操作數(shù)的對尾數(shù)和進行規(guī)格 化調(diào)整操作復(fù)用高路規(guī)格化小移位器,SIMD邏輯運算指令的低路操作數(shù)的對指數(shù)進行規(guī)格化調(diào)整操作復(fù)用低路規(guī)格化加法器,SIMD邏輯運算指令的高路操作數(shù)的對指數(shù)進行規(guī)格化 調(diào)整操作復(fù)用高路規(guī)格化加法器。所述SIMD邏輯運算指令包括浮點加法SIMD指令或者浮點減法SIMD指令。作為優(yōu)選的一種方案所述執(zhí)行裝置還包括符號位調(diào)整電路,用于針對浮點操 作數(shù)的符號位進行取反或置0。進一步,所述SIMD邏輯運算指令包括浮點取反SIMD指令或者浮點取絕對值SIMD 指令。當執(zhí)行浮點取絕對值SIMD指令時,符號調(diào)整電路進行置0操作;當執(zhí)行浮點取反 SIMD指令時,符號調(diào)整電路進行取反。再進一步,所述執(zhí)行裝置還包括預(yù)數(shù)零邏輯電路,用于計算尾數(shù)和中第一個1出 現(xiàn)時的偏移量。通過采用預(yù)數(shù)零和規(guī)格化校準邏輯,加快運算結(jié)果的獲得。雙精度指令復(fù)用所述指數(shù)相減加法器的低路和部分高路,雙精度指令復(fù)用低路指 數(shù)規(guī)格化加法器和部分的高路指數(shù)規(guī)格化加法器。本發(fā)明的技術(shù)構(gòu)思為單指令多數(shù)據(jù)(Single Instruction MultipleData)操作 是一種微處理器設(shè)計中常用的用于提升運算速度、減少指令數(shù)量的技術(shù)。該技術(shù)的本質(zhì)是 利用雙精度數(shù)據(jù)的存儲空間存放兩組相互獨立的單精度數(shù)據(jù),兩組同時進行運算。該技術(shù) 的存在減少了完成大量數(shù)據(jù)進行相同運算的任務(wù)(例如多媒體圖形、圖像處理等)所必須 執(zhí)行的指令的總數(shù)量,使得單位時間內(nèi)浮點算術(shù)邏輯單元的數(shù)據(jù)吞吐量增加了一倍。浮點 算術(shù)邏輯單元數(shù)據(jù)吞吐量的增加對提高該任務(wù)的完成速度、降低完成該任務(wù)所需功耗具有 重要意義。浮點取絕對值SIMD指令和浮點取反SIMD指令在指令類型上歸屬于浮點加減法 SIMD指令。通過將浮點加減法SIMD指令的第二個源操作數(shù)固定為零,這兩種指令可以完全 復(fù)用浮點加減法SIMD指令的執(zhí)行電路。例如浮點數(shù)A的絕對值|A| = |A+0| ;浮點數(shù)A 的取反值 A= (A+0)。唯一需要增加的是符號位調(diào)整電路17。符號調(diào)整電路17根據(jù) 指令類型是取反指令還是取絕對值指令分別對符號位進行取反或置0 (0表示正數(shù))。為支持浮點運算的微處理器指令集在增加很少硬件資源的前提下,增加一條浮點 加法SIMD指令(形如FADDM),用于加快浮點加法的執(zhí)行速度。為支持浮點運算的微處理器指令集在增加很少硬件資源的前提下,增加一條浮點 減法SIMD指令(形如FSUBM),用于加快浮點減法的執(zhí)行速度。為支持浮點運算的微處理器指令集在增加很少硬件資源的前提下,增加一條浮點 取絕對值SIMD指令(形如FABSM),用于加快浮點取絕對值運算的執(zhí)行速度。為支持浮點運算的微處理器指令集在增加很少硬件資源的前提下,增加一條浮點 取反SIMD指令(形如FNEGM),用于加快浮點取反運算的執(zhí)行速度。本發(fā)明的有益效果主要表現(xiàn)在加快執(zhí)行裝置的運算速度。
圖1是典型的單精度或雙精度浮點加減法運算的數(shù)據(jù)通路的示意圖。圖2是四條浮點SIMD指令的活動的示意圖,其中,圖2 (a)表示FADDM Rd, Rm, Rn, 圖 2 (b)表示 FSUBM Rd, Rm, Rn,圖 2
(c)表示 FABSM Rd, Rn,圖 2 (d)表示 FNEGM Rd, Rn。
圖3是硬件資源復(fù)用的尾數(shù)取補碼電路的示意圖。圖4是硬件資源復(fù)用的指數(shù)相減電路的示意圖。圖5是硬件資源復(fù)用的尾數(shù)對階移位電路的示意圖。圖6是硬件資源復(fù)用的尾數(shù)相加電路的示意圖。圖7是硬件資源復(fù)用的尾數(shù)和舍入操作電路的示意圖。圖8是硬件資源復(fù)用的結(jié)果封裝電路的示意圖。圖9是雙精度指令和SIMD指令的符號位調(diào)整電路的示意圖,其中,圖9(a)表示雙 精度取反/取絕對值指令符號位調(diào)整電路,圖9 (b)表示SIMD取反/取絕對值指令符號位 調(diào)整電路。
具體實施例方式下面結(jié)合附圖對本發(fā)明作進一步描述。實施例1參照圖2 圖8,一種資源復(fù)用的浮點SIMD指令的執(zhí)行裝置,該執(zhí)行裝置包括尾數(shù)取補碼電路,用于將操作數(shù)尾數(shù)取補碼,統(tǒng)一加減法運算邏輯,包括雙精度浮 點數(shù)的取補加法器,單精度指令復(fù)用所述雙精度浮點數(shù)取補加法器的低路;指數(shù)相減電路,用于得到兩組操作數(shù)的指數(shù)差和大小關(guān)系,為尾數(shù)對階移位電路 準備控制信號,包括指數(shù)相減加法器,單精度指令復(fù)用所述指數(shù)相減加法器的低路;尾數(shù)對階移位電路,用于選擇較小的操作數(shù)尾數(shù)進行對階移位,使得浮點加減法 的兩個操作數(shù)指數(shù)相等,提供尾數(shù)相加電路的輸入數(shù)據(jù),包括雙精度浮點數(shù)的尾數(shù)對階移 位器,所述尾數(shù)對階移位器包括高路的尾數(shù)對階小移位器和低路的尾數(shù)對階小移位器,單 精度指令復(fù)用低路的小移位器;尾數(shù)相加電路,用于完成兩個操作數(shù)尾數(shù)的相加,得到補碼表示的尾數(shù)和,為舍入 操作做準備,包括雙精度尾數(shù)相加加法器,單精度指令復(fù)用所述雙精度尾數(shù)相加加法器的 低路;尾數(shù)和舍入操作電路,用于完成浮點加減法的舍入操作,包括雙精度舍入加法器, 單精度指令復(fù)用所述雙精度舍入加法器;結(jié)果封裝電路,用于對尾數(shù)和和指數(shù)進行規(guī)格化調(diào)整,將運算結(jié)果表示成規(guī)格化 的浮點形式,包括雙精度尾數(shù)和規(guī)格化調(diào)整的大移位器,所述大移位器包括低路規(guī)格化小 移位器和高路規(guī)格化小移位器,單精度指令復(fù)用低路規(guī)格化小移位器;還包括指數(shù)規(guī)格化 調(diào)整加法器,所述指數(shù)規(guī)格化調(diào)整加法器包括低路指數(shù)規(guī)格化加法器和高路指數(shù)規(guī)格化加 法器,單精度指令復(fù)用低路指數(shù)規(guī)格化加法器;所述執(zhí)行裝置還包括SIMD邏輯運算指令;在所述尾數(shù)取補碼電路中,SIMD邏輯運算指令的低路操作數(shù)的尾數(shù)取補碼操作復(fù) 用雙精度浮點數(shù)的取補加法器的低位,SIMD邏輯運算指令的高路操作數(shù)的尾數(shù)取補碼操作 復(fù)用雙精度浮點數(shù)的取補加法器的高位;在所述指數(shù)相減電路中,SIMD邏輯運算指令的低路操作數(shù)的指數(shù)相減操作復(fù)用雙 精度浮點數(shù)的指數(shù)相減加法器的低位,SIMD邏輯運算指令的高路操作數(shù)的指數(shù)相減操作復(fù) 用雙精度浮點數(shù)的指數(shù)相減加法器的高位;在所述尾數(shù)對階移位電路中,SIMD邏輯運算指令的低路操作數(shù)的尾數(shù)對階移位操作復(fù)用雙精度浮點數(shù)的尾數(shù)對階移位器低路的尾數(shù)對階小移位器,SIMD邏輯運算指令的高 路操作數(shù)的尾數(shù)對階移位操作復(fù)用雙精度浮點數(shù)的數(shù)相減加法器高路的尾數(shù)對階小移位 器;在所述尾數(shù)相加電路中,SIMD邏輯運算指令的低路操作數(shù)的尾數(shù)相加操作復(fù)用雙 精度浮點數(shù)的尾數(shù)相加加法器的低路,SIMD邏輯運算指令的高路操作數(shù)的尾數(shù)相加操作復(fù) 用雙精度浮點數(shù)的尾數(shù)相加加法器的高路;在所述尾數(shù)和舍入操作電路中,SIMD邏輯運算指令的低路操作數(shù)的尾數(shù)和舍入操 作復(fù)用雙精度舍入加法器的低路,SIMD邏輯運算指令的高路操作數(shù)的尾數(shù)和舍入操作復(fù) 用雙精度舍入加法器的高路;預(yù)數(shù)零邏輯電路,用于計算尾數(shù)和中第一個1出現(xiàn)時的偏移量;在所述結(jié)果封裝電路中,SIMD邏輯運算指令的低路操作數(shù)的對尾數(shù)和進行規(guī)格化 調(diào)整操作復(fù)用低路規(guī)格化小移位器,SIMD邏輯運算指令的高路操作數(shù)的對尾數(shù)和進行規(guī)格 化調(diào)整操作復(fù)用高路規(guī)格化小移位器;SIMD邏輯運算指令的低路操作數(shù)的對指數(shù)進行規(guī) 格化調(diào)整操作復(fù)用低路規(guī)格化加法器,SIMD邏輯運算指令的高路操作數(shù)的對指數(shù)進行規(guī)格 化調(diào)整操作復(fù)用高路規(guī)格化加法器。雙精度指令復(fù)用所述指數(shù)相減加法器的低路和部分高路,雙精度指令復(fù)用低路指 數(shù)規(guī)格化加法器和部分的高路指數(shù)規(guī)格化加法器。本實施例的SIMD邏輯運算指令包括浮點加法SIMD指令或者浮點減法SIMD指令。圖2示出了本裝置所執(zhí)行的指令活動。本裝置支持的指令集包括浮點加法的SIMD 指令(FADDM)、浮點減法的SIMD指令(FSUBM)、浮點取絕對值的SIMD指令(FABSM)和浮點 取反的SIMD指令(FNEGM)。SIMD指令的源操作數(shù)利用64位的雙精度(double)浮點數(shù)的存儲空間存放兩個 32位的單精度(Single)浮點數(shù)。SIMD低路(雙精度浮點格式寄存器的低32位)和SIMD 高路(雙精度浮點格式寄存器的高32位)在邏輯上完全獨立。圖2 (a)示出了浮點加法SIMD指令的數(shù)據(jù)流。其匯編語言表示類似FADDM Rd, Rffl, Rn這里,“FADDM”代表操作碼,標識了必須執(zhí)行的操作,&、Rm、I n代表雙精度浮點格式 的寄存器,每個寄存器的內(nèi)容都被看做兩個獨立的32位的單精度操作數(shù)。該指令表示將源 寄存器Rm、中的低32位(即圖2(a)中的OPll和0P21)相加后存放于&的低32位,將 源寄存器Rm、Rn中的高32位(即圖2(a)中的OPlh和0P2h)相加后存放于&的高32位, 從而用一條指令完成了兩個浮點加法運算。圖2 (b)示出了浮點減法SIMD指令的數(shù)據(jù)流。其匯編語言表示類似FSUBM Rd, Rffl, Rn這里,“FSUBM”代表操作碼,標識了必須執(zhí)行的操作,Rd、Rm、I n的意義與浮點加法的 SIMD指令相同。該指令表示將源寄存器Rm、I n中的低32位(即圖2(b)中的OPll和0P21) 相減后存放于&的低32位,將源寄存器Rm、I n中的高32位(即圖2 (b)中的OPlh和OP^1) 相減后存放于&的高32位,從而用一條指令完成了兩個浮點減法運算。圖2 (c)示出了浮點取絕對值SIMD指令的數(shù)據(jù)流。其匯編語言表示類似FABSM Rd, Rn
這里,“FABSM”代表操作碼,標識了必須執(zhí)行的操作,Rd、Rn的意義與浮點加法的 SIMD指令相同。該指令表示將源寄存器中的低32位(即圖2(c)中的0P11)取絕對值 后存放于&的低32位,將源寄存器中的高32位(即圖2(c)中的OPlh)取絕對值后存 放于&的高32位,從而用一條指令完成了兩個浮點取絕對值運算。
圖2(d)示出了浮點取反SIMD指令的數(shù)據(jù)流。其匯編語言表示類似 FNEGM Rd, Rn這里,“FNEGM”代表操作碼,標識了必須執(zhí)行的操作,Rd、Rn的意義與浮點加法的 SIMD指令相同。該指令表示將源寄存器中的低32位(即圖2(d)中的0P11)符號取反 后存放于&的低32位,將源寄存器中的高32位(即圖2(d)中的OPlh)符號取反后存 放于&的高32位,從而用一條指令完成了兩個浮點取反運算。圖3至圖8分別是本裝置 的各個子電路,其具體實施電路是按照流水線組織的。圖3示出了本裝置的操作數(shù)尾數(shù)取補碼電路,其特征是SIMD指令完全復(fù)用雙精度 浮點數(shù)取補碼運算的加法器(圖中標號為3 。對于雙精度浮點數(shù)來說,取補碼的操作數(shù)包 括Ubit符號位,Ibit規(guī)格化浮點數(shù)的前導(dǎo)1,52bits尾數(shù)位},因此,至少需要一個M位 取補加法器。對單精度浮點數(shù)而言,取補碼的操作數(shù)包括Ubit符號位,Ibit規(guī)格化浮點數(shù) 的前導(dǎo)l,23bits尾數(shù)位},共25位,而SIMD指令共需2X25 = 50位的取補加法器。因此, 單精度指令和SIMD指令的操作數(shù)取補加法器可以完全復(fù)用雙精度浮點數(shù)的M位取補加法 器。在一個具體實施例中,雙精度指令的尾數(shù)取補碼操作需要使用整個M位的加法器,單 精度指令的操作數(shù)取補加法器復(fù)用雙精度浮點數(shù)取補加法器的低25位。SIMD指令低路操 作數(shù)的尾數(shù)取補碼操作可以復(fù)用加法器35的低25位,SIMD指令高路操作數(shù)的尾數(shù)取補碼 操作可以復(fù)用加法器35的高25位,中間用4個零間隔。其他合理的比特位分布方案也可 以達到復(fù)用的目標。圖3中標號為33的操作數(shù)尾數(shù)選擇邏輯根據(jù)指令類型(single/double/SIMD,即 單精度/雙精度/單指令多數(shù)據(jù))從64位浮點寄存器1^和1^中提取出正確的操作數(shù)。對 于實際減法的指令(實際減法是指同號兩數(shù)相減或異號兩數(shù)相加,實際加法是指同號兩數(shù) 相加或異號兩數(shù)相減),需要對第二個操作數(shù)進行取補碼操作,由數(shù)據(jù)選擇器(MUX,圖中標 號為34)選取正確數(shù)據(jù)。取補碼操作包括取反和加1兩步,因此取補加法器的輸入進位信 號可能包括以下五種情況①單精度和雙精度指令實際減法的情況取補加法器輸入進位位為1 ;②單精度、雙精度指令和SIMD指令兩路均為實際加法的情況取補加法器輸入進 位位為0 ;③SIMD指令兩路均為實際減法的情況取補加法器輸入進位位在兩個對應(yīng)尾數(shù) 的最低位上加1 ;④SIMD指令高路為實際減法、低路為實際加法的情況取補加法器在高路尾數(shù)的 最低位上加1,而在低路尾數(shù)的最低位上加0 ;⑤SIMD指令高路為實際加法、低路為實際減法的情況取補加法器在高路尾數(shù)的 最低位上加0,而在低路尾數(shù)的最低位上加1。圖3中標號為35的加法器輸入進位選擇電路根據(jù)以上5中情況選擇對應(yīng)的取補加法器輸入進位信號。最后該電路將取補碼后的操作數(shù)存放于流水線寄存器中用于下一級尾數(shù)的對階 移位電路使用。圖4示出了本裝置的操作數(shù)指數(shù)相減電路,其特征是SIMD指令完全復(fù)用單精度和 雙精度浮點指令的指數(shù)相減加法器(圖中標號為44)。對于雙精度浮點數(shù)來說,加法器44需 要Ubit符號位,Ilbits指數(shù)位},共12位;對于單精度浮點數(shù)來說,加法器44需要{lbit 符號位,Sbits指數(shù)位},共9位;對于SIMD指令來說,指數(shù)相減加法器需要2X9 = 18位。 因此在一種可行的實施方案中,使用18比特的指數(shù)相減加法器,雙精度指令使用該加法器 的低12位,單精度指令使用加法器的低9位,SIMD指令低路使用該加法器的低9位,SIMD 指令高路使用該加法器的高9位。其它合理的方案,例如“將加法器44擴展位21位,雙精 度指令占用低12位,單精度指令占用高9位,SIMD指令高低路分別占用高低9位,中間用 零間隔”或者改變各類型指令占用加法器的位置等,均可以達到目標。其共同的特征是,在 雙精度和單精度指令的硬件基礎(chǔ)上,增加少量硬件開銷,實現(xiàn)SIMD指令指數(shù)相減的功能。圖4中標號為43的操作數(shù)指數(shù)選擇邏輯根據(jù)指令類型(single/double/SIMD,即 單精度/雙精度/單指令多數(shù)據(jù))從64位浮點寄存器R2m和I 2n中提取出正確的操作數(shù)指 數(shù),為指數(shù)相減加法器準備輸入。在一個具體實施例中,圖3和圖4示出的操作數(shù)尾數(shù)取補碼操作和指數(shù)相減操作 安排在同一級流水線中并行執(zhí)行,是本裝置流水線的第一級。圖5示出了操作數(shù)尾數(shù)的對階移位電路,其特征是SIMD指令完全復(fù)用雙精度指令 的尾數(shù)對階移位器(圖中標號為56、57)。雙精度浮點數(shù)的有效數(shù)字共有53位,因此雙精 度尾數(shù)對階移位器至少需要106比特,其原因是對于就近舍入(round to nearest, Std. IEEE754-1985浮點運算標準中定義的基本舍入模式),需要保留足夠的移位數(shù)字用于正確 舍入,若移位位數(shù)小于等于53位,則106比特的移位器自然可以滿足要求;若移位位數(shù)大于 53位,則移出數(shù)字的最高位必定為0,則可以判定移出數(shù)字必定小于0.5,所以106比特移 位器可以完全保證舍入信息的完整性。同理,對于單精度浮點數(shù)而言,尾數(shù)對階移位器只需 要2XM = 48位;對于SIMD指令而言,尾數(shù)對階移位器需要2X48 = 96位,因此單精度和 SIMD指令可以完全復(fù)用雙精度指令的對階移位器,而不需額外硬件開銷。在一個具體實施例中,106位的尾數(shù)對階移位器由兩個53位的尾數(shù)對階小移位器 組成。當當前指令為雙精度類型時,兩個尾數(shù)對階小移位器合成為一個大移位器;當當前指 令為單精度指令時,只需使用低路的尾數(shù)對階小移位器;當當前指令為SIMD時,SIMD指令 低路數(shù)據(jù)使用低路的尾數(shù)對階小移位器(圖中標號為57),高路數(shù)據(jù)使用高路的尾數(shù)對階 小移位器(圖中標號為56)。這樣實施的優(yōu)勢在于,即節(jié)省了硬件開銷,又有利于低功耗的 設(shè)計。其他合理的比特位分布方案也可以達到復(fù)用的目標。圖5中標號52的操作數(shù)選擇邏輯與圖3、圖4類似,根據(jù)當前指令類型從流水線寄 存器中選取正確的尾數(shù)。標號53的操作數(shù)尾數(shù)交換邏輯根據(jù)上級指數(shù)相減得到的兩操作 數(shù)的大小情況,選擇較小的操作數(shù)放入對階移位器中進行對階移位,同時將較大的操作數(shù) 存入流水線寄存器中。圖5示出的操作數(shù)尾數(shù)對階移位電路是本具體實施例的第二級流水線。圖6示出了尾數(shù)相加電路,其特征是SIMD指令完全復(fù)用雙精度指令的尾數(shù)相加加法器(圖中標號為65)。該加法器的兩個輸入是,流水線寄存器E1/E2中的未移位操作數(shù) (op_fix,圖中標號為62)和經(jīng)操作數(shù)選擇邏輯(圖中標號為64)選出的已移位操作數(shù)(op shift,圖中標號為63)。在一個具體實施例中,對于雙精度類型指令,加法器65的輸入是{lbit符號位,1 比特進位位,53bit有效數(shù)字位,Ibit移出數(shù)字的最高位},共56位;同理,對于單精度類型 指令,加法器65的輸入是{lbit符號位,1比特進位位,24bit有效數(shù)字位,Ibit移出數(shù)字的 最高位},共27位;對于SIMD類型指令,加法器65的輸入共2 X 27 = M位。因此單精度 指令和SIMD指令可以完全復(fù)用56位的雙精度尾數(shù)相加加法器。在具體實施例中,單精度 指令尾數(shù)相加復(fù)用加法器65的低27位;SIMD指令低路的尾數(shù)相加復(fù)用加法器65的低27 位,SIMD指令高路的尾數(shù)相加復(fù)用加法器65的高27位,中間用2比特零間隔。其他合理 的比特位分布方案也可以達到復(fù)用的目的。加法器65的運算結(jié)果即為用補碼表示的尾數(shù)和,用于下一步的舍入操作和預(yù)數(shù) 零操作。圖7示出了尾數(shù)和的舍入操作電路,其特征是SIMD指令完全復(fù)用雙精度指令的舍 入加法器(圖中標號為77)。舍入加法器的特征是將補碼表示的尾數(shù)和(圖中標號為73) 求原碼過程(取反加1)中的加1操作和舍入進位邏輯相統(tǒng)一,共用一個舍入加法器。其原 因是求原碼過程中的加1操作是在無限精度的尾數(shù)和的最低位上加1,而舍入進位則是在 規(guī)格化浮點數(shù)的最低有效位上加1,因此求原碼過程中的加1操作不一定會影響最終的結(jié) 果。在一個具體實施例中,通過一種算法將這兩個加1操作相統(tǒng)一,由舍入控制邏輯(圖中 標號為74)判斷是否需要在最低有效位上加1,并以此來控制數(shù)據(jù)選擇器76選擇0或1。數(shù) 據(jù)選擇器75則根據(jù)當前尾數(shù)和是否為負數(shù)來選取尾數(shù)的原始值或后尾數(shù)和的取反值。舍入準備邏輯(圖中標號為72)為舍入控制邏輯提供必要的舍入信息,即對階移 位過程中移出數(shù)字與0. 5比較的大小情況,包括四種信息移出數(shù)字大于0. 5,移出數(shù)字等 于0. 5,移出數(shù)值小于0. 5且不等于0,移出數(shù)字等于0。舍入控制邏輯(圖中標號為74)根據(jù)舍入準備邏輯提供的四條信息以及補碼表示 的尾數(shù)和,決定尾數(shù)和的最低有效位以及是否在尾數(shù)和的最低有效位上加1。在一個具體實施例中,對于雙精度類型指令,舍入加法器的輸入是55位尾數(shù)和 (尾數(shù)相加加法器的56位運算結(jié)果去掉一位符號位);對于單精度類型指令,舍入加法器的 輸入是沈位尾數(shù)和(尾數(shù)相加加法器的27位運算結(jié)果去掉一位符號位);對于SIMD類型 指令,舍入加法器的輸入是2X^5 = 52位尾數(shù)和,因此,單精度和SIMD類型指令可以完全 復(fù)用該55位舍入加法器。一種合理的比特位分配方案是單精度類型指令占用舍入加法器 的低沈位;SIMD指令的低路占用舍入加法器的低沈位,SIMD指令的高路占用舍入加法器 的高沈位,中間用三個零間隔。其他合理的比特位分配方案也可以達到復(fù)用目的。在一個具體實施例中,經(jīng)舍入操作后的尾數(shù)和存放在流水線寄存器E2/E3中為下 一級做準備。圖6和圖7示出的尾數(shù)相加電路和尾數(shù)和舍入電路組成了本裝置的第三級流 水線。圖8示出了指數(shù)和尾數(shù)的規(guī)格化調(diào)整電路,其特征在于SIMD指令指數(shù)規(guī)格化調(diào)整 的兩個加法器(圖中標號為86、87)是在復(fù)用雙精度類型指令的指數(shù)規(guī)格化調(diào)整加法器的 基礎(chǔ)上增加少量位寬實現(xiàn)的;SIMD指令尾數(shù)和規(guī)格化調(diào)整的移位器復(fù)用雙精度類型指令的尾數(shù)和規(guī)格化移位器(圖中標號為88)。本電路的另一個特征是在上一級(E2級)采用 預(yù)數(shù)零邏輯,得到尾數(shù)和中第一個1出現(xiàn)時數(shù)過的數(shù)字個數(shù),稱為偏移量(bias,圖中標號 為83),在本級(E3級)進行校準,從而加快了運算結(jié)果的獲得速度。在一個具體實施例中,對于實際加法的情況,尾數(shù)和只可能有兩種情況有一位進 位、既無進位也無借位,所以數(shù)據(jù)選擇器(圖中標號為8 選通零,表示尾數(shù)和的第一個1 無偏移。因為預(yù)數(shù)零邏輯的輸入是舍入前的尾數(shù)和,舍入操作可能造成進位,因此若舍入造 成了進位,則應(yīng)向指數(shù)加上1,數(shù)據(jù)選擇器(圖中標號為89)選擇加法器87的結(jié)果作為最終 結(jié)果的指數(shù);若舍入無進位,則指數(shù)不需校準,數(shù)據(jù)選擇器89選擇加法器86的結(jié)果作為最 終結(jié)果的指數(shù)。舍入是否有進位的信息存于流水線寄存器E2/E3中,由該信號控制數(shù)據(jù)選 擇器89。需要注意的是,若預(yù)數(shù)零邏輯的輸入是舍入后的尾數(shù)和,則不需要校準,但對時序 延遲非常不利,本發(fā)明包括了這兩種預(yù)數(shù)零邏輯。對于實際減法的情況,尾數(shù)和可能有以下三種情況既無進位也無借位、有一位借 位、有多位借位。對于第三種情況,則結(jié)果必然精確,舍入操作不影響結(jié)果。對于實際減法 的情況,指數(shù)需要減去預(yù)數(shù)零得到的偏移量。若舍入造成了進位,則應(yīng)向指數(shù)加上1校準, 數(shù)據(jù)選擇器89選擇加法器87的結(jié)果作為最終結(jié)果的指數(shù);若舍入沒有造成進位,則指數(shù)不 需校準,數(shù)據(jù)選擇器89選擇加法器86的結(jié)果作為最終結(jié)果的指數(shù)。在一個具體實施例中,雙精度類型指令的指數(shù)規(guī)格化調(diào)整需要兩個11位的加法 器,單精度類型指令的指數(shù)規(guī)格化調(diào)整需要兩個8位加法器,SIMD類型指令的指數(shù)規(guī)格化 調(diào)整需要兩個16位的加法器,因此一種可行的方案是采用兩個16位的加法器來實現(xiàn)圖中 的加法器86、87。一種可行的比特位分配方案是雙精度類型指令的指數(shù)規(guī)格化調(diào)整占用 加法器86、87的低11位;單精度類型指令的指數(shù)規(guī)格化調(diào)整占用加法器86、87的低8位; SIMD類型指令低路指數(shù)規(guī)格化調(diào)整占用加法器86、87的低8位,SIMD類型指令高路指數(shù)規(guī) 格化調(diào)整占用加法器86、87的高8位。這樣在單精度和雙精度指令執(zhí)行的基礎(chǔ)上,增加很 少硬件資源,就實現(xiàn)了 SIMD指令指數(shù)的規(guī)格化調(diào)整。其他合理的比特位分配方案也可以達 到復(fù)用的目的。在一個具體實施例中,規(guī)格化移位器(圖中標號為88)的輸入是上一級(E2級) 舍入操作的輸出(存放在流水線寄存器E2/E3中)。因此雙精度類型指令的尾數(shù)規(guī)格化移 位需要一個55位的移位器;單精度類型指令的尾數(shù)規(guī)格化移位只需一個沈位的移位器; SIMD類型指令的尾數(shù)規(guī)格化移位需要兩個沈位的移位器。55位的規(guī)格化移位器(圖中標 號為78)由兩個規(guī)格化小移位器組成 位的高路移位器和立的低路移位器。當當前 指令為雙精度指令時,兩個規(guī)格化小移位器合成為一個大移位器;當當前指令為單精度指 令時,只需使用低路的規(guī)格化小移位器;當當前指令為SIMD指令時,SIMD指令低路數(shù)據(jù)使 用低路的規(guī)格化小移位器,高路數(shù)據(jù)使用高路的規(guī)格化小移位器。這樣實施的優(yōu)勢在于,即 節(jié)省了硬件開銷,又有利于低功耗的設(shè)計。其他合理的比特位分布方案也可以達到復(fù)用的 目標。實施例2參照圖9,本實施例的執(zhí)行裝置還包括符號位調(diào)整電路,用于針對浮點操作數(shù) 的符號位進行取反或置0。所述SIMD邏輯運算指令包括浮點取絕對值SIMD指令或者浮點取反SIMD指令。
浮點取絕對值SIMD指令和浮點取反SIMD指令在指令類型上歸屬于浮點加減法 SIMD指令。通過將浮點加減法SIMD指令的第二個源操作數(shù)固定為零,這兩種指令可以完全 復(fù)用浮點加減法SIMD指令的執(zhí)行電路。例如浮點數(shù)A的絕對值|A| = |A+0| ;浮點數(shù)A 的取反值 A= (A+0)。唯一需要增加的是符號位調(diào)整電路。圖9分別示出了浮點取反 /取絕對值雙精度指令和浮點取反/取絕對值SIMD指令的符號位調(diào)整電路。浮點取反/取 絕對值SIMD指令的符號位調(diào)整電路的特征是在復(fù)用浮點取反/取絕對值雙精度的符號位 調(diào)整電路的基礎(chǔ)上,通過增加少量邏輯實現(xiàn)其功能。雙精度取反指令只需對雙精度浮點數(shù) 最高位(即符號位,雙精度浮點數(shù)的第63位)取反即可,雙精度取絕對值指令只需將雙精 度浮點數(shù)最高位設(shè)置為0(符號位為0表示浮點數(shù)為正,符號位為1表示浮點數(shù)為負)。同 理,浮點取反/取絕對值單精度指令可通過將單精度浮點數(shù)放到雙精度浮點數(shù)寄存器的高 32位來復(fù)用雙精度指令的符號位調(diào)整電路。對于浮點取反/取絕對值SIMD指令,其高路數(shù) 據(jù)同單精度指令一樣可以完全復(fù)用雙精度指令的符號位調(diào)整電路;而低路數(shù)據(jù)則需增加額 外邏輯來實現(xiàn)符號位調(diào)整的功能。在一個具體實施例中,符號位調(diào)整電路通過判斷指令為取反或取絕對值,以及指 令類型是否為SIMD指令來調(diào)整符號位。無論指令類型為單精度、雙精度或者SIMD,雙精度 浮點數(shù)寄存器的最高位都需要進行調(diào)整。因此需要使用數(shù)據(jù)選擇器92 ;當指令為取反指令 時,數(shù)據(jù)選擇器92選擇取反后的符號位;當指令為取絕對值指令時,數(shù)據(jù)選擇器92選擇0 作為符號位的值。當指令類型為SIMD指令時,還需對低路數(shù)據(jù)的符號位進行調(diào)整。數(shù)據(jù)選 擇器93實現(xiàn)了同數(shù)據(jù)選擇器92類似的功能當指令為取反指令時,數(shù)據(jù)選擇器93選擇取 反后的符號位;當指令為取絕對值指令時,數(shù)據(jù)選擇器93選擇0作為符號位的值。在此基 礎(chǔ)上,當指令類型為SIMD指令時,數(shù)據(jù)選擇器94選擇調(diào)整過后的符號位作為低路數(shù)據(jù)的符 號位;否則數(shù)據(jù)選擇器94選擇該位的原始數(shù)據(jù)寫入流水線寄存器。在一個具體實施例中,調(diào)整過后的符號位存放在流水線寄存器E1/E2中供E2級流 水線使用。應(yīng)該認識到,本實施例根據(jù)各個電路的輸出結(jié)果限定了上述以及如權(quán)利要求定義 的硬件資源復(fù)用的電路結(jié)構(gòu)。應(yīng)該注意,可用多種不同的比特位分布策略來獲得相同或部 分相同的結(jié)果。應(yīng)該注意,根據(jù)集成電路工藝的不同和主頻設(shè)計指標的不同,流水線的劃分 有多種不同方式。本發(fā)明包括了所有這些資源復(fù)用的浮點SIMD指令執(zhí)行裝置電路結(jié)構(gòu)的 所有變化形式。
權(quán)利要求
1. 一種資源復(fù)用的浮點SIMD指令的執(zhí)行裝置,該執(zhí)行裝置包括 尾數(shù)取補碼電路,用于將操作數(shù)尾數(shù)取補碼,統(tǒng)一加減法運算邏輯,包括雙精度浮點數(shù) 的取補加法器,單精度指令復(fù)用雙精度浮點數(shù)的取補加法器的低路;指數(shù)相減電路,用于得到兩組操作數(shù)的指數(shù)差和大小關(guān)系,為尾數(shù)對階移位電路準備 控制信號,包括指數(shù)相減加法器,所述指數(shù)相減加法器分為高路和低路,單精度指令復(fù)用指 數(shù)相減加法器的低路;尾數(shù)對階移位電路,用于選擇較小的操作數(shù)尾數(shù)進行對階移位,使得浮點加減法的兩 個操作數(shù)指數(shù)相等,提供尾數(shù)相加電路的輸入數(shù)據(jù),包括雙精度浮點數(shù)的尾數(shù)對階移位器, 所述尾數(shù)對階移位器包括高路的尾數(shù)對階小移位器和低路的尾數(shù)對階小移位器,單精度指 令復(fù)用低路的尾數(shù)對階小移位器,尾數(shù)相加電路,用于完成兩個操作數(shù)尾數(shù)的相加,得到補碼表示的尾數(shù)和,為舍入操 作做準備,包括雙精度尾數(shù)相加加法器,單精度指令復(fù)用所述雙精度尾數(shù)相加加法器的低 路;尾數(shù)和舍入操作電路,用于完成浮點加減法的舍入操作,包括雙精度舍入加法器,單精 度指令復(fù)用所述雙精度舍入加法器;結(jié)果封裝電路,用于對尾數(shù)和和指數(shù)進行規(guī)格化調(diào)整,將運算結(jié)果表示成規(guī)格化的浮 點形式,包括雙精度尾數(shù)和規(guī)格化調(diào)整的大移位器,所述大移位器包括低路規(guī)格化小移位 器和高路規(guī)格化小移位器,單精度指令復(fù)用低路規(guī)格化小移位器;還包括指數(shù)規(guī)格化調(diào)整 加法器,所述指數(shù)規(guī)格化調(diào)整加法器包括低路指數(shù)規(guī)格化加法器和高路指數(shù)規(guī)格化加法 器,單精度指令復(fù)用低路指數(shù)規(guī)格化加法器;其特征在于所述執(zhí)行裝置還包括SIMD邏輯運算指令;在所述尾數(shù)取補碼電路中,SIMD邏輯運算指令的低路操作數(shù)的尾數(shù)取補碼操作復(fù)用雙 精度浮點數(shù)的取補加法器的低路,SIMD邏輯運算指令的高路操作數(shù)的尾數(shù)取補碼操作復(fù)用 雙精度浮點數(shù)的取補加法器的高路;在所述指數(shù)相減電路中,SIMD邏輯運算指令的低路操作數(shù)的指數(shù)相減操作復(fù)用雙精度 浮點數(shù)的指數(shù)相減加法器的低路,SIMD邏輯運算指令的高路操作數(shù)的指數(shù)相減操作復(fù)用雙 精度浮點數(shù)的指數(shù)相減加法器的高路;在所述尾數(shù)對階移位電路中,SIMD邏輯運算指令的低路操作數(shù)的尾數(shù)對階移位操作復(fù) 用雙精度浮點數(shù)的尾數(shù)對階移位器低路的小尾數(shù)對階移位器,SIMD邏輯運算指令的高路操 作數(shù)的尾數(shù)對階移位操作復(fù)用雙精度浮點數(shù)的數(shù)相減加法器高路的小尾數(shù)對階移位器;在所述尾數(shù)相加電路中,SIMD邏輯運算指令的低路操作數(shù)的尾數(shù)相加操作復(fù)用雙精度 浮點數(shù)的尾數(shù)相加加法器的低路,SIMD邏輯運算指令的高路操作數(shù)的尾數(shù)相加操作復(fù)用雙 精度浮點數(shù)的尾數(shù)相加加法器的高路;在所述尾數(shù)和舍入操作電路中,SIMD邏輯運算指令的低路操作數(shù)的尾數(shù)和舍入操作復(fù) 用雙精度舍入加法器的低路,SIMD邏輯運算指令的高路操作數(shù)的尾數(shù)和舍入操作復(fù)用雙精 度舍入加法器的高路;在所述結(jié)果封裝電路中,SIMD邏輯運算指令的低路操作數(shù)的對尾數(shù)和進行規(guī)格化調(diào)整 操作復(fù)用低路小規(guī)格化移位器,SIMD邏輯運算指令的高路操作數(shù)的對尾數(shù)和進行規(guī)格化調(diào) 整操作復(fù)用高路小規(guī)格化移位器;SIMD邏輯運算指令的低路操作數(shù)的對指數(shù)進行規(guī)格化調(diào)整操作復(fù)用低路規(guī)格化加法器,SIMD邏輯運算指令的高路操作數(shù)的對指數(shù)進行規(guī)格化調(diào) 整操作復(fù)用高路規(guī)格化加法器。
2.如權(quán)利要求1所述的資源復(fù)用的浮點SIMD指令的執(zhí)行裝置,其特征在于所述執(zhí)行 裝置還包括符號位調(diào)整電路,用于針對浮點操作數(shù)的符號位進行取反或置0。
3.如權(quán)利要求1所述的資源復(fù)用的浮點SIMD指令的執(zhí)行裝置,其特征在于所述SIMD 邏輯運算指令包括浮點加法SIMD指令或者浮點減法SIMD指令。
4.如權(quán)利要求2所述的資源復(fù)用的浮點SIMD指令的執(zhí)行裝置,其特征在于所述SIMD 邏輯運算指令包括浮點取絕對值SIMD指令或者浮點取反SIMD指令。
5.如權(quán)利要求1-4之一所述的所述的資源復(fù)用的浮點SIMD指令的執(zhí)行裝置,其特征在 于所述執(zhí)行裝置還包括預(yù)數(shù)零邏輯電路,用于計算尾數(shù)和中第一個1出現(xiàn)時的偏移量。
6.如權(quán)利要求1-4之一所述的所述的資源復(fù)用的浮點SIMD指令的執(zhí)行裝置,其特征在 于雙精度指令復(fù)用所述指數(shù)相減加法器的低路和部分高路,雙精度指令復(fù)用低路指數(shù)規(guī) 格化加法器和部分的高路指數(shù)規(guī)格化加法器。
全文摘要
一種資源復(fù)用的浮點SIMD指令的執(zhí)行裝置,包括尾數(shù)取補碼電路、指數(shù)相減電路、尾數(shù)對階移位電路、尾數(shù)相加電路、尾數(shù)和舍入操作電路和結(jié)果封裝電路;還包括SIMD邏輯運算指令;在各個具體執(zhí)行電路中,SIMD邏輯運算指令的低路操作數(shù)和高路操作數(shù)均復(fù)用雙精度浮點數(shù)的運算的硬件資源。本發(fā)明提供一種能夠加快單精度浮點運算的執(zhí)行速度的資源復(fù)用的浮點SIMD指令的執(zhí)行裝置。
文檔編號G06F7/57GK102087590SQ200910155140
公開日2011年6月8日 申請日期2009年12月3日 優(yōu)先權(quán)日2009年12月3日
發(fā)明者嚴曉浪, 傅可威, 孟建熠, 高金加 申請人:浙江大學(xué)