欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

處理器內(nèi)指令級流水線控制方法及其系統(tǒng)的制作方法

文檔序號:6606375閱讀:304來源:國知局
專利名稱:處理器內(nèi)指令級流水線控制方法及其系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及到處理器的指令按序發(fā)射和按序?qū)懟貦C(jī)制,涉及到基于指令發(fā)射序號 的指令相關(guān)性的解決方法。
背景技術(shù)
在現(xiàn)代處理器設(shè)計中,處理器的性能提升主要通過提高處理器的主頻來實現(xiàn)。然 而,隨著片上集成的晶體管的數(shù)量越來越多,功耗和散熱問題變得更加嚴(yán)重。單純提高主頻 的方法已經(jīng)很難適應(yīng)現(xiàn)在處理器的發(fā)展。在這種情況下,需要一種簡單而有效的處理器流 水線控制方法來提高指令的執(zhí)行效率。也就是說,用較少的硬件資源實現(xiàn)指令的流水線控 制,從而實現(xiàn)較高的指令吞吐率。流水線技術(shù)是指把一條指令的執(zhí)行分成若干個階段,每個階段完成指令的一部分 功能。這樣在多條指令同時執(zhí)行的時候,多條指令的不同階段可以同時執(zhí)行。在實際中,指 令和指令之間可能存在著數(shù)據(jù)依賴關(guān)系。比如,一條指令的源操作數(shù)是前面一條指令的目 的操作數(shù),這樣就產(chǎn)生了寫后讀相關(guān)。流水線的控制方法必須能夠檢測到這樣的相關(guān)關(guān)系, 然后采用一定方法來保證指令發(fā)射和寫回時程序的正確性。流水線控制方法涉及到指令相關(guān)關(guān)系。處理器的硬件邏輯需要檢測指令間的相關(guān) 關(guān)系,并且采取某種辦法來解除或避免這樣的相關(guān)關(guān)系。指令相關(guān)包括數(shù)據(jù)相關(guān)、控制相關(guān) 和結(jié)構(gòu)相關(guān)。數(shù)據(jù)相關(guān)一般是指寫后讀(RAW,ReadAfter Write)相關(guān),寫后寫(WAW,Write After Write)和讀后寫(WAR,Write After Read)相關(guān)。如果是按序發(fā)射的處理器,只存 在RAW和WAW ;如果是亂序發(fā)射的處理器還存在WAR的問題。如果存在指令相關(guān),則相關(guān)的 指令就不能被發(fā)射出去?,F(xiàn)有技術(shù)中,解決數(shù)據(jù)相關(guān)有兩類方法軟件方法和硬件方法。軟 件方法是編譯器通過語義分析,盡可能不產(chǎn)生有相關(guān)的指令序列。編譯器可以把一個循環(huán) 體內(nèi)部的指令,一次展開多次,并進(jìn)行合適的調(diào)度,這樣就可以消除指令間的數(shù)據(jù)相關(guān)和控 制相關(guān)。超長指令字(VLIW,Very Long Instruction Word)也是依靠編譯器來提高指令級 并行性。在超長指令字處理器上,選擇同時發(fā)射的多條指令和相關(guān)性分析都是由編譯器完 成的。因此,這可以大大簡化硬件邏輯。同時發(fā)射的指令條數(shù)越多,處理器的性能就越高。寄存器重命名也是解決相關(guān)的方法。由于編譯器可以看到的寄存器的個數(shù)是由指 令集所確定的,有時會出現(xiàn)邏輯寄存器不夠用的情況,這時就會產(chǎn)生寄存器相關(guān)。這時可以 增加物理寄存器堆的個數(shù)來解決相關(guān)問題。硬件支持的動態(tài)指令調(diào)度是超標(biāo)量處理器挖掘指令級并行的重要手段。IBM 360/91的浮點部件設(shè)計實現(xiàn)了本領(lǐng)域公知的Tomasulo算法,這為現(xiàn)代超標(biāo)量處理器的設(shè) 計打下了基礎(chǔ)。該算法增加了 3種新的機(jī)制保留站、公共數(shù)據(jù)總線(CDB)和寄存器標(biāo)簽。 它的工作機(jī)制如下如果存在可用的保留站就把指令發(fā)射到保留站中,如果這時源操作數(shù) 寄存器的值有效,就可以把指令分派到相應(yīng)的功能部件。功能部件的結(jié)果總線把結(jié)果廣播 到公共數(shù)據(jù)總線,保留站中需要該數(shù)據(jù)的指令將數(shù)據(jù)從CDB上鎖存到本地鎖存器。保留站 里每個操作數(shù)域有一個標(biāo)簽,如果標(biāo)簽為0,則表示操作數(shù)域是真實數(shù)據(jù);如果標(biāo)簽不是0,則表示在等待其他已經(jīng)分派出去的指令結(jié)果。指令結(jié)果可以旁路到要發(fā)射的指令,以提前取得操作數(shù)的結(jié)果。因為多發(fā)射和亂 序發(fā)射的原因,有些指令可以同時在結(jié)果總線產(chǎn)生結(jié)果,這時只有其中一部分指令可以寫 入寄存器堆。如果正要發(fā)射的指令恰巧需要這些不能馬上寫回的結(jié)果,就會造成發(fā)射級的 停頓。因此,使用旁路可以使指令盡早發(fā)射?,F(xiàn)有技術(shù)中,每條指令的執(zhí)行時間不完全相同,有的指令時間長,有的指令時間 短。如果流水線前面的一條指令是一個長延遲指令,而后面一條指令是短延遲指令,這時為 了保證每條指令的按序提交,每條指令都需要標(biāo)出自己的整個流水線中的次序信息。如果 不保證這個次序信息,則在后面短延遲的指令產(chǎn)生結(jié)果后,就提交結(jié)果,這樣就不是按序提 交了。

