本公開涉及數(shù)據(jù)處理裝置。更具體地,它涉及數(shù)據(jù)處理裝置中的浮點(diǎn)乘法運(yùn)算。
背景技術(shù):
在數(shù)據(jù)處理裝置中可以提供浮點(diǎn)乘法運(yùn)算能力。支持?jǐn)?shù)字的浮點(diǎn)格式很有用,尤其是考慮到它能夠表示的大范圍數(shù)值。相應(yīng)地,數(shù)據(jù)處理裝置可以具有浮點(diǎn)乘法器,其特別針對(duì)處理這種浮點(diǎn)值的乘法運(yùn)算的目的而被提供。然而這種浮點(diǎn)乘法器的實(shí)施的各方面是有意義的,尤其是如果該乘法器快速且高效地運(yùn)算,并且乘法器接收的針對(duì)浮點(diǎn)乘法運(yùn)算的運(yùn)算對(duì)象的表示中允許越高的靈活性,則復(fù)雜度越高。例如,可以通過將輸入運(yùn)算對(duì)象的表示約束為正規(guī)化的輸入來簡(jiǎn)化浮點(diǎn)乘法器的結(jié)構(gòu),然而更一般地,數(shù)據(jù)處理裝置被要求來處理的浮點(diǎn)值將不一定符合這種正規(guī)化的表示,因此在該乘法器的輸入階段需提供額外的能力來將非正規(guī)化的輸入轉(zhuǎn)變?yōu)檎?guī)化的表示。期望在數(shù)據(jù)處理裝置中針對(duì)處理浮點(diǎn)乘法運(yùn)算的改進(jìn)技術(shù)可以被提供。
技術(shù)實(shí)現(xiàn)要素:
至少一個(gè)實(shí)施例提供用于浮點(diǎn)乘法運(yùn)算的裝置,該裝置包括:部分乘積生成電路,用于將第一浮點(diǎn)運(yùn)算對(duì)象的有效數(shù)與第二浮點(diǎn)運(yùn)算對(duì)象的有效數(shù)相乘來生成第一部分乘積和第二部分乘積;指數(shù)計(jì)算電路,用于根據(jù)第一浮點(diǎn)運(yùn)算對(duì)象和第二浮點(diǎn)運(yùn)算對(duì)象的前導(dǎo)零計(jì)數(shù)和指數(shù)值來計(jì)算乘法運(yùn)算的結(jié)果的無偏指數(shù)值,并且根據(jù)預(yù)定的標(biāo)準(zhǔn)格式的預(yù)定的最小指數(shù)值確定針對(duì)乘積有效數(shù)的移位量和移位方向,該乘積有效數(shù)是由對(duì)第一部分乘積和第二部分乘積的加法運(yùn)算生成;舍入注入電路,用于針對(duì)加法運(yùn)算中的注入生成第一舍入值和第二舍入值,其中舍入注入電路包括舍入移位電路,該舍入移位電路通過將預(yù)定的舍入圖案在與移位方向相反的方向移位以移位量來生成第一舍入值,并通過將第一舍入值左移一位來生成第二舍入值;第一加法器電路,用于針對(duì)加法運(yùn)算將第一部分乘積、第二部分乘積以及第一舍入值一起相加來生成第一乘積有效數(shù);第二加法器電路,用于針對(duì)加法運(yùn)算將第一部分乘積、第二部分乘積以及第二舍入值一起相加來生成第二乘積有效數(shù);有效數(shù)移位電路,用于將第一乘積有效數(shù)和第二乘積有效數(shù)中的至少一個(gè)在移位方向移位以移位量;以及選擇電路,用于選擇第一乘積有效數(shù)和第二乘積有效數(shù)之一來以預(yù)定的標(biāo)準(zhǔn)格式生成格式化的有效數(shù)。
至少一個(gè)實(shí)施例提供用于浮點(diǎn)乘法運(yùn)算的裝置,該裝置包括:用于將第一浮點(diǎn)運(yùn)算對(duì)象的有效數(shù)與第二浮點(diǎn)運(yùn)算對(duì)象的有效數(shù)相乘來生成第一部分乘積和第二部分乘積的裝置;用于根據(jù)第一浮點(diǎn)運(yùn)算對(duì)象和第二浮點(diǎn)運(yùn)算對(duì)象的前導(dǎo)零計(jì)數(shù)和指數(shù)值來計(jì)算乘法運(yùn)算的結(jié)果的無偏指數(shù)值,并且根據(jù)預(yù)定的標(biāo)準(zhǔn)格式的預(yù)定的最小指數(shù)值確定針對(duì)乘積有效數(shù)的移位量和移位方向的裝置,該乘積有效數(shù)是由對(duì)第一部分乘積和第二部分乘積的加法運(yùn)算生成;用于針對(duì)到加法運(yùn)算中的注入生成第一舍入值和第二舍入值的裝置,其中用于生成第一舍入值和第二舍入值的裝置包括通過將預(yù)定的舍入圖案在與移位方向相反的方向移位以移位量來生成第一舍入值的裝置以及通過將第一舍入值左移一位來生成第二舍入值的裝置;用于針對(duì)加法運(yùn)算將第一部分乘積、第二部分乘積以及第一舍入值一起相加來生成第一乘積有效數(shù)的裝置;用于針對(duì)加法運(yùn)算將第一部分乘積、第二部分乘積以及第二舍入值一起相加來生成第二乘積有效數(shù)的裝置;用于將第一乘積有效數(shù)和第二乘積有效數(shù)中的至少一個(gè)在移位方向移位以移位量的裝置;以及用于選擇第一乘積有效數(shù)和第二乘積有效數(shù)之一來以預(yù)定的標(biāo)準(zhǔn)格式生成格式化的有效數(shù)的裝置。
至少一個(gè)實(shí)施例提供對(duì)用于執(zhí)行浮點(diǎn)乘法運(yùn)算的數(shù)據(jù)處理裝置進(jìn)行操作的方法,包括:將第一浮點(diǎn)運(yùn)算對(duì)象的有效數(shù)與第二浮點(diǎn)運(yùn)算對(duì)象的有效數(shù)相乘來生成第一部分乘積和第二部分乘積;根據(jù)第一浮點(diǎn)運(yùn)算對(duì)象和第二浮點(diǎn)運(yùn)算對(duì)象的前導(dǎo)零計(jì)數(shù)和指數(shù)值來計(jì)算乘法運(yùn)算的結(jié)果的無偏指數(shù)值,并且根據(jù)預(yù)定的標(biāo)準(zhǔn)格式的預(yù)定的最小指數(shù)值確定針對(duì)乘積有效數(shù)的移位量和移位方向,該乘積有效數(shù)是由對(duì)第一部分乘積和第二部分乘積的加法運(yùn)算生成;針對(duì)加法運(yùn)算中的注入生成第一舍入值和第二舍入值,其中生成第一舍入值和第二舍入值包括通過將預(yù)定的舍入圖案在與移位方向相反的方向移位以移位量來生成第一舍入值,并通過將第一舍入值左移一位來生成第二舍入值;針對(duì)加法運(yùn)算將第一部分乘積、第二部分乘積以及第一舍入值一起相加來生成第一乘積有效數(shù);針對(duì)加法運(yùn)算將第一部分乘積、第二部分乘積以及第二舍入值一起相加來生成第二乘積有效數(shù);將第一乘積有效數(shù)和第二乘積有效數(shù)中的至少一個(gè)在移位方向移位以移位量;以及選擇第一乘積有效數(shù)和第二乘積有效數(shù)之一來以預(yù)定的標(biāo)準(zhǔn)格式生成格式化的有效數(shù)。
附圖說明
僅通過示例的方式并參照附圖中示出的示例的實(shí)施例進(jìn)一步描述本技術(shù),其中:
圖1a示出了在一個(gè)實(shí)施例中當(dāng)兩個(gè)輸入運(yùn)算對(duì)象都是正規(guī)的時(shí),針對(duì)乘積有效數(shù)在范圍內(nèi)的情形以及乘積有效數(shù)溢出的情形的乘積有效數(shù)內(nèi)的位位置;
圖1b示出了在一個(gè)實(shí)施例中當(dāng)運(yùn)算對(duì)象之一是次正規(guī)的時(shí),針對(duì)乘積有效數(shù)在范圍內(nèi)的情形以及乘積有效數(shù)溢出的情形的乘積有效數(shù)內(nèi)的位位置;
圖2示意性地示出了一個(gè)實(shí)施例中的用于浮點(diǎn)乘法運(yùn)算的裝置;
圖3示意性地示出了一個(gè)實(shí)施例中的舍入注入電路;
圖4示意性地示出了在一個(gè)實(shí)施例中用于確定乘積有效數(shù)的溢出是否發(fā)生的電路;
圖5示意性地示出了在一個(gè)實(shí)施例中當(dāng)乘積有效數(shù)將被左移并溢出時(shí)用來確定所使用的最后位、保護(hù)位和粘滯位的電路;
圖6示意性地示出了在一個(gè)實(shí)施例中當(dāng)乘積有效數(shù)將被左移并不溢出時(shí)用來確定所使用的最后位、保護(hù)位和粘滯位的電路;
圖7示意性地示出了在一個(gè)實(shí)施例中當(dāng)乘積有效數(shù)將被右移時(shí),用來確定最后位、保護(hù)位和粘滯位的電路;
圖8a示意性地示出了在一個(gè)實(shí)施例中當(dāng)應(yīng)用rne舍入時(shí)所使用的舍入修正電路;
圖8b示意性地示出了在一個(gè)實(shí)施例中用來檢測(cè)結(jié)果是精確的還是非精確的舍入修正電路;
圖9a示意性地示出了一個(gè)實(shí)施例中的下溢檢測(cè)電路;
圖9b示意性地示出了一個(gè)實(shí)施例中的清零電路;以及
圖10a-c示出了當(dāng)根據(jù)一個(gè)實(shí)施例的執(zhí)行方法時(shí)所采取的一系列步驟。
具體實(shí)施方式
至少一些實(shí)施例提供用于浮點(diǎn)乘法運(yùn)算的裝置,該裝置包括:部分乘積生成電路,用于將第一浮點(diǎn)運(yùn)算對(duì)象的有效數(shù)與第二浮點(diǎn)運(yùn)算對(duì)象的有效數(shù)相乘來生成第一部分乘積和第二部分乘積;指數(shù)計(jì)算電路,用于根據(jù)第一浮點(diǎn)運(yùn)算對(duì)象和第二浮點(diǎn)運(yùn)算對(duì)象的前導(dǎo)零計(jì)數(shù)和指數(shù)值來計(jì)算乘法運(yùn)算的結(jié)果的無偏指數(shù)值,并且根據(jù)預(yù)定的標(biāo)準(zhǔn)格式的預(yù)定的最小指數(shù)值確定針對(duì)乘積有效數(shù)的移位量和移位方向,該乘積有效數(shù)是由對(duì)第一部分乘積和第二部分乘積的加法運(yùn)算生成;舍入注入電路,用于針對(duì)加法運(yùn)算中的注入生成第一舍入值和第二舍入值,其中舍入注入電路包括舍入移位電路,該舍入移位電路通過將預(yù)定的舍入圖案在與移位方向相反的方向移位以移位量來生成第一舍入值,并通過將第一舍入值左移一位來生成第二舍入值;第一加法器電路,用于針對(duì)加法運(yùn)算將第一部分乘積、第二部分乘積以及第一舍入值一起相加來生成第一乘積有效數(shù);第二加法器電路,用于針對(duì)加法運(yùn)算將第一部分乘積、第二部分乘積以及第二舍入值一起相加來生成第二乘積有效數(shù);有效數(shù)移位電路,用于將第一乘積有效數(shù)和第二乘積有效數(shù)中的至少一個(gè)在移位方向移位以移位量;以及選擇電路,用于選擇第一乘積有效數(shù)和第二乘積有效數(shù)之一來以預(yù)定的標(biāo)準(zhǔn)格式生成格式化的有效數(shù)。
本技術(shù)認(rèn)識(shí)到用于浮點(diǎn)乘法運(yùn)算的改進(jìn)裝置(尤其在能夠以其生成兩個(gè)輸入浮點(diǎn)運(yùn)算對(duì)象的乘積的速度方面)通過布置該裝置在乘法運(yùn)算過程中盡早(在還未明確知道乘積有效數(shù)內(nèi)的注入舍入應(yīng)該在哪里發(fā)生(即,在哪一位上)的階段)執(zhí)行注入舍入被提供,即使沒有對(duì)輸入運(yùn)算對(duì)象被接收的格式的約束(尤其它們不需被正規(guī)化)。本質(zhì)上這是因?yàn)樵诔朔ㄟ\(yùn)算的早期階段還不知乘積的前導(dǎo)位將在哪里,本技術(shù)還認(rèn)識(shí)到在一位位置內(nèi)計(jì)算該位置是可能的?;谶@種認(rèn)識(shí),本技術(shù)提供舍入注入電路,該電路針對(duì)注入舍入構(gòu)造兩個(gè)舍入常量,這兩個(gè)常量接下來在兩個(gè)加法器電路中分別被用于注入舍入,其中一個(gè)加法器電路被提供來處理發(fā)生溢出(因此乘積的前導(dǎo)位將會(huì)高一位)的乘積有效數(shù)而另一個(gè)加法器電路被提供來處理不發(fā)生溢出(僅來自第一部分乘積和第二部分乘積的相加)時(shí)(因此乘積的前導(dǎo)位將在比溢出情況低一位)的乘積有效數(shù)。然而,除了乘積有效數(shù)的前導(dǎo)位位置的這種一位不確定性,輸入運(yùn)算對(duì)象的形式也在確定注入舍入應(yīng)該發(fā)生的適當(dāng)位置中起著重要的作用。這是由于這樣一個(gè)事實(shí),即如果兩個(gè)輸入是正規(guī)的,則未舍入的乘積將呈現(xiàn)前導(dǎo)位,該前導(dǎo)位在乘積有效數(shù)格式(允許溢出)的最高有效位位置或者在最高有效位位置的低一位位置處(當(dāng)溢出未發(fā)生)。然而,當(dāng)輸入運(yùn)算對(duì)象之一是次正規(guī)時(shí)(即,具有多個(gè)前導(dǎo)零),則相應(yīng)地在無溢出乘積中有一樣數(shù)目的前導(dǎo)零,在溢出的乘積中有比該數(shù)目少一個(gè)的前導(dǎo)零。應(yīng)注意,在兩個(gè)輸入運(yùn)算對(duì)象都是次正規(guī)的情況下,將產(chǎn)生無法表示的小乘積并且生成的輸出值將不會(huì)取決于輸入運(yùn)算對(duì)象的值,而僅僅由舍入模式確定。
在這種環(huán)境中,接下來,為了生成第一舍入值和第二舍入值,本技術(shù)提供指數(shù)計(jì)算電路來確定移位量和移位方向,其中,該第一舍入值和第二舍入值將被分別注入到由第一加法器電路和第二加法器電路執(zhí)行的加法運(yùn)算中,該指數(shù)計(jì)算電路檢查兩個(gè)輸入運(yùn)算對(duì)象的指數(shù)值并且確定它們各自的前置零計(jì)數(shù),該移位量和移位方向?qū)⑹沟贸朔ㄟ\(yùn)算的結(jié)果以期望的預(yù)定標(biāo)準(zhǔn)格式呈現(xiàn)(例如在可能的情況下并使用偏置指數(shù)被正規(guī)化,如根據(jù)ieee754-2008fp標(biāo)準(zhǔn)生成浮點(diǎn)值時(shí)所常見的)?;谶@種針對(duì)乘積有效數(shù)確定的移位量和移位方向,舍入注入電路通過將預(yù)定的舍入圖案在與移位方向相反的方向的移位以移位量來生成第一舍入值和第二舍入值。通過將第一舍入值左移一位來生成第二舍入值。換言之,基礎(chǔ)舍入注入(即,將應(yīng)用于為了以預(yù)定的標(biāo)準(zhǔn)格式被呈現(xiàn)而不需要移位的乘積有效數(shù)的情況的注入)被確定并且它然后在相反的方向被移位以與隨后所要求的有效數(shù)移位相同的量。這允許舍入注入被加到未被移位并且舍入發(fā)生在正確地方的有效數(shù)。應(yīng)注意的是,它使舍入注入能夠在乘法運(yùn)算過程中盡早發(fā)生,使得在由第一加法器電路和第二加法器電路進(jìn)行的第一部分乘積和第二部分乘積的加法運(yùn)算之后,有效數(shù)移位電路可應(yīng)用這種被確定需要的移位來以預(yù)定的標(biāo)準(zhǔn)格式生成需要的格式化的有效數(shù),而不需要在其后執(zhí)行舍入注入。
第一加法器電路和第二加法器電路可以采取各種不同的形式,但在一個(gè)實(shí)施例中,第一加法器電路具有生成的第一乘積有效數(shù)比由第二加法器電路生成的第二乘積有效數(shù)少一位的配置。換言之,由第一加法器電路支持的最大位寬比由第二加法器支持的位寬少一位。這種特定布置的配設(shè)是基于以下認(rèn)知,即:第一部分乘積和第二部分乘積的總和將會(huì)有固定的針對(duì)兩個(gè)加法器都相同的最大位寬,但是第二舍入值的引入(通過將第一舍入值左移一位生成)在一些情況下針對(duì)第二加法器電路可以導(dǎo)致向額外的(更高的)位位置的進(jìn)位。雖然第一加法器電路和第二加法器電路可以都可以被提供成實(shí)質(zhì)相同,并且被配置成處理允許這種進(jìn)位的相同位寬,此實(shí)施例實(shí)現(xiàn)了對(duì)用來提供第一加法器電路的面積(即門的數(shù)目)的減小。
預(yù)定的舍入圖案可以采取各種不同的形式,尤其是根據(jù)應(yīng)該被應(yīng)用于乘法運(yùn)算的舍入類型。在一些實(shí)施例中,預(yù)定的舍入圖案具有與格式化的有效數(shù)匹配的長(zhǎng)度,并且當(dāng)裝置的舍入模式是就近舍入偶數(shù)優(yōu)先(rne)時(shí)包括由多個(gè)復(fù)位位跟隨的置位位,并且當(dāng)舍入模式是向上舍入(ru)時(shí)包括所有置位位,并且當(dāng)相反方向是向左并且舍入模式是向上舍入時(shí),由移位量給定的多個(gè)較低有效位位置被置位,并且當(dāng)相反方向是向右時(shí),由移位量給定的多個(gè)最高有效位位置被復(fù)位。因此,例如,在裝置被配置為對(duì)ieee754-2008格式的具有23個(gè)小數(shù)位的單精度浮點(diǎn)數(shù)執(zhí)行浮點(diǎn)乘法運(yùn)算的情況下,預(yù)定的舍入圖案是被22個(gè)零跟隨的一(針對(duì)rne舍入)或者被22個(gè)一跟隨的一(針對(duì)ru舍入)。如果乘積有效數(shù)需要被右移,則舍入常量被左移,其中在右側(cè)的位被ru位(即如果向上舍入則是1)替換并且左移的舍入常量變成48位的值。相反地,如果乘積有效數(shù)將被左移,則舍入常量(以預(yù)定的舍入圖案開始)被右移,其中左側(cè)的位被零替換。右移的舍入常量仍是23位的值。
根據(jù)以上討論將會(huì)清楚的是,確定由兩個(gè)部分乘積相加生成的乘積有效數(shù)是否溢出很有用,以便最終確定乘積有效位內(nèi)的某些位位置,其數(shù)值被需要來確定其最終輸出形式。此外,雖然這種溢出狀態(tài)的確定可以通過在移位電路將乘積有效位移位之后檢查乘積有效位,然后檢查最高有效位(例如在sp乘法器情況中的位47)是否被置位來確定,本技術(shù)提供的是,通過溢出掩碼的使用這種溢出識(shí)別可以發(fā)生的更快,該溢出掩碼通過從預(yù)定的掩碼圖案被生成來識(shí)別溢出位位置,其中該預(yù)定的掩碼圖案被右移以移位量并且接下來被應(yīng)用于未被移位的第二乘積有效數(shù)。相應(yīng)地,在一些實(shí)施例中,裝置包括掩碼生成電路,該掩碼生成電路用于生成識(shí)別第二乘積有效數(shù)的溢出位位置的溢出掩碼,其中掩碼生成電路被布置為通過將預(yù)定的掩碼圖案右移以移位量來生成溢出掩碼;以及比較電路,該比較電路用于對(duì)第二乘積有效數(shù)應(yīng)用溢出掩碼來提取溢出位位置處的溢出值,其中該比較電路被布置為在有效數(shù)移位電路對(duì)第一乘積有效數(shù)和第二乘積有效數(shù)中的至少一個(gè)進(jìn)行移位之前提取溢出值。通過這種方式,溢出值的確定明顯比通過上述的首先將乘積移位接著檢查最高有效位是否被置位的技術(shù)要早。這意味著移位一被完成,就可以選擇乘法運(yùn)算的最終結(jié)果,因?yàn)橐绯鲋狄呀?jīng)可獲得。
預(yù)定的掩碼圖案可以采取各種不同的形式,但是在一個(gè)實(shí)施例中,當(dāng)?shù)诙朔e有效數(shù)未被移位時(shí),預(yù)定的掩碼圖案包括在第二乘積有效數(shù)的未被移位的溢出位位置處的置位位。因此該“置位位”可以在移位前和然后當(dāng)右移被應(yīng)用于預(yù)定的掩碼圖案這兩種情況下在第二乘積有效數(shù)內(nèi)被識(shí)別并跟蹤溢出位位置,使得該溢出位位置能夠在任何需要的移位被應(yīng)用于第二乘積有效數(shù)之前被識(shí)別。
應(yīng)了解的是,它通常作為溢出可以導(dǎo)致的被左移的乘積有效數(shù)結(jié)果,本技術(shù)還認(rèn)識(shí)到被右移的乘積有效數(shù)在某些情況下可以溢出到正規(guī)空間。相應(yīng)地在一些實(shí)施例中,指數(shù)計(jì)算電路包括右移溢出確定電路,用于在移位方向是向右以及以下兩者中的任一者時(shí)識(shí)別右移溢出情況:第二乘積有效數(shù)的最高有效位被置位并且移位量是二,或第二乘積有效數(shù)的次最高有效位被置位并且移位量是一;并且指數(shù)計(jì)算電路響應(yīng)于右移溢出的情況來將乘法運(yùn)算結(jié)果的偏置指數(shù)值置為一。換言之,被認(rèn)知的是,針對(duì)這兩種明確的情況溢出可以被直接識(shí)別,即當(dāng)?shù)诙朔e有效數(shù)的最高有效位被置位并且移位量是二,或者第二乘積有效數(shù)的次最高有效位被置位并且右移位量是一。因此,在這兩種右移溢出情況下,結(jié)果的偏置指數(shù)將被置為一。應(yīng)注意,所有其他的右移的偏置指數(shù)都是零。
有效數(shù)移位電路可以采取各種不同的形式,但是在一個(gè)實(shí)施例中包括:左移移位電路,用于將第一乘積有效數(shù)和第二乘積有效數(shù)左移以移位量來給出第一左移乘積有效數(shù)和第二左移乘積有效數(shù);右移移位電路,用于將第二乘積有效數(shù)右移以移位量來給出右移乘積有效數(shù),其中左移移位電路和右移移位電路被布置為彼此并行地執(zhí)行它們各自的移位;并且所述選擇電路響應(yīng)于移位方向和溢出值來選擇第一左移乘積有效數(shù)、第二左移乘積有效數(shù)以及右移乘積有效數(shù)之一作為格式化的有效數(shù),并且在格式化有效數(shù)中選擇預(yù)定數(shù)目的最高有效位來輸出。相應(yīng)地,雖然也可以提供可將所需的第一乘積有效數(shù)或第二乘積有效數(shù)進(jìn)行左移或者右移的通用有效移位電路,本技術(shù)提供專用左移移位電路和專用右移移位電路,它們被布置為彼此并行地執(zhí)行各自的移位,使得第一乘積有效數(shù)和第二乘積有效數(shù)被左移而第二乘積有效數(shù)被并行地右移,并且其后的選擇電路然后選擇這三種移位的結(jié)果之一。根據(jù)被識(shí)別的移位方向和溢出值做出這個(gè)選擇,即,溢出值實(shí)現(xiàn)在第一左移乘積有效數(shù)和第二左移乘積有效數(shù)間做出選擇,而移位方向?qū)崿F(xiàn)在左移乘積有效數(shù)和右移乘積有效數(shù)間做出選擇。此外,選擇電路可以輸出格式化的有效數(shù)中的預(yù)定數(shù)目的最高有效位,這然后可以減小有效數(shù)的位數(shù),例如在輸出sp浮點(diǎn)值的示例中,其中被舍入的有效數(shù)有23位,但第一乘積有效數(shù)和第二乘積有效數(shù)分別有48位和49位,但是在所選擇的被移位的乘積有效數(shù)內(nèi)可以有任何其他數(shù)目的位。
例如,浮點(diǎn)乘法運(yùn)算可以形成融合乘加運(yùn)算的一部分,并且相應(yīng)地在一個(gè)實(shí)施例中,第一舍入值和第二舍入值被置為零并且裝置具有向加法器轉(zhuǎn)發(fā)乘法運(yùn)算的未被舍入的結(jié)果作為融合乘加的一部分的配置。換言之,根據(jù)此技術(shù),舍入注入被抑制并且格式化的有效數(shù)然后例如可以包括適于向加法器提供盡可能大的精度的乘積有效數(shù)的所有可獲得的位。
當(dāng)執(zhí)行注入舍入時(shí),當(dāng)以rne(就近舍入,偶數(shù)優(yōu)先)模式執(zhí)行舍入時(shí),會(huì)有需要針對(duì)某些總和進(jìn)行修正的情況。為了確定此修正,則需要格式化有效數(shù)的最后(l)位值、跟隨其后的保護(hù)(g)位值、以及跟隨在其后的粘滯(s)位組的值。為了使這些值能夠被盡早確定,使得以上討論的能夠更快地執(zhí)行舍入的優(yōu)勢(shì)不至于因?yàn)閷?duì)舍入的修正只能夠在有效數(shù)乘積被移位后l、g、s值被確定之后被執(zhí)行而被丟失,本技術(shù)還進(jìn)一步提供可以生成最后位掩碼的掩碼生成電路,該最后位掩碼使得能夠在移位發(fā)生前找到最后位位置,并且因此可以在該移位發(fā)生前確定最后位值。
相應(yīng)地,在一些實(shí)施例中掩碼生成電路被布置為生成識(shí)別第一乘積有效數(shù)內(nèi)被格式化的有效數(shù)的最后位的最后位位置的最后位掩碼,并且其中掩碼生成電路被布置為生成最后位掩碼包括將預(yù)定的最后位掩碼圖案在與移位方向相反的方向移位以移位量,并且還包括比較電路對(duì)第一乘積有效數(shù)應(yīng)用最后位掩碼來提取在最后位位置處的最后位值。換言之,當(dāng)指數(shù)計(jì)算電路確定需要將乘積有效數(shù)左移給定數(shù)目的位,掩碼生成電路將最后位圖案右移以相同數(shù)目的位。相反地,當(dāng)指數(shù)計(jì)算電路確定需要右移時(shí),掩碼生成電路將最后位圖案左移以所需數(shù)目的位。然后比較電路可以在第一乘積有效數(shù)自身被移位前對(duì)第一乘積有效數(shù)應(yīng)用(已被移位的)最后位掩碼來確定在最后位位置處的最后位值。因此,如以上的關(guān)于舍入值和溢出掩碼的使用的情況中,本文所提的關(guān)于最后位掩碼的技術(shù)允許最后位位置的及早確認(rèn)(不需等待移位電路對(duì)第一乘積有效數(shù)和第二乘積有效數(shù)執(zhí)行移位)并且因此提高了乘法器的整體速度。
針對(duì)最后位掩碼的掩碼生成電路可以以各種不同的方式被提供,但在一些實(shí)施例中,掩碼生成電路被布置為生成左移最后位掩碼和右移最后位掩碼,其中比較電路響應(yīng)于移位方向是向左的方向來使用左移最后位掩碼提取最后位值,并且響應(yīng)于移位方向是向右的方向來使用右移最后位掩碼提取最后位值。因此,一旦移位方向和移位量被建立,雖然原則上可以視所需要的移位方向的情況只生成最后位掩碼,但所采用的本技術(shù)通過彼此并行地生成左移最后位掩碼和右移最后位掩碼兩者并且根據(jù)已被確定的移位方向在它們之間做出選擇來實(shí)現(xiàn)并行化。由于可以提前準(zhǔn)備這些左移最后位掩碼和右移最后位掩碼,這還提高了減少由裝置生成結(jié)果所需的時(shí)間的機(jī)會(huì)。
如上討論,乘積有效數(shù)的位位置也根據(jù)該乘積有效數(shù)是否溢出而變化。因此,這也影響乘積有效數(shù)的最后位的位位置。該裝置可以被配置來以多種方式處理這種情況,但在一些實(shí)施例中,掩碼生成電路被布置為生成兩個(gè)左移最后位掩碼,其中掩碼生成電路被布置為通過將第一左移最后位掩碼右移一位來生成第二左移最后位掩碼,并且比較電路被布置為對(duì)第一乘積有效數(shù)應(yīng)用第一左移最后位掩碼,并對(duì)第二乘積有效數(shù)應(yīng)用第二左移最后位掩碼,并且該比較電路響應(yīng)于指示第二乘積有效數(shù)溢出的溢出值來選擇通過使用第一左移最后位掩碼提取的最后位值,以及響應(yīng)于指示第二乘積有效數(shù)無溢出的溢出值來選擇通過使用第二左移最后位掩碼提取的最后位值。
本技術(shù)認(rèn)識(shí)到,通過應(yīng)用一位移位來從一個(gè)生成另一個(gè),針對(duì)乘積有效數(shù)的左移(被認(rèn)識(shí)到,這通常是可以生成溢出的乘積有效數(shù)的左移)生成的最后位掩碼(適用于在溢出的情況下識(shí)別最后位)可以從適于在無溢出時(shí)識(shí)別最后位的最后位掩碼生成,反之亦然。此外,如上所述,這種掩碼可以在有效數(shù)移位電路對(duì)乘積有效數(shù)應(yīng)用所要求的移位之前被生成,并且因此乘法運(yùn)算的此特征不會(huì)因?yàn)榈却撘莆坏陌l(fā)生而被延遲,乘法器的整體處理速度因此被提高。
在一些實(shí)施例中,當(dāng)移位方向是向左的方向時(shí),預(yù)定的最后位掩碼圖案包括被預(yù)定數(shù)目的置位位跟隨的復(fù)位位,其中預(yù)定數(shù)目的置位位比以預(yù)定的標(biāo)準(zhǔn)格式的格式化的有效數(shù)的位數(shù)多一位,并且掩碼生成電路被布置為從基礎(chǔ)移位掩碼生成第一左移最后位掩碼,其中基礎(chǔ)移位掩碼通過將預(yù)定的最后位掩碼圖案右移以移位量并將由移位量給定的多個(gè)復(fù)位位添加到已被右移的預(yù)定的最后位掩碼圖案的前面來生成。雖然預(yù)定的最后位掩碼圖案(被用生成基礎(chǔ)移位掩碼,從該基礎(chǔ)移位掩碼可以容易地識(shí)別最后位位置)可以以多種方式被定義,這種如以上定義的置位位跟隨復(fù)位位的配置方式呈現(xiàn)了位圖案,在移位被應(yīng)用之后,它通常具有直到并包括最后位的復(fù)位位(比如零)以及之后的置位位(比如一)。例如在產(chǎn)生兩個(gè)24位有效數(shù)的乘積的情況下,導(dǎo)致48或49位的乘積,然后這可以是被24個(gè)連續(xù)的一跟隨的零。當(dāng)該位圖案被右移時(shí),零則填充左側(cè)。這種特定的配置不僅針對(duì)識(shí)別最后位位置本身很有用,根據(jù)正被應(yīng)用的舍入圖案,它還對(duì)識(shí)別舍入修正所需的保護(hù)位位置和粘滯位位置也很有用。這種情形尤其如此,因?yàn)榭梢匀菀椎厥褂帽灰莆坏膱D案來構(gòu)建掩碼來分別挑選這些最后位位置、保護(hù)位位置和粘滯位位置。
類似地,在一些實(shí)施例中,當(dāng)移位方向是向右的方向時(shí),預(yù)定的最后位掩碼圖案包括由預(yù)定數(shù)目的置位位跟隨的復(fù)位位序列,其中預(yù)定數(shù)目的置位位是以預(yù)定的標(biāo)準(zhǔn)格式的格式化的有效數(shù)位數(shù),并且掩碼生成電路被布置為從基礎(chǔ)移位掩碼生成右移最后位掩碼,其中基礎(chǔ)移位掩碼通過將預(yù)定的最后位掩碼圖案左移以移位量以及將由移位量給定的多個(gè)置位位添加到已被左移的預(yù)定的最后位掩碼圖案的后面來生成。在此實(shí)例中,被發(fā)現(xiàn)十分有用的特定未移位圖案是被一系列置位位(比如一)跟隨的一系列復(fù)位位(比如零)。例如在產(chǎn)生兩個(gè)24位有效數(shù)乘積結(jié)果為48位或49位乘積的情況下,這然后可以是被23個(gè)連續(xù)的一跟隨的26個(gè)連續(xù)的零。當(dāng)這個(gè)位圖案被左移時(shí),在右側(cè)填充額外的一。類似地,通過使用從該被移位的右移掩碼生成的進(jìn)一步的掩碼,不僅可以使最后位位置能夠被容易地識(shí)別,還可以使保護(hù)位位置和粘滯位位置也能夠被容易地識(shí)別。
如上所述,可能需要識(shí)別結(jié)果有效數(shù)內(nèi)的保護(hù)位,因此在一些實(shí)施例中掩碼生成電路被布置為生成保護(hù)位掩碼,其中該保護(hù)位掩碼在保護(hù)位位置處有置位位,該保護(hù)位位置比第一乘積有效數(shù)內(nèi)的格式化的有效數(shù)的最后位位置低一位,并且比較電路被布置為對(duì)第一乘積有效數(shù)應(yīng)用保護(hù)位掩碼來提取保護(hù)位位置處的保護(hù)位值。例如可以通過反轉(zhuǎn)最后位掩碼并然后對(duì)該被反轉(zhuǎn)的最后位掩碼和未被反轉(zhuǎn)的最后位掩碼執(zhí)行按位與來生成保護(hù)位掩碼,其中被反轉(zhuǎn)的最后位掩碼和未被反轉(zhuǎn)的最后位掩碼的位對(duì)齊被選擇為使得所產(chǎn)生的輸出僅有用地在保護(hù)位所處位置具有置位位(例如一)并且其他處是零。此外,本技術(shù)還認(rèn)識(shí)到可以通過右移一位此保護(hù)位掩碼來得到針對(duì)第二乘積有效數(shù)的進(jìn)一步的保護(hù)位掩碼。同樣地,本技術(shù)也認(rèn)識(shí)到可以通過同樣的過程來產(chǎn)生針對(duì)被右移的第二乘積有效數(shù)的進(jìn)一步的保護(hù)位掩碼,即:反轉(zhuǎn)右移最后位掩碼,將這兩者以一位偏移量對(duì)齊,并執(zhí)行按位與。
類似地,在一些實(shí)施例中掩碼生成電路被布置為生成粘滯位掩碼,其中該粘滯位掩碼在低于保護(hù)位位置的所有位置處具有置位位,并且比較電路被布置為對(duì)第一乘積有效數(shù)應(yīng)用粘滯位掩碼來提取一組粘滯位值并且計(jì)算作為該組粘滯位值的邏輯或的整體粘滯位值。因此,通過使用此粘滯位掩碼,可以識(shí)別第一乘積有效數(shù)的粘滯位(或者更通常地,多個(gè)粘滯位),并且接下來計(jì)算出整體粘滯位值。例如,可以通過適當(dāng)?shù)奈贿x擇來從預(yù)定的最后位掩碼圖案中生成粘滯位掩碼,該位選擇不包括最后位和保護(hù)位,例如在預(yù)定的掩碼圖案針對(duì)所有的粘滯位位置具有置位位的情況下。本技術(shù)通過應(yīng)用相反的移位確保這些粘滯位在第一乘積有效數(shù)中被正確地識(shí)別,并且粘滯位掩碼接下來可以直接識(shí)別所有這些粘滯位的位置并且整體s值可以被計(jì)算。
如上所述,根據(jù)舍入模式,可能需要對(duì)l和g進(jìn)行一些修正,則相應(yīng)地在一些實(shí)施例中裝置還包括修正電路,該修正電路響應(yīng)于裝置的舍入模式是就近舍入偶數(shù)優(yōu)先(rne)來計(jì)算作為保護(hù)位值的逆的被修正的保護(hù)位值,并計(jì)算作為保護(hù)位值和整體粘滯位值的邏輯或值與最后位值的邏輯與的被修正的最后位值。因此,當(dāng)在rne舍入模式時(shí),可以進(jìn)行適當(dāng)?shù)男拚?/p>
可能會(huì)有這種情形,為了指示可能作為浮點(diǎn)乘法運(yùn)算一部分出現(xiàn)的各種不同的情況,裝置需要生成各種不同的異常標(biāo)志。它們中之一是針對(duì)乘法運(yùn)算的不精確檢測(cè),本技術(shù)針對(duì)此提供了新的方法,其中在一個(gè)實(shí)施例中,裝置還包括非精確檢測(cè)電路,當(dāng)被修正的保護(hù)位值或者整體粘滯位值非零時(shí),該電路響應(yīng)于裝置的舍入模式不是向上舍入(ru)來生成非精確標(biāo)志。類似地,在一些實(shí)施例中,裝置還包括非精確檢測(cè)電路,當(dāng)溢出值被置位,第一舍入值與第一乘積有效數(shù)的對(duì)應(yīng)的較低的部分不是每一位完全相同時(shí),非精確檢測(cè)電路響應(yīng)于裝置的舍入模式是向上舍入(ru)來將非精確標(biāo)志置位,并且當(dāng)溢出值未被置位,第二舍入值與第二乘積有效數(shù)的對(duì)應(yīng)的較低的部分不是每一位完全相同時(shí),非精確檢測(cè)電路響應(yīng)于裝置的舍入模式是向上舍入(ru)來將非精確標(biāo)志置位。換言之,在ru模式中使用的該技術(shù)是用來檢查乘積的較低位(對(duì)g和s有貢獻(xiàn)的位)并且將它們與舍入注入相比較。如果這些位未改變則舍入注入不會(huì)改變乘積,并且其結(jié)果是精確的。
更進(jìn)一步,在一些實(shí)施例中,裝置包括下溢檢測(cè)電路,當(dāng)格式化的有效數(shù)是零、乘法運(yùn)算的結(jié)果的偏置指數(shù)是一以及非精確標(biāo)志被置位時(shí),該電路將下溢標(biāo)志置位。此下溢檢測(cè)電路的配設(shè)十分有用,因?yàn)橛糜趫?zhí)行浮點(diǎn)乘法運(yùn)算的方法定義下溢應(yīng)該在舍入前被檢測(cè),并且根據(jù)以上所討論的盡早注入舍入技術(shù),并不會(huì)有被預(yù)先舍入的乘積。有疑問的情形是將次正規(guī)乘積變成最小正規(guī)乘積的舍入注入,在此情形中,小數(shù)全是零而偏置指數(shù)從零變?yōu)橐?。因此,下溢檢測(cè)電路可以通過確定格式化的有效數(shù)是否是零并且偏置指數(shù)是否是一,并且進(jìn)一步觀看結(jié)果是否精確來檢測(cè)這種情形。如果結(jié)果是非精確的,則舍入導(dǎo)致溢出到正規(guī)數(shù),并且下溢標(biāo)志然后被置位,即使乘法運(yùn)算的結(jié)果事實(shí)上將是正規(guī)的。
此外,在一些實(shí)施例中,裝置包括清零標(biāo)志生成電路,當(dāng)乘法運(yùn)算結(jié)果的偏置指數(shù)是零并且指數(shù)不溢出或者指數(shù)由于舍入溢出時(shí),該電路將清零標(biāo)志置位。如以上所應(yīng)用的針對(duì)檢測(cè)溢出的相似原理也被應(yīng)用來確定何時(shí)來刷新至零,其中,如果指數(shù)是零并且(i)指數(shù)不溢出或者(ii)指數(shù)由于舍入溢出時(shí),清零標(biāo)志被置位。
至少一些實(shí)施例提供用于浮點(diǎn)乘法運(yùn)算的裝置,該裝置包括:用于將第一浮點(diǎn)運(yùn)算對(duì)象的有效數(shù)與第二浮點(diǎn)運(yùn)算對(duì)象的有效數(shù)相乘來生成第一部分乘積和第二部分乘積的裝置;用于根據(jù)第一浮點(diǎn)運(yùn)算對(duì)象和第二浮點(diǎn)運(yùn)算對(duì)象的前導(dǎo)零計(jì)數(shù)和指數(shù)值來計(jì)算乘法運(yùn)算的結(jié)果的無偏指數(shù)值,并且根據(jù)預(yù)定的標(biāo)準(zhǔn)格式的預(yù)定的最小指數(shù)值確定針對(duì)乘積有效數(shù)的移位量和移位方向的裝置,該乘積有效數(shù)是由對(duì)第一部分乘積和第二部分乘積的加法運(yùn)算生成;用于針對(duì)到加法運(yùn)算中的注入生成第一舍入值和第二舍入值的裝置,其中用于生成第一舍入值和第二舍入值的裝置包括通過將預(yù)定的舍入圖案在與移位方向相反的方向移位以移位量來生成第一舍入值的裝置以及通過將第一舍入值左移一位來生成第二舍入值的裝置;用于針對(duì)加法運(yùn)算將第一部分乘積、第二部分乘積以及第一舍入值一起相加來生成第一乘積有效數(shù)的裝置;用于針對(duì)加法運(yùn)算將第一部分乘積、第二部分乘積以及第二舍入值一起相加來生成第二乘積有效數(shù)的裝置;用于將第一乘積有效數(shù)和第二乘積有效數(shù)中的至少一個(gè)在移位方向移位以移位量的裝置;以及用于選擇第一乘積有效數(shù)和第二乘積有效數(shù)之一來以預(yù)定的標(biāo)準(zhǔn)格式生成格式化的有效數(shù)的裝置。
至少一些實(shí)施例提供對(duì)用于執(zhí)行浮點(diǎn)乘法運(yùn)算的數(shù)據(jù)處理裝置進(jìn)行操作的方法,包括:將第一浮點(diǎn)運(yùn)算對(duì)象的有效數(shù)與第二浮點(diǎn)運(yùn)算對(duì)象的有效數(shù)相乘來生成第一部分乘積和第二部分乘積;根據(jù)第一浮點(diǎn)運(yùn)算對(duì)象和第二浮點(diǎn)運(yùn)算對(duì)象的前導(dǎo)零計(jì)數(shù)和指數(shù)值來計(jì)算乘法運(yùn)算的結(jié)果的無偏指數(shù)值,并且根據(jù)預(yù)定的標(biāo)準(zhǔn)格式的預(yù)定的最小指數(shù)值確定針對(duì)乘積有效數(shù)的移位量和移位方向,該乘積有效數(shù)是由對(duì)第一部分乘積和第二部分乘積的加法運(yùn)算生成;針對(duì)加法運(yùn)算中的注入生成第一舍入值和第二舍入值,其中生成第一舍入值和第二舍入值包括通過將預(yù)定的舍入圖案在與移位方向相反的方向移位以移位量來生成第一舍入值,并通過將第一舍入值左移一位來生成第二舍入值;針對(duì)加法運(yùn)算將第一部分乘積、第二部分乘積以及第一舍入值一起相加來生成第一乘積有效數(shù);針對(duì)加法運(yùn)算將第一部分乘積、第二部分乘積以及第二舍入值一起相加來生成第二乘積有效數(shù);將第一乘積有效數(shù)和第二乘積有效數(shù)中的至少一個(gè)在移位方向移位以移位量;以及選擇第一乘積有效數(shù)和第二乘積有效數(shù)之一來以預(yù)定的標(biāo)準(zhǔn)格式生成格式化的有效數(shù)。
現(xiàn)根據(jù)附圖描述一些具體的實(shí)施例。
浮點(diǎn)數(shù)包括符號(hào)位、指數(shù)位以及小數(shù)位。例如以ieee754-2008格式的單精度(sp)浮點(diǎn)數(shù)由包含單個(gè)符號(hào)位、8個(gè)指數(shù)位以及23個(gè)小數(shù)位的32位給定。當(dāng)在兩個(gè)這種浮點(diǎn)數(shù)之間執(zhí)行乘法運(yùn)算時(shí),小數(shù)位必須一起被相乘,同時(shí)指數(shù)位被相加,但是當(dāng)然,小數(shù)位乘法運(yùn)算的結(jié)果可以根據(jù)結(jié)果浮點(diǎn)數(shù)值應(yīng)被呈現(xiàn)的特定格式來要求對(duì)結(jié)果指數(shù)進(jìn)行修正。在此例中,以標(biāo)準(zhǔn)sp浮點(diǎn)格式產(chǎn)生浮點(diǎn)結(jié)果值是十分有用的,其中有效數(shù)(小數(shù))乘積被正規(guī)化(在可能的情況下),或者如果乘積是次正規(guī)(subnormal)的,則有效數(shù)乘積有多個(gè)前導(dǎo)零。
當(dāng)兩個(gè)正規(guī)有效數(shù)相乘,1.a*1.b,乘積可以在范圍[1,2)內(nèi)(即,精確地從1到2,但不包括2)或者[2,4)(即,精確地從2到4,但不包括4)。例如:
1.00*1.01=1.0100,其在[1,2)內(nèi)且未溢出,以及
1.10*1.10=10.1000,其在[2,4)內(nèi)且已溢出。
圖1a示出了針對(duì)兩個(gè)正規(guī)的23位有效數(shù)的乘積的兩種可能的位位置結(jié)果,其中乘積將在范圍[1,2)內(nèi)且乘積的位47將是0,或者乘積將在溢出范圍[2,4)內(nèi)且乘積的位47將是1。乘積的第一位被標(biāo)注為i(整數(shù)位),并且接下來的22位被標(biāo)注為f(小數(shù)位)。最終的小數(shù)位被標(biāo)注為l(最后位),隨后的位是g(保護(hù)位),所有剩下的位被標(biāo)注為s(粘滯位)。單個(gè)二進(jìn)制值s被定義成所有s位的邏輯或。換言之,當(dāng)此47位或48位乘積作為23位浮點(diǎn)有效數(shù)被返回時(shí),l是截?cái)嘀档淖畹陀行唬琯是接下來的最高有效位(即,未被包含在截?cái)鄡?nèi)的第一位),而s是所有剩下的、不是截?cái)嗟囊徊糠值奈坏倪壿嫽?。這三個(gè)值可被要求來根據(jù)被實(shí)施的特定舍入模式對(duì)被注入舍入的乘積有效數(shù)進(jìn)行修正,下面將進(jìn)一步對(duì)其進(jìn)行描述。
圖1b示出了在輸入運(yùn)算對(duì)象之一是次正規(guī)的(有k個(gè)前導(dǎo)零)情形下,這些被命名的位的位置。如可以從圖1b中看出的,在無溢出乘積中有k個(gè)前導(dǎo)零而溢出乘積中有k-1個(gè)前導(dǎo)零。相應(yīng)地,從圖1a和1b以及關(guān)于這些附圖的以上描述中應(yīng)了解的是,在接受可以是正規(guī)化的或可以是次正規(guī)的輸入運(yùn)算對(duì)象的浮點(diǎn)乘法器中以上所提的特定位(i,f,l,g和s)出現(xiàn)的位置可以根據(jù)輸入運(yùn)算對(duì)象的性質(zhì)(正規(guī)的或次正規(guī)的)以及乘積有效數(shù)是否溢出而變化很大。應(yīng)注意,兩個(gè)輸入運(yùn)算對(duì)象都是次正規(guī)的情形在本文中是不重要的,這是由于它會(huì)產(chǎn)生不具代表性的很小的乘積,因?yàn)橄嚓P(guān)聯(lián)的指數(shù)(在此sp示例中)是-254或更小并且最終結(jié)果僅由舍入模式?jīng)Q定。
以上參考圖1a和圖1b的討論僅考慮浮點(diǎn)輸入運(yùn)算對(duì)象有效數(shù)并且不涉及指數(shù)。定義:
expa=運(yùn)算對(duì)象a的無偏指數(shù),
expb=運(yùn)算對(duì)象b的無偏指數(shù),
clza=a的有效數(shù)中的前導(dǎo)零數(shù)目,
clzb=b的有效數(shù)中的前導(dǎo)零數(shù)目,
并且使clz為clza和clzb的邏輯或,則移位之前無偏結(jié)果指數(shù)是
result_exp=expa+expb-clz。
基于此計(jì)算出的結(jié)果指數(shù),48位乘積有效數(shù)可以要求移位使得位[47:0]表示標(biāo)準(zhǔn)形式的乘積,或者在乘積是正規(guī)的的情況下被正規(guī)化,或者在乘積是次正規(guī)的情況下具有正確數(shù)目的前導(dǎo)零。此移位可以是兩種方向中的任一方向,即:
1)當(dāng)result_exp小于無偏指數(shù)值-126時(shí)右移。在所有這種情形中,為了達(dá)到最小無偏指數(shù)值-126,乘積有效數(shù)被右移以一位或多位。
2)當(dāng)有一個(gè)次正規(guī)輸入并且result_exp大于-126時(shí)左移。在這種情形中,乘積有效數(shù)被移位零或多位,直到(無論哪個(gè)先發(fā)生)a)與被移位的值對(duì)應(yīng)的指數(shù)等于-126,或者b)乘積有效數(shù)變成正規(guī)的(即,i位在位置46上)。
圖2示意性地示出一個(gè)實(shí)施例中的浮點(diǎn)乘法器裝置10。運(yùn)算對(duì)象“a”opa[31:0](被標(biāo)注為12)由符號(hào)位signa、指數(shù)位expa[7:0]和小數(shù)位fraca[22:0]組成,運(yùn)算對(duì)象“b”opb[31:0](被標(biāo)注為14)也具有相似的分解。在第一階段(周期)v1,fraca和fracb在23*23的陣列16中被相乘,在此之后通過使用3∶2壓縮器20和22將23個(gè)部分乘積規(guī)約到兩個(gè)(48位)部分乘積。
在規(guī)約過程中,指數(shù)計(jì)算電路(示出為組件24的一部分)檢查expa和expb看他們是否是非零的。非零expa意味著a的隱含的整數(shù)位被置位,在這種情形下指數(shù)計(jì)算電路24向規(guī)約陣列(部件18)發(fā)信號(hào)表示另一個(gè)因數(shù)fracb將被添加到規(guī)約中。類似地,非零expb意味著b的隱含的整數(shù)位被置位,所以在這種情形中另一個(gè)因數(shù)fraca將被添加到規(guī)約中。最終,與隱含的整數(shù)位的乘積對(duì)應(yīng)的單個(gè)位被添加到規(guī)約陣列18中。當(dāng)進(jìn)行陣列規(guī)約時(shí),指數(shù)計(jì)算電路也對(duì)有效數(shù)opa和opb執(zhí)行前導(dǎo)零計(jì)數(shù)(clz)操作,并計(jì)算出乘積指數(shù)、移位量和移位方向(稍后描述)。舍入注入電路(在此圖中作為組件24的一部分被示出)針對(duì)注入舍入構(gòu)造兩個(gè)舍入常量。應(yīng)注意(由于以上關(guān)于圖1a和圖1b給出的原因),在此階段并不知道乘積有效數(shù)的前導(dǎo)零會(huì)在哪里,雖然它可以在一位位置內(nèi)被計(jì)算出,因此出于該原因針對(duì)兩個(gè)候選乘積有效數(shù)的每個(gè)舍入常量被生成。通過使用3∶2進(jìn)位-總和-加法器(csa)20和22將舍入常量(ovfl_round和round)添加到部分乘積,并且然后48位加法器24和49位加法器26產(chǎn)生兩個(gè)候選乘積有效數(shù)(ovfl_prod[47:0]和prod[48:0])。部分乘積的總和永遠(yuǎn)符合48位,雖然在一些情形中舍入項(xiàng)向第49位引入進(jìn)位。
在第二階段(周期)v2,基于由指數(shù)計(jì)算電路確定的左移量(ls[4:0])38和右移量(rs[4:0])40,被存放在寄存器28和30中的兩個(gè)候選乘積有效數(shù)被移位器32、34和36左移或右移。針對(duì)每個(gè)移位結(jié)果的最終指數(shù)被產(chǎn)生,并且最后,根據(jù)從指數(shù)計(jì)算電路20接收的移位方向(rs/ls)信號(hào)、溢出標(biāo)志和特殊標(biāo)志,多路選擇器42在四種可能中作選擇,即被左移的溢出有效數(shù)(ovfl_prod)、被左移的無溢出有效數(shù)(prod)、被右移的無溢出有效數(shù)(prod)或特殊值。當(dāng)確定需要特別定義的輸出(比如nan、無窮大和零)時(shí),預(yù)先定義的特殊值則被選擇。有效數(shù)以標(biāo)準(zhǔn)的23位sp格式被輸出,除非該相乘是融合乘加(fma)的一部分,在此情形下,兩個(gè)舍入常量將被覆蓋(使得實(shí)際上無舍入注入發(fā)生)并且完整的47位小數(shù)被轉(zhuǎn)發(fā)。
也在第二階段(周期)v2中,比較電路44和46使用由掩碼生成電路構(gòu)造的掩碼在被左移的有效數(shù)上檢測(cè)溢出,并且確定針對(duì)被左移的有效數(shù)和被右移的有效數(shù)的異常標(biāo)志掩碼和舍入修正。在候選乘積有效數(shù)被左移移位器32、34和右移移位器36移位前,可直接對(duì)候選乘積有效數(shù)應(yīng)用這些被生成的掩碼。
對(duì)圖2所示的具有圖示的周期邊界的浮點(diǎn)乘法器裝置10的概述允許對(duì)本技術(shù)的效果的理解,即具有注入舍入的浮點(diǎn)乘法運(yùn)算被提供,它導(dǎo)致完全舍入的結(jié)果(或者融合乘加的相乘部分),其可以在不到兩個(gè)周期內(nèi)被執(zhí)行,實(shí)際上只需要1.5個(gè)周期。應(yīng)注意,即使半周期的加速也十分有用,由于它允許零周期轉(zhuǎn)發(fā)。
圖3示意性地示出了一個(gè)實(shí)施例中的舍入注入電路50。舍入常數(shù)開始是一跟隨有22個(gè)零(針對(duì)rne舍入)或者22個(gè)一(針對(duì)ru舍入)。接下來左移移位器52將此基礎(chǔ)舍入圖案左移以由指數(shù)計(jì)算電路確定的右移移位量并且右移移位器54將此基礎(chǔ)舍入圖案右移以由指數(shù)計(jì)算電路確定的左移移位量。左移移位量和右移移位量在這里是5位的值,所以這些移位可以在從0到31位的任何位置。被左移的舍入常量56(在該情況下如果處于ur模式中則出現(xiàn)在右側(cè)的位被填充以一)因此最后會(huì)是48位的值。被右移的舍入常量58左側(cè)的位被替換成零因此仍然是23位的值。左移舍入值和右移舍入值都被生成,但是只有合適的一個(gè)會(huì)被使用,這由指數(shù)計(jì)算電路生成的左移(ls)信號(hào)或右移(rs)信號(hào)確定。因此生成的舍入常量針對(duì)圖2中的“prod”加法器26是正確的,同時(shí)針對(duì)圖2中的“ovfl_prod”加法器24,一位左移移位器60將舍入常量左移一位,并用ru位(即ru模式時(shí)是一)填充最低位。接下來通過使用圖2中相應(yīng)的3∶2csa20和22來將兩個(gè)舍入常量ovfl_round62和round64添加到部分乘積。應(yīng)注意,圖3也示出了融合乘加(fma)覆蓋信號(hào),該信號(hào)使得兩個(gè)舍入常量被置為零,因此當(dāng)乘法運(yùn)算形成融合乘加運(yùn)算的一部分時(shí),無注入舍入發(fā)生。因此,計(jì)算基礎(chǔ)舍入注入(該注入將被應(yīng)用于未被移位的有效數(shù))并且接下來在相反的方向并以與隨后的有效數(shù)移位相同的幅值對(duì)其進(jìn)行移位,這允許舍入注入被加到未被移位并且舍入發(fā)生在正確地方的有效數(shù)。
圖4示意性地示出由圖2中的掩碼生成電路24和比較電路46的組合所確定的溢出。溢出掩碼初始被構(gòu)造為由在位置47處的一和剩余位的零組成。接下來(右移移位器70)將該溢出掩碼以乘積將被左移的相同移位量右移。該右移在(加法器26)產(chǎn)生49位的乘積有效數(shù)之前發(fā)生,并且溢出由掩碼72與乘積74的邏輯與76和緊接著的規(guī)約或78檢測(cè)出。這允許在完成候選有效數(shù)乘積的左移(通過左移移位器32和34)之前對(duì)溢出的檢測(cè)。圖4的邏輯電路的類似verilog的版本是:
ls_overflow=|(ovfl_mask[47:16]&prod[47:16]);
應(yīng)注意,不是乘積prod的所有位都會(huì)被檢測(cè),因?yàn)樽笠频淖畲罅勘幌拗频?1。圖4也示出了右移溢出檢測(cè)電路80,該電路被提供來檢測(cè)受限的情形,在該情形中,溢出可以發(fā)生在被右移的乘積中,即當(dāng)被注入舍入的乘積的位47被置位并且右移量是1,或者當(dāng)被注入舍入的乘積的位48被置位并且右移量是2時(shí)。在這兩種情形中,右移溢出檢測(cè)電路都會(huì)將偏置指數(shù)置為1。所有其他的右移的偏置指數(shù)是零。
針對(duì)計(jì)算最后位(l)值、保護(hù)位(g)值和粘滯位(s)值有三組掩碼,現(xiàn)將參照?qǐng)D5、6和7來討論其生成和使用,其中圖5、6和7示意性地示出了與圖2中的掩碼生成電路24以及比較電路44和46對(duì)應(yīng)的電路。
圖5示出了左移溢出的情形,其中初始掩碼圖案被初始化為零跟隨有24個(gè)連續(xù)一,接下來(右移移位器90)將該掩碼右移以左移位量,在左側(cè)填充零。這生成25位掩碼lomask[24:0]92,它直到并包括l位都是零,g和s位是一。從由掩碼操縱電路94構(gòu)建的該特定掩碼中挑選出l、g和s。由掩碼操縱電路94實(shí)施的邏輯電路的相對(duì)應(yīng)的類似verilog的版本是:
logmask[23:0]=~lomask[24:1]&lomask[23:0];
使得logmask98的g位所在位置處是一,其他地方是零;
lolmask[24:0]={logmask[23:0],1’b0};
使得lolmask96的l位所在位置處是一,其他地方是零;以及
losmask[22:0]=lomask[22:0]&~lolmask[22:0]&~logmask[22:0];
使得losmask100的每個(gè)粘滯位位置處都是一,其他地方是零。
由電路102、104和106直接對(duì)溢出乘積有效數(shù)ovfl_prod108應(yīng)用這些掩碼來獲得(從或門110、112和114)針對(duì)被左移的溢出乘積的l、g和s。對(duì)應(yīng)的類似verilog的版本是:
lovl=|(lolmask[24:0]&ovfl_prod[24:0]);//左溢出l
lovg=|(logmask[23:0]&ovfl_prod[23:0]);//左溢出g
lovs=|(losmask[22:0]&ovfl_prod[22:0]);//左溢出s
針對(duì)無溢出左移的情形的掩碼是通過將左移溢出掩碼右移一位而被創(chuàng)建。這在圖6中被示出,其中可以看出掩碼生成電路生成llmask126、lgmask128和lsmask130,這通過根據(jù)如下的類似verilog的描述將相應(yīng)的左移溢出掩碼120、122、124(的位選擇)進(jìn)行移位來完成:
llmask[23:0]=lolmask[24:1];
lgmask[22:0]=lolmask[23:1];
lsmask[21:0]=lolmask[22:1];
在最終階段,與電路132、134和136直接對(duì)無溢出乘積prod應(yīng)用這些掩碼來(從或門138、140和142)獲得針對(duì)被左移的無溢出乘積的l、g和s。對(duì)應(yīng)的類似verilog的版本是:
ll=|(llmask[23:0]&prod[23:0]);//左l
lg=|(lgmask[22:0]&prod[22:0]);//左g
ls=|(lsmask[21:0]&prod[21:0]);//左s
圖7示出了右移掩碼的使用和結(jié)構(gòu)。乘積將被右移以右移位量,為了計(jì)算l、g和s,通過將其以相同的移位量左移來構(gòu)建掩碼。初始掩碼是26個(gè)連續(xù)零跟隨23個(gè)連續(xù)一,并且(左移移位器150)將此掩碼左移以右移位量,并在右側(cè)填充額外的一,產(chǎn)生rmask[48:0]152,。掩碼操縱電路從該特定掩碼構(gòu)建156、158和160以從中挑選出l、g和s。對(duì)應(yīng)的由掩碼操縱電路154實(shí)施的verilog版本是:
rgmask[47:22]=~rmask[48:23]&rmask[47:22];
rlmask[48:23]=~rgmask[47:22];
rsmask[47:0]=rmask[48:1];
并且通過與電路162、164和166對(duì)無溢出乘積prod應(yīng)用這些掩碼來(從或門168、170和172)獲得針對(duì)被右移的乘積的l、g和s,l、g和s以與左移情形相同的方式被計(jì)算。對(duì)應(yīng)的類似verilog版本是:
rl=|(rlmask[48:23]&prod[48:23]);//右l
rg=|(rgmask[47:22]&prod[47:22]);//右g
rs=|(rsmask[47:0]&prod[47:0]);//右s
在以上所有情形(圖5-7所示)中基礎(chǔ)掩碼在v1中被構(gòu)建,針對(duì)l、g和s的特定掩碼在v2開始時(shí)被產(chǎn)生。由于由這點(diǎn)可知如果乘積有效數(shù)被左移或右移,并且溢出被確定,可以僅從三個(gè)計(jì)算出的版本中選擇適合的l、g和s。
圖8a示意性地示出了一個(gè)實(shí)施例中的修正電路180。該修正電路被提供是因?yàn)楫?dāng)應(yīng)用rne舍入時(shí),l和g的值需要最終的修正。s保持不變。這是因?yàn)樵趃位置處已被注入置位位,所以g的真值是計(jì)算出的g的逆,并且l可能也會(huì)被注入改變。給定l、g和s(注入后)的值,舍入結(jié)果的被修正的最后位(“被修正的l”)由l&(g|s)給出。
圖8b示意性地示出檢測(cè)非精確結(jié)果的電路。如圖8b中所示的非精確檢測(cè)電路,當(dāng)裝置在ru模式中執(zhí)行舍入時(shí),對(duì)乘積的低位(對(duì)g和s有貢獻(xiàn)的位)執(zhí)行位比較(使用位比較電路184),并且將它們與舍入注入相比較。如果這些位未改變則舍入注入不改變乘積,結(jié)果是精確的。如果被修正的g或s是非零的,針對(duì)非ru舍入模式,非精確檢測(cè)電路182被布置為將非精確標(biāo)志置位。對(duì)應(yīng)的非精確檢測(cè)電路的類似verilog版本是:
ru_exact=&((prod[47:0]&round[47:0])|~round[47:0]);
oru_exact=&((ovfl_prod[47:0]&oround[47:0])|~oround[47:0]);
ixc_ru=(overflow&~oru_exact)|(~overflow&~ru_exact);
圖9a示意性地示出用于下溢檢測(cè)的電路,使用該電路是因?yàn)橛糜诟↑c(diǎn)乘法運(yùn)算的方法被定義為使得下溢檢測(cè)應(yīng)該在舍入之前發(fā)生,并且當(dāng)然,伴隨著盡早的注入舍入,無預(yù)先被舍入的乘積。這里被認(rèn)知的是,有問題的情形是將次正規(guī)乘積變?yōu)樽钚〉恼?guī)乘積的舍入注入,因?yàn)樵谶@種情形中小數(shù)全部是零并且偏置指數(shù)從零變?yōu)橐?。相?yīng)地,下溢檢測(cè)電路186通過檢查乘積小數(shù)(其必須是零)來檢測(cè)這種類型的下溢,如果是這樣的話并且如果偏置指數(shù)是一并且非精確標(biāo)志被置位,則接下來舍入導(dǎo)致溢出到正規(guī)數(shù)中,并且下溢(ufc)的標(biāo)志被置位,即使最終結(jié)果實(shí)際上將是正規(guī)的。
圖9b示意性地示出了清零檢測(cè)電路188,在裝置中提供該電路使得當(dāng)啟用清零模式時(shí),在舍入前是次正規(guī)的結(jié)果被清零。與以上關(guān)于用于檢測(cè)下溢的圖9a所述的相似的邏輯適用于此,因?yàn)槿绻笖?shù)是零并且(i)指數(shù)不溢出或者(ii)指數(shù)由于舍入溢出,清零發(fā)生。這個(gè)清零標(biāo)志導(dǎo)致輸出覆蓋,其中無論計(jì)算出的值是什么,輸出值被清零。
圖10a、10b和10c示出在一個(gè)實(shí)施例的方法中所采用的一系列步驟。流程被看作在步驟200處開始,流程200中輸入運(yùn)算對(duì)象opa和opb存在于輸入寄存器中。接下來在步驟202處,在乘法器陣列中開始小數(shù)部分fraca和fracb的乘法運(yùn)算。在此同時(shí)(在204處)開始對(duì)運(yùn)算對(duì)象的指數(shù)部分進(jìn)行檢查以確定每個(gè)運(yùn)算對(duì)象的無偏指數(shù)和每個(gè)運(yùn)算對(duì)象的前導(dǎo)零計(jì)數(shù),使得可以對(duì)將被要求的移位(在量和方向兩者上)做出確定。在步驟206處確定opa是否有非零指數(shù),若有,則流程通過步驟208前進(jìn),在步驟208中,將另一個(gè)因數(shù)fracb添加到規(guī)約陣列中。類似地,在步驟210處確定opb是否有非零指數(shù),若有,則流程通過步驟212前進(jìn),在步驟212中,將另一個(gè)因數(shù)fraca添加到規(guī)約陣列中。最后,在步驟214處,針對(duì)任何隱含的整數(shù)位的乘積將單個(gè)位添加到規(guī)約陣列。接下來在步驟216處,基于已確定的移位量,分別通過將基礎(chǔ)舍入值右移和左移以移位量來生成左移舍入值和右移舍入值。然后在步驟218處通過將舍入常量左移一位來創(chuàng)建針對(duì)溢出乘積有效數(shù)加法器的舍入值。接下來通過使用3∶2壓縮器將這兩個(gè)舍入常量添加到部分乘積中,除非乘法運(yùn)算是融合乘加運(yùn)算的一部分,在此情形中舍入常量被強(qiáng)制置零。然后在步驟222處通過使用相應(yīng)的48位加法器和49位加法器來完成部分乘積加法運(yùn)算。
在步驟224處,通過將初始溢出掩碼圖案右移以移位量來針對(duì)被左移的有效數(shù)創(chuàng)建溢出掩碼。接著在步驟226處,對(duì)無溢出乘積有效數(shù)應(yīng)用該溢出掩碼來確定溢出狀態(tài)。接下來在步驟228處,對(duì)乘積有效數(shù)和溢出乘積有效數(shù)應(yīng)用l、g和s掩碼來根據(jù)移位方向和溢出狀態(tài)確定這些l、g和s位的值。然后在步驟230處將溢出乘積有效數(shù)左移,并且通過相應(yīng)的移位器對(duì)無溢出乘積有效數(shù)進(jìn)行左移和右移。然后在步驟232處,基于被移位方向和溢出值,在被移位的乘積有效數(shù)中選擇將輸出的乘積有效數(shù),除非它被特殊值覆蓋。在步驟234處,基于舍入模式應(yīng)用任何必要的舍入修正,并且接下來在步驟236處,通過對(duì)乘積有效數(shù)的低位與其舍入注入的比較,執(zhí)行非精確檢測(cè)。在步驟238處從為零的乘積有效數(shù)、為一的偏置指數(shù)以及被置位的非精確標(biāo)志中檢測(cè)下溢。最終在步驟240處,如果裝置在清零模式,如果偏置指數(shù)是零并且無指數(shù)溢出或者指數(shù)由于舍入溢出,則執(zhí)行清零。該流程在步驟242處結(jié)束。
以簡(jiǎn)短的方式整體總結(jié),本技術(shù)提供用于浮點(diǎn)乘法運(yùn)算的裝置和方法。從兩個(gè)運(yùn)算對(duì)象有效數(shù)生成兩個(gè)部分有效數(shù)。從運(yùn)算對(duì)象的指數(shù)值和前導(dǎo)零計(jì)數(shù)確定無偏結(jié)果指數(shù),以及預(yù)定的標(biāo)準(zhǔn)格式的預(yù)定的最小指數(shù)值所需的乘積有效數(shù)的移位量和移位方向。針對(duì)注入到部分乘積的加法運(yùn)算中的第一舍入值和第二舍入值,將預(yù)定的舍入圖案在與移位方向相反方向移位以移位量來生成第一舍入值,并且通過將第一舍入值左移一位給出第二舍入值。將第一、第二部分乘積和第一舍入值一起相加來給出第一乘積有效數(shù),將第一、第二部分乘積和第二舍入值一起相加來給出第二乘積有效數(shù)。將這些乘積有效數(shù)在移位方向移位以移位量,并且從中選擇一個(gè)來生成以預(yù)定的標(biāo)準(zhǔn)格式的格式化的有效數(shù)。盡早的注入舍入提供了更快的浮點(diǎn)乘法器
在本申請(qǐng)中,詞語(yǔ)“被配置”或者“被布置”被用來表示裝置的元件具有能夠執(zhí)行所定義操作的配置。在此上下文中,“配置”的意思是軟件或硬件的互連的布置或方式。例如,裝置可以具有提供所定義操作的專用硬盤,或被編程為執(zhí)行功能的處理器或其它處理設(shè)備?!氨慌渲脼椤被蛘摺氨话才艦椤辈灰馕吨b置元件需要以任何方式被改變來提供定義操作。
雖然在此參照附圖詳細(xì)地描述本發(fā)明實(shí)施例,應(yīng)理解本發(fā)明不限于這些精確實(shí)施例,并且本領(lǐng)域技術(shù)人員可實(shí)現(xiàn)各種不同的改變、補(bǔ)充和修改而不背離如所附權(quán)利要求定義的發(fā)明范圍。例如,可以將獨(dú)立權(quán)利要求的特征與從屬權(quán)利要求的特征做出各種不同的組合而不背離本發(fā)明范圍。