專(zhuān)利名稱(chēng):Java處理器浮點(diǎn)運(yùn)算單元及其控制方法
技術(shù)領(lǐng)域:
本發(fā)明屬于嵌入式處理器設(shè)計(jì)技術(shù)領(lǐng)域,具體來(lái)說(shuō),涉及ー種支持浮點(diǎn)類(lèi)型運(yùn)算,可以使得浮點(diǎn)運(yùn)算更加直接高效,并且滿(mǎn)足嵌入式系統(tǒng)對(duì)高精度運(yùn)算的要求的Java處理器浮點(diǎn)運(yùn)算單元及其控制方法。
背景技術(shù):
隨著Java語(yǔ)言在嵌入式領(lǐng)域中的應(yīng)用日益廣泛,Java處理器也逐漸受到系統(tǒng)開(kāi)發(fā)者的青睞。Java處理器通過(guò)硬件的方式實(shí)現(xiàn)了 Java虛擬機(jī)(Java Virtual Machine,JVM),可以直接運(yùn)行Java字節(jié)碼。與Java虛擬機(jī)相同,Java處理器多數(shù)采用堆棧體系結(jié)構(gòu),即在Java處理器系統(tǒng)中,絕大部分的Java字節(jié)碼的操作都與堆棧有夫。當(dāng)前嵌入式應(yīng)用對(duì)高精度運(yùn)算的需求越來(lái)越大,這就要求Java處理器必須具備浮點(diǎn)運(yùn)算能力。一部分Java處理器通過(guò)軟件的方式來(lái)實(shí)現(xiàn)浮點(diǎn)運(yùn)算指令,即把浮點(diǎn)運(yùn)算指令翻譯成一段整型運(yùn)算程序,從而實(shí)現(xiàn)浮點(diǎn)運(yùn)算,這種方式的優(yōu)點(diǎn)是不需要額外的硬件支持,缺點(diǎn)是效率極低。另一部分Java處理器通過(guò)硬件的方式來(lái)支持浮點(diǎn)運(yùn)算指令,即設(shè)計(jì)專(zhuān)門(mén)的浮點(diǎn)運(yùn)算單元(Floating Point Unit, FPU)來(lái)進(jìn)行浮點(diǎn)類(lèi)型的運(yùn)算,這種方式的缺點(diǎn)是需要額外的硬件支持,優(yōu)點(diǎn)是效率比軟件方式的高,然而在半導(dǎo)體技術(shù)飛速發(fā)展的今天,在大多數(shù)場(chǎng)合,效率遠(yuǎn)比硬件消耗重要。在國(guó)內(nèi)外為數(shù)不多的Java處理器中,具備很高實(shí)用價(jià)值和研究?jī)r(jià)值,同時(shí)屬于開(kāi)源項(xiàng)目的有奧地利Wien大學(xué)的學(xué)者M(jìn)artin Schoeberl設(shè)計(jì)的JOP (Java OptimizedProcessor).,在JOP系統(tǒng)中,浮點(diǎn)運(yùn)算單元是作為外圍設(shè)備模塊,掛載在JOP自定義的系統(tǒng)總線SimCon上的,它有獨(dú)立的訪問(wèn)地址,Java處理器核心需要把浮點(diǎn)運(yùn)算的操作數(shù)、運(yùn)算符以及舍入方式等分別寫(xiě)入相應(yīng)的地址,才能使得浮點(diǎn)運(yùn)算單元開(kāi)始工作,浮點(diǎn)運(yùn)算單元準(zhǔn)備好運(yùn)算結(jié)果后,處理器核心需要經(jīng)過(guò)總線去讀取相應(yīng)的地址才能獲得這個(gè)結(jié)果。這個(gè)方法的優(yōu)點(diǎn)是簡(jiǎn)單、易于管理,但是浮點(diǎn)運(yùn)算單元與Java處理器核心之間經(jīng)過(guò)了總線,導(dǎo)致通信不直接,從而極大地限制了運(yùn)行效率的提高。中國(guó)專(zhuān)利申請(qǐng)?zhí)?00710179973. 6的專(zhuān)利申請(qǐng)“ー種并行浮點(diǎn)乘加單元”中公開(kāi)了一種浮點(diǎn)運(yùn)算單元,可以同時(shí)實(shí)行一條加法指令和一條乘法指令,對(duì)ー些發(fā)生了數(shù)據(jù)相關(guān)的連續(xù)兩條指令進(jìn)行加速。但是在基于堆棧體系結(jié)構(gòu)的Java處理器系統(tǒng)中,一次只能提供兩個(gè)操作數(shù),分別存放于堆棧的棧頂(TOS)和次棧頂(N0S),因此無(wú)法采用此種并行運(yùn)算的方法。
發(fā)明內(nèi)容
針對(duì)以上的不足,本發(fā)明提供了ー種Java處理器浮點(diǎn)運(yùn)算單元及其控制方法,本發(fā)明通過(guò)浮點(diǎn)運(yùn)算單元和對(duì)應(yīng)的控制方法,不僅提供了浮點(diǎn)類(lèi)型運(yùn)算的支持,還可以使得浮點(diǎn)運(yùn)算更加直接高效,以滿(mǎn)足嵌入式系統(tǒng)對(duì)高精度運(yùn)算的要求。本發(fā)明的Java處理器浮點(diǎn)運(yùn)算單元作為硬件加速器直接連接至Java處理器核心,用于接收來(lái)自于Java處理器核心的開(kāi)始信號(hào)、操作數(shù)A、操作數(shù)B和運(yùn)算符,根據(jù)運(yùn)算符對(duì)操作數(shù)A和操作數(shù)B進(jìn)行相關(guān)運(yùn)算操作,并將完成信號(hào)和運(yùn)算結(jié)果發(fā)送至Java處理器核心。它包括進(jìn)行各種運(yùn)算操作的運(yùn)算單元和多路輸出選擇器,Java處理器浮點(diǎn)運(yùn)算單元根據(jù)運(yùn)算符選擇相應(yīng)的運(yùn)算單元對(duì)操作數(shù)A和操作數(shù)B進(jìn)行相關(guān)運(yùn)算操作,運(yùn)算單元分為加減運(yùn)算單元、乘運(yùn)算単元和除運(yùn)算單元,加減運(yùn)算單元對(duì)操作數(shù)A和操作數(shù)B進(jìn)行加減運(yùn)算操作;乘運(yùn)算單元對(duì)操作數(shù)A和操作數(shù)B進(jìn)行乘法運(yùn)算操作;除運(yùn)算單元對(duì)操作數(shù)A和操作數(shù)B進(jìn)行除法運(yùn)算操作,多路輸出選擇器根據(jù)運(yùn)算符選擇相應(yīng)的運(yùn)算單元的運(yùn)算結(jié)果寄存器,并將完成信號(hào)和該寄存器內(nèi)的運(yùn)算結(jié)果發(fā)送至Java處理器核心。所述多路輸出選擇器同時(shí)還檢查運(yùn)算操作和待輸出的運(yùn)算結(jié)果是否觸發(fā)標(biāo)準(zhǔn)定義的浮點(diǎn)異常,如果是,則輸出相應(yīng)的異常信號(hào);否則直接輸出完成信號(hào)和待輸出的運(yùn)算結(jié) 果O所述異常信號(hào)包括溢出、下溢、被零除、無(wú)窮大、零、不準(zhǔn)確、非法操作QNAN和非法操作SNAN。 每一所述運(yùn)算単元均由三級(jí)流水實(shí)現(xiàn),第一級(jí)流水線前置規(guī)格化,把操作數(shù)的格式轉(zhuǎn)換成內(nèi)部更容易處理的格式;第二級(jí)流水線運(yùn)算核心,完成基本的加法、減法、乘法或者除法算木運(yùn)算操作;第三級(jí)流水線后置規(guī)格化,把運(yùn)算結(jié)果轉(zhuǎn)換成IEEE 754標(biāo)準(zhǔn)聲明的浮點(diǎn)表示格式。所述算術(shù)運(yùn)算操作包括對(duì)階碼和尾數(shù)相應(yīng)的算術(shù)運(yùn)算操作。它還接收來(lái)自于Java處理器核心的舍入方式信號(hào),運(yùn)算核心對(duì)初步的運(yùn)算結(jié)果進(jìn)行舍入操作。所述舍入方式采用就近舍入方式、向零舍入方式、向上舍入方式或向下舍入方式。本發(fā)明的Java處理器浮點(diǎn)運(yùn)算單元的控制方法包括如下步驟步驟一,把浮點(diǎn)運(yùn)算單元作為硬件加速器連接到Java處理器核心;步驟ニ,定義專(zhuān)門(mén)的本地指令,即專(zhuān)門(mén)用于控制浮點(diǎn)運(yùn)算單元的控制微碼,控制微碼控制浮點(diǎn)運(yùn)算單元完成從讀取參數(shù)到返回運(yùn)算結(jié)果的整個(gè)過(guò)程;步驟三,根據(jù)控制微碼實(shí)現(xiàn)Java字節(jié)碼中浮點(diǎn)運(yùn)算指令。所述控制微碼包括控制浮點(diǎn)運(yùn)算單元完成讀取參數(shù)操作和基本運(yùn)算操作的第一類(lèi)微碼,以及控制浮點(diǎn)運(yùn)算單元將運(yùn)算結(jié)果返回到Java處理器核心的第二類(lèi)微碼。本發(fā)明的有益效果本發(fā)明設(shè)計(jì)的浮點(diǎn)運(yùn)算單元非常適用于Java處理器的堆棧體系結(jié)構(gòu),而且完全符合IEEE 754標(biāo)準(zhǔn),此外還提出了相應(yīng)的控制方法,使得浮點(diǎn)運(yùn)算單元能真正融入Java處理器,從而使得Java處理器運(yùn)行浮點(diǎn)字節(jié)碼指令更加直接、高效。
圖I為本發(fā)明的Java處理器浮點(diǎn)運(yùn)算單元的框架示意圖;圖2為本發(fā)明的浮點(diǎn)運(yùn)算單元連接到Java處理器核心的原理示意圖;圖3為本發(fā)明執(zhí)行浮點(diǎn)運(yùn)算字節(jié)碼前后堆棧變化情況示意圖;圖4為本發(fā)明用微碼程序段實(shí)現(xiàn)Java字節(jié)碼示意圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明進(jìn)行進(jìn)ー步闡述。本發(fā)明的浮點(diǎn)運(yùn)算單元及其控制方法,是針對(duì)基于堆棧體系結(jié)構(gòu)的Java處理器系統(tǒng)的,該浮點(diǎn)運(yùn)算單元接ロ簡(jiǎn)單,非常適合與Java處理器核心連接,可以與堆棧體系結(jié)構(gòu)完美融合;相應(yīng)的控制方法貫穿從底層的微碼到上層的Java字節(jié)碼,直接高效。如圖I和圖2,本發(fā)明的Java處理器浮點(diǎn)運(yùn)算單元(簡(jiǎn)稱(chēng)為FPU)作為硬件加速器直接連接至Java處理器核心,整個(gè) FPU的輸入端ロ接收來(lái)自于Java處理器核心的時(shí)鐘輸入、開(kāi)始信號(hào)(start)、操作數(shù)A、操作數(shù)B、運(yùn)算符以和舍入方式,F(xiàn)PU輸出端ロ包括完成信號(hào)(ready)、運(yùn)算結(jié)果和異常輸出。FPU包括運(yùn)算單元和多路輸出選擇器,F(xiàn)PU根據(jù)輸入的運(yùn)算符選擇相應(yīng)的運(yùn)算單元對(duì)操作數(shù)A和操作數(shù)B進(jìn)行相關(guān)運(yùn)算操作,運(yùn)算單元實(shí)現(xiàn)各種基本運(yùn)算操作,運(yùn)算單元分為加減運(yùn)算單元、乘運(yùn)算単元和除運(yùn)算單元,加減運(yùn)算單元對(duì)操作數(shù)A和操作數(shù)B進(jìn)行加減運(yùn)算操作;乘運(yùn)算單元對(duì)操作數(shù)A和操作數(shù)B進(jìn)行乘法運(yùn)算操作;除運(yùn)算單元對(duì)操作數(shù)A和操作數(shù)B進(jìn)行除法運(yùn)算操作,多路輸出選擇器根據(jù)輸入的運(yùn)算符選擇相應(yīng)的運(yùn)算單元的運(yùn)算結(jié)果寄存器,同時(shí)還檢查運(yùn)算操作和待輸出的運(yùn)算結(jié)果是否觸發(fā)標(biāo)準(zhǔn)定義的浮點(diǎn)異常,如果是,則輸出相應(yīng)的異常信號(hào);否則直接將完成信號(hào)(ready)和該寄存器內(nèi)的運(yùn)算結(jié)果發(fā)送至Java處理器核心,其中,異常信號(hào)包括溢出、下溢、被零除、無(wú)窮大、零、不準(zhǔn)確、非法操作QNAN和非法操作SNAN。操作數(shù)A和操作數(shù)B分別來(lái)自Java處理器核心堆棧的棧頂(TOS)和次棧頂(NOS),運(yùn)算符和舍入方式來(lái)自Java處理器核心的譯碼模塊,當(dāng)來(lái)自的譯碼模塊的運(yùn)算開(kāi)始信號(hào)(start)為高電平吋,F(xiàn)PU開(kāi)始工作,其運(yùn)算步驟如下步驟A,根據(jù)運(yùn)算符的值選擇相應(yīng)的運(yùn)算單元。運(yùn)算符值為“00”吋,為加法運(yùn)算,選擇加減運(yùn)算單元,為“01”吋,為減法運(yùn)算,同樣是選擇加減運(yùn)算單元,為“ 10”吋,選擇乘運(yùn)算單元,為“ 11”時(shí),選擇除運(yùn)算單元。步驟B,啟動(dòng)相應(yīng)運(yùn)算単元的前置規(guī)格化。把操作數(shù)A和操作數(shù)B的格式轉(zhuǎn)換成內(nèi)部更容易處理的格式,即把操作數(shù)的尾數(shù)轉(zhuǎn)換成規(guī)格化數(shù)。步驟C,根據(jù)相應(yīng)的算法完成基本的算木運(yùn)算。包括階碼和尾數(shù)相應(yīng)的算木運(yùn)算,另外還需要根據(jù)舍入方式的值對(duì)初步的運(yùn)算結(jié)果進(jìn)行舍入操作,其中,當(dāng)舍入方式的值為“00”時(shí),采用就近舍入的方法,為“01”時(shí),采用向零舍入,為“10”時(shí),采用向上舍入,為“11”時(shí),米用向下舍入。步驟D,完成運(yùn)算結(jié)果的后置規(guī)格化。如果可能的話,把步驟C的運(yùn)算結(jié)果規(guī)格化,也就是使小數(shù)點(diǎn)前一位為‘I’,然后把它轉(zhuǎn)換成IEEE754標(biāo)準(zhǔn)聲明的浮點(diǎn)表示格式。步驟E,啟動(dòng)多路輸出選擇器。多路輸出選擇器根據(jù)運(yùn)算符的值,選擇相應(yīng)的運(yùn)算単元的結(jié)果寄存器,并檢查是否觸發(fā)了 IEEE 754標(biāo)準(zhǔn)定義的浮點(diǎn)異常,是則輸出相應(yīng)的異常信號(hào),否則把運(yùn)算結(jié)果輸出,同時(shí)使運(yùn)算完成信號(hào)(ready )有效。經(jīng)過(guò)以上步驟,F(xiàn)PU完成一次浮點(diǎn)運(yùn)算,下面詳細(xì)說(shuō)明Java處理器對(duì)其的控制方法,它包括三個(gè)步驟步驟一、把FPU與Java處理器核心連接起來(lái)。作為硬件加速器,F(xiàn)PU與處理器核心之間的通信應(yīng)該盡量直接,F(xiàn)PU對(duì)處理器核心的控制信號(hào)響應(yīng)應(yīng)該盡量迅速,只有這樣才能得到更高的運(yùn)算效率。如圖2所示,本發(fā)明的控制方法中,F(xiàn)PU的兩個(gè)操作數(shù)(操作數(shù)A和操作數(shù)B)直接與堆棧的棧頂(TOS)和次棧頂(NOS)相連;開(kāi)始信號(hào)(start)、運(yùn)算符以和舍入方式都是直接來(lái)自譯碼模塊,當(dāng)運(yùn)行到浮點(diǎn)運(yùn)算指令吋,譯碼模塊可以第一時(shí)間將控制信號(hào)發(fā)送到FPU ;運(yùn)算結(jié)果直接返回到處理器核心堆棧的棧頂數(shù)據(jù)輸入寄存器(DATA),棧頂可以在第一時(shí)間得到運(yùn)算結(jié)果。步驟ニ、定義專(zhuān)門(mén)用于控制FPU的本地指令,即控制微碼。這些控制微碼應(yīng)該能夠控制FPU完成從讀取參數(shù)到返回運(yùn)算結(jié)果的整個(gè)過(guò)程。因此本發(fā)明定義了兩類(lèi)控制微碼,第一類(lèi)微碼控制FPU讀取參數(shù)(包括操作數(shù)、運(yùn)算符以及舍入方式)并開(kāi)始運(yùn)算,第二類(lèi)微碼則控制FPU將運(yùn)算結(jié)果返回到棧頂。在本實(shí)施例中,針對(duì)浮點(diǎn)加減乘除運(yùn)算定義了四條第一類(lèi)控制微碼,如圖4所示,第一類(lèi)控制微碼分別是浮點(diǎn)加運(yùn)算微碼,助記符為“stfadd”,操作碼為0x05,完成的功能為棧頂和次棧頂元素分別作為FPU的兩個(gè)操作數(shù),使運(yùn)算符為“00”,并使FPU開(kāi)始運(yùn)算,即使start信號(hào)有效。
浮點(diǎn)減運(yùn)算微碼,助記符為“stfsub”,操作碼為0x06,完成的功能為棧頂和次棧頂元素分別作為FPU的兩個(gè)操作數(shù),使運(yùn)算符為“01”,并使FPU開(kāi)始運(yùn)算,即使start信號(hào)有效。浮點(diǎn)乘運(yùn)算微碼,助記符為“stfmul”,操作碼為0x07,完成的功能為棧頂和次棧頂元素分別作為FPU的兩個(gè)操作數(shù),使運(yùn)算符為“ 10”,并使FPU開(kāi)始運(yùn)算,即使start信號(hào)有效。浮點(diǎn)除運(yùn)算微碼,助記符為“stfdiv”,操作碼為0x08,完成的功能為棧頂和次棧頂元素分別作為FPU的兩個(gè)操作數(shù),使運(yùn)算符為“11”,并使FPU開(kāi)始運(yùn)算,即使start信號(hào)有效。這ー類(lèi)微碼涉及到的堆棧數(shù)據(jù)流描述如下棧頂和次棧頂元素被讀取作為FPU操作數(shù)后出棧,由堆棧存儲(chǔ)區(qū)的頭兩個(gè)數(shù)據(jù)來(lái)填充棧頂和次棧頂,同時(shí)堆棧存儲(chǔ)區(qū)指針減ニ。本實(shí)施例還定義了一條第二類(lèi)的控制微碼,助記符為“l(fā)dfpu”,操作碼為0xE6,完成把FPU運(yùn)算得到的結(jié)果壓入堆棧棧頂?shù)目刂乒δ?,堆棧?shù)據(jù)流描述如下運(yùn)算結(jié)果被壓入棧頂,原棧頂元素被壓入次棧頂,原次棧頂元素保存到堆棧存儲(chǔ)區(qū)的第一個(gè)位置,同時(shí)堆棧存儲(chǔ)區(qū)指針加一,如圖3所示。步驟三、用步驟ニ定義的控制微碼來(lái)實(shí)現(xiàn)Java字節(jié)碼中浮點(diǎn)運(yùn)算指令。在步驟ニ針對(duì)FPU新定義了微碼之后,實(shí)現(xiàn)Java字節(jié)碼中的浮點(diǎn)運(yùn)算指令并不困難,只需要簡(jiǎn)單的微碼子程序段便可以實(shí)現(xiàn)原來(lái)只能用Java方法來(lái)實(shí)現(xiàn)的浮點(diǎn)運(yùn)算字節(jié)碼。在Java虛擬機(jī)的指令集中,單精度浮點(diǎn)類(lèi)型的數(shù)學(xué)運(yùn)算指令包括fadd、fsub、fmul以及fdiv,分別對(duì)應(yīng)加、減、乘、除四種單精度浮點(diǎn)運(yùn)算,它們的操作碼分別是0x62、0x66、0x6A和0x6E。在執(zhí)行這些字節(jié)碼指令前后堆棧的變化情況如圖3所示。在圖3中,result是valuel與value2進(jìn)行相應(yīng)浮點(diǎn)運(yùn)算得到的運(yùn)算結(jié)果。可以看到這四條字節(jié)碼指令的功能都是對(duì)棧頂元素與次棧頂元素進(jìn)行相應(yīng)的運(yùn)算,得到的結(jié)果替代它們?cè)诙褩V械奈恢?。根?jù)浮點(diǎn)運(yùn)算字節(jié)碼的功能描述,本實(shí)施例編寫(xiě)了微碼子程序段來(lái)實(shí)現(xiàn)fadd、fsub>fmul以及fdiv這四條字節(jié)碼的功能,示意圖如圖4所示。在示意圖的微碼子程序段中,先由stfadd或stfsub或stfmul或stfdiv從堆棧的棧頂和次棧頂取出FPU需要的兩個(gè)操作數(shù),并且使FPU開(kāi)始相應(yīng)的運(yùn)算,然后等待特定數(shù)目的時(shí)鐘周期,最后由Idfpu指令完成把運(yùn)算結(jié)果壓入棧頂?shù)牟襟E,至此完全實(shí)現(xiàn)了 fadd、fsub、fmul或fdiv的功能。在本實(shí)施例中,采用本發(fā)明的運(yùn)算單元和控制方法后,運(yùn)行浮點(diǎn)運(yùn)算的過(guò)程描述如下取字節(jié)碼模塊取到fadd、fsub、fmul或fdiv中的其中ー個(gè),比如fadd,貝U此時(shí)取微碼模塊取出與fadd相對(duì)應(yīng)的微碼子程序段,交給譯碼模塊進(jìn)行譯碼,譯碼模塊識(shí)別出stfadd指令,使棧頂和次棧頂元素成為FPU的操作數(shù)井出棧,同時(shí)使運(yùn)算符為“00”,start信號(hào)有效。此時(shí)FPU開(kāi)始運(yùn)算,Java處理器核心開(kāi)始8個(gè)周期的無(wú)操作(nop)等待。等待結(jié)束,譯碼模塊識(shí)別出Idfpu指令,把運(yùn)算結(jié)果壓入棧頂。至此完成一次単精度浮點(diǎn)運(yùn)算流程。 以上所述僅為本發(fā)明的較佳實(shí)施方式,本發(fā)明并不局限于上述實(shí)施方式,在實(shí)施過(guò)程中可能存在局部微小的結(jié)構(gòu)改動(dòng),如果對(duì)本發(fā)明的各種改動(dòng)或變型不脫離本發(fā)明的精神和范圍,且屬于本發(fā)明的權(quán)利要求和等同技術(shù)范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng) 和變型。
權(quán)利要求
1.ー種Java處理器浮點(diǎn)運(yùn)算單元,其特征在干,它作為硬件加速器直接連接至Java處理器核心,用于接收來(lái)自于Java處理器核心的開(kāi)始信號(hào)、操作數(shù)A、操作數(shù)B和運(yùn)算符,根據(jù)運(yùn)算符對(duì)操作數(shù)A和操作數(shù)B進(jìn)行相關(guān)運(yùn)算操作,并將完成信號(hào)和運(yùn)算結(jié)果發(fā)送至Java處理器核心。
2.根據(jù)權(quán)利要求I所述的Java處理器浮點(diǎn)運(yùn)算單元,其特征在于,它包括進(jìn)行各種運(yùn)算操作的運(yùn)算單元和多路輸出選擇器,Java處理器浮點(diǎn)運(yùn)算單元根據(jù)運(yùn)算符選擇相應(yīng)的運(yùn)算單元對(duì)操作數(shù)A和操作數(shù)B進(jìn)行相關(guān)運(yùn)算操作,運(yùn)算單元分為加減運(yùn)算單元、乘運(yùn)算単元和除運(yùn)算單元,加減運(yùn)算單元對(duì)操作數(shù)A和操作數(shù)B進(jìn)行加減運(yùn)算操作;乘運(yùn)算單元對(duì)操作數(shù)A和操作數(shù)B進(jìn)行乘法運(yùn)算操作;除運(yùn)算單元對(duì)操作數(shù)A和操作數(shù)B進(jìn)行除法運(yùn)算操作,多路輸出選擇器根據(jù)運(yùn)算符選擇相應(yīng)的運(yùn)算單元的運(yùn)算結(jié)果寄存器,并將完成信號(hào)和該寄存器內(nèi)的運(yùn)算結(jié)果發(fā)送至Java處理器核心。
3.根據(jù)權(quán)利要求2所述的Java處理器浮點(diǎn)運(yùn)算單元,其特征在于,所述多路輸出選擇器同時(shí)還檢查運(yùn)算操作和待輸出的運(yùn)算結(jié)果是否觸發(fā)標(biāo)準(zhǔn)定義的浮點(diǎn)異常,如果是,則輸出相應(yīng)的異常信號(hào);否則直接輸出完成信號(hào)和待輸出的運(yùn)算結(jié)果。
4.根據(jù)權(quán)利要求3所述的Java處理器浮點(diǎn)運(yùn)算單元,其特征在于,所述異常信號(hào)包括溢出、下溢、被零除、無(wú)窮大、零、不準(zhǔn)確、非法操作QNAN和非法操作SNAN。
5.根據(jù)權(quán)利要求2所述的Java處理器浮點(diǎn)運(yùn)算單元,其特征在于,每一所述運(yùn)算単元均由三級(jí)流水實(shí)現(xiàn), 第一級(jí)流水線前置規(guī)格化,把操作數(shù)的格式轉(zhuǎn)換成內(nèi)部更容易處理的格式; 第二級(jí)流水線運(yùn)算核心,完成基本的加法、減法、乘法或者除法算術(shù)運(yùn)算操作; 第三級(jí)流水線后置規(guī)格化,把運(yùn)算結(jié)果轉(zhuǎn)換成IEEE 754標(biāo)準(zhǔn)聲明的浮點(diǎn)表示格式。
6.根據(jù)權(quán)利要求5所述的Java處理器浮點(diǎn)運(yùn)算單元,其特征在于,所述算術(shù)運(yùn)算操作包括對(duì)階碼和尾數(shù)相應(yīng)的算術(shù)運(yùn)算操作。
7.根據(jù)權(quán)利要求5所述的Java處理器浮點(diǎn)運(yùn)算單元,其特征在干,它還接收來(lái)自于Java處理器核心的舍入方式信號(hào),運(yùn)算核心對(duì)初步的運(yùn)算結(jié)果進(jìn)行舍入操作。
8.根據(jù)權(quán)利要求7所述的Java處理器浮點(diǎn)運(yùn)算單元,其特征在于,所述舍入方式采用就近舍入方式、向零舍入方式、向上舍入方式或向下舍入方式。
9.ー種Java處理器浮點(diǎn)運(yùn)算單元的控制方法,其特征在于,它包括如下步驟 步驟一,把浮點(diǎn)運(yùn)算單元作為硬件加速器連接到Java處理器核心; 步驟ニ,定義專(zhuān)門(mén)的本地指令,即專(zhuān)門(mén)用于控制浮點(diǎn)運(yùn)算單元的控制微碼,控制微碼控制浮點(diǎn)運(yùn)算單元完成從讀取參數(shù)到返回運(yùn)算結(jié)果的整個(gè)過(guò)程; 步驟三,根據(jù)控制微碼實(shí)現(xiàn)Java字節(jié)碼中浮點(diǎn)運(yùn)算指令。
10.根據(jù)權(quán)利要求I所述的Java處理器浮點(diǎn)運(yùn)算單元的控制方法,其特征在于,所述控制微碼包括控制浮點(diǎn)運(yùn)算單元完成讀取參數(shù)操作和基本運(yùn)算操作的第一類(lèi)微碼,以及控制浮點(diǎn)運(yùn)算單元將運(yùn)算結(jié)果返回到Java處理器核心的第二類(lèi)微碼。
全文摘要
本發(fā)明公開(kāi)了一種滿(mǎn)足嵌入式系統(tǒng)對(duì)高精度運(yùn)算的要求的Java處理器浮點(diǎn)運(yùn)算單元及其控制方法,它作為硬件加速器直接連接至Java處理器核心,F(xiàn)PU的輸入端口接收來(lái)自于Java處理器核心的時(shí)鐘輸入、開(kāi)始信號(hào)、操作數(shù)A、操作數(shù)B、運(yùn)算符以和舍入方式。FPU包括運(yùn)算單元和多路輸出選擇器,F(xiàn)PU根據(jù)輸入的運(yùn)算符選擇相應(yīng)的運(yùn)算單元,運(yùn)算單元實(shí)現(xiàn)各種基本運(yùn)算操作,運(yùn)算單元分為加減運(yùn)算單元、乘運(yùn)算單元和除運(yùn)算單元,多路輸出選擇器根據(jù)輸入的運(yùn)算符選擇相應(yīng)的運(yùn)算單元的運(yùn)算結(jié)果寄存器,同時(shí)還檢查運(yùn)算操作和待輸出的運(yùn)算結(jié)果是否觸發(fā)標(biāo)準(zhǔn)定義的浮點(diǎn)異常,如果是,則輸出相應(yīng)的異常信號(hào);否則FPU輸出端口將完成信號(hào)和該寄存器內(nèi)的運(yùn)算結(jié)果發(fā)送至Java處理器核心。
文檔編號(hào)G06F7/57GK102722353SQ20121016086
公開(kāi)日2012年10月10日 申請(qǐng)日期2012年5月22日 優(yōu)先權(quán)日2012年5月22日
發(fā)明者劉征, 張煊文, 徐永鍵, 楊德勝, 梁猷, 譚洪舟 申請(qǐng)人:廣州晶銳信息技術(shù)有限公司