發(fā)明內(nèi)容
為解決上述問題,本發(fā)明提供了處理器內(nèi)指令級流水線控制方法及其系統(tǒng),能夠 減少對硬件資源的消耗。本發(fā)明公開了一種處理器內(nèi)指令級流水線控制方法,包括步驟1,初始化發(fā)射序號寄存器和寫回序號寄存器為相同初始值;步驟2,在一個時鐘周期內(nèi)發(fā)射指令時,對于每條指令,以發(fā)射序號寄存器的值為 基礎(chǔ)值,按所述指令在本次發(fā)射中的順序,生成指令的發(fā)射序號,并在所述指令中攜帶所述 發(fā)射序號;步驟3,在一個時鐘周期的指令發(fā)射完成后,更新發(fā)射序號寄存器的值為發(fā)射的最 后一個指令的發(fā)射序號加η,η為預(yù)設(shè)常量;步驟4,指令進(jìn)入功能部件被執(zhí)行時,指令的發(fā)射序號保持不變;步驟5,在一個時鐘周期內(nèi)寫回指令時,以寫回序號寄存器的值為基礎(chǔ)值,依據(jù)允 許寫回寄存器的指令的個數(shù),依序生成寫回序號,按寫回序號由小到大順序,將發(fā)射序號和 寫回序號相同的指令的結(jié)果寫回寄存器;步驟6,在一個時鐘周期的指令寫回完成后,更新寫回序號寄存器的值為寫回的最 后一個指令的發(fā)射序號加η,η為所述預(yù)設(shè)常量。所述處理器為多發(fā)射處理器,所述步驟2中以發(fā)射序號寄存器的值為基礎(chǔ)值,按所述指令在本次發(fā)射中的順 序,生成指令的發(fā)射序號進(jìn)一步為步驟21,第一個將被發(fā)射的指令的發(fā)射序號為所述發(fā)射序號寄存器的值,第一個 以后將被發(fā)射的指令的發(fā)射序號為前一個將被發(fā)射的指令的發(fā)射序號加1。預(yù)設(shè)η的值為1,所述步驟3中更新發(fā)射序號寄存器的值為發(fā)射的最后一個指令的發(fā)射序號加η進(jìn) 一步為,步驟31,將發(fā)射序號寄存器的值加本次發(fā)射的指令的個數(shù),獲得加和,將發(fā)射序號 寄存器的值更新為所述加和。一個時鐘周期中被寫回的指令的個數(shù)為一個;所述步驟5進(jìn)一步為,
6
步驟41,確定本次的寫回序號為寫回序號寄存器的值,將發(fā)射序號和確定的寫回 序號相同的指令的結(jié)果寫回寄存器。所述處理器每個時鐘周期允許多條指令寫回;預(yù)設(shè)η的值為1 ;所述步驟5中以寫回序號寄存器的值為基礎(chǔ)值,依據(jù)允許寫回寄存器的指令的個 數(shù),依序生成寫回序號進(jìn)一步為,步驟51,在一個時鐘周期內(nèi)寫回指令時,確定第一條寫回序號為所述寫回序號寄 存器的值,確定第一條以后的寫回序號為前一條寫回序號加1,直至確定的寫回序號的個數(shù) 為允許寫回寄存器的指令的個數(shù);所述步驟6進(jìn)一步為,步驟52,在一個時鐘周期的指令寫回完成后,將寫回序號寄存器的值加寫回的指 令的個數(shù),獲得加和,將寫回序號寄存器的值更新為所述加和。本發(fā)明還公開了一種處理器內(nèi)指令級流水線控制系統(tǒng),包括獲取指令的指令模 塊,對指令譯碼的譯碼模塊,將譯碼后指令發(fā)射的發(fā)射模塊,執(zhí)行發(fā)射的指令的功能部件, 以及將執(zhí)行結(jié)果寫回的寫回模塊,發(fā)射模塊包括發(fā)射序號寄存器,寫回模塊包括寫回序號寄存器,發(fā)射序號寄存器和寫回序號寄存器的初始值相同;發(fā)射模塊,還用于在一個時鐘周期內(nèi)發(fā)射指令時,對于每條指令,以發(fā)射序號寄存 器的值為基礎(chǔ)值,按所述指令在本次發(fā)射中的順序,生成指令的發(fā)射序號,并在所述指令中 攜帶所述發(fā)射序號;在一個時鐘周期的指令發(fā)射完成后,更新發(fā)射序號寄存器的值為發(fā)射 的最后一個指令的發(fā)射序號加η,η為預(yù)設(shè)常量;功能部件,還用于在指令進(jìn)入并被執(zhí)行時,保存指令的發(fā)射序號不變;寫回模塊,還用于在一個時鐘周期內(nèi)寫回指令時,以寫回序號寄存器的值為基礎(chǔ) 值,依據(jù)允許寫回寄存器的指令的個數(shù),依序生成寫回序號,按寫回序號由小到大順序,將 發(fā)射序號和寫回序號相同的指令的結(jié)果寫回寄存器;在一個時鐘周期的指令寫回完成后, 更新寫回序號寄存器的值為寫回的最后一個指令的發(fā)射序號加η,η為所述預(yù)設(shè)常量。所述處理器為多發(fā)射處理器,所述發(fā)射模塊在以發(fā)射序號寄存器的值為基礎(chǔ)值,按所述指令在本次發(fā)射中的順 序,生成指令的發(fā)射序號時進(jìn)一步用于確定第一個將被發(fā)射的指令的發(fā)射序號為所述發(fā)射序號寄存器的值,第一個以后 將被發(fā)射的指令的發(fā)射序號為前一個將被發(fā)射的指令的發(fā)射序號加1。預(yù)設(shè)η的值為1,所述發(fā)射模塊在更新發(fā)射序號寄存器的值為發(fā)射的最后一個指令的發(fā)射序號加η 時進(jìn)一步用于將發(fā)射序號寄存器的值加本次發(fā)射的指令的個數(shù),獲得加和,將發(fā)射序號寄存器 的值更新為所述加和。一個時鐘周期中被寫回的指令的個數(shù)為一個;所述寫回模塊在進(jìn)行結(jié)果寫回時進(jìn)一步用于確定本次的寫回序號為寫回序號寄存器的值,將發(fā)射序號和確定的寫回序號相同 的指令的結(jié)果寫回寄存器。
所述處理器每個時鐘周期允許多條指令寫回;預(yù)設(shè)η的值為1 ;所述寫回模塊在以寫回序號寄存器的值為基礎(chǔ)值,依據(jù)允許寫回寄存器的指令的 個數(shù),依序生成寫回序號時進(jìn)一步用于在一個時鐘周期內(nèi)寫回指令時,確定第一條寫回序號為所述寫回序號寄存器的 值,確定第一條以后的寫回序號為前一條寫回序號加1,直至確定的寫回序號的個數(shù)為允許 寫回寄存器的指令的個數(shù);所述所述寫回模塊在更新寫回序號寄存器的值時進(jìn)一步用于在一個時鐘周期的指令寫回完成后,將寫回序號寄存器的值加寫回的指令的個 數(shù),獲得加和,將寫回序號寄存器的值更新為所述加和。本發(fā)明的有益效果在于,為多發(fā)射的超標(biāo)量的處理器提供了簡潔的操作方法;現(xiàn) 有技術(shù)中多發(fā)射反射處理器使用保留站和再定序緩沖來保持指令發(fā)射和寫回的次序關(guān)系, 保留站和再定序緩沖的實現(xiàn)復(fù)雜,消耗的硬件資源多,在片上的處理器數(shù)目越來越多的情 況下,現(xiàn)有技術(shù)中的該實現(xiàn)方式不適用;本發(fā)明中采用指令發(fā)射序號寄存器和寫回序號寄 存器來保證次序關(guān)系;這種實現(xiàn)方法控制簡單,硬件開銷小,更適合片上大規(guī)模集成,可擴(kuò) 展性好。


