專(zhuān)利名稱:一種降低cpu功耗的方法、裝置及一種低功耗cpu的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及微處理器技術(shù)領(lǐng)域,特別是涉及一種降低CPU功耗的方法、裝置及一 種低功耗CPU。
背景技術(shù):
CPU的流水線結(jié)構(gòu)最初在RISC (精簡(jiǎn)指令集)CPU的硬件設(shè)計(jì)上得到廣泛應(yīng)用,但 今天無(wú)論是RISC CPU還是CISC(復(fù)雜指令集)CPU,在硬件實(shí)現(xiàn)上都采用了多極流水線結(jié) 構(gòu)。以經(jīng)典的RISC CPU五級(jí)流水線結(jié)構(gòu)為例,參照?qǐng)D1所示,包括五個(gè)步驟IF、DE、EX、MEM 和WB,各步驟功能如下1) IF步驟包括從指令存儲(chǔ)器(例如RAM、Cache等)中讀出指令,然后將指令存 入IF/DE流水線寄存器Rif等;2)DE步驟包括把從Rif取出來(lái)的指令進(jìn)行譯碼,生成當(dāng)前指令的控制信息,從寄 存器堆GRF讀出數(shù)據(jù),把控制信息和數(shù)據(jù)存入DE/EX流水線寄存器Rde等。其中,控制信息包 括對(duì)當(dāng)前步驟的控制信息(D)以及對(duì)后續(xù)步驟EX的控制信息(E)、對(duì)步驟MEM的控制信息 (M)和對(duì)步驟WB的控制信息(W) ;D包括是否讀GRF (GRFRead)、讀寄存器地址(GRFRaddr) ;E 包括運(yùn)算操作控制(ALUop)、ALU數(shù)據(jù)來(lái)源選擇(ALUSrc)等;M包括是否讀內(nèi)存(Memread)、 是否寫(xiě)內(nèi)存(Memwrite)等;W包括是否寫(xiě)GRF(GRFWrite)、GRF數(shù)據(jù)來(lái)源選擇(MemReg)Jjf 寫(xiě)GRF寄存器地址(GRFWaddr)等;3) EX步驟包括從Rde獲得Ε、M、W,從bypass或Rde獲得執(zhí)行數(shù)據(jù)運(yùn)算用的數(shù)據(jù), 根據(jù)E執(zhí)行數(shù)據(jù)運(yùn)算,把運(yùn)算結(jié)果寫(xiě)入EX/MEM流水線寄存器Rex,把M、W寫(xiě)入Rex等;4) MEM步驟包括從Rex獲得M、W,根據(jù)M對(duì)從bypass或Rex獲得的內(nèi)容進(jìn)行相應(yīng) 的操作,根據(jù)M對(duì)操作結(jié)果進(jìn)行訪問(wèn)內(nèi)存的操作,根據(jù)M對(duì)操作結(jié)果或從bypass或Rex獲得 的內(nèi)容進(jìn)行寫(xiě)入MEM/WB流水線寄存器Rmem的操作,把W寫(xiě)入Rmem等;5) WB步驟包括從Rmem獲得W,根據(jù)W對(duì)從Rmem獲得的內(nèi)容進(jìn)行寫(xiě)入GRF的操作等。 如果虛線所示的bypass路徑存在,則將相應(yīng)內(nèi)容存入MEM/WB流水線寄存器R 。還需要說(shuō)明的是,圖1中1) INSTx, INSTX+1,INSTx+2,INSTx+3,INSTx+4......代表 CPU順序執(zhí)行的連續(xù)的指令,
每條指令都要流過(guò)CPU流水線上五個(gè)處理步驟;2) Ty, Ty+1,Ty+2,Ty+3,Ty+4,Ty+5,......代表CPU中每個(gè)時(shí)鐘周期的開(kāi)始時(shí)刻,兩個(gè)
相鄰的時(shí)間點(diǎn)相差一個(gè)CPU的時(shí)鐘周期; 3)指令間的連線代表CPU中的bypass路徑,如Rex到EX的連線,Rmem到MEM或EX 的連線,Rwb到MEM或EX的連線。bypass被用來(lái)把流水線上一條指令產(chǎn)生的數(shù)據(jù)在其寫(xiě)入 寄存器堆GRF之前向流水線上使用該數(shù)據(jù)的后續(xù)指令直接傳輸。其中虛線表示的bypass路 徑可能存在也可能不存在,這取決于GRF設(shè)計(jì),如果位于DE步驟的讀GRF發(fā)生在下降沿,位 于WB步驟的寫(xiě)GRF發(fā)生在上升沿,并且時(shí)鐘上升沿寫(xiě)入的數(shù)據(jù)當(dāng)拍時(shí)鐘下降沿能夠讀到, 那么此bypass路徑不需要,否則就需要安排這個(gè)路徑;
4)如果上述虛線所示的bypass路徑存在,則WB步驟后就存在流水線寄存器Rwb, 否則無(wú)需此流水線寄存器;5)圖中只示出了指令I(lǐng)NSTx到其后三條指令的bypass路徑,實(shí)際上,每條指令都 存在直接將數(shù)據(jù)傳輸?shù)胶罄m(xù)指令的bypass路徑。上述Bypass裝置優(yōu)化了 CPU流水線結(jié)構(gòu),如果沒(méi)有Bypass裝置,CPU的指令執(zhí)行 效率會(huì)出現(xiàn)非常巨大的損失,降到一半甚至更差。因?yàn)橹噶畹膱?zhí)行一般需要先從寄存器堆 GRF中讀取原操作數(shù),指令執(zhí)行完畢后需要將結(jié)果即目標(biāo)操作數(shù)寫(xiě)入GRF。而程序通常普遍 具有緊密的“寫(xiě)-讀”數(shù)據(jù)依賴,即一條指令產(chǎn)生的數(shù)據(jù)(寫(xiě))被緊隨其后的第1、2、3...條 指令所使用(讀)。由于指令的執(zhí)行是流水線方式,讀GRF與寫(xiě)GRF之間相距數(shù)個(gè)時(shí)鐘周 期,而相鄰的指令之間為了執(zhí)行效率的緣故盡可能只相隔一個(gè)周期。后面指令要使用前面 指令的執(zhí)行結(jié)果,如果沒(méi)有bypass路徑,這條指令就需要等到前面的指令將結(jié)果寫(xiě)入GRF 后再將它讀出來(lái),這樣會(huì)阻塞流水線多個(gè)周期。Bypass是一個(gè)旁路裝置,在不影響該數(shù)據(jù)寫(xiě) 入GRF的情況下將此數(shù)據(jù)直接送給需要使用它的緊隨其后的第1、2、3...條指令,數(shù)據(jù)可以 直接送達(dá)使用它們的電路,而不是按節(jié)拍經(jīng)過(guò)流水線各級(jí)裝置。在CPU運(yùn)行過(guò)程中每條指令的執(zhí)行因該指令而定,有些進(jìn)行所有五個(gè)步驟,有些 可能只進(jìn)行其中幾個(gè)。進(jìn)行哪些步驟由DE步驟中譯碼后的控制信息進(jìn)行控制。如果某個(gè) 步驟不執(zhí)行,那么該步驟之前流水線寄存器中的內(nèi)容要在該步驟對(duì)應(yīng)的工作時(shí)間里,被傳 遞到該步驟之后的那個(gè)流水線寄存器。從上述CPU設(shè)計(jì)來(lái)看,目前的CPU流水線結(jié)構(gòu)由于有了 Bypass裝置的優(yōu)化,大大 提高了 CPU的執(zhí)行效率。但是,在保證效率的同時(shí)如何降低CPU的功耗,生產(chǎn)盡可能低功耗 的CPU,是微處理器領(lǐng)域未來(lái)的一個(gè)發(fā)展趨勢(shì),也是本發(fā)明要解決的一個(gè)問(wèn)題。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種降低CPU功耗的方法、裝置及一種低功耗 CPU,以降低CPU功耗。為了解決上述問(wèn)題,本發(fā)明公開(kāi)了一種降低CPU功耗的方法,包括比較當(dāng)前指令的讀寄存器堆操作與前η級(jí)指令的寫(xiě)寄存器堆操作,如果當(dāng)前指令 的讀寄存器地址與前η級(jí)指令中至少一條指令的寫(xiě)寄存器地址相同,則省略當(dāng)前指令讀該 寄存器地址的操作;其中,η的取值為CPU流水線上bypass路徑的最大跨度值。優(yōu)選的,所述方法還包括如果前η級(jí)指令中沒(méi)有指令執(zhí)行寫(xiě)操作,或者前η級(jí)指 令中的至少一條指令執(zhí)行寫(xiě)操作,但執(zhí)行寫(xiě)操作的指令中所有的寫(xiě)寄存器地址都與當(dāng)前指 令的讀寄存器地址不同,則執(zhí)行當(dāng)前指令讀該寄存器地址的操作。優(yōu)選的,所述比較包括獲得當(dāng)前指令讀寄存器堆的控制信息和前η級(jí)指令寫(xiě)寄 存器堆的控制信息,其中讀寄存器堆的控制信息包括是否讀的信息和所讀寄存器地址,寫(xiě) 寄存器堆的控制信息包括是否寫(xiě)的信息和所寫(xiě)寄存器地址;當(dāng)根據(jù)所述讀寄存器堆的控制 信息判斷當(dāng)前指令為讀寄存器堆時(shí),對(duì)前η級(jí)指令每條進(jìn)行如下判斷判斷是否寫(xiě)寄存器 堆,如果寫(xiě),則繼續(xù)判斷該指令的寫(xiě)寄存器地址是否與當(dāng)前指令的讀寄存器地址相同。其中,如果省略當(dāng)前指令讀該寄存器地址的操作,則當(dāng)前指令通過(guò)bypass路徑獲 得前η級(jí)指令中的某條指令要寫(xiě)入該寄存器地址的結(jié)果;如果執(zhí)行當(dāng)前指令讀該寄存器地址的操作,則當(dāng)前指令從該寄存器地址中讀取數(shù)據(jù)。其中,通過(guò)以下方式獲得當(dāng)前指令讀寄存器堆的控制信息和前η級(jí)指令寫(xiě)寄存器 堆的控制信息CPU五級(jí)流水線的寄存器依次為Rif、Rde、Rex、Rmem^ Rwb,則η的最大值為3 ;當(dāng) 前指令讀寄存器堆的控制信息從指令譯碼結(jié)果中獲得;前面第一級(jí)指令寫(xiě)寄存器堆的控制 信息從流水線寄存器Rde獲得;前面第二級(jí)指令寫(xiě)寄存器堆的控制信息從流水線寄存器Rex 獲得;前面第三級(jí)指令寫(xiě)寄存器堆的控制信息從流水線寄存器Rmem獲得。相應(yīng)的本發(fā)明還提供了一種降低CPU功耗的裝置,包括比較模塊,用于比較當(dāng)前指令的讀寄存器堆操作與前η級(jí)指令的寫(xiě)寄存器堆操 作;其中,η的取值為CPU流水線上bypass路徑的最大跨度值;操作控制模塊,用于當(dāng)當(dāng)前指令的讀寄存器地址與前η級(jí)指令中至少一條指令的 寫(xiě)寄存器地址相同時(shí),控制當(dāng)前指令讀該寄存器地址的操作省略。優(yōu)選的,如果前η級(jí)指令中沒(méi)有指令執(zhí)行寫(xiě)操作,或者前η級(jí)指令中的至少一條指 令執(zhí)行寫(xiě)操作,但執(zhí)行寫(xiě)操作的指令中所有的寫(xiě)寄存器地址都與當(dāng)前指令的讀寄存器地址 不同,則所述操作控制模塊控制當(dāng)前指令讀該寄存器地址的操作執(zhí)行。優(yōu)選的,所述比較模塊包括控制信息獲取子模塊,用于獲得當(dāng)前指令讀寄存器堆的控制信息和前η級(jí)指令寫(xiě) 寄存器堆的控制信息,其中讀寄存器堆的控制信息包括是否讀的信息和所讀寄存器地址, 寫(xiě)寄存器堆的控制信息包括是否寫(xiě)的信息和所寫(xiě)寄存器地址;判斷子模塊,用于當(dāng)根據(jù)所述讀寄存器堆的控制信息判斷當(dāng)前指令為讀寄存器堆 時(shí),對(duì)前η級(jí)指令每條進(jìn)行如下判斷判斷是否寫(xiě)寄存器堆,如果寫(xiě),則繼續(xù)判斷該指令的 寫(xiě)寄存器地址是否與當(dāng)前指令的讀寄存器地址相同。相應(yīng)的,本發(fā)明還提供了一種低功耗CPU,包括寄存器堆,用于存儲(chǔ)指令執(zhí)行所需的原操作數(shù)和指令執(zhí)行后的目標(biāo)操作數(shù);數(shù)據(jù)源信號(hào)產(chǎn)生模塊,用于比較當(dāng)前指令的讀寄存器堆操作與前η級(jí)指令的寫(xiě)寄 存器堆操作,如果當(dāng)前指令的讀寄存器地址與前η級(jí)指令中至少一條指令的寫(xiě)寄存器地址 相同,則輸出從bypass路徑讀取數(shù)據(jù)的信號(hào);其中,η的取值為CPU流水線上bypass路徑 的最大跨度值;讀寄存器堆控制模塊,用于當(dāng)數(shù)據(jù)源信號(hào)產(chǎn)生模塊輸出的信號(hào)為從bypass路徑 讀取數(shù)據(jù)時(shí),向當(dāng)前指令的讀寄存器地址輸出不允許讀的控制信號(hào),表示省略當(dāng)前指令讀 該寄存器地址的操作。優(yōu)選的,所述數(shù)據(jù)源信號(hào)產(chǎn)生模塊包括控制信息獲取子模塊,用于獲得當(dāng)前指令讀寄存器堆的控制信息和前η級(jí)指令寫(xiě) 寄存器堆的控制信息,其中讀寄存器堆的控制信息包括是否讀的信息和所讀寄存器地址, 寫(xiě)寄存器堆的控制信息包括是否寫(xiě)的信息和所寫(xiě)寄存器地址;判斷子模塊,用于當(dāng)根據(jù)所述讀寄存器堆的控制信息判斷當(dāng)前指令為讀寄存器堆 時(shí),對(duì)前η級(jí)指令每條進(jìn)行如下判斷判斷是否寫(xiě)寄存器堆,如果寫(xiě),則繼續(xù)判斷該指令的 寫(xiě)寄存器地址是否與當(dāng)前指令的讀寄存器地址相同,如果相同,則輸出從相應(yīng)bypass路徑 讀取數(shù)據(jù)的信號(hào),并停止下一條指令的判斷。優(yōu)選的,所述數(shù)據(jù)源信號(hào)產(chǎn)生模塊的判斷子模塊還用于,當(dāng)前η級(jí)指令中沒(méi)有指令執(zhí)行寫(xiě)操作,或者前η級(jí)指令中的至少一條指令執(zhí)行寫(xiě)操作,但執(zhí)行寫(xiě)操作的指令中所 有的寫(xiě)寄存器地址都與當(dāng)前指令的讀寄存器地址不同時(shí),輸出從當(dāng)前指令的讀寄存器地址 讀取數(shù)據(jù)的信號(hào);則所述讀寄存器堆控制模塊還用于,當(dāng)數(shù)據(jù)源信號(hào)產(chǎn)生模塊輸出的信號(hào)為從當(dāng)前 指令的讀寄存器地址讀取數(shù)據(jù)時(shí),向當(dāng)前指令的讀寄存器地址輸出允許讀的控制信號(hào),表 示執(zhí)行當(dāng)前指令讀該寄存器地址的操作。其中,當(dāng)所述CPU為五級(jí)流水線結(jié)構(gòu)時(shí),還包括五個(gè)流水線寄存器,依次為Rif、Rde、 Rex> R E > Rwb,則Π的最大值為3 ;所述數(shù)據(jù)源信號(hào)產(chǎn)生模塊的控制信息獲取子模塊從指令譯 碼結(jié)果中獲得當(dāng)前指令讀寄存器堆的控制信息;從流水線寄存器Rde獲得前面第一級(jí)指令 寫(xiě)寄存器堆的控制信息;從流水線寄存器Rex獲得前面第二級(jí)指令寫(xiě)寄存器堆的控制信息; 從流水線寄存器Rmem獲得前面第三級(jí)指令寫(xiě)寄存器堆的控制信息。優(yōu)選的,所述寄存器堆包括多個(gè)端口,每個(gè)端口對(duì)應(yīng)一個(gè)寄存器地址,則所述指令 的讀寄存器地址和寫(xiě)寄存器地址分別包括多個(gè)。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)首先,本發(fā)明提供了一種降低CPU功耗的方法如果U和V是流水線上的指令,U 在前,V在后,指令U要寫(xiě)GRF某個(gè)寄存器,該流水線上后面的指令V要讀GRF的該寄存器 時(shí),在CPU流水線的DE步驟中進(jìn)行邏輯判斷,該邏輯判斷可以在D(DE的控制信息)中已經(jīng) 設(shè)定要讀GRF的情況下,判斷讀GRF的操作是否可以不執(zhí)行,如果判斷結(jié)果為可以不執(zhí)行, 則不進(jìn)行讀GRF的操作,而是使用bypass路徑把U要寫(xiě)入GRF的結(jié)果傳輸給流水線上后續(xù) 的指令V。由上可知,本發(fā)明通過(guò)省略DE步驟中多余的讀GRF操作來(lái)降低CPU的功耗。其次,從硬件設(shè)計(jì)角度,本發(fā)明充分利用了原有數(shù)據(jù)源信號(hào)產(chǎn)生模塊中的邏輯判 斷功能,只需在原有的CPU結(jié)構(gòu)上增加讀寄存器堆控制模塊,并將所述數(shù)據(jù)源信號(hào)產(chǎn)生模 塊的輸出信號(hào)接入所述讀寄存器堆控制模塊,利用數(shù)據(jù)源信號(hào)產(chǎn)生模塊的邏輯判斷結(jié)果來(lái) 修改直接從指令譯碼結(jié)果得到的讀GRF控制信號(hào),從而排除多余的GRF讀操作。因此,本發(fā) 明可以充分利用現(xiàn)有的電路而無(wú)需增加很多硬件單元。再次,在本發(fā)明提出之前,本領(lǐng)域技術(shù)人員很少會(huì)發(fā)現(xiàn)CPU流水線結(jié)構(gòu)中存在多 余的讀GRF操作,在bypass路徑的優(yōu)化下,仍普遍認(rèn)為指令譯碼后判斷為讀GRF就執(zhí)行讀 操作是順其自然的,即使出于降低CPU功耗的目的,也很少考慮從CPU流水線的執(zhí)行步驟來(lái) 尋找降低的方法,因?yàn)镃PU流水線結(jié)構(gòu)已經(jīng)是非常成熟的CPU設(shè)計(jì)方法,現(xiàn)有的CPU普遍都 遵循這種設(shè)計(jì)。但本發(fā)明的發(fā)明人恰恰打破這種慣性思維,發(fā)現(xiàn)CPU流水線結(jié)構(gòu)中還存在 著耗費(fèi)CPU功耗的讀操作,所以本發(fā)明在兼顧指令執(zhí)行效率的情況下,對(duì)現(xiàn)有的CPU流水線 中的操作步驟進(jìn)行了上述改進(jìn)。
圖1是現(xiàn)有技術(shù)的RISC CPU五級(jí)流水線示意圖;圖2是本發(fā)明實(shí)施例所述五步CPU流水線的DE步驟中邏輯判斷的處理流程圖;圖3是現(xiàn)有技術(shù)中CPU涉及DE處理的硬件結(jié)構(gòu)示意圖;圖4是本發(fā)明實(shí)施例所述的CPU涉及DE處理的硬件結(jié)構(gòu)示意圖;圖5是本發(fā)明實(shí)施例所述一種降低CPU功耗的裝置結(jié)構(gòu)圖6是本發(fā)明實(shí)施例所述一種低功耗的CPU結(jié)構(gòu)圖。
具體實(shí)施例方式為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí) 施方式對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。為了盡可能的降低CPU功耗,本發(fā)明從以下角度進(jìn)行分析,最終提出一種降低CPU 功耗的方法,具體分析如下從圖1對(duì)RISC指令的分析來(lái)看,絕大部分指令從GRF讀一個(gè)、兩個(gè)甚至更多操作 數(shù),只有極少數(shù)指令不從GRF讀操作數(shù),而且大部分指令(約70%)寫(xiě)GRF。由此可知,CPU 運(yùn)行過(guò)程中GRF的讀寫(xiě)操作消耗相當(dāng)可觀的功耗。更進(jìn)一步分析發(fā)現(xiàn),CPU處理流水線上的指令經(jīng)常遇到這樣的情況U和V是流水 線上的指令,U在前,V在后,指令U要寫(xiě)GRF的某個(gè)寄存器,后面的指令V要讀GRF的同一 個(gè)寄存器(例如U的指令是R2 = R1+R3,V的指令是R5 = R2+R4)。如果V進(jìn)入指令譯碼 步驟時(shí)U還在流水線上,并且根據(jù)流水線結(jié)構(gòu)V是通過(guò)bypass路徑得到U指令準(zhǔn)備寫(xiě)入 GRF的結(jié)果,那么V指令的讀GRF操作就是多余的,會(huì)造成CPU功耗的浪費(fèi),因此可以取消 V指令的讀GRF操作以節(jié)省功耗。因?yàn)榇藭r(shí)V指令從GRF中讀出的數(shù)據(jù)是在U寫(xiě)入之前,V 讀到的并非正確值,當(dāng)V使用時(shí)用的是從bypass路徑傳遞的數(shù)據(jù)而不是從GRF中讀出的結(jié)^ ο綜上分析得知,CPU運(yùn)行過(guò)程中存在著大量無(wú)需讀GRF的多余操作,耗費(fèi)了 CPU功 耗?;谠摲治鼋Y(jié)果,本發(fā)明提出了一種降低CPU功耗的方法,通過(guò)省略DE步驟中多余的 讀GRF操作來(lái)降低CPU的功耗。本發(fā)明的核心思路是假設(shè)U和V是流水線上的指令,U在前,V在后,指令U要寫(xiě) GRF某個(gè)寄存器,但該流水線上后面的指令V要讀GRF的同一個(gè)寄存器時(shí),在CPU流水線的 DE步驟中進(jìn)行邏輯判斷,該邏輯判斷可以在D (DE的控制信息)中已經(jīng)設(shè)定要讀GRF的情況 下,判斷讀GRF的操作是否可以不執(zhí)行,如果判斷結(jié)果為可以不執(zhí)行,則不進(jìn)行讀GRF的操 作,而是使用bypass路徑把U要寫(xiě)入GRF的結(jié)果傳輸給流水線上后續(xù)的指令V。需要說(shuō)明的是,在本發(fā)明提出之前,本領(lǐng)域技術(shù)人員很少會(huì)發(fā)現(xiàn)CPU流水線結(jié)構(gòu) 中存在多余的讀GRF操作,在bypass路徑的優(yōu)化下,仍普遍認(rèn)為指令譯碼后判斷為讀GRF 就執(zhí)行讀操作是順其自然的,即使出于降低CPU功耗的目的,也很少考慮從CPU流水線的執(zhí) 行步驟來(lái)尋找降低的方法,因?yàn)镃PU流水線結(jié)構(gòu)已經(jīng)是非常成熟的CPU設(shè)計(jì)方法,現(xiàn)有的 CPU普遍都遵循這種設(shè)計(jì)。但本發(fā)明的發(fā)明人恰恰打破這種慣性思維,發(fā)現(xiàn)CPU流水線結(jié)構(gòu) 中還存在著耗費(fèi)CPU功耗的讀操作,所以本發(fā)明在兼顧指令執(zhí)行效率的情況下,對(duì)現(xiàn)有的 CPU流水線中的操作步驟進(jìn)行了上述改進(jìn)。下面通過(guò)實(shí)施例進(jìn)行詳細(xì)說(shuō)明?,F(xiàn)在考慮兩種比較常見(jiàn)的流水線設(shè)計(jì)①如圖1中無(wú)虛線bypass路徑,沒(méi)有寄存器Rwb ;②如圖1中有虛線bypass路徑,有寄存器R 。如果CPU流水線設(shè)計(jì)為上述第①種情況,指令V要使用指令U寫(xiě)入GRF的數(shù)據(jù),且 V是U后第1、2條指令之一,那么指令V從GRF中讀這個(gè)數(shù)據(jù)的操作無(wú)需發(fā)生,因?yàn)閂是使
9用bypass路徑獲得U要寫(xiě)入GRF的結(jié)果來(lái)完成V的操作,不用讀GRF來(lái)獲得U要寫(xiě)入GRF 的結(jié)果。所以,這時(shí),如果按照V的控制信息來(lái)執(zhí)行相應(yīng)的讀GRF操作是多余的,會(huì)造成CPU 功耗的浪費(fèi)。其中,V中使用U要寫(xiě)入GRF的結(jié)果能夠從自己的EX/MEM步驟與當(dāng)時(shí)CPU時(shí) 鐘周期的前一個(gè)CPU時(shí)鐘周期里U的對(duì)應(yīng)步驟后的流水線寄存器間的bypass獲得。一條指 令中EX和MEM的結(jié)果可能相同、也可能不同,用哪個(gè)步驟對(duì)應(yīng)的bypass要看實(shí)際的情況。如果CPU流水線設(shè)計(jì)為上述第②種情況,指令V要使用指令U寫(xiě)入GRF的數(shù)據(jù),且 V是U后第1、2、3條指令之一,那么指令V從GRF中讀這個(gè)數(shù)的操作無(wú)需發(fā)生,因?yàn)閂是使 用bypass路徑獲得U要寫(xiě)入GRF的結(jié)果來(lái)完成V的操作,不用讀GRF來(lái)獲得U要寫(xiě)入GRF 的結(jié)果,所以,這時(shí),如果按照V的控制信息來(lái)執(zhí)行相應(yīng)的讀GRF操作是多余的,會(huì)造成CPU 功耗的浪費(fèi)。其中,V中使用U要寫(xiě)入GRF的結(jié)果能夠從自己的EX/MEM步驟與當(dāng)時(shí)CPU時(shí) 鐘周期的前一個(gè)CPU時(shí)鐘周期里U的對(duì)應(yīng)步驟后的流水寄存器間的bypass獲得。一條指 令中EX和MEM的結(jié)果可能相同、也可能不同,用哪個(gè)步驟對(duì)應(yīng)的bypass要看實(shí)際的情況。上述兩種CPU流水線設(shè)計(jì),無(wú)論是哪一種設(shè)計(jì),本發(fā)明都可以在DE步驟中進(jìn)行邏 輯判斷,通過(guò)邏輯判斷來(lái)省略DE步驟中多余的讀GRF操作,從而降低CPU的功耗。在實(shí)際應(yīng)用中,經(jīng)典的CPU流水線分為五個(gè)步驟,但也存在大于五步的流水線結(jié) 構(gòu),大于五步的CPU流水線相當(dāng)于把五步流水線的一個(gè)或多個(gè)步驟分成幾個(gè)子步驟。為了 更清楚介紹本發(fā)明DE步驟中邏輯判斷的處理流程,下面分別對(duì)五步CPU流水線和大于五步 的CPU流水線進(jìn)行說(shuō)明。當(dāng)然,大于五步驟的CPU流水線的處理流程同樣適用于五步CPU 流水線。1、五步CPU流水線五步CPU流水線可參照?qǐng)D1所示,五個(gè)步驟分別為IF、DE、EX、MEM*WB,E#$& 的流水線寄存器分別是Rif、Rde、Rex、Rmem,如果包括虛線的bypass路徑,則還包括流水線寄 存器Rto。其中,實(shí)線的bypass路徑所涉及的指令為INSTX,INSTX+1,INSTx+2 ;虛線的bypass 路徑所涉及的指令為 INSTX,INSTX+1,INSTx+2,INSTx+3。所述邏輯判斷在DE步驟中執(zhí)行,如前所述,DE步驟的功能是把從Rif取出來(lái)的指 令進(jìn)行譯碼,生成當(dāng)前指令的控制信息,從寄存器堆GRF讀出數(shù)據(jù),把控制信息和數(shù)據(jù)存入 DE/EX流水線寄存器Rde等。其中,控制信息包括對(duì)當(dāng)前步驟的控制信息(D)以及對(duì)后續(xù)步 驟EX的控制信息(E)、對(duì)步驟MEM的控制信息(M)和對(duì)步驟WB的控制信息(W) ;D包括是 否讀GRF(GRFRead)、讀寄存器地址(GRFRaddr)等信息;W包括是否寫(xiě)GRF(GRFWrite)、GRF 數(shù)據(jù)來(lái)源選擇(MemReg)、所寫(xiě)GRF寄存器地址(GRFWaddr)等信息。具體的,判斷讀GRF操作是否多余的方法是比較當(dāng)前指令的讀寄存器堆操作與 前η級(jí)指令的寫(xiě)寄存器堆操作,如果當(dāng)前指令的讀寄存器地址與前η級(jí)指令中至少一條指 令的寫(xiě)寄存器地址相同,則省略當(dāng)前指令讀該寄存器地址的操作;其中,η的取值為CPU流 水線上bypass路徑的最大跨度值。在實(shí)際應(yīng)用中,實(shí)現(xiàn)上述判斷的方式有多種,下面分別給出兩種實(shí)現(xiàn)的示例。示例1 參照?qǐng)D2,是本發(fā)明實(shí)施例所述五步CPU流水線的DE步驟中邏輯判斷的處理流程 圖。步驟201,獲得當(dāng)前指令讀寄存器堆GRF的控制信息D和前η級(jí)指令寫(xiě)寄存器堆GRF的控制信息W ;其中,讀寄存器堆的控制信息D包括是否讀的信息(GRFRead)和所讀寄存器地址 (GRFRaddr)等,寫(xiě)寄存器堆的控制信息W包括是否寫(xiě)的信息(GRFWrite)和所寫(xiě)寄存器地址 (GRFffaddr)等。假設(shè)CPU流水線的DE步驟對(duì)應(yīng)的指令是INSTx,即所述的當(dāng)前指令,那么當(dāng)bypass 路徑為圖1中的實(shí)線路徑時(shí),η的取值為2,則前η級(jí)指令指當(dāng)前指令前面的指令I(lǐng)NSIV1和 INSTx_2 ;當(dāng)bypass路徑包括圖1中的實(shí)線和虛線路徑時(shí),η的取值為3,則前η級(jí)指令指當(dāng) 前指令前面的指令I(lǐng)NST^ INSTx_2和INSTx_3。通過(guò)圖1,當(dāng)CPU五級(jí)流水線的寄存器依次為Rif、Rde、Rex、Rmem、Rwb時(shí),如果當(dāng)前指 令處于DE步驟,則當(dāng)前指令讀寄存器堆的控制信息從指令譯碼結(jié)果中獲得;此時(shí),前面第 一級(jí)指令正好處于EX步驟,因此前面第一級(jí)指令寫(xiě)寄存器堆的控制信息可以從流水線寄 存器Rde獲得;此時(shí),前面第二級(jí)指令正好處于MEM步驟,因此前面第二級(jí)指令寫(xiě)寄存器堆的 控制信息可以從流水線寄存器Rex獲得;此時(shí),前面第三級(jí)指令正好處于WB步驟,因此前面 第三級(jí)指令寫(xiě)寄存器堆的控制信息可以從流水線寄存器Rmem獲得。步驟202,根據(jù)當(dāng)前指令的控制信息D判斷當(dāng)前指令是否讀寄存器堆,如果當(dāng)前指 令讀寄存器堆,則根據(jù)前η級(jí)指令的控制信息W判斷前η級(jí)指令中是否存在寫(xiě)寄存器堆的 指令,如果存在,則執(zhí)行步驟203 ;如果不存在,則邏輯判斷結(jié)束,并執(zhí)行當(dāng)前指令的讀寄存 器堆操作;本步驟是判斷讀GRF是否多余的第一個(gè)判斷步驟。一般指令的執(zhí)行都是從GRF中讀取原操作數(shù),并在指令執(zhí)行完畢后將目標(biāo)操作數(shù) 寫(xiě)入GRF。如果指令I(lǐng)NSTx要讀GRF,只要前面的指令I(lǐng)NSTjri和INSTX_2 (虛線的bypass路 徑還包括INSTx_3)中有一個(gè)指令寫(xiě)GRF,就需要繼續(xù)執(zhí)行步驟203的第二個(gè)判斷。但根據(jù)控 制信息W,如果前η級(jí)指令中沒(méi)有指令執(zhí)行寫(xiě)操作,則表明當(dāng)前指令不會(huì)使用前面指令的結(jié) 果,因此當(dāng)前指令就需要執(zhí)行讀GRF的操作。當(dāng)然,如果根據(jù)控制信息D判斷當(dāng)前指令不讀GRF,則顯然不存在多余的讀操作。步驟203,將當(dāng)前指令的讀寄存器地址分別與前η級(jí)指令中寫(xiě)寄存器堆的指令的 所寫(xiě)寄存器地址進(jìn)行比較,判斷是否相同,如果有一組比較結(jié)果為相同,則省略當(dāng)前指令讀 該寄存器地址的操作;如果任何一組比較結(jié)果都為不同,則執(zhí)行當(dāng)前指令的讀寄存器堆操作。本步驟是判斷讀GRF是否多余的第二個(gè)判斷步驟。假設(shè)指令I(lǐng)NSTx前面的指令I(lǐng)NSIV1UNSIV2UNSIV3(包括虛線的bypass路徑)都 寫(xiě)寄存器堆,所述“組”的概念是指指令I(lǐng)NSTx與指令I(lǐng)NSIV1為一組比較讀寄存器地址和寫(xiě) 寄存器地址,指令I(lǐng)NSTx與指令I(lǐng)NSTx_2為一組比較讀寄存器地址和寫(xiě)寄存器地址,存在虛線 的bypass路徑時(shí),還包括指令I(lǐng)NSTx與指令I(lǐng)NSTX_3為一組比較讀寄存器地址和寫(xiě)寄存器地 址。如果至少有一組比較結(jié)果為相同,則表明當(dāng)前指令I(lǐng)NSTx會(huì)使用前面至少一條指 令的結(jié)果,而且可以通過(guò)bypass路徑獲得,此時(shí)當(dāng)前指令I(lǐng)NSTx讀GRF的操作就是多余的, 可以省略此操作來(lái)節(jié)省CPU的功耗。如果任何一組比較結(jié)果都為不同,則表明雖然指令 INSTx前面的3條指令(包括虛線的bypass路徑)都要寫(xiě)寄存器堆,但所寫(xiě)的寄存器都與當(dāng)前指令I(lǐng)NSTx要讀的寄存器不是同一個(gè),當(dāng)前指令不會(huì)使用前面指令的結(jié)果,此時(shí)指令 INSTx就需要執(zhí)行讀GRF的操作。上述步驟中,如果省略當(dāng)前指令I(lǐng)NSTx讀該寄存器地址的操作,則當(dāng)前指令可以通 過(guò)bypass路徑獲得前η級(jí)指令中的某條指令要寫(xiě)入該寄存器地址的結(jié)果;如果執(zhí)行當(dāng)前指 令I(lǐng)NSTx讀該寄存器地址的操作,則當(dāng)前指令是從該寄存器地址中讀取數(shù)據(jù)。示例 2 本實(shí)施例采用另外一種方法進(jìn)行邏輯判斷,具體為獲得當(dāng)前指令讀寄存器堆的 控制信息和前η級(jí)指令寫(xiě)寄存器堆的控制信息,當(dāng)根據(jù)所述讀寄存器堆的控制信息判斷當(dāng) 前指令為讀寄存器堆時(shí),對(duì)前η級(jí)指令每條進(jìn)行如下判斷判斷是否寫(xiě)寄存器堆,如果寫(xiě), 則繼續(xù)判斷該指令的寫(xiě)寄存器地址是否與當(dāng)前指令的讀寄存器地址相同;如果當(dāng)前指令的 讀寄存器地址與前η級(jí)指令中至少一條指令的寫(xiě)寄存器地址相同,則省略當(dāng)前指令讀該寄 存器地址的操作;如果前η級(jí)指令中沒(méi)有指令執(zhí)行寫(xiě)操作,或者前η級(jí)指令中的至少一條指 令執(zhí)行寫(xiě)操作,但執(zhí)行寫(xiě)操作的指令中所有的寫(xiě)寄存器地址都與當(dāng)前指令的讀寄存器地址 不同,則執(zhí)行當(dāng)前指令讀該寄存器地址的操作。本實(shí)施例與示例1的區(qū)別在于本實(shí)施例在對(duì)前η級(jí)指令中的每一條指令進(jìn)行判 斷時(shí),并列判斷是否同時(shí)滿足“寫(xiě)寄存器堆”和“寫(xiě)寄存器地址與當(dāng)前指令的讀寄存器地址 相同”兩個(gè)條件;而示例1是對(duì)前η級(jí)指令的所有指令先判斷是否滿足“寫(xiě)寄存器堆”,然后 再對(duì)前η級(jí)指令中寫(xiě)寄存器堆的指令判斷是否滿足“所寫(xiě)寄存器地址與當(dāng)前指令的讀寄存 器地址相同”。兩個(gè)示例在邏輯上是等價(jià)的,只是表述方式不同。在硬件實(shí)現(xiàn)時(shí)兩種方式?jīng)] 有本質(zhì)區(qū)別。在實(shí)際應(yīng)用中,寄存器堆GRF包括多個(gè)端口,每個(gè)端口對(duì)應(yīng)一個(gè)寄存器地址。GRF 讀端口的數(shù)量因指令集而異,多數(shù)是2或3個(gè)讀端口,對(duì)應(yīng)每個(gè)讀端口都有相應(yīng)的GRFRead 和 GRFRaddr,即 D 中包括 GRFReadl、GRFRead2...和 GRFRaddrl、GRFRaddr2...等信息。同 樣,根據(jù)指令集的不同,GRF的寫(xiě)端口也可能是多個(gè),對(duì)應(yīng)每個(gè)寫(xiě)端口都有相應(yīng)的GRFWrite 和 GRFWaddr,即 W 中包括 GRFWritel、GRFWrite2...和 GRFWaddrl、GRFWaddr2...等信息。下面分別以1個(gè)寫(xiě)端口 m個(gè)讀端口和η個(gè)寫(xiě)端口 m個(gè)讀端口的情況為例,說(shuō)明示 例2。A、五步CPU流水線1個(gè)寫(xiě)端口 m個(gè)讀端口的處理流程邏輯判斷在DE步驟中執(zhí)行,而且要在DE步驟中,已經(jīng)獲得了控制信息D,但還未按 照D進(jìn)行任何操作的時(shí)候執(zhí)行,如下1)設(shè)CPU流水線的DE步驟對(duì)應(yīng)的指令是INSTx ;2)設(shè) GRFReadl Il GRFRaddrl = RP1,· · ·,GRFReadm Il GRFRaddrm = RPm ;其中,GRFRead表示是否讀GRF,GRFRaddr表示所讀GRF寄存器地址,‘ Il,代表連 接。RPix代表INSTx所對(duì)應(yīng)的RPi,RPi對(duì)應(yīng)INSTx的每個(gè)讀端口 i,i = 1 m。3)設(shè) GRFWrite || GRFffaddr = WP ;其中,GRFffrite表示是否寫(xiě)GRF,GRFffaddr表示所寫(xiě)GRF寄存器地址,“ Il,,代表 連接。WPx代表INSTx所對(duì)應(yīng)的WP ;WPx^1代表INSIV1所對(duì)應(yīng)的WP ;WPX_2代表INSTx_2所對(duì)應(yīng) 的WP ;存在虛線表示的bypass路徑時(shí),WPX_3代表INSTX_3所對(duì)應(yīng)的WP。4)針對(duì)每個(gè)讀端口 i進(jìn)行如下操作;
5)判斷GRFReadi是否為真(即當(dāng)前指令是否讀GRF端口 i),如果為真進(jìn)入下一 步;否則退出;即首先判斷當(dāng)前指令I(lǐng)NSTx是否讀GRF端口 i,如果讀,則繼續(xù)下面的判斷,即判斷 當(dāng)前指令的讀GRF端口 i是否多余;如果當(dāng)前指令不讀GRF端口 i,則不再進(jìn)行下面的判斷。6)比較RPix和WPjri是否相等,比較RPix和WPX_2是否相等,如果存在虛線表示的 bypass路徑,還要比較RPix和WPX_3是否相等。如果有一組相等,則該DE步驟中的讀GRF端 口 i操作可以省略;否則,該DE步驟中的讀GRF端口 i操作要被執(zhí)行。上述每一組比較中,以RPix和WPjri的比較為例,具體包括以下兩個(gè)步驟第一步,判斷WPjri中的GRFWrite是否為真(即上一級(jí)指令I(lǐng)NSTX+1是否寫(xiě)GRF), 如果為真進(jìn)入下一步,否則退出;第二步,比較WPx-I中的GRFWaddr和RPix中的GRFRaddri是否相等,如果相等, 則表示RPix和WPx-I相等;否則,表示RPix和WPx-I不相等。B、五步CPU流水線η個(gè)寫(xiě)端口 m個(gè)讀端口的處理流程邏輯判斷在DE步驟中執(zhí)行,而且要在DE步驟中,已經(jīng)獲得了控制信息D,但還未按 照D進(jìn)行任何操作的時(shí)候執(zhí)行,如下1)設(shè)CPU流水線的DE步驟對(duì)應(yīng)的指令是INSTx ;2)設(shè) GRFReadl 11 GRFRaddrl = RP1,· · ·,GRFReadm Il GRFRaddrm = RPm ;其中,GRFRead表示是否讀GRF,GRFRaddr表示所讀GRF寄存器地址,‘ Il ’代表連 接。RPix代表INSTx所對(duì)應(yīng)的RPi,RPi對(duì)應(yīng)INSTx的每個(gè)讀端口 i,i = 1 m。3)設(shè) GRFWritel Il GRFffaddrl = WPl, . . . , GRFffriten Il GRFffaddm = WPn ;其中,GRFffrite表示是否寫(xiě)GRF,GRFffaddr表示所寫(xiě)GRF寄存器地址,“ Il ”代表 連接。WPjx代表INSTx所對(duì)應(yīng)的WPj,WPj對(duì)應(yīng)每個(gè)寫(xiě)端口 j,j = 1 η ;WPjjri代表INSTjri 所對(duì)應(yīng)的WPj ;WPjx_2代表INSTx_2所對(duì)應(yīng)的WPj ;存在虛線表示的bypass路徑時(shí),WPjx_3代 表INSTX_3所對(duì)應(yīng)的WPj。4)針對(duì)每個(gè)讀端口 i進(jìn)行如下操作;5)判斷GRFReadi是否為真(即當(dāng)前指令是否讀GRF端口 i),如果為真進(jìn)入下一 步;否則退出;6)比較RPix和WPlr1是否相等,...,比較RPix和WPrv1是否相等;比較RPix和 WP1X_2是否相等,...,比較RPix和WPrv2是否相等;如果存在虛線表示的bypass路徑,還要 比較RPix和WP1X_3是否相等,...,比較RPix和WPnx_3是否相等。如果有任何一組相等,則 該DE步驟中的讀GRF端口 i操作可以省略;否則,該DE步驟中的讀GRF端口 i操作要被執(zhí) 行。除上述示例1和示例2列舉的兩種邏輯判斷方法外,還可能存在其它的實(shí)現(xiàn)方式, 如通過(guò)其他方式判斷是否讀或?qū)慓RF而不是通過(guò)控制信息中的GRFRead或GRFWrite判斷, 等等,但只要總思路遵循“判斷當(dāng)前指令的讀寄存器地址與前η級(jí)指令中至少一條指令的 寫(xiě)寄存器地址相同,則省略當(dāng)前指令讀該寄存器地址的操作”,均屬于本發(fā)明的保護(hù)范圍, 具體實(shí)現(xiàn)方式不再一一列舉。2、大于五步的CPU流水線如前所述,大于五步的CPU流水線相當(dāng)于把五步流水線的一個(gè)或多個(gè)步驟分成幾個(gè)子步驟,因此邏輯判斷的執(zhí)行與五步CPU流水線相同。下面仍以η個(gè)寫(xiě)端口 m個(gè)讀端口 的邏輯判斷為例邏輯判斷在DE步驟中執(zhí)行,而且要在DE步驟中,已經(jīng)獲得了控制信息D,但還未按 照D進(jìn)行任何操作的時(shí)候執(zhí)行,如下1)設(shè)CPU流水線的DE步驟對(duì)應(yīng)的指令是INSTx ;2)設(shè) GRFReadl Il GRFRaddrl = RP1,· · ·,GRFReadm Il GRFRaddrm = RPm ;其中,GRFRead表示是否讀GRF,GRFRaddr表示所讀GRF寄存器地址,‘ Il ’代表連 接。RPix代表INSTx所對(duì)應(yīng)的RPi,RPi對(duì)應(yīng)INSTx的每個(gè)讀端口 i,i = 1 m。3)設(shè) GRFWritel Il GRFffaddrl = WPl, . . . , GRFffriten Il GRFffaddrn = WPn ;其中,GRFffrite表示是否寫(xiě)GRF,GRFffaddr表示所寫(xiě)GRF寄存器地址,“ Il,,代表 連接。WPjx代表INSTx所對(duì)應(yīng)的WPj,WPj對(duì)應(yīng)每個(gè)寫(xiě)端口 j,j = 1 η ;WPjjri代表INSTjri 所對(duì)應(yīng)的WPj ;WPjx_2代表INSTx_2所對(duì)應(yīng)的WPj ;存在虛線表示的bypass路徑時(shí),WPjx_3代 表INSTX_3所對(duì)應(yīng)的WPj。4)針對(duì)每個(gè)讀端口 i進(jìn)行如下操作;5)判斷GRFReadi是否為真(即當(dāng)前指令是否讀GRF端口 i),如果為真進(jìn)入下一 步;否則退出;6)比較RPix和WPlr1是否相等,...,比較RPix和WPrvi是否相等;比較RPix和 WPlx-2是否相等,...,比較RPix和WPnx_2是否相等;...,比較RPix和WPlx_y是否相等,..., 比較RPix和WPnx_y是否相等。如果有任何一組相等,則該DE步驟中的讀GRF端口 i操作可 以省略;否則,該DE步驟中的讀GRF端口 i操作要被執(zhí)行。其中,“y”的大小取決于流水線 上bypass路徑的最大跨度?;谏鲜鰞?nèi)容,下面結(jié)合CPU的硬件結(jié)構(gòu)進(jìn)行更詳細(xì)的說(shuō)明。為了對(duì)比說(shuō)明,首先介紹現(xiàn)有技術(shù)中的CPU硬件結(jié)構(gòu)。參照?qǐng)D3,是現(xiàn)有技術(shù)中CPU涉及DE處理的硬件結(jié)構(gòu)示意圖,以五級(jí)CPU流水線1 個(gè)寫(xiě)端口 2個(gè)讀端口的結(jié)構(gòu)為例。如前所述,DE處理是把從Rif取出來(lái)的指令進(jìn)行譯碼,生成當(dāng)前指令的控制信息, 從寄存器堆GRF讀出數(shù)據(jù),把控制信息和數(shù)據(jù)存入DE/EX流水線寄存器Rde等。DE的處理 可由圖3所示結(jié)構(gòu)實(shí)現(xiàn),具體說(shuō)明如下圖中示出了流水線寄存器Rif和Rde,寄存器堆GRF,以及下面的模塊。其中,GRF示 出了 2個(gè)讀端口,分別為讀地址RAddrl、讀使能REl和讀地址RAddr2、讀使能RE2,以及2 個(gè)輸出端口 Doutl和Dout2。Rif中存儲(chǔ)了指令I(lǐng)NST,Rde中分別存儲(chǔ)了數(shù)據(jù)源1和數(shù)據(jù)源 2的選擇信號(hào)(SRCl_select和SRC2_select)和數(shù)據(jù)(SRC1和SRC2)等信息。圖中的“EX Logic”指EX級(jí)的處理邏輯,“其他Logic”指DE級(jí)的其他邏輯,包括但不僅限于為以后各 級(jí)產(chǎn)生其他所需控制信號(hào)、立即數(shù)作為數(shù)據(jù)源的處理等等。L_RP1模塊用于產(chǎn)生GRF讀端口 1的寄存器地址GRFRaddrl,一般可以直接從指 令碼的某個(gè)位域得到;L_RE1模塊用于產(chǎn)生GRF讀端口 1的讀使能GRFReadl,可通過(guò)指令碼譯碼邏輯得 到,如果此指令讀端口 1返回真,否則返回假;L_RP2模塊用于產(chǎn)生GRF讀端口 2的寄存器地址GRFRaddr2,一般可以直接從指令碼的某個(gè)位域得到;L_RE2模塊用于產(chǎn)生GRF讀端口 2的讀使能GRFRead2,可通過(guò)指令碼譯碼邏輯得 到,如果此指令讀端口 2返回真,否則返回假。L_SS1模塊用于產(chǎn)生數(shù)據(jù)源1選擇信號(hào)SRClselect,該信號(hào)用于下一個(gè)流水線 級(jí)EX級(jí),該信號(hào)指示EX級(jí)的數(shù)據(jù)源1從4個(gè)來(lái)源中的哪一個(gè)取得,4個(gè)來(lái)源分別是(1)當(dāng)指令處于上一級(jí)(DE)時(shí)從GRF端口 1讀出然后存入Rde中的數(shù)據(jù);(2)經(jīng)過(guò)bypass路徑從Rex來(lái)的數(shù)據(jù);(3)經(jīng)過(guò)bypass路徑從Rmem來(lái)的數(shù)據(jù);(4)經(jīng)過(guò)bypass路徑從Rto來(lái)的數(shù)據(jù),該路徑只有當(dāng)流水線設(shè)計(jì)是情況②,即存在 虛線表示的bypass路徑時(shí)才有。L_SS1模塊的邏輯如下1)如果GRFReadl為真繼續(xù),否則退出;2)如果來(lái)自Rde的GRFWrite為真并且GRFWaddr與GRFRaddrl相等,置選擇從Rex 的bypass路徑來(lái)的數(shù)據(jù),退出;3)如果來(lái)自Rex的GRFWrite為真并且GRFWaddr與GRFRaddrl相等,置選擇從Rmem 的bypass路徑來(lái)的數(shù)據(jù),退出;4)如果來(lái)自Rmem的GRFWrite為真并且GRFWaddr與GRFRaddrl相等,置選擇從Rwb 的bypass路徑來(lái)的數(shù)據(jù),退出;5)置選擇從GRF端口 1讀出的數(shù)據(jù)。L_S1模塊是多路選擇器,用于根據(jù)控制信號(hào)SRClselect從4個(gè)來(lái)源中選擇一 個(gè)作為EX級(jí)的數(shù)據(jù)源1。L_SS2模塊用于產(chǎn)生數(shù)據(jù)源2選擇信號(hào)SRC2_seleCt,該信號(hào)用于下一個(gè)流水線 級(jí)EX級(jí),該信號(hào)指示EX級(jí)的數(shù)據(jù)源2從4個(gè)來(lái)源中的哪一個(gè)取得,4個(gè)來(lái)源分別是(1)當(dāng)指令處于上一級(jí)(DE)時(shí)從GRF端口 2讀出然后存入RID中的數(shù)據(jù);(2)經(jīng)過(guò)bypass路徑從REX來(lái)的數(shù)據(jù);(3)經(jīng)過(guò)bypass路徑從RMEM來(lái)的數(shù)據(jù);(4)經(jīng)過(guò)bypass路徑從RWB來(lái)的數(shù)據(jù),該路徑只有當(dāng)流水線設(shè)計(jì)是情況②,即存在 虛線表示的bypass路徑時(shí)才有。L_SS2模塊的邏輯如下1)如果GRFRead2為真繼續(xù),否則退出;2)如果來(lái)自Rde的GRFWrite為真并且GRFWaddr與GRFRaddr2相等,置選擇從Rex 的bypass路徑來(lái)的數(shù)據(jù),退出;3)如果來(lái)自Rex的GRFWrite為真并且GRFWaddr與GRFRaddr2相等,置選擇從Rmem 的bypass路徑來(lái)的數(shù)據(jù),退出;4)如果來(lái)自Rmem的GRFWrite為真并且GRFWaddr與GRFRaddr2相等,置選擇從Rwb 的bypass路徑來(lái)的數(shù)據(jù),退出;5)置選擇從GRF端口 2讀出的數(shù)據(jù)。L_S2模塊是多路選擇器,用于根據(jù)控制信號(hào)SRC2_seleCt從4個(gè)來(lái)源中選擇一 個(gè)作為EX級(jí)的數(shù)據(jù)源2。
15
結(jié)合圖3所示結(jié)構(gòu),DE級(jí)的處理如下(存在虛線表示的bypass路徑)從Rif取出指令進(jìn)行譯碼后,L_RE模塊產(chǎn)生是否讀GRF端口的控制信號(hào)GRFRead, L_RP模塊產(chǎn)生讀GRF端口的寄存器地址GRFRaddr,如果GRFRead為真,則執(zhí)行讀GRF端口的 操作,并將讀取的數(shù)據(jù)存入Rde。同時(shí),L_SS模塊通過(guò)將當(dāng)前指令的讀操作分別與前面第一 級(jí)指令的寫(xiě)操作(來(lái)自Rde的GRFWrite和GRFWaddr)、前面第二級(jí)指令的寫(xiě)操作(來(lái)自Rex 的GRFWrite和GRFWaddr)、前面第三級(jí)指令的寫(xiě)操作(來(lái)自Rmem的GRFWrite和GRFWaddr) 進(jìn)行比較,來(lái)判斷是否必須通過(guò)相應(yīng)的bypass路徑獲取數(shù)據(jù)。L_SS模塊最終輸出數(shù)據(jù)源選 擇信號(hào)SRC_select,L_S模塊根據(jù)信號(hào)SRC_select從4個(gè)來(lái)源中選擇一個(gè)來(lái)源讀取數(shù)據(jù), 供下一級(jí)EX使用。由上述過(guò)程可知,在L_RE模塊輸出為真的情況下,L_SS模塊輸出的信號(hào)即使為選 擇從bypass路徑來(lái)的數(shù)據(jù),讀GRF的操作仍會(huì)執(zhí)行,因此造成CPU功耗的浪費(fèi)。參照?qǐng)D4,是本發(fā)明實(shí)施例所述的CPU涉及DE處理的硬件結(jié)構(gòu)示意圖。與圖3相比,本實(shí)施例中的CPU結(jié)構(gòu)增加了 L_E1和L_E2兩個(gè)模塊,連接在L_RE 模塊和GRF之間,同時(shí)接入L_SS模塊輸出的信號(hào)。L_E1模塊和L_E2模塊分別用于修改直 接從指令譯碼得到的GRFReadl和GRFRead2,從而排除不必要的GRF讀操作。具體的修改方式是L_E1模塊如果L_RE1的輸出結(jié)果為假則輸出假;如果L_RE1的輸出結(jié)果為真,并 且如果L_SS1的輸出結(jié)果為選擇GRF端口 1讀出結(jié)果,則輸出真,否則輸出假;L_E2模塊如果L_RE2的輸出結(jié)果為假則輸出假;如果L_RE2的輸出結(jié)果為真,并 且如果L_SS2的輸出結(jié)果為選擇GRF端口 2讀出結(jié)果,則輸出真,否則輸出假。由圖4可知,所述CPU結(jié)構(gòu)充分利用了原有L_SS模塊的邏輯判斷,即L_SS模塊可 以判斷出當(dāng)前指令使用的數(shù)據(jù)是否真正從GRF端口讀取,如果、55模塊的輸出為選擇從 bypass路徑來(lái)的數(shù)據(jù),則當(dāng)前指令讀GRF端口的操作就是多余可以不執(zhí)行的,L_E模塊會(huì)將 直接從指令譯碼得到的允許讀的信號(hào)進(jìn)行修改,向GRF輸出不允許讀的信號(hào);但如果L_SS 模塊的輸出為選擇GRF端口讀出結(jié)果,則當(dāng)前指令讀GRF端口的操作就不是多余的,此時(shí)L_ E模塊仍向GRF輸出允許讀的信號(hào)。需要說(shuō)明的是,圖4所示結(jié)構(gòu)是本發(fā)明的一種優(yōu)選結(jié)構(gòu),其對(duì)原有的CPU結(jié)構(gòu)改變 很小,但本發(fā)明不限定其他同樣能通過(guò)省略多余的讀GRF操作來(lái)降低CPU功耗的實(shí)現(xiàn)結(jié)構(gòu)。基于上述內(nèi)容,本發(fā)明還提供了一種降低CPU功耗的裝置實(shí)施例。參照?qǐng)D5,是本發(fā)明實(shí)施例所述一種降低CPU功耗的裝置結(jié)構(gòu)圖。所述裝置主要包括比較模塊51,用于比較當(dāng)前指令的讀寄存器堆操作與前η級(jí)指令的寫(xiě)寄存器堆操 作;其中,η的取值為CPU流水線上bypass路徑的最大跨度值;操作控制模塊52,用于當(dāng)當(dāng)前指令的讀寄存器地址與前η級(jí)指令中至少一條指令 的寫(xiě)寄存器地址相同時(shí),控制當(dāng)前指令讀該寄存器地址的操作省略。相應(yīng)的,如果前η級(jí)指令中沒(méi)有指令執(zhí)行寫(xiě)操作,或者前η級(jí)指令中的至少一條指 令執(zhí)行寫(xiě)操作,但執(zhí)行寫(xiě)操作的指令中所有的寫(xiě)寄存器地址都與當(dāng)前指令的讀寄存器地址 不同,則所述操作控制模塊52控制當(dāng)前指令讀該寄存器地址的操作執(zhí)行。優(yōu)選的,所述比較模塊51進(jìn)一步可以包括
16
控制信息獲取子模塊511,用于獲得當(dāng)前指令讀寄存器堆的控制信息和前η級(jí)指 令寫(xiě)寄存器堆的控制信息,其中讀寄存器堆的控制信息包括是否讀的信息和所讀寄存器地 址,寫(xiě)寄存器堆的控制信息包括是否寫(xiě)的信息和所寫(xiě)寄存器地址;判斷子模塊512,用于當(dāng)根據(jù)所述讀寄存器堆的控制信息判斷當(dāng)前指令為讀寄存 器堆時(shí),對(duì)前η級(jí)指令每條進(jìn)行如下判斷判斷是否寫(xiě)寄存器堆,如果寫(xiě),則繼續(xù)判斷該指 令的寫(xiě)寄存器地址是否與當(dāng)前指令的讀寄存器地址相同。上述裝置可用于CPU流水線的DE步驟處理,其硬件實(shí)現(xiàn)可以有多種結(jié)構(gòu),圖4所 示結(jié)構(gòu)僅是一種優(yōu)選的硬件結(jié)構(gòu)。如果結(jié)合圖4的硬件結(jié)構(gòu),所述比較模塊51設(shè)置在L_SS 模塊中,所述操作控制模塊52設(shè)置在L_E模塊中。相應(yīng)的,本發(fā)明還提供了一種低功耗的CPU實(shí)施例。參照?qǐng)D6,是本發(fā)明實(shí)施例所述一種低功耗的CPU結(jié)構(gòu)圖。所述CPU可以包括寄存器堆61,用于存儲(chǔ)指令執(zhí)行所需的原操作數(shù)和指令執(zhí)行后的目標(biāo)操作數(shù);數(shù)據(jù)源信號(hào)產(chǎn)生模塊62,用于比較當(dāng)前指令的讀寄存器堆操作與前η級(jí)指令的寫(xiě) 寄存器堆操作,如果當(dāng)前指令的讀寄存器地址與前η級(jí)指令中至少一條指令的寫(xiě)寄存器地 址相同,則輸出從bypass路徑讀取數(shù)據(jù)的信號(hào);其中,η的取值為CPU流水線上bypass路 徑的最大跨度值;讀寄存器堆控制模塊63,用于當(dāng)數(shù)據(jù)源信號(hào)產(chǎn)生模塊輸出的信號(hào)為從bypass路 徑讀取數(shù)據(jù)時(shí),向當(dāng)前指令的讀寄存器地址輸出不允許讀的控制信號(hào),表示省略當(dāng)前指令 讀該寄存器地址的操作。優(yōu)選的,所述數(shù)據(jù)源信號(hào)產(chǎn)生模塊62進(jìn)一步包括控制信息獲取子模塊,用于獲得當(dāng)前指令讀寄存器堆的控制信息和前η級(jí)指令寫(xiě) 寄存器堆的控制信息,其中讀寄存器堆的控制信息包括是否讀的信息和所讀寄存器地址, 寫(xiě)寄存器堆的控制信息包括是否寫(xiě)的信息和所寫(xiě)寄存器地址;判斷子模塊,用于當(dāng)根據(jù)所述讀寄存器堆的控制信息判斷當(dāng)前指令為讀寄存器堆 時(shí),對(duì)前η級(jí)指令每條進(jìn)行如下判斷判斷是否寫(xiě)寄存器堆,如果寫(xiě),則繼續(xù)判斷該指令的 寫(xiě)寄存器地址是否與當(dāng)前指令的讀寄存器地址相同,如果相同,則輸出從相應(yīng)bypass路徑 讀取數(shù)據(jù)的信號(hào),并停止下一條指令的判斷。當(dāng)所述CPU為五級(jí)流水線結(jié)構(gòu)時(shí),所述CPU還包括五個(gè)流水線寄存器,依次為Rif、 Rde、Rex、Rmem、Rwb,則η的最大值為3。所述數(shù)據(jù)源信號(hào)產(chǎn)生模塊62的控制信息獲取子模塊從 指令譯碼結(jié)果中獲得當(dāng)前指令讀寄存器堆的控制信息;從流水線寄存器Rde獲得前面第一 級(jí)指令寫(xiě)寄存器堆的控制信息;從流水線寄存器Rex獲得前面第二級(jí)指令寫(xiě)寄存器堆的控 制信息;從流水線寄存器Rmem獲得前面第三級(jí)指令寫(xiě)寄存器堆的控制信息。此外,所述數(shù)據(jù)源信號(hào)產(chǎn)生模塊62的判斷子模塊還用于,當(dāng)前η級(jí)指令中沒(méi)有指 令執(zhí)行寫(xiě)操作,或者前η級(jí)指令中的至少一條指令執(zhí)行寫(xiě)操作,但執(zhí)行寫(xiě)操作的指令中所 有的寫(xiě)寄存器地址都與當(dāng)前指令的讀寄存器地址不同時(shí),輸出從當(dāng)前指令的讀寄存器地址 讀取數(shù)據(jù)的信號(hào)。相應(yīng)的,所述讀寄存器堆控制模塊63還用于,當(dāng)數(shù)據(jù)源信號(hào)產(chǎn)生模塊62輸出的信 號(hào)為從當(dāng)前指令的讀寄存器地址讀取數(shù)據(jù)時(shí),向當(dāng)前指令的讀寄存器地址輸出允許讀的控制信號(hào),表示執(zhí)行當(dāng)前指令讀該寄存器地址的操作。優(yōu)選的,所述寄存器堆61可以包括多個(gè)端口,每個(gè)端口對(duì)應(yīng)一個(gè)寄存器地址,則 所述指令的讀寄存器地址和寫(xiě)寄存器地址分別包括多個(gè)。而針對(duì)每個(gè)讀端口,可以分別設(shè) 置一個(gè)數(shù)據(jù)源信號(hào)產(chǎn)生模塊62和一個(gè)讀寄存器堆控制模塊63,也可以針對(duì)所有讀端口集 成到一個(gè)寫(xiě)寄存器堆控制裝置62和讀寄存器堆控制模塊63中。綜上所述,所述CPU充分利用了原有數(shù)據(jù)源信號(hào)產(chǎn)生模塊中的邏輯判斷功能,只 需在原有的CPU結(jié)構(gòu)上增加讀寄存器堆控制模塊,并將所述數(shù)據(jù)源信號(hào)產(chǎn)生模塊的輸出信 號(hào)接入所述讀寄存器堆控制模塊,利用數(shù)據(jù)源信號(hào)產(chǎn)生模塊的邏輯判斷結(jié)果來(lái)修改直接從 指令譯碼結(jié)果得到的讀GRF控制信號(hào),從而排除多余的GRF讀操作,達(dá)到降低CPU功耗的目 的。因此,所述CPU可以充分利用現(xiàn)有的電路而無(wú)需增加很多硬件單元。本說(shuō)明書(shū)中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與 其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見(jiàn)即可。對(duì)于裝置實(shí)施例 而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部 分說(shuō)明即可。以上對(duì)本發(fā)明所提供的一種降低CPU功耗的方法、裝置及一種低功耗CPU,進(jìn)行了 詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的 說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依 據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書(shū)內(nèi)容 不應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
一種降低CPU功耗的方法,其特征在于,包括比較當(dāng)前指令的讀寄存器堆操作與前n級(jí)指令的寫(xiě)寄存器堆操作,如果當(dāng)前指令的讀寄存器地址與前n級(jí)指令中至少一條指令的寫(xiě)寄存器地址相同,則省略當(dāng)前指令讀該寄存器地址的操作;其中,n的取值為CPU流水線上bypass路徑的最大跨度值。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括如果前η級(jí)指令中沒(méi)有指令執(zhí)行寫(xiě)操作,或者前η級(jí)指令中的至少一條指令執(zhí)行寫(xiě)操 作,但執(zhí)行寫(xiě)操作的指令中所有的寫(xiě)寄存器地址都與當(dāng)前指令的讀寄存器地址不同,則執(zhí) 行當(dāng)前指令讀該寄存器地址的操作。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述比較包括獲得當(dāng)前指令讀寄存器堆的控制信息和前η級(jí)指令寫(xiě)寄存器堆的控制信息,其中讀寄 存器堆的控制信息包括是否讀的信息和所讀寄存器地址,寫(xiě)寄存器堆的控制信息包括是否 寫(xiě)的信息和所寫(xiě)寄存器地址;當(dāng)根據(jù)所述讀寄存器堆的控制信息判斷當(dāng)前指令為讀寄存器堆時(shí),對(duì)前η級(jí)指令每條 進(jìn)行如下判斷判斷是否寫(xiě)寄存器堆,如果寫(xiě),則繼續(xù)判斷該指令的寫(xiě)寄存器地址是否與當(dāng)前指令的 讀寄存器地址相同。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于如果省略當(dāng)前指令讀該寄存器地址的操作,則當(dāng)前指令通過(guò)bypass路徑獲得前η級(jí)指 令中的某條指令要寫(xiě)入該寄存器地址的結(jié)果;如果執(zhí)行當(dāng)前指令讀該寄存器地址的操作,則當(dāng)前指令從該寄存器地址中讀取數(shù)據(jù)。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,通過(guò)以下方式獲得當(dāng)前指令讀寄存器堆 的控制信息和前η級(jí)指令寫(xiě)寄存器堆的控制信息CPU五級(jí)流水線的寄存器依次為Rif、Rde、Rex、Rmho Rwb,則η的最大值為3 ; 當(dāng)前指令讀寄存器堆的控制信息從指令譯碼結(jié)果中獲得; 前面第一級(jí)指令寫(xiě)寄存器堆的控制信息從流水線寄存器Rde獲得; 前面第二級(jí)指令寫(xiě)寄存器堆的控制信息從流水線寄存器Rex獲得; 前面第三級(jí)指令寫(xiě)寄存器堆的控制信息從流水線寄存器Rmem獲得。
6.一種降低CPU功耗的裝置,其特征在于,包括比較模塊,用于比較當(dāng)前指令的讀寄存器堆操作與前η級(jí)指令的寫(xiě)寄存器堆操作;其 中,η的取值為CPU流水線上bypass路徑的最大跨度值;操作控制模塊,用于當(dāng)當(dāng)前指令的讀寄存器地址與前η級(jí)指令中至少一條指令的寫(xiě)寄 存器地址相同時(shí),控制當(dāng)前指令讀該寄存器地址的操作省略。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于如果前η級(jí)指令中沒(méi)有指令執(zhí)行寫(xiě)操作,或者前η級(jí)指令中的至少一條指令執(zhí)行寫(xiě)操 作,但執(zhí)行寫(xiě)操作的指令中所有的寫(xiě)寄存器地址都與當(dāng)前指令的讀寄存器地址不同,則所 述操作控制模塊控制當(dāng)前指令讀該寄存器地址的操作執(zhí)行。
8.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述比較模塊包括控制信息獲取子模塊,用于獲得當(dāng)前指令讀寄存器堆的控制信息和前η級(jí)指令寫(xiě)寄存器堆的控制信息,其中讀寄存器堆的控制信息包括是否讀的信息和所讀寄存器地址,寫(xiě)寄 存器堆的控制信息包括是否寫(xiě)的信息和所寫(xiě)寄存器地址;判斷子模塊,用于當(dāng)根據(jù)所述讀寄存器堆的控制信息判斷當(dāng)前指令為讀寄存器堆時(shí), 對(duì)前η級(jí)指令每條進(jìn)行如下判斷判斷是否寫(xiě)寄存器堆,如果寫(xiě),則繼續(xù)判斷該指令的寫(xiě)寄 存器地址是否與當(dāng)前指令的讀寄存器地址相同。
9.一種低功耗CPU,其特征在于,包括寄存器堆,用于存儲(chǔ)指令執(zhí)行所需的原操作數(shù)和指令執(zhí)行后的目標(biāo)操作數(shù); 數(shù)據(jù)源信號(hào)產(chǎn)生模塊,用于比較當(dāng)前指令的讀寄存器堆操作與前η級(jí)指令的寫(xiě)寄存 器堆操作,如果當(dāng)前指令的讀寄存器地址與前η級(jí)指令中至少一條指令的寫(xiě)寄存器地址相 同,則輸出從bypass路徑讀取數(shù)據(jù)的信號(hào);其中,η的取值為CPU流水線上bypass路徑的 最大跨度值;讀寄存器堆控制模塊,用于當(dāng)數(shù)據(jù)源信號(hào)產(chǎn)生模塊輸出的信號(hào)為從bypass路徑讀取 數(shù)據(jù)時(shí),向當(dāng)前指令的讀寄存器地址輸出不允許讀的控制信號(hào),表示省略當(dāng)前指令讀該寄 存器地址的操作。
10.根據(jù)權(quán)利要求9所述的CPU,其特征在于,所述數(shù)據(jù)源信號(hào)產(chǎn)生模塊包括 控制信息獲取子模塊,用于獲得當(dāng)前指令讀寄存器堆的控制信息和前η級(jí)指令寫(xiě)寄存器堆的控制信息,其中讀寄存器堆的控制信息包括是否讀的信息和所讀寄存器地址,寫(xiě)寄 存器堆的控制信息包括是否寫(xiě)的信息和所寫(xiě)寄存器地址;判斷子模塊,用于當(dāng)根據(jù)所述讀寄存器堆的控制信息判斷當(dāng)前指令為讀寄存器堆時(shí), 對(duì)前η級(jí)指令每條進(jìn)行如下判斷判斷是否寫(xiě)寄存器堆,如果寫(xiě),則繼續(xù)判斷該指令的寫(xiě)寄 存器地址是否與當(dāng)前指令的讀寄存器地址相同,如果相同,則輸出從相應(yīng)bypass路徑讀取 數(shù)據(jù)的信號(hào),并停止下一條指令的判斷。
11.根據(jù)權(quán)利要求10所述的CPU,其特征在于所述數(shù)據(jù)源信號(hào)產(chǎn)生模塊的判斷子模塊還用于,當(dāng)前η級(jí)指令中沒(méi)有指令執(zhí)行寫(xiě)操 作,或者前η級(jí)指令中的至少一條指令執(zhí)行寫(xiě)操作,但執(zhí)行寫(xiě)操作的指令中所有的寫(xiě)寄存 器地址都與當(dāng)前指令的讀寄存器地址不同時(shí),輸出從當(dāng)前指令的讀寄存器地址讀取數(shù)據(jù)的信號(hào);則所述讀寄存器堆控制模塊還用于,當(dāng)數(shù)據(jù)源信號(hào)產(chǎn)生模塊輸出的信號(hào)為從當(dāng)前指令 的讀寄存器地址讀取數(shù)據(jù)時(shí),向當(dāng)前指令的讀寄存器地址輸出允許讀的控制信號(hào),表示執(zhí) 行當(dāng)前指令讀該寄存器地址的操作。
12.根據(jù)權(quán)利要求10所述的CPU,其特征在于當(dāng)所述CPU為五級(jí)流水線結(jié)構(gòu)時(shí),還包括五個(gè)流水線寄存器,依次為Rif、Rde、Rex、Rmem^ R ,則η的最大值為3 ;所述數(shù)據(jù)源信號(hào)產(chǎn)生模塊的控制信息獲取子模塊從指令譯碼結(jié)果中獲得當(dāng)前指令讀 寄存器堆的控制信息;從流水線寄存器Rde獲得前面第一級(jí)指令寫(xiě)寄存器堆的控制信息; 從流水線寄存器Rex獲得前面第二級(jí)指令寫(xiě)寄存器堆的控制信息; 從流水線寄存器Rmem獲得前面第三級(jí)指令寫(xiě)寄存器堆的控制信息。
13.根據(jù)權(quán)利要求9至12任一所述的CPU,其特征在于所述寄存器堆包括多個(gè)端口,每個(gè)端口對(duì)應(yīng)一個(gè)寄存器地址,則所述指令的讀寄存器 地址和寫(xiě)寄存器地址分別包括多個(gè)。
全文摘要
本發(fā)明提供了一種降低CPU功耗的方法、裝置及一種低功耗CPU,以降低CPU功耗。所述方法包括比較當(dāng)前指令的讀寄存器堆操作與前n級(jí)指令的寫(xiě)寄存器堆操作,如果當(dāng)前指令的讀寄存器地址與前n級(jí)指令中至少一條指令的寫(xiě)寄存器地址相同,則省略當(dāng)前指令讀該寄存器地址的操作;其中,n的取值為CPU流水線上bypass路徑的最大跨度值。本發(fā)明通過(guò)省略DE步驟中多余的讀GRF操作來(lái)降低CPU的功耗。而且,從硬件設(shè)計(jì)角度,本發(fā)明可以充分利用現(xiàn)有的電路而無(wú)需增加很多硬件單元。
文檔編號(hào)G06F9/38GK101930281SQ201010256819
公開(kāi)日2010年12月29日 申請(qǐng)日期2010年8月18日 優(yōu)先權(quán)日2010年8月18日
發(fā)明者姜君, 張緊, 晏曉京 申請(qǐng)人:北京君正集成電路股份有限公司