圖1是實施例中處理器的流水線工作過程的示意圖;圖2是實施例中處理器內(nèi)部指令發(fā)射級和結(jié)果寫回級的示意圖;圖3是實施例中處理器內(nèi)部的旁路邏輯示意圖;圖4是實施例的寄存器堆的邏輯示意圖。圖5是實施例中處理器按序?qū)懟胤椒ǖ氖疽鈭D。圖6是本發(fā)明處理器內(nèi)指令級流水線控制方法的流程圖。
具體實施例方式下面結(jié)合附圖對本發(fā)明的方法做進(jìn)一步的說明。本發(fā)明的處理器內(nèi)指令級流水線控制方法如圖6所示。步驟S100,初始化發(fā)射序號寄存器和寫回序號寄存器為相同初始值。步驟S200,在一個時鐘周期內(nèi)發(fā)射指令時,對于每條指令,以發(fā)射序號寄存器的值 為基礎(chǔ)值,按所述指令在本次發(fā)射中的順序,生成指令的發(fā)射序號,并在所述指令中攜帶所 述發(fā)射序號。在現(xiàn)有技術(shù)的指令級流水線上,當(dāng)一條指令的源操作數(shù)已經(jīng)都準(zhǔn)備好,并且功能 部件有空閑時,則可以發(fā)射當(dāng)前指令。本發(fā)明中這條指令在發(fā)射時攜帶上依據(jù)發(fā)射序號寄 存器生成的發(fā)射序號,發(fā)射序號表明發(fā)射的順序。以發(fā)射序號寄存器的值為基礎(chǔ)值表明以當(dāng)前的發(fā)射序號寄存器的值為本次發(fā)射 序號生成的基準(zhǔn)。步驟S300,在一個時鐘周期的指令發(fā)射完成后,更新發(fā)射序號寄存器的值為發(fā)射 的最后一個指令的發(fā)射序號加η,η為預(yù)設(shè)常量。步驟S400,指令進(jìn)入功能部件被執(zhí)行時,指令的發(fā)射序號保持不變。
步驟S500,在一個時鐘周期內(nèi)寫回指令時,以寫回序號寄存器的值為基礎(chǔ)值,依據(jù) 允許寫回寄存器的指令的個數(shù),依序生成寫回序號,按寫回序號由小到大順序,將發(fā)射序號 和寫回序號相同的指令的結(jié)果寫回寄存器。在現(xiàn)有技術(shù)的指令級流水線上,當(dāng)指令在功能部件里執(zhí)行完成后,從所有功能部 件的結(jié)果總線上選擇需要寫回的指令。本發(fā)明中,如果結(jié)果總線上指令的發(fā)射序號等于在 寫回級依據(jù)寫回序號寄存器的值生成的寫回序號,則這條指令就是當(dāng)前需要寫回的指令。因為按寫回序號由小到大順序,將發(fā)射序號和寫回序號相同的指令的結(jié)果寫回寄 存器,所以在之前的執(zhí)行結(jié)果沒有生成的時候,即使按寫回序號排在后面的執(zhí)行結(jié)果已經(jīng) 生成,也需要等待之前的執(zhí)行結(jié)果生成寫回后才能夠?qū)懟卦诤蟮膱?zhí)行結(jié)果。步驟S600,在一個時鐘周期的指令寫回完成后,更新寫回序號寄存器的值為寫回 的最后一個指令的發(fā)射序號加η,η為所述預(yù)設(shè)常量。在一個具體實施方式
中,處理器為多發(fā)射處理器。所述步驟S200中以發(fā)射序號寄存器的值為基礎(chǔ)值,按所述指令在本次發(fā)射中的 順序,生成指令的發(fā)射序號進(jìn)一步如下所述。步驟S210,第一個將被發(fā)射的指令的發(fā)射序號為所述發(fā)射序號寄存器的值,第一 個以后將被發(fā)射的指令的發(fā)射序號為前一個將被發(fā)射的指令的發(fā)射序號加1。處理器為多發(fā)射處理器表明每次發(fā)射兩條以上的指令.發(fā)射寬度為m,發(fā)射序號寄存器的值是X,則第一條將要發(fā)射的指令攜帶序號信 息X,第二條將要發(fā)射的指令需攜帶序號信息X+1,第三條將要發(fā)射的指令需攜帶序號信息 χ+2。由此類推,最后一條將要發(fā)射的指令需攜帶序號信息x+m-1。在一具體實施方式
中,預(yù)設(shè)η的值為1。步驟S300中更新發(fā)射序號寄存器的值為發(fā)射的最后一個指令的發(fā)射序號加η進(jìn) 一步為將發(fā)射序號寄存器的值加本次發(fā)射的指令的個數(shù)獲得加和,將發(fā)射序號寄存器的值 更新為所述加和。在發(fā)射出一條指令后,發(fā)射序號寄存器需增加1。如果該處理器是多發(fā)射處理器,每次發(fā)射兩條以上的指令,每個時鐘周期發(fā)射的 指令數(shù)為m,則在指令發(fā)射后,發(fā)射序號寄存器的值增加m。在一具體實施方式
中,一個時鐘周期中被寫回的指令的個數(shù)為一個。步驟S500進(jìn)一步為確定本次的寫回序號為寫回序號寄存器的值,將發(fā)射序號和 確定的寫回序號相同的指令的結(jié)果寫回寄存器。在一具體實施方式
中,處理器每個時鐘周期允許多條指令寫回,預(yù)設(shè)η的值為1。步驟S500中以寫回序號寄存器的值為基礎(chǔ)值,依據(jù)允許寫回寄存器的指令的個 數(shù),依序生成寫回序號進(jìn)一步為在一個時鐘周期內(nèi)寫回指令時,確定第一條寫回序號為所 述寫回序號寄存器的值,確定第一條以后的寫回序號為前一條寫回序號加1,直至確定的寫 回序號的個數(shù)為允許寫回寄存器的指令的個數(shù)。該處理器每個時鐘周期允許多條指令寫回,設(shè)允許m條指令寫回寄存器,則在結(jié) 果總線選擇需要寫回的指令時,按如下方法操作。當(dāng)前寫回寄存器的值為y,則第一條可以寫回的指令序號是y,第二條可以寫回的 指令序號是y+Ι,第三條是y+2,依此類推,最后一條可以寫回的指令的序號是y+m-1。但此
9時并不能保證這m條指令都已經(jīng)產(chǎn)生結(jié)果。已經(jīng)有w條連續(xù)指令產(chǎn)生結(jié)果,并且他們的指 令序號分別是ι, y+1,y+2,... , y+w-1,這時可以在一個時鐘周期內(nèi)寫回這w條指令。如果 指令序號為y的指令還沒有產(chǎn)生結(jié)果,但是后續(xù)的w-1條指令已經(jīng)產(chǎn)生結(jié)果,此時,后續(xù)的 w-1條指令必須等待指令序號為y的這條指令產(chǎn)生結(jié)果。所述步驟S600進(jìn)一步為在一個時鐘周期的指令寫回完成后,將寫回序號寄存器 的值加寫回的指令的個數(shù)獲得加和,將寫回序號寄存器的值更新為所述加和。該處理器是多發(fā)射處理器,當(dāng)同時有w(w> 1)條指令同時寫回時,寫回寄存器的 值增加W。本發(fā)明的一具體實施例如下所述。實施例中處理器的流水線工作過程如圖1所示。處理器的內(nèi)部流水線分為5部分, 分別是取指令 101 (IF, Instruction Fetch),指令譯碼 102 (ID, Instruction Decode),指令 發(fā)射 103 (IS,Issue),指令執(zhí)行 104 (EX,Execution)和結(jié)果寫回 105 (WB,Write Back)。在 現(xiàn)有技術(shù)中的流水線里每條指令都要經(jīng)過5級,如果指令間不存在控制相關(guān)和數(shù)據(jù)相關(guān), 在指令流水線開始穩(wěn)定后,每個時鐘周期得到一個結(jié)果。對于現(xiàn)代超標(biāo)量處理器,由于處理 器的功能部件一般分為定點部件、浮點部件和訪存部件,每個部件執(zhí)行的執(zhí)行周期也不一 樣。具體實施例中,某個處理器有3個執(zhí)行的部件,如圖IEX的第一行、第二行、第三行,每 一行對應(yīng)一個執(zhí)行的部件,每個部件的執(zhí)行周期分別是1個時鐘周期,3個時鐘周期和4個 時鐘周期。如圖1所示,如果一條指令已經(jīng)發(fā)射出去了,對于定點指令在1個時鐘周期后可以 得到結(jié)果;對于浮點指令在第3個時鐘周期后得到結(jié)果;對于訪存指令在第4個時鐘周期 后得到結(jié)果。得到結(jié)果后會在下一個周期寫回寄存器堆。這里取指令101是一個流水級,指令譯碼102是一個流水級,指令發(fā)射103是一個 流水級,指令執(zhí)行104按照不同的功能部件,流水級的級數(shù)有所不同,結(jié)果寫回105占一個 流水級。本發(fā)明在指令發(fā)射103流水級和結(jié)果寫回105流水級使用指令序號的方法來使指 令按序?qū)懟亍V噶钚蛱柊òl(fā)射序號和寫回序號。本實施例中使用一個按序雙發(fā)射的處理器。指令發(fā)射103流水級和結(jié)果寫回105流水級的流程圖2所示。其中,譯碼模塊202 在一個時鐘周期內(nèi)給發(fā)射模塊203的發(fā)射隊列送出兩條指令。發(fā)射隊列中如果有兩個以上 的空項,譯碼模塊202的指令就可以進(jìn)入發(fā)射隊列,如果沒有,則發(fā)射模塊203向譯碼模塊 202送出發(fā)射隊列滿的信號。譯碼模塊202收到隊列滿的信號,則在下一個時鐘周期繼續(xù)向 發(fā)射隊列送出兩條指令。處理器內(nèi)部為通用寄存器和浮點寄存器設(shè)置一個寄存器狀態(tài)表416。在這個寄存 器狀態(tài)表內(nèi),每個通用寄存器和浮點寄存器都有一個有效位。這個有效位為1時,則表明在 該寄存器的值為可用;這個有效位為0時,則說明該寄存器的值不可用,圖2中,當(dāng)前正有一 條目的寄存器號為該寄存器的指令已經(jīng)發(fā)射到功能部件204,但是并沒有寫回寄存器。本實施例中,當(dāng)寄存器的值不在寄存器堆415的時候,為了加速指令的發(fā)射,使用 旁路(forward)技術(shù)從功能部件204的結(jié)果總線得到最新值,再送往發(fā)射隊列。如果通過 旁路可以得到寄存器所需要的值,那么源操作數(shù)就準(zhǔn)備好了。如果有某個操作數(shù)沒有準(zhǔn)備
10好,則該條指令不能發(fā)射。不能發(fā)射的指令就緩存在發(fā)射隊列里,直到發(fā)射條件滿足才可以 發(fā)射。發(fā)射模塊203根據(jù)發(fā)射隊頭的兩條指令的源寄存器號去查詢寄存器狀態(tài)表。如果 所有源寄存器號的值都準(zhǔn)備好或者通過旁路可以得到最新的值,并且功能部件204這時可 以接受新的指令,則可以發(fā)射這兩條指令。當(dāng)功能部件204里含有當(dāng)前沒有寫回的指令結(jié)果的時候,功能部件204就有可能 發(fā)生堵塞。這時,功能部件204就不能接收發(fā)射流水級送來的指令。本實施例中,發(fā)射級的發(fā)射總線有兩條,也就是說,每個時鐘周期最多可以發(fā)射兩 條指令。而對于功能部件204,功能部件204 —共分為8組,每組都完成一類指令。這8組 功能部件204被劃分成兩大組,每個大組接受來自兩條發(fā)射總線的指令。這里,每條指令的 分組工作由譯碼模塊202完成。分組信息分別由譯碼模塊202產(chǎn)生后送給了發(fā)射模塊203, 發(fā)射模塊203依靠分組信息將指令發(fā)送給相應(yīng)的功能部件204大組。發(fā)射模塊203在發(fā)射指令時,需要維護(hù)一個發(fā)射序號寄存器,這個寄存器存儲了 指令在發(fā)射時的順序信息。如果當(dāng)前只能發(fā)射一條指令,則下一個時鐘周期這個寄存器就 加1 ;如果當(dāng)前能發(fā)射兩條指令,則在下一個時鐘周期這個寄存器加2。由于本實施例的該處理器結(jié)構(gòu)是順序多發(fā)射,只需要處理寫后讀(RAW,Read After Write)相關(guān)和寫后寫(WAW,Write After Write)相關(guān)。對于RAW相關(guān)的判斷是如 果不能夠得到有效寄存器的值,這里包括在寄存器狀態(tài)表里對應(yīng)表項的valid位無效和結(jié) 果總線上對應(yīng)的值無效。對于WAW相關(guān)的判斷是這里是指當(dāng)寄存器狀態(tài)表里對應(yīng)表項的 valid位無效。對于這兩種相關(guān),采取不發(fā)射相關(guān)指令的方法。為了加速指令的執(zhí)行,為每條結(jié)果總線都增加了旁路(forward)邏輯305,如圖3。 在圖3中,每條要發(fā)射的指令都需要使用旁路邏輯去查詢每條結(jié)果總線上是否有相應(yīng)寄存 器的值已經(jīng)得到。如果9條結(jié)果總線上有1條結(jié)果總線上的值正好是需要的寄存器的值, 那么表明旁路成功。如果沒有1條結(jié)果總線上能找匹配的寄存器的值,那么旁路失敗。每 條指令一般有2-3個源寄存器,每個源寄存器都需要經(jīng)過一個旁路邏輯去查詢是否有需要 的值在結(jié)果總線上。在圖3中,src 301代表源寄存器號,resbusl-9302代表9條結(jié)果總 線,fwd_valid 303表明旁路是否成功,fwd_value 304代表旁路得到的寄存器的值。寄存器堆(regfile) —共有64項,每項是一個64位的寄存器。前32個用于定點 寄存器,后32個用于浮點寄存器。由于有些指令的源寄存器號有3個,如同時發(fā)射兩條含 有3個源寄存器號的指令,則寄存器堆最多需要6個讀端口。每個時鐘周期發(fā)射兩條指令, 必然要求在寫回流水級也能寫回兩條指令。這就要求寄存器堆寫端口是2個。寄存器堆有 6個讀端口和2個寫端口。圖4是寄存器堆415的示意圖。其中在輸入端有clock 401為時鐘信號,reset 402是復(fù)位信號,readl_addrl-3403是第1條要發(fā)射的指令的3個讀地址信號,read2_ addrl-3404是第2條要發(fā)射的指令的3個讀地址信號。wr_addrl 405和wr_addr2 406是 寫回流水級的2個寫地址信號。Wr_enl 407和Wr_en2 408是寫回流水級的2個寫使能信 號。在輸出端,readldatal 409是第一條指令的第一個源操作數(shù)的值;readl_data2 410 是第一條指令的第二個源操作數(shù)的值;readl_data3 411是第一條指令的第三個源操作數(shù) 的值;read2_datal 412是第二條指令的第一個源操作數(shù)的值;read2_data2 413是第一條指令的第二個源操作數(shù)的值;read2_data3 414是第一條指令的第三個源操作數(shù)的值。圖5描述了一個順序雙發(fā)射處理器的按序?qū)懟貦C(jī)制。指令在發(fā)射模塊203準(zhǔn)備發(fā) 射時,需要攜帶由發(fā)射序號寄存器(iSSue_id_reg)2031指明的發(fā)射序號。發(fā)射總線有2條, 分別是 issue_busl 502 和 issue_bus2 503。在發(fā)射總線 issue_busl 502 和 issue_bus2 503里分別含有指令的序號idl和id2。功能部件204有9條結(jié)果總線,每條結(jié)果總線上都 含有一個指令序號。寫回模塊205根據(jù)寫回序號寄存器2051選擇需要寫回的2條結(jié)果總 線。實施例中,本發(fā)明的處理器內(nèi)指令級流水線控制方法如下所述。步驟S701,對所用的控制寄存器初始化。在處理器發(fā)射級設(shè)置一個發(fā)射序號寄存器,這個寄存器用來記錄當(dāng)前將要發(fā)射的 指令的序號。在處理器寫回級設(shè)置一個寫回序號寄存器,這個寄存器用來選擇當(dāng)前要寫回 的指令,其初始值與發(fā)射序號寄存器的值相同。這個兩個寄存器的位寬設(shè)置為5位,即指令 序號從0到31。這兩個寄存器的位寬大小需要使當(dāng)前功能部件流水線里的所有指令都具有 唯一的指令編號。當(dāng)指令序號為31時,如果再增加1,則變?yōu)?。步驟S702,指令發(fā)射時,指令需攜帶發(fā)射序號進(jìn)入功能部件。當(dāng)一條指令的源操作數(shù)已經(jīng)都準(zhǔn)備好,并且功能部件也有空閑,這時可以發(fā)射當(dāng) 前指令。假設(shè)當(dāng)前的指令發(fā)射序號是0,下面的步驟也遵循此假設(shè)。被發(fā)發(fā)射的指令需要攜 帶這個發(fā)射序號為0的信息,然后再進(jìn)入功能部件。步驟S703,該處理器是雙發(fā)射的,每次最多發(fā)射兩條指令。第一條指令的發(fā)射序號 為0,第二條指令的發(fā)射序號為1。步驟S704,發(fā)射指令,并更新發(fā)射序號寄存器。如果當(dāng)前時鐘周期內(nèi)只發(fā)射了一條指令,則發(fā)射序號寄存器增加1,其當(dāng)前值就由 0變?yōu)?。如果當(dāng)前時鐘周期內(nèi)發(fā)射了兩條指令,則發(fā)射序號寄存器增加2,其當(dāng)前值就由0 變?yōu)?。如果當(dāng)前時鐘周期只發(fā)射了一條指令,那么在功能部件流水級里的指令序號為1。 如果發(fā)射了兩條指令,那么在功能部件流水級里的指令序號為2。步驟S704,當(dāng)發(fā)射序號為0的指令執(zhí)行完成的時候,功能部件需要根據(jù)寫回寄存 器的值來確定哪條指令是將要寫回的指令。此時,寫回寄存器的值為0。因此,發(fā)射序號為 0的指令被選中為當(dāng)前需要寫回的指令。如果發(fā)射序號為0和1的指令都已經(jīng)得到了執(zhí)行結(jié)果,那么在一個時鐘周期內(nèi)這 兩條指令都可以寫回。如果發(fā)射序號為1的指令已經(jīng)得到執(zhí)行結(jié)果,但是此時發(fā)射序號為 0的指令還沒有得到執(zhí)行結(jié)果,那么發(fā)射序號為1的指令也不能寫回。步驟S705,更新寫回序號寄存器。當(dāng)只有一條指令寫回時,寫回序號寄存器的值需增加1。如果同時有兩條指令能夠 寫回,則寫回序號寄存器的值增加2。本發(fā)明處理器內(nèi)指令級流水線控制系統(tǒng),包括獲取指令的指令模塊,對指令譯碼 的譯碼模塊,將譯碼后指令發(fā)射的發(fā)射模塊,執(zhí)行發(fā)射的指令的功能部件,以及將執(zhí)行結(jié)果 寫回的寫回模塊,發(fā)射模塊包括發(fā)射序號寄存器,寫回模塊包括寫回序號寄存器,
發(fā)射序號寄存器和寫回序號寄存器的初始值相同;發(fā)射模塊,還用于在一個時鐘周期內(nèi)發(fā)射指令時,對于每條指令,以發(fā)射序號寄存 器的值為基礎(chǔ)值,按所述指令在本次發(fā)射中的順序,生成指令的發(fā)射序號,并在所述指令中 攜帶所述發(fā)射序號;在一個時鐘周期的指令發(fā)射完成后,更新發(fā)射序號寄存器的值為發(fā)射 的最后一個指令的發(fā)射序號加η,η為預(yù)設(shè)常量;功能部件,還用于在指令進(jìn)入并被執(zhí)行時,保存指令的發(fā)射序號不變;寫回模塊,還用于在一個時鐘周期內(nèi)寫回指令時,以寫回序號寄存器的值為基礎(chǔ) 值,依據(jù)允許寫回寄存器的指令的個數(shù),依序生成寫回序號,按寫回序號由小到大順序,將 發(fā)射序號和寫回序號相同的指令的結(jié)果寫回寄存器;在一個時鐘周期的指令寫回完成后, 更新寫回序號寄存器的值為寫回的最后一個指令的發(fā)射序號加η,η為所述預(yù)設(shè)常量。在一具體實施方式
中,所述處理器為多發(fā)射處理器,所述發(fā)射模塊在以發(fā)射序號寄存器的值為基礎(chǔ)值,按所述指令在本次發(fā)射中的順 序,生成指令的發(fā)射序號時進(jìn)一步用于確定第一個將被發(fā)射的指令的發(fā)射序號為所述發(fā)射序號寄存器的值,第一個以后 將被發(fā)射的指令的發(fā)射序號為前一個將被發(fā)射的指令的發(fā)射序號加1。在一具體實施方式
中,預(yù)設(shè)η的值為1,所述發(fā)射模塊在更新發(fā)射序號寄存器的值為發(fā)射的最后一個指令的發(fā)射序號加η 時進(jìn)一步用于將發(fā)射序號寄存器的值加本次發(fā)射的指令的個數(shù),獲得加和,將發(fā)射序號寄存器 的值更新為所述加和。在一具體實施方式
中,一個時鐘周期中被寫回的指令的個數(shù)為一個;
所述寫回模塊在進(jìn)行結(jié)果寫回時進(jìn)一步用于確定本次的寫回序號為寫回序號寄存器的值,將發(fā)射序號和確定的寫回序號相同 的指令的結(jié)果寫回寄存器。在一具體實施方式
中,所述處理器每個時鐘周期允許多條指令寫回;預(yù)設(shè)η的值 為1 ;所述寫回模塊在以寫回序號寄存器的值為基礎(chǔ)值,依據(jù)允許寫回寄存器的指令的 個數(shù),依序生成寫回序號時進(jìn)一步用于在一個時鐘周期內(nèi)寫回指令時,確定第一條寫回序號為所述寫回序號寄存器的 值,確定第一條以后的寫回序號為前一條寫回序號加1,直至確定的寫回序號的個數(shù)為允許 寫回寄存器的指令的個數(shù);所述所述寫回模塊在更新寫回序號寄存器的值時進(jìn)一步用于在一個時鐘周期的指令寫回完成后,將寫回序號寄存器的值加寫回的指令的個 數(shù),獲得加和,將寫回序號寄存器的值更新為所述加和。本領(lǐng)域的技術(shù)人員在不脫離權(quán)利要求書確定的本發(fā)明的精神和范圍的條件下,還 可以對以上內(nèi)容進(jìn)行各種各樣的修改。因此本發(fā)明的范圍并不僅限于以上的說明,而是由 權(quán)利要求書的范圍來確定的。
權(quán)利要求
一種處理器內(nèi)指令級流水線控制方法,其特征在于,包括步驟1,初始化發(fā)射序號寄存器和寫回序號寄存器為相同初始值;步驟2,在一個時鐘周期內(nèi)發(fā)射指令時,對于每條指令,以發(fā)射序號寄存器的值為基礎(chǔ)值,按所述指令在本次發(fā)射中的順序,生成指令的發(fā)射序號,并在所述指令中攜帶所述發(fā)射序號;步驟3,在一個時鐘周期的指令發(fā)射完成后,更新發(fā)射序號寄存器的值為發(fā)射的最后一個指令的發(fā)射序號加n,n為預(yù)設(shè)常量;步驟4,指令進(jìn)入功能部件被執(zhí)行時,指令的發(fā)射序號保持不變;步驟5,在一個時鐘周期內(nèi)寫回指令時,以寫回序號寄存器的值為基礎(chǔ)值,依據(jù)允許寫回寄存器的指令的個數(shù),依序生成寫回序號,按寫回序號由小到大順序,將發(fā)射序號和寫回序號相同的指令的結(jié)果寫回寄存器;步驟6,在一個時鐘周期的指令寫回完成后,更新寫回序號寄存器的值為寫回的最后一個指令的發(fā)射序號加n,n為所述預(yù)設(shè)常量。
2.如權(quán)利要求1所述的處理器內(nèi)指令級流水線控制方法,其特征在于, 所述處理器為多發(fā)射處理器,所述步驟2中以發(fā)射序號寄存器的值為基礎(chǔ)值,按所述指令在本次發(fā)射中的順序,生 成指令的發(fā)射序號進(jìn)一步為步驟21,第一個將被發(fā)射的指令的發(fā)射序號為所述發(fā)射序號寄存器的值,第一個以后 將被發(fā)射的指令的發(fā)射序號為前一個將被發(fā)射的指令的發(fā)射序號加1。
3.如權(quán)利要求1所述的處理器內(nèi)指令級流水線控制方法,其特征在于, 預(yù)設(shè)η的值為1,所述步驟3中更新發(fā)射序號寄存器的值為發(fā)射的最后一個指令的發(fā)射序號加η進(jìn)一步為,步驟31,將發(fā)射序號寄存器的值加本次發(fā)射的指令的個數(shù),獲得加和,將發(fā)射序號寄存 器的值更新為所述加和。
4.如權(quán)利要求1所述的處理器內(nèi)指令級流水線控制方法,其特征在于, 一個時鐘周期中被寫回的指令的個數(shù)為一個;所述步驟5進(jìn)一步為,步驟41,確定本次的寫回序號為寫回序號寄存器的值,將發(fā)射序號和確定的寫回序號 相同的指令的結(jié)果寫回寄存器。
5.如權(quán)利要求1所述的處理器內(nèi)指令級流水線控制方法,其特征在于, 所述處理器每個時鐘周期允許多條指令寫回;預(yù)設(shè)η的值為1 ;所述步驟5中以寫回序號寄存器的值為基礎(chǔ)值,依據(jù)允許寫回寄存器的指令的個數(shù), 依序生成寫回序號進(jìn)一步為,步驟51,在一個時鐘周期內(nèi)寫回指令時,確定第一條寫回序號為所述寫回序號寄存器 的值,確定第一條以后的寫回序號為前一條寫回序號加1,直至確定的寫回序號的個數(shù)為允 許寫回寄存器的指令的個數(shù); 所述步驟6進(jìn)一步為,步驟52,在一個時鐘周期的指令寫回完成后,將寫回序號寄存器的值加寫回的指令的個數(shù),獲得加和,將寫回序號寄存器的值更新為所述加和。
6.一種處理器內(nèi)指令級流水線控制系統(tǒng),包括獲取指令的指令模塊,對指令譯碼的譯 碼模塊,將譯碼后指令發(fā)射的發(fā)射模塊,執(zhí)行發(fā)射的指令的功能部件,以及將執(zhí)行結(jié)果寫回 的寫回模塊,其特征在于,發(fā)射模塊包括發(fā)射序號寄存器,寫回模塊包括寫回序號寄存器,發(fā)射序號寄存器和寫回序號寄存器的初始值相同;發(fā)射模塊,還用于在一個時鐘周期內(nèi)發(fā)射指令時,對于每條指令,以發(fā)射序號寄存器的 值為基礎(chǔ)值,按所述指令在本次發(fā)射中的順序,生成指令的發(fā)射序號,并在所述指令中攜帶 所述發(fā)射序號;在一個時鐘周期的指令發(fā)射完成后,更新發(fā)射序號寄存器的值為發(fā)射的最 后一個指令的發(fā)射序號加η,η為預(yù)設(shè)常量;功能部件,還用于在指令進(jìn)入并被執(zhí)行時,保存指令的發(fā)射序號不變; 寫回模塊,還用于在一個時鐘周期內(nèi)寫回指令時,以寫回序號寄存器的值為基礎(chǔ)值,依 據(jù)允許寫回寄存器的指令的個數(shù),依序生成寫回序號,按寫回序號由小到大順序,將發(fā)射序 號和寫回序號相同的指令的結(jié)果寫回寄存器;在一個時鐘周期的指令寫回完成后,更新寫 回序號寄存器的值為寫回的最后一個指令的發(fā)射序號加η,η為所述預(yù)設(shè)常量。
7.如權(quán)利要求6所述的處理器內(nèi)指令級流水線控制系統(tǒng),其特征在于, 所述處理器為多發(fā)射處理器,所述發(fā)射模塊在以發(fā)射序號寄存器的值為基礎(chǔ)值,按所述指令在本次發(fā)射中的順序, 生成指令的發(fā)射序號時進(jìn)一步用于確定第一個將被發(fā)射的指令的發(fā)射序號為所述發(fā)射序號寄存器的值,第一個以后將被 發(fā)射的指令的發(fā)射序號為前一個將被發(fā)射的指令的發(fā)射序號加1。
8.如權(quán)利要求6所述的處理器內(nèi)指令級流水線控制系統(tǒng),其特征在于, 預(yù)設(shè)η的值為1,所述發(fā)射模塊在更新發(fā)射序號寄存器的值為發(fā)射的最后一個指令的發(fā)射序號加η時進(jìn)一步用于將發(fā)射序號寄存器的值加本次發(fā)射的指令的個數(shù),獲得加和,將發(fā)射序號寄存器的值 更新為所述加和。
9.如權(quán)利要求6所述的處理器內(nèi)指令級流水線控制系統(tǒng),其特征在于, 一個時鐘周期中被寫回的指令的個數(shù)為一個;所述寫回模塊在進(jìn)行結(jié)果寫回時進(jìn)一步用于確定本次的寫回序號為寫回序號寄存器的值,將發(fā)射序號和確定的寫回序號相同的指 令的結(jié)果寫回寄存器。
10.如權(quán)利要求6所述的處理器內(nèi)指令級流水線控制系統(tǒng),其特征在于, 所述處理器每個時鐘周期允許多條指令寫回;預(yù)設(shè)η的值為1 ;所述寫回模塊在以寫回序號寄存器的值為基礎(chǔ)值,依據(jù)允許寫回寄存器的指令的個 數(shù),依序生成寫回序號時進(jìn)一步用于在一個時鐘周期內(nèi)寫回指令時,確定第一條寫回序號為所述寫回序號寄存器的值,確 定第一條以后的寫回序號為前一條寫回序號加1,直至確定的寫回序號的個數(shù)為允許寫回 寄存器的指令的個數(shù);所述所述寫回模塊在更新寫回序號寄存器的值時進(jìn)一步用于在一個時鐘周期的指令寫回完成后,將寫回序號寄存器的值加寫回的指令的個數(shù),獲 得加和,將寫回序號寄存器的值更新為所述加和。
全文摘要
本發(fā)明涉及處理器內(nèi)指令級流水線控制方法和系統(tǒng),方法包括步驟1,初始化發(fā)射序號寄存器和寫回序號寄存器初始值相同;步驟2,發(fā)射指令時,以發(fā)射序號寄存器的值為基礎(chǔ)值,按指令在本次發(fā)射中的順序,生成指令的發(fā)射序號,并在指令中攜帶所述發(fā)射序號;步驟3,指令發(fā)射完成后,更新發(fā)射序號寄存器的值;步驟4,指令進(jìn)入功能部件被執(zhí)行時,指令的發(fā)射序號保持不變;步驟5,寫回指令時,以寫回序號寄存器的值為基礎(chǔ)值,依據(jù)允許寫回寄存器的指令的個數(shù),依序生成寫回序號,按寫回序號由小到大順序,將發(fā)射序號和寫回序號相同的指令的結(jié)果寫回寄存器;步驟6,指令寫回完成后,更新寫回序號寄存器的值。本發(fā)明能夠減少對硬件資源的消耗。
文檔編號G06F9/38GK101894013SQ20101023361
公開日2010年11月24日 申請日期2010年7月16日 優(yōu)先權(quán)日2010年7月16日
發(fā)明者余磊, 劉志勇, 張 浩, 范東睿 申請人:中國科學(xué)院計算技術(shù)研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
宝兴县| 康马县| 水富县| 秭归县| 阿勒泰市| 什邡市| 呼和浩特市| 龙泉市| 邢台县| 文化| 石首市| 乌海市| 桃园市| 安吉县| 彰化县| 宽甸| 涿鹿县| 东乡| 曲沃县| 呼玛县| 于都县| 临朐县| 桂林市| 东兰县| 临武县| 金门县| 调兵山市| 图片| 苍山县| 北宁市| 南郑县| 梧州市| 汶川县| 宝清县| 紫阳县| 德钦县| 曲靖市| 长顺县| 抚松县| 宁河县| 自治县|