專利名稱:指令調(diào)度裝置和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及微處理器的體系結(jié)構(gòu),特別涉及對微處理器中從操作隊(duì)列向保留站發(fā)
射指令進(jìn)行動態(tài)調(diào)度的裝置和方法。
背景技術(shù):
現(xiàn)代的微處理器通常采用流水線技術(shù)來提高微處理器的處理速度。通過流水線技
術(shù),在各個(gè)不同階段并行執(zhí)行不同的指令以提高處理器的性能。然而,指令之間的數(shù)據(jù)相關(guān)
會嚴(yán)重影響指令的并行性,從而降低流水線的利用率以及處理器的性能。 為了解決指令之間的數(shù)據(jù)相關(guān)對指令并行性的影B向,很多微處理器選擇使用對指
令進(jìn)行動態(tài)調(diào)度的流水線結(jié)構(gòu),比如Tomasulo算法。譯碼后的指令保存到操作隊(duì)列中,而
操作隊(duì)列中的指令順序發(fā)射到保留站。其中,所謂的順序發(fā)射是指,指令從操作隊(duì)列中發(fā)射
的順序與指令寫入到操作隊(duì)列中的順序是一致的,即按照先進(jìn)先出(FIFO)的方式進(jìn)行發(fā)
射。只要保留站中有空閑項(xiàng)時(shí),不管操作隊(duì)列中的第一條指令的操作數(shù)是否已準(zhǔn)備好均將
其發(fā)射到對應(yīng)的保留站中。然后,由保留站偵聽結(jié)果總線,判斷指令的操作數(shù)是否準(zhǔn)備好,
并將操作數(shù)準(zhǔn)備好的指令發(fā)射到功能部件中以開始執(zhí)行指令。每個(gè)功能部件對應(yīng)于一個(gè)保
留站,每個(gè)功能部件執(zhí)行與其相對應(yīng)的保留站中操作數(shù)已準(zhǔn)備好的指令。 對于上述對指令進(jìn)行動態(tài)調(diào)度的技術(shù),所有指令譯碼后寫入同一個(gè)操作隊(duì)列,不
同類型的指令從操作隊(duì)列中順序發(fā)射到不同類型的保留站,由于操作隊(duì)列的項(xiàng)數(shù)比保留站
的項(xiàng)數(shù)要多(因硬件開銷方面的考慮,保留站的項(xiàng)數(shù)一般不多),由此使得,操作隊(duì)列中操
作數(shù)準(zhǔn)備好的指令理論上比保留站中操作數(shù)準(zhǔn)備好的指令要多,并因此存在以下問題當(dāng)
與操作隊(duì)列中的第一條指令相對應(yīng)的保留站長時(shí)間處于飽和狀態(tài)(即保留站沒有空閑項(xiàng))
時(shí),則第一條指令將一直保存在操作隊(duì)列中而不被發(fā)射到保留站中,從而使得,即使與操作
隊(duì)列中的其它指令相對應(yīng)的保留站有空閑項(xiàng),所述其它指令也不能被發(fā)射。
參照圖1具體而言如果訪存保留站已滿,即訪存保留站中的所有項(xiàng)都處于
"BUSY(忙)"狀態(tài),也即沒有空閑的項(xiàng)可用來接收操作隊(duì)列發(fā)射過來的新指令;其中,保留
站項(xiàng)的"忙"狀態(tài)表示該保留站項(xiàng)已經(jīng)存放了指令,并且該指令尚未被執(zhí)行或者正在被執(zhí)行
但結(jié)果尚未寫回。此時(shí),在操作隊(duì)列的第一條指令是LW指令(存數(shù)訪存指令)的情況下,由
于訪存保留站已滿將使得訪存指令LW不能被發(fā)射,因此,即使此時(shí)定點(diǎn)保留站有空閑項(xiàng),
操作隊(duì)列中的定點(diǎn)指令MUL、ADD因被訪存指令LW堵塞而不能被發(fā)射。進(jìn)一步,如果此時(shí)訪
存指令發(fā)生了例外且需要很多周期處理該例外,則此時(shí)與定點(diǎn)指令相對應(yīng)的功能部件將處
于空閑狀態(tài),這顯然會降低流水線的利用率和處理器的性能。 另外,上述對指令進(jìn)行動態(tài)調(diào)度的技術(shù)還存在的問題是當(dāng)保留站沒有空閑項(xiàng),且 保留站中的指令操作數(shù)尚未準(zhǔn)備好時(shí),即使操作隊(duì)列中存在操作數(shù)已準(zhǔn)備好的指令,也不 能執(zhí)行該指令。 參照圖2具體而言如果操作隊(duì)列中的LW、MUL、ADD指令均已發(fā)射到保留站中。由 于MUL、 ADD指令與LW指令存在數(shù)據(jù)相關(guān)(均涉及操作數(shù)Rl),只要LW指令的結(jié)果尚未寫回,就不能執(zhí)行MUL, ADD指令。此時(shí),MUL、 ADD指令將因操作數(shù)Rl尚未準(zhǔn)備好而一直占用 保留站項(xiàng),使得沒有空閑的保留站項(xiàng)可用來接收SUB指令,因此不能發(fā)射SUB、FADD指令,即 使它們的操作數(shù)已準(zhǔn)備好且它們與LW指令及保留站中的其它指令均不存在數(shù)據(jù)相關(guān)。換 言之,即使SUB指令的操作數(shù)已準(zhǔn)備好也不能被執(zhí)行,這顯然也將導(dǎo)致流水線效率降低。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明目的在于提供一種用于對微處理器中從操作隊(duì)列向保留站發(fā)射
指令進(jìn)行動態(tài)調(diào)度的裝置和方法,以基于微處理器指令之間的數(shù)據(jù)相關(guān)性來實(shí)現(xiàn)將操作數(shù)
已準(zhǔn)備好的指令發(fā)射到保留站,從而能夠提高微處理器的流水線效率以及整體性能。 為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種指令調(diào)度裝置,用于對微處理器中從操作
隊(duì)列向保留站發(fā)射指令進(jìn)行動態(tài)調(diào)度,其包括指令寫入器,用于基于要寫入所述操作隊(duì)列
的譯碼后指令與所述操作隊(duì)列中的有效指令之間的數(shù)據(jù)相關(guān)性、已經(jīng)寫回和正在寫回至所
述操作隊(duì)列的指令執(zhí)行結(jié)果,來設(shè)置所述譯碼后指令的各操作數(shù)的狀態(tài),并將設(shè)置后的所
述譯碼后指令作為待寫入指令寫入所述操作隊(duì)列;操作數(shù)狀態(tài)更新器,用于基于所述操作
隊(duì)列中各未發(fā)射指令與指令執(zhí)行結(jié)果正在寫回的指令之間的數(shù)據(jù)相關(guān)性,更新各所述未發(fā)
射指令的操作數(shù)的狀態(tài);待發(fā)射判斷器,用于基于各所述未發(fā)射指令的各操作數(shù)的狀態(tài),
判斷所述操作隊(duì)列中是否存在所有操作數(shù)均已準(zhǔn)備好的待發(fā)射指令;以及指令發(fā)射器,用
于在所述保留站有空閑時(shí),將經(jīng)由所述待發(fā)射判斷器所判定的待發(fā)射指令發(fā)射至所述保留站。 另外,本發(fā)明還提供了一種指令調(diào)度方法,用于對微處理器中從操作隊(duì)列向保留 站發(fā)射指令進(jìn)行動態(tài)調(diào)度,其包括指令寫入步驟,用于基于要寫入所述操作隊(duì)列的譯碼后 指令與所述操作隊(duì)列中的有效指令之間的數(shù)據(jù)相關(guān)性、已經(jīng)寫回和正在寫回至所述操作隊(duì) 列的指令執(zhí)行結(jié)果,來設(shè)置所述譯碼后指令的各操作數(shù)的狀態(tài),并將設(shè)置后的所述譯碼后 指令作為待寫入指令寫入所述操作隊(duì)列;操作數(shù)狀態(tài)更新步驟,用于基于所述操作隊(duì)列中 各未發(fā)射指令與指令執(zhí)行結(jié)果正在寫回的指令之間的數(shù)據(jù)相關(guān)性,更新各所述未發(fā)射指令 的操作數(shù)的狀態(tài);待發(fā)射判斷步驟,用于基于各所述未發(fā)射指令的各操作數(shù)的狀態(tài),判斷 所述操作隊(duì)列中是否存在所有操作數(shù)均已準(zhǔn)備好的待發(fā)射指令;以及指令發(fā)射步驟,用于 在所述保留站有空閑時(shí),將經(jīng)由所述待發(fā)射判斷步驟所判定的待發(fā)射指令發(fā)射至所述保留 站。 通過上述指令調(diào)度裝置和方法,本發(fā)明能夠獲得以下有益技術(shù)效果由于進(jìn)入保 留站的指令都是操作數(shù)準(zhǔn)備好的指令,所以保留站不需要偵聽結(jié)果總線,不需要判斷指令 的操作數(shù)是否準(zhǔn)備好,而可將指令直接發(fā)射到功能部件中。這能夠有效解決因某個(gè)保留站 無空閑而使得順序發(fā)射操作隊(duì)列中的指令時(shí),即使操作隊(duì)列中的指令的操作數(shù)已準(zhǔn)備好也 不能被執(zhí)行的問題。因此,本發(fā)明能夠有效減少指令發(fā)射中因保留站無空閑而堵塞流水線 的次數(shù),從而提高流水線的效率和微處理器的整體性能。 對于上述指令調(diào)度裝置和方法,優(yōu)選地,通過偵聽結(jié)果總線來確定指令執(zhí)行結(jié)果 以及指令執(zhí)行結(jié)果正在寫回的指令的操作隊(duì)列項(xiàng)號,并根據(jù)所述操作隊(duì)列項(xiàng)號將所述指令 執(zhí)行結(jié)果寫回到所述操作隊(duì)列中所述指令所在的操作隊(duì)列項(xiàng)內(nèi)。由此使得,可將上述指令 調(diào)度裝置實(shí)現(xiàn)為通過從操作隊(duì)列讀取操作隊(duì)列項(xiàng)內(nèi)所保存的信息以及向操作隊(duì)列中的操
6作隊(duì)列項(xiàng)寫入信息來實(shí)施上述指令調(diào)度方法。
圖1示出了現(xiàn)有指令調(diào)度技術(shù)的一個(gè)示例; 圖2示出了現(xiàn)有指令調(diào)度技術(shù)的另一個(gè)示例; 圖3示出了根據(jù)本發(fā)明實(shí)施例的指令調(diào)度裝置的框圖; 圖4示出了本發(fā)明指令調(diào)度裝置中指令寫入器的優(yōu)選實(shí)施例的框圖; 圖5示出了本發(fā)明指令調(diào)度裝置中操作數(shù)狀態(tài)更新器的優(yōu)選實(shí)施例的框圖; 圖6示出了可應(yīng)用于本發(fā)明指令調(diào)度裝置的,操作隊(duì)列中用于保存指令的相關(guān)信
息的操作隊(duì)列項(xiàng)域構(gòu)成的示意圖; 圖7示出了本發(fā)明指令調(diào)度裝置中指令寫入器的處理流程的示意圖;
圖8示出了本發(fā)明指令調(diào)度裝置中操作數(shù)狀態(tài)更新器的處理流程的示意圖;
圖9示出了本發(fā)明指令調(diào)度裝置中待發(fā)射判斷器的處理流程的示意圖;
圖10示出了本發(fā)明指令調(diào)度裝置中指令發(fā)射器的處理流程的示意圖;以及
圖11A 圖lll根據(jù)本發(fā)明指令調(diào)度方法示出了指令從譯碼到發(fā)射過程的一個(gè)應(yīng) 用示例。
具體實(shí)施例方式
如上所述,本發(fā)明旨在解決由保留站偵聽結(jié)果總線、并根據(jù)偵聽結(jié)果對指令進(jìn)行 動態(tài)調(diào)度的現(xiàn)有技術(shù)中指令發(fā)射效率低的問題,并提供了一種指令調(diào)度技術(shù),以提高指令 發(fā)射流水線的效率及微處理器的整體性能。該指令調(diào)度技術(shù)的主要思路是,基于指令之間 的數(shù)據(jù)相關(guān)性,在保留站有空閑項(xiàng)時(shí)選擇所有操作數(shù)均已準(zhǔn)備好的指令發(fā)射到保留站,由 此能夠有效提高指令發(fā)射的流水線效率。 本發(fā)明的上述及其他技術(shù)特征和有益效果,將通過參照附圖進(jìn)行的優(yōu)選實(shí)施例介 紹得到更充分的闡述。
圖3給出了根據(jù)本發(fā)明實(shí)施例的指令調(diào)度裝置的框圖。 如圖3所示,本發(fā)明的指令調(diào)度裝置300用于對微處理器中從操作隊(duì)列100向保 留站200發(fā)射指令進(jìn)行動態(tài)調(diào)度,包括指令寫入器310、操作數(shù)狀態(tài)更新器320、待發(fā)射判斷 器330和指令發(fā)射器。其中 指令寫入器310用于基于要寫入操作隊(duì)列100的譯碼后指令411與已存在于操作 隊(duì)列100中的有效指令420之間的數(shù)據(jù)相關(guān)性以及已經(jīng)寫回和正在寫回至操作隊(duì)列100的 指令執(zhí)行結(jié)果,來設(shè)置譯碼后指令411的各操作數(shù)的狀態(tài),并將設(shè)置后的譯碼后指令411作 為待寫入指令412寫入操作隊(duì)列100 ; 操作數(shù)狀態(tài)更新器320用于基于操作隊(duì)列100中各未發(fā)射指令421與指令執(zhí)行結(jié)
果正在寫回的指令之間的數(shù)據(jù)相關(guān)性,更新各未發(fā)射指令421的操作數(shù)的狀態(tài); 待發(fā)射判斷器330用于基于操作隊(duì)列100中各未發(fā)射指令421的各操作數(shù)的狀
態(tài),判斷操作隊(duì)列100中是否存在所有操作數(shù)均已準(zhǔn)備好的待發(fā)射指令422 ;以及 指令發(fā)射器340用于在保留站200中存在空閑項(xiàng)時(shí),將經(jīng)由待發(fā)射判斷器330判
定的待發(fā)射指令422發(fā)射至保留站200。
其中,操作隊(duì)列100中有效指令420包括尚未發(fā)射的未發(fā)射指令421和已發(fā)射但 尚未提交的已發(fā)射指令423,已經(jīng)寫回至操作隊(duì)列100的指令執(zhí)行結(jié)果通過查看有效指令 420獲知,而正在寫回至操作隊(duì)列100的指令執(zhí)行結(jié)果通過偵聽用以寫回指令執(zhí)行結(jié)果的 結(jié)果總線500而獲知。 圖3所示的指令調(diào)度裝置通過由指令寫入器310和操作數(shù)狀態(tài)更新器320基于指 令之間的數(shù)據(jù)相關(guān)性實(shí)時(shí)更新操作隊(duì)列中未發(fā)射指令的操作數(shù)狀態(tài),能夠有效確保進(jìn)入保 留站的指令都是各操作數(shù)均已準(zhǔn)備好的指令,進(jìn)而能夠有效提高指令發(fā)射的流水線效率。
下面將分別參考圖4、圖5詳細(xì)描述本發(fā)明指令調(diào)度裝置300中指令寫入器310和 操作數(shù)狀態(tài)更新器320的優(yōu)選實(shí)施例。 如圖4所示,指令寫入器310可優(yōu)選為包括第一判斷器311、第一設(shè)置器312、相關(guān) 指令確定器313、第二判斷器314以及第二設(shè)置器315。其中 第一判斷器311用于將譯碼后指令411的操作數(shù)的源寄存器與操作隊(duì)列100中各 有效指令420的指令執(zhí)行結(jié)果的目的寄存器進(jìn)行比較,以判斷操作隊(duì)列100中是否存在目 的寄存器與譯碼后指令的操作數(shù)的源寄存器為同一寄存器的有效指令,也即判斷操作隊(duì)列 100中是否存在與譯碼后指令411的操作數(shù)相關(guān)的有效指令; 第一設(shè)置器312用于在經(jīng)由第一判斷器311判定操作隊(duì)列100中不存在與譯碼 后指令411的操作數(shù)相關(guān)的有效指令時(shí),將譯碼后指令411的操作數(shù)的狀態(tài)設(shè)置為已準(zhǔn)備 好; 相關(guān)指令確定器313用于在經(jīng)由第一判斷器311判定操作隊(duì)列100中存在與譯碼 后指令411的操作數(shù)相關(guān)的有效指令時(shí),將與該操作數(shù)相關(guān)的全部有效指令中距離譯碼后 指令411最近的有效指令確定為譯碼后指令411的該操作數(shù)的相關(guān)指令430 ;
第二判斷器314用于判斷相關(guān)指令430的指令執(zhí)行結(jié)果是否已經(jīng)寫回或正在寫 回;以及 第二設(shè)置器315,用于在經(jīng)由第二判斷器314判定相關(guān)指令430的指令執(zhí)行結(jié)果已 經(jīng)寫回或正在寫回時(shí),將譯碼后指令411中相應(yīng)的操作數(shù)的狀態(tài)設(shè)置為已準(zhǔn)備好。
如圖5所示,操作數(shù)狀態(tài)更新器320可優(yōu)選為包括第三判斷器321和第三設(shè)置器 322。其中 第三判斷器321,用于判斷指令執(zhí)行結(jié)果正在寫回的指令是否為所述未發(fā)射指令 的操作數(shù)的相關(guān)指令;以及 第三設(shè)置器,用于在經(jīng)由所述第三判斷器判定指令執(zhí)行結(jié)果正在寫回的指令是所 述未發(fā)射指令的所述操作數(shù)的相關(guān)指令時(shí),將所述未發(fā)射指令的所述操作數(shù)的狀態(tài)設(shè)置為 已準(zhǔn)備好。 下面將具體到對操作隊(duì)列中用于保存指令的相關(guān)信息的操作隊(duì)列項(xiàng)的各個(gè)域進(jìn) 行的操作,對上述指令調(diào)度裝置300進(jìn)行更詳細(xì)的說明。 圖6示出了可應(yīng)用于本發(fā)明指令調(diào)度裝置的,操作隊(duì)列中用于保存指令相關(guān)信息 的操作隊(duì)列項(xiàng)域構(gòu)成的示意圖。 如圖6所示,構(gòu)成操作隊(duì)列項(xiàng)的域至少包括有 Opcode :操作碼域,表示指令的具體操作類型,比如加法ADD、減法SUB、乘法MUL、 除法DIV等操作。
8
State :指令在操作隊(duì)列中的狀態(tài)位,可以如下設(shè)置該狀態(tài)位
"OO"表示操作隊(duì)列項(xiàng)處于空閑狀態(tài),可以接收新的指令;
"01"表示操作隊(duì)列項(xiàng)中存放指令,該指令尚未發(fā)射到保留站;
"10"表示該操作隊(duì)列項(xiàng)中指令已經(jīng)發(fā)射到保留站中。
其中,只要state域不等于"00",即表示該指令為有效指令。
Srcl :操作數(shù)1所在的源寄存器號。
Src2 :操作數(shù)2所在的源寄存器號。
Dest :存放指令執(zhí)行結(jié)果的目的寄存器號。
Qidl :表示操作數(shù)1的相關(guān)指令所在的操作隊(duì)列項(xiàng)號。 操作隊(duì)列中存在某條指令,其目的寄存器號與操作數(shù)1的寄存器號相等,則認(rèn)為 該條指令與操作數(shù)1相關(guān);并且,將與操作數(shù)1相關(guān)的所有指令中距離當(dāng)前指令最近的指令 確定為操作數(shù)1的相關(guān)指令。例如指令a "ADD Rl, R2, R3,,、指令b "ADD Rl, R2, R4,,、指令c "ADD R3, R2, Rl"是操
作隊(duì)列中的有效指令,指令a是操作隊(duì)列的第一條指令。盡管指令c的操作數(shù)2所在的源 寄存器Rl是指令b的目的寄存器,也是指令a的目的寄存器,由于指令b距離指令c最近, 使得指令c的操作數(shù)2 (Rl)的值來自于指令b的指令執(zhí)行結(jié)果,因此指令c的操作數(shù)2 (Rl) 的相關(guān)指令為指令b。 Qid2 :表示操作數(shù)2的相關(guān)指令所在的操作隊(duì)列項(xiàng)號。 Rdyl :如果在操作隊(duì)列中位于該指令之前的有效指令中,不存在操作數(shù)1的相關(guān) 指令,則操作數(shù)1的值來自于讀寄存器的值。 Rdy2 :如果在操作隊(duì)列中位于該指令之前的有效指令中,不存在操作數(shù)2的相關(guān) 指令,則操作數(shù)2的值來自于讀寄存器的值。 Wbl :表示操作數(shù)1的相關(guān)指令的指令執(zhí)行結(jié)果已經(jīng)寫回至操作隊(duì)列。 Wb2 :表示操作數(shù)2的相關(guān)指令的指令執(zhí)行結(jié)果已經(jīng)寫回至操作隊(duì)列。 Wb :表示指令已經(jīng)執(zhí)行完,并且指令執(zhí)行結(jié)果已經(jīng)寫回至操作隊(duì)列。該指令等待成
為操作隊(duì)列中的第一條指令后提交。 基于上述用于保存指令信息的操作隊(duì)列項(xiàng)的域構(gòu)成,在將譯碼后指令411寫入操 作隊(duì)列100時(shí),指令寫入器310中的第一判斷器311將該指令的操作數(shù)1、操作數(shù)2的源寄 存器分別與操作隊(duì)列100中各有效指令420的目的寄存器進(jìn)行比較(操作隊(duì)列100中的有 效指令420是指state域不為"00"的指令),比較是否是同一個(gè)寄存器,以使得第一設(shè)置 器312和/或相關(guān)指令確定器313、第二判斷器314、第二設(shè)置器315能夠相應(yīng)根據(jù)比較結(jié) 果給Rdyl、Rdy2、 Qidl、Qid2、 Wbl、Wb2等域賦值。 其中,第一設(shè)置器312和相關(guān)指令確定器313通過設(shè)置譯碼后指令411中與操作 數(shù)l相對應(yīng)的Qidl域和Rdyl域來設(shè)置操作數(shù)1的狀態(tài)。具體為在經(jīng)由第一判斷器311判 定操作隊(duì)列100中不存在目的寄存器與操作數(shù)1的源寄存器為同一寄存器的有效指令420 時(shí),第一設(shè)置器312將Rdyl域設(shè)置為1,以表示操作數(shù)1來自于寄存器且已準(zhǔn)備好;以及在 經(jīng)由第一判斷器311判定操作隊(duì)列100中存在目的寄存器與操作數(shù)1的源寄存器為同一寄 存器的有效指令420時(shí),相關(guān)指令確定器313將與Rdyl域設(shè)置為0,并將與Qidl域設(shè)置為 相關(guān)指令430的操作隊(duì)列項(xiàng)號qid,以表示操作數(shù)1來自于相關(guān)指令430的指令執(zhí)行結(jié)果,
9且操作數(shù)1的狀態(tài)決定于相關(guān)指令430的指令執(zhí)行結(jié)果是否已經(jīng)寫回或正在寫回。
此外,第二設(shè)置器315通過設(shè)置譯碼后指令411中與操作數(shù)1相對應(yīng)的Wbl域來設(shè)置操作數(shù)1的狀態(tài)。具體為在經(jīng)由第二判斷器314判定相關(guān)指令430的指令執(zhí)行結(jié)果已經(jīng)寫回或正在寫回時(shí),第二設(shè)置器315將與Wbl域設(shè)置為l,以表示操作數(shù)l已準(zhǔn)備好。
將參考圖7所示指令寫入器310的處理流程的優(yōu)選示例進(jìn)行更詳細(xì)的說明如下
步驟S1,經(jīng)由第一判斷器311判斷操作隊(duì)列100中是否存在目的寄存器與操作數(shù)1的源寄存器為同一寄存器的有效指令,并基于判斷結(jié)果選擇性執(zhí)行下述步驟SIN或S1Y。
步驟S1N,在經(jīng)由第一判斷器311判定操作隊(duì)列100中不存在操作數(shù)1的相關(guān)指令時(shí),第一設(shè)置器312將與操作數(shù)1相對應(yīng)的Rdyl域設(shè)置為1 ,以表示操作數(shù)1的值來自于寄存器且已準(zhǔn)備好。 步驟S1Y,在經(jīng)由第一判斷器311判定操作隊(duì)列100中存在目的寄存器與操作數(shù)1的源寄存器為同一寄存器的有效指令時(shí),相關(guān)指令確定器313將與操作數(shù)1相關(guān)的有效指令中距離當(dāng)前指令最近者確定為相關(guān)指令430,并將與操作數(shù)1相對應(yīng)的Rdyl域設(shè)置為0,同時(shí)將與操作數(shù)1相對應(yīng)的Qidl域設(shè)置為相關(guān)指令430的操作隊(duì)列項(xiàng)號qid,以表示操作數(shù)1的值來自于相關(guān)指令430的指令執(zhí)行結(jié)果,也即操作數(shù)1的狀態(tài)決定于相關(guān)指令430的指令執(zhí)行結(jié)果是否已經(jīng)寫回或正在寫回,就此執(zhí)行以下步驟S2(包括步驟S2-l和S2-2)。
步驟S2-1,經(jīng)由第二判斷器314判斷相關(guān)指令430的指令執(zhí)行結(jié)果是否已經(jīng)寫回;步驟S2-2,經(jīng)由第二判斷器314判斷結(jié)果總線500的Qid域值是否等于相關(guān)指令430的qid號,也即判斷相關(guān)指令430的指令執(zhí)行結(jié)果是否正在寫回。并且,基于步驟S2-l和S2-2的判斷結(jié)果選擇性執(zhí)行下述步驟S2N或S2Y。 需要說明的是,盡管圖7將步驟S2-l繪制為在步驟S2-2之前執(zhí)行,當(dāng)本領(lǐng)域技術(shù)人員在掌握本發(fā)明的技術(shù)原理之后應(yīng)能明白,步驟S2-l和S2-2均旨在于判斷操作數(shù)1是否準(zhǔn)備好,兩者之間沒有必然的時(shí)序先后聯(lián)系,在具體實(shí)施中完全可根據(jù)個(gè)人喜好任意選擇步驟S2-l和S2-2的執(zhí)行時(shí)序。 步驟S2Y,在經(jīng)由第二判斷器314判定相關(guān)指令430的指令執(zhí)行結(jié)果已經(jīng)寫回或正在寫回時(shí),第二設(shè)置器315將與操作數(shù)1相對應(yīng)的Wbl域設(shè)置為1,以表示操作數(shù)1已準(zhǔn)備好。 步驟S2N,在經(jīng)由第二判斷器314判定相關(guān)指令430的指令執(zhí)行結(jié)果不僅尚未寫回且也沒有被正在寫回時(shí),第二設(shè)置器315保持與操作數(shù)1相對應(yīng)的Wbl域值不變,以繼續(xù)表示操作數(shù)1的值來自于相關(guān)指令430的指令執(zhí)行結(jié)果且尚未準(zhǔn)備好。 對于圖7,應(yīng)能理解的是,雖然以操作數(shù)1為例進(jìn)行了解釋,針對該譯碼后指令411的其它操作數(shù)也需進(jìn)行類似的判斷和域值設(shè)置。 另一方面,基于上述用于保存指令信息的操作隊(duì)列項(xiàng)的域構(gòu)成,對于已存在于操作隊(duì)列100中的未發(fā)射指令421,操作數(shù)狀態(tài)更新器320中的第三判斷器321將該指令中分別與操作數(shù)1、操作數(shù)2相對應(yīng)的Qidl、Qid2與結(jié)果總線500的Qid域值進(jìn)行比較,以判斷其相關(guān)指令的指令執(zhí)行結(jié)果是否正在返回,并使得第三設(shè)置器322能夠根據(jù)比較結(jié)果給Rdyl、Rdy2、Wbl、Wb2等域賦值。 其中,第三設(shè)置器322通過更新未發(fā)射指令421中與操作數(shù)1相對應(yīng)的Wbl域值來更新操作數(shù)l的狀態(tài),具體為基于未發(fā)射指令421中與操作數(shù)l相對應(yīng)的Qidl域值,在
10經(jīng)由第三判斷器321判定指令執(zhí)行結(jié)果正在寫回的指令是該Qidl域值所指向的相關(guān)指令430時(shí),第三設(shè)置器322將與操作數(shù)1相對應(yīng)的Wbl域更新為1,以表示操作數(shù)1已準(zhǔn)備好。
此外,基于未發(fā)射指令421中與操作數(shù)1相對應(yīng)的Qidl域值,在Qidl域值所指向的相關(guān)指令430已提交的情況下,第三設(shè)置器322將與操作數(shù)1相對應(yīng)的Rdyl域更新為1 。
將參考圖8所示操作數(shù)狀態(tài)更新器320的處理流程的優(yōu)選示例進(jìn)行更詳細(xì)的說明如下 步驟S3,經(jīng)由第三判斷器321判斷結(jié)果總線500的Qid域值是否等于操作數(shù)1的相關(guān)指令430的qid號,也即判斷相關(guān)指令430的指令執(zhí)行結(jié)果是否正在寫回,并基于步驟S3的判斷結(jié)果選擇性執(zhí)行下述步驟S3N或S3Y。 步驟S3N,在經(jīng)由第三判斷器321判定相關(guān)指令430的指令執(zhí)行結(jié)果尚未正在寫回時(shí),第三設(shè)置器322保持與操作數(shù)1相對應(yīng)的Wbl域值不變,以繼續(xù)表示操作數(shù)1的值來自于相關(guān)指令430的指令執(zhí)行結(jié)果且尚未準(zhǔn)備好。 步驟S3Y,在經(jīng)由第三判斷器321判定相關(guān)指令430的指令執(zhí)行結(jié)果正在寫回時(shí),第三設(shè)置器322將與操作數(shù)1相對應(yīng)的Wbl域值更新為1,以表示操作數(shù)1的值已準(zhǔn)備好。
此外,當(dāng)操作隊(duì)列中的指令被提交時(shí),與被提交指令存在數(shù)據(jù)相關(guān)性的未發(fā)射指令中相應(yīng)Rdy域需要相應(yīng)地更新為1。這是因?yàn)?,操作?duì)列中提交了的指令的指令執(zhí)行結(jié)果將寫回到寄存器中,從而與被提交指令存在數(shù)據(jù)相關(guān)的指令可直接從寄存器中讀值,所以Rdy域需要相應(yīng)地置為1。繼續(xù)參照圖8具體而言 步驟S4,第三判斷器321還基于未發(fā)射指令421中與操作數(shù)1相對應(yīng)的Qidl域值,判斷Qidl域值所指向的相關(guān)指令430是否已經(jīng)提交,并基于判斷結(jié)果選擇性執(zhí)行以下步驟S4N和S4Y。 步驟S4N,在經(jīng)由第三判斷器321判定相關(guān)指令430尚未提交時(shí),第三設(shè)置器322保持與操作數(shù)1相對應(yīng)的Rdyl域值不變,以繼續(xù)表示操作數(shù)1的值來自于相關(guān)指令430的指令執(zhí)行結(jié)果。 步驟S4Y,在經(jīng)由第三判斷器321判定相關(guān)指令430已提交時(shí),第三設(shè)置器322將與操作數(shù)1相對應(yīng)的Rdyl域值更新為1,以表示操作數(shù)1的值來自于讀寄存器。
對于圖8,類似地,應(yīng)能理解的是,雖然以操作數(shù)1為例進(jìn)行了解釋,針對該未發(fā)射指令421的其它操作數(shù)也需進(jìn)行類似的判斷和域值更新。 通過如上所述經(jīng)由指令寫入器310和操作數(shù)狀態(tài)更新器320設(shè)置和實(shí)時(shí)更新操作隊(duì)列100中各未發(fā)射指令421的各操作數(shù)的狀態(tài),本發(fā)明指令調(diào)度裝置300中的待發(fā)射判斷器330通過基于各未發(fā)射指令421的各操作數(shù)的狀態(tài),判斷操作隊(duì)列中是否存在所有操作數(shù)均已準(zhǔn)備好的待發(fā)射指令422。參照圖9具體而言 指令準(zhǔn)備好是指指令的所有操作數(shù)都已經(jīng)準(zhǔn)備好。而指令的操作數(shù)1準(zhǔn)備好是指指令所在的操作隊(duì)列項(xiàng)的Rdyl域等于1 (參見圖9步驟S5),或者Wbl域?yàn)? (參見圖9步驟S6),或者有效結(jié)果總線的qid號與Qidl號相等(參見圖9步驟S7)。其中,如果Rdyl為l,則操作數(shù)1的值來自于讀寄存器而獲得的值;如果Wbl為l,則操作數(shù)1的值來自于操作隊(duì)列中相關(guān)指令430的指令執(zhí)行結(jié)果;如果有效結(jié)果總線的qid號與qidl號相等,則操作數(shù)l的值來自于結(jié)果總線上的指令結(jié)果。當(dāng)Rdyl域不為l時(shí)再判斷Wbl域。指令的其它操作數(shù)準(zhǔn)備好的概念和上述操作數(shù)1準(zhǔn)備好的概念一致。
在判斷完未發(fā)射指令421的操作數(shù)是否均已準(zhǔn)備好之后,也即在確定待發(fā)射指令422之后,上述指令調(diào)度裝置300中的指令發(fā)射器340根據(jù)處理器的發(fā)射寬度以及處理器的結(jié)構(gòu)選擇發(fā)射策略。如果不存在待發(fā)射指令422,則在當(dāng)前拍不發(fā)射指令;如果只有一條待發(fā)射指令422,則只發(fā)射一條指令。所述發(fā)射策略即可以實(shí)現(xiàn)單發(fā)射也可以實(shí)現(xiàn)雙發(fā)射,也可以擴(kuò)展到實(shí)現(xiàn)更寬的發(fā)射寬度;以及既可以實(shí)現(xiàn)單發(fā)射,也可以實(shí)現(xiàn)雙發(fā)射或者多發(fā)射。
優(yōu)選地,可以將操作隊(duì)列100中操作數(shù)均已準(zhǔn)備好的待發(fā)射指令422,根據(jù)指令操作類型進(jìn)行分類,分為非乘、除操作的整型操作,乘、除操作的整型操作,浮點(diǎn)操作以及訪存操作??砂凑罩噶钸M(jìn)入操作隊(duì)列的順序,找到操作隊(duì)列中每類指令的第一條操作數(shù)準(zhǔn)備好的指令;然后根據(jù)訪存優(yōu)先級最高,非乘、除操作的整型操作優(yōu)先級第二,乘、除操作的整型操作優(yōu)先級第三,浮點(diǎn)操作優(yōu)先級最低的順序,選擇出兩條待發(fā)射指令422進(jìn)行發(fā)射。具體流程可參見附圖ll所示。 需要說明的是,上述指令操作類型及優(yōu)先級順序僅旨在進(jìn)行示例性說明。本領(lǐng)域技術(shù)人員應(yīng)能理解,指令的分類以及優(yōu)先級的確定,在具體實(shí)施中,不同的處理器完全可根據(jù)實(shí)際需要不同而各自設(shè)定 此外,在選擇待發(fā)射指令發(fā)射422時(shí)還需要考慮相應(yīng)的保留站200是否存在空閑項(xiàng)可用來存放從操作隊(duì)列中發(fā)射來的指令。如果保留站中存在空閑項(xiàng),則將操作隊(duì)列100中各操作數(shù)均已準(zhǔn)備好的待發(fā)射指令422發(fā)射到保留站200中。 另外,本發(fā)明還提供了與上述指令調(diào)度裝置相對應(yīng)的指令調(diào)度方法。該指令調(diào)度方法包括指令寫入步驟,用于基于要寫入操作隊(duì)列的譯碼后指令與操作隊(duì)列中的有效指令之間的數(shù)據(jù)相關(guān)性、已經(jīng)寫回和正在寫回至操作隊(duì)列的指令執(zhí)行結(jié)果,來設(shè)置譯碼后指令的各操作數(shù)的狀態(tài),并將設(shè)置后的譯碼后指令作為待寫入指令寫入操作隊(duì)列;操作數(shù)狀態(tài)更新步驟,用于基于操作隊(duì)列中各未發(fā)射指令與指令執(zhí)行結(jié)果正在寫回的指令之間的數(shù)據(jù)相關(guān)性,更新各未發(fā)射指令的操作數(shù)的狀態(tài);待發(fā)射判斷步驟,用于基于各未發(fā)射指令的各操作數(shù)的狀態(tài),判斷操作隊(duì)列中是否存在所有操作數(shù)均已準(zhǔn)備好的待發(fā)射指令;以及指令發(fā)射步驟,用于在保留站有空閑時(shí),將經(jīng)由待發(fā)射判斷步驟所判定的待發(fā)射指令發(fā)射至保留站。 對于上述指令調(diào)度方法,前述針對指令調(diào)度裝置的描述均同樣適用。并且,本
領(lǐng)域技術(shù)人員還應(yīng)能理解實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可通過程序指令相關(guān)
的硬件來完成;所述程序可以存儲于計(jì)算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時(shí)包括上
述方法實(shí)施例中的全部或部分步驟;所述的存儲介質(zhì)包括ROM/RAM (Read Only Memory/
Random-Access Memory,只讀存儲器/隨機(jī)訪問內(nèi)存)、磁碟或光盤等。 下面將參考圖11A 圖111描述根據(jù)本發(fā)明指令調(diào)度方法的指令從譯碼到發(fā)射過
程的一個(gè)應(yīng)用示例,以具體解釋本發(fā)明的技術(shù)原理。 如圖IIA所示譯碼后的指令寫入操作隊(duì)列,操作隊(duì)列具有空閑項(xiàng)。在本例中,譯碼后的指令寫入操作隊(duì)列需要l個(gè)時(shí)鐘周期(l個(gè)cycle);操作隊(duì)列中的指令發(fā)射到保留站中需要l個(gè)時(shí)鐘周期;訪存部件執(zhí)行LW指令需要4個(gè)時(shí)鐘周期;定點(diǎn)功能部件執(zhí)行非乘、除整型指令需要1個(gè)時(shí)鐘周期,執(zhí)行乘、除整型指令需要2個(gè)時(shí)鐘周期,浮點(diǎn)功能部件執(zhí)行浮點(diǎn)指令需要2個(gè)時(shí)鐘周期;提交指令需要1個(gè)時(shí)鐘周期。 1、如圖IIB所示,在第1時(shí)鐘周期的時(shí)鐘上升沿,LW 令寫到操作隊(duì)列的第一項(xiàng)中,其qid號為"000 "(表示操作隊(duì)列的第1項(xiàng))。LW的操作數(shù)是準(zhǔn)備好的,其Rdyl、Rdy2域?yàn)閘。 2、如圖11C所示,在第2時(shí)鐘周期的時(shí)鐘上升沿,LW指令從操作隊(duì)列中發(fā)射到保留站,操作數(shù)的值來自于讀寄存器的值,LW指令所在的操作隊(duì)列項(xiàng)的狀態(tài)由"01"變?yōu)?10"。LW訪存需要4個(gè)時(shí)鐘周期,所以經(jīng)過第2時(shí)鐘周期、第3時(shí)鐘周期、第4時(shí)鐘周期、在第5時(shí)鐘周期的尾端結(jié)果總線送回訪存結(jié)果。同時(shí)在第2時(shí)鐘周期,MUL指令寫入到操作隊(duì)列中。MUL指令的操作數(shù)R1與LW相關(guān)且LW未寫回,所以Rdyl為0, Qidl域?yàn)?000" (LW指令所在的操作隊(duì)列項(xiàng)號),Wbl域?yàn)? ;沒有與操作數(shù)R2相關(guān)的指令,Rdy2為1。在此拍,操作隊(duì)列中只有一條未發(fā)射且操作數(shù)準(zhǔn)備好的指令,沒有定點(diǎn)、浮點(diǎn)指令,此時(shí)雙發(fā)射裝置只能發(fā)射一條有效指令。 3、如圖11D所示,在第3時(shí)鐘周期的時(shí)鐘上升沿,ADD指令寫入到操作隊(duì)列中。ADD的操作數(shù)Rl與LW指令相關(guān)且LW指令未寫回,所以Rdyl為0, Qidl域?yàn)?000 " (LW指令所在的操作隊(duì)列項(xiàng)號),Wbl域?yàn)? ;ADD的操作數(shù)R3與MUL指令相關(guān)且MUL指令未寫回,所以Rdy2為0, Qid2域?yàn)?001 " (ADD1指令所在的操作隊(duì)列項(xiàng)號),Wb2域?yàn)?。在第3時(shí)鐘周期,沒有操作數(shù)準(zhǔn)備好的指令,在第3時(shí)鐘周期沒有指令發(fā)射到保留站中。
4、如圖11E所示,在第4時(shí)鐘周期的時(shí)鐘上升沿,SUB指令寫入到操作隊(duì)列中。在操作隊(duì)列中沒有與SUB指令的操作數(shù)R4、 R5相關(guān)的指令,所以SUB指令所在的操作隊(duì)列項(xiàng)的Rdyl,Rdy2域?yàn)?,該指令是操作數(shù)準(zhǔn)備好的。在第4時(shí)鐘周期,沒有操作數(shù)準(zhǔn)備好的指令,在第4時(shí)鐘周期沒有指令發(fā)射到保留站中。 5、如圖11F所示,在第5時(shí)鐘周期的時(shí)鐘上升沿,F(xiàn)ADD指令寫入到操作隊(duì)列中。在操作隊(duì)列中沒有與FADD指令的操作數(shù)Fr7、 Fr8相關(guān)的指令,所以FADD指令所在的操作隊(duì)列項(xiàng)的Rdyl,Rdy2域?yàn)?,該指令是操作數(shù)準(zhǔn)備好的。在第5時(shí)鐘周期,操作數(shù)準(zhǔn)備好的SUB指令發(fā)射到保留站中,SUB指令所在操作隊(duì)列項(xiàng)的狀態(tài)由"01"變?yōu)?10"。在第5時(shí)鐘周期,結(jié)果總線送回LW訪存指令的結(jié)果。將有效結(jié)果總線的qid值"000"與操作隊(duì)列中的有效指令的Qidl、 Qid2域進(jìn)行比較,得到qid號與MUL指令所在項(xiàng)的Qidl相等,與ADD指令所在項(xiàng)的Qidl相等。MUL指令的Rdy2為l,操作數(shù)2是準(zhǔn)備好的,其值來自于讀寄存器的值Rdyl域和Wbl域?yàn)镺,但是結(jié)果總線送回了 MUL指令的操作數(shù)l,所以MUL指令是準(zhǔn)備好的,在下個(gè)時(shí)鐘周期可以發(fā)射。MUL指令也是操作數(shù)準(zhǔn)備好的,在下個(gè)時(shí)鐘周期也是可以發(fā)射的。在本拍沒有未發(fā)射且操作數(shù)準(zhǔn)備好的訪存指令、浮點(diǎn)指令,只有一條未發(fā)射且操作數(shù)準(zhǔn)備好的整型指令,所以此拍只有一條指令被發(fā)射。 6、如圖11G所示,在第6時(shí)鐘周期的時(shí)鐘上升沿,LW指令結(jié)果寫回,LW指令所在隊(duì)列項(xiàng)的Wb域置為"l"。 MUL, ADD指令的Wbl域相應(yīng)的置為1。 MUL指令從操作隊(duì)列中發(fā)射到保留站中,MUL指令所在的操作隊(duì)列項(xiàng)的狀態(tài)由"01"變?yōu)?10"。 SUB指令結(jié)果寫回,SUB指令所在的隊(duì)列項(xiàng)的Wb域置為"1"。 7、如圖IIH所示,在第7時(shí)鐘周期的時(shí)鐘上升沿,LW指令提交,LW指令所在隊(duì)列項(xiàng)的狀態(tài)由"10"變?yōu)?00"。 MUL,ADD指令的Rdyl域相應(yīng)的置為1。執(zhí)行MUL指令需要兩拍,第7時(shí)鐘周期的尾端,MUL、 FADD指令執(zhí)行結(jié)束,整型結(jié)果總線送回MUL指令的結(jié)果,浮點(diǎn)結(jié)果總線送回FADD指令的結(jié)果。與MUL指令相關(guān)的ADD的操作數(shù)R2準(zhǔn)備好,其值來自于結(jié)果總線返回的結(jié)果。在下個(gè)時(shí)鐘周期的上升沿ADD指令可以被發(fā)射。
8、如圖11I所示,在第8時(shí)鐘周期的時(shí)鐘上升沿,ADD指令發(fā)射到保留站中,其狀 態(tài)由"01"變?yōu)?10",整型結(jié)果總線和浮點(diǎn)結(jié)果總線的值分別寫回到MUL指令、FADD指令所 在的操作隊(duì)列項(xiàng),MUL、FADD指令所在的操作隊(duì)列項(xiàng)的Wb域置分別為1。 ADD指令發(fā)射到保 留站中,ADD指令所在操作隊(duì)列項(xiàng)的狀態(tài)域由"01"變?yōu)?10"。在第8時(shí)鐘周期的尾端,結(jié) 果總線送回ADD指令的結(jié)果。 9、在第9時(shí)鐘周期的時(shí)鐘上升沿,MUL指令提交,MUL指令所在隊(duì)列項(xiàng)的狀態(tài)由 "10"變?yōu)?00"。結(jié)果總線送回的ADD指令的結(jié)果寫入操作隊(duì)列中,ADD指令所在的操作隊(duì) 列項(xiàng)的Wb域置為1。在后續(xù)的時(shí)鐘周期里,ADD, SUB、 FADD指令也將相繼提交。
需要聲明的是,上述發(fā)明內(nèi)容及具體實(shí)施方式
僅旨在證明本發(fā)明所提供技術(shù)方案 的實(shí)際應(yīng)用,不應(yīng)解釋為對本發(fā)明保護(hù)范圍的限定。本領(lǐng)域技術(shù)人員在本發(fā)明的精神和原 理內(nèi),當(dāng)可作各種修改、等同替換、或改進(jìn)。本發(fā)明的保護(hù)范圍以所附權(quán)利要求書為準(zhǔn)。
權(quán)利要求
一種指令調(diào)度裝置,用于對微處理器中從操作隊(duì)列向保留站發(fā)射指令進(jìn)行動態(tài)調(diào)度,其特征在于,包括指令寫入器,用于基于要寫入所述操作隊(duì)列的譯碼后指令與所述操作隊(duì)列中的有效指令之間的數(shù)據(jù)相關(guān)性、已經(jīng)寫回和正在寫回至所述操作隊(duì)列的指令執(zhí)行結(jié)果,來設(shè)置所述譯碼后指令的各操作數(shù)的狀態(tài),并將設(shè)置后的所述譯碼后指令作為待寫入指令寫入所述操作隊(duì)列;操作數(shù)狀態(tài)更新器,用于基于所述操作隊(duì)列中各未發(fā)射指令與指令執(zhí)行結(jié)果正在寫回的指令之間的數(shù)據(jù)相關(guān)性,更新各所述未發(fā)射指令的操作數(shù)的狀態(tài);待發(fā)射判斷器,用于基于各所述未發(fā)射指令的各操作數(shù)的狀態(tài),判斷所述操作隊(duì)列中是否存在所有操作數(shù)均已準(zhǔn)備好的待發(fā)射指令;以及指令發(fā)射器,用于在所述保留站有空閑時(shí),將經(jīng)由所述待發(fā)射判斷器所判定的待發(fā)射指令發(fā)射至所述保留站。
2. 根據(jù)權(quán)利要求1所述的指令調(diào)度裝置,其特征在于,所述指令寫入器和所述操作數(shù) 狀態(tài)更新器通過偵聽結(jié)果總線來確定指令執(zhí)行結(jié)果以及指令執(zhí)行結(jié)果正在寫回的指令的 操作隊(duì)列項(xiàng)號,并根據(jù)所述操作隊(duì)列項(xiàng)號將所述指令執(zhí)行結(jié)果寫回到所述操作隊(duì)列中所述 指令所在的操作隊(duì)列項(xiàng)內(nèi)。
3. 根據(jù)權(quán)利要求2所述的指令調(diào)度裝置,其特征在于,所述指令寫入器包括 第一判斷器,用于將所述譯碼后指令的操作數(shù)的源寄存器與所述操作隊(duì)列中各有效指令的指令執(zhí)行結(jié)果的目的寄存器進(jìn)行比較,以判斷所述操作隊(duì)列中是否存在目的寄存器與 所述譯碼后指令的所述操作數(shù)的源寄存器為同一寄存器的有效指令;第一設(shè)置器,用于在經(jīng)由所述第一判斷器判定所述操作隊(duì)列中不存在目的寄存器與所 述譯碼后指令的所述操作數(shù)的源寄存器為同一寄存器的有效指令時(shí),將所述譯碼后指令的 所述操作數(shù)的狀態(tài)設(shè)置為已準(zhǔn)備好;相關(guān)指令確定器,用于在經(jīng)由所述第一判斷器判定所述操作隊(duì)列中存在目的寄存器與 所述譯碼后指令的所述操作數(shù)的源寄存器為同一寄存器的有效指令時(shí),將目的寄存器與所 述譯碼后指令的所述操作數(shù)的源寄存器為同一寄存器的全部有效指令中距離所述譯碼后 指令最近的有效指令確定為所述譯碼后指令的所述操作數(shù)的相關(guān)指令;第二判斷器,用于判斷所述相關(guān)指令的指令執(zhí)行結(jié)果是否已經(jīng)寫回或正在寫回;以及第二設(shè)置器,用于在經(jīng)由所述第二判斷器判定所述相關(guān)指令的指令執(zhí)行結(jié)果已經(jīng)寫回 或正在寫回時(shí),將所述譯碼后指令的所述操作數(shù)的狀態(tài)設(shè)置為已準(zhǔn)備好。
4. 根據(jù)權(quán)利要求3所述的指令調(diào)度裝置,其特征在于,所述操作數(shù)狀態(tài)更新器包括 第三判斷器,用于判斷指令執(zhí)行結(jié)果正在寫回的指令是否為所述未發(fā)射指令的操作數(shù)的相關(guān)指令;以及第三設(shè)置器,用于在經(jīng)由所述第三判斷器判定指令執(zhí)行結(jié)果正在寫回的指令是所述未 發(fā)射指令的所述操作數(shù)的相關(guān)指令時(shí),將所述未發(fā)射指令的所述操作數(shù)的狀態(tài)設(shè)置為已準(zhǔn) 備好。
5. 根據(jù)權(quán)利要求1 4中任一項(xiàng)所述的指令調(diào)度裝置,其特征在于,所述指令發(fā)射器根 據(jù)所述微處理器的寬度選擇單發(fā)射策略或多發(fā)射策略來進(jìn)行所述待發(fā)射指令的發(fā)射。
6. 根據(jù)權(quán)利要求5所述的指令調(diào)度裝置,其特征在于,當(dāng)選擇所述單發(fā)射策略時(shí),所述指令發(fā)射器按照時(shí)間順序或者優(yōu)先級來進(jìn)行所述待發(fā)射指令的發(fā)射。
7. 根據(jù)權(quán)利要求5所述的指令調(diào)度裝置,其特征在于還包括用于根據(jù)操作類型對所 述操作隊(duì)列中的指令進(jìn)行分類的指令分類器;并且所述保留站包括分別與各所述操作類型相對應(yīng)的子保留站;其中,當(dāng)選擇所述多發(fā)射策略時(shí),所述指令發(fā)射器基于所述指令分類器的分類結(jié)果,在 與所述待發(fā)射指令的操作類型相對應(yīng)的子保留站有空閑時(shí),將所述待發(fā)射指令發(fā)射至與所 屬操作類型相對應(yīng)的子保留站。
8. —種指令調(diào)度方法,用于對微處理器中從操作隊(duì)列向保留站發(fā)射指令進(jìn)行動態(tài)調(diào) 度,其特征在于,包括指令寫入步驟,用于基于要寫入所述操作隊(duì)列的譯碼后指令與所述操作隊(duì)列中的有效 指令之間的數(shù)據(jù)相關(guān)性、已經(jīng)寫回和正在寫回至所述操作隊(duì)列的指令執(zhí)行結(jié)果,來設(shè)置所 述譯碼后指令的各操作數(shù)的狀態(tài),并將設(shè)置后的所述譯碼后指令作為待寫入指令寫入所述 操作隊(duì)列;操作數(shù)狀態(tài)更新步驟,用于基于所述操作隊(duì)列中各未發(fā)射指令與指令執(zhí)行結(jié)果正在寫 回的指令之間的數(shù)據(jù)相關(guān)性,更新各所述未發(fā)射指令的操作數(shù)的狀態(tài);待發(fā)射判斷步驟,用于基于各所述未發(fā)射指令的各操作數(shù)的狀態(tài),判斷所述操作隊(duì)列 中是否存在所有操作數(shù)均已準(zhǔn)備好的待發(fā)射指令;以及指令發(fā)射步驟,用于在所述保留站有空閑時(shí),將經(jīng)由所述待發(fā)射判斷步驟所判定的待 發(fā)射指令發(fā)射至所述保留站。
9. 根據(jù)權(quán)利要求8所述的指令調(diào)度裝置,其特征在于,在所述指令寫入步驟和所述操 作數(shù)狀態(tài)更新步驟中,通過偵聽結(jié)果總線來確定指令執(zhí)行結(jié)果以及指令執(zhí)行結(jié)果正在寫回 的指令的操作隊(duì)列項(xiàng)號,并根據(jù)所述操作隊(duì)列項(xiàng)號將所述指令執(zhí)行結(jié)果寫回到所述操作隊(duì) 列中所述指令所在的操作隊(duì)列項(xiàng)內(nèi)。
10. 根據(jù)權(quán)利要求9所述的指令調(diào)度裝置,其特征在于,所述指令寫入步驟包括 第一判斷步驟,用于將所述譯碼后指令的操作數(shù)的源寄存器與所述操作隊(duì)列中各有效指令的指令執(zhí)行結(jié)果的目的寄存器進(jìn)行比較,以判斷所述操作隊(duì)列中是否存在目的寄存器 與所述譯碼后指令的所述操作數(shù)的源寄存器為同一寄存器的有效指令;第一設(shè)置步驟,用于在經(jīng)由所述第一判斷步驟判定所述操作隊(duì)列中不存在目的寄存器 與所述譯碼后指令的所述操作數(shù)的源寄存器為同一寄存器的有效指令時(shí),將所述譯碼后指 令的所述操作數(shù)的狀態(tài)設(shè)置為已準(zhǔn)備好;相關(guān)指令確定步驟,用于在經(jīng)由所述第一判斷步驟判定所述操作隊(duì)列中存在目的寄存 器與所述譯碼后指令的所述操作數(shù)的源寄存器為同一寄存器的有效指令時(shí),將目的寄存器 與所述譯碼后指令的所述操作數(shù)的源寄存器為同一寄存器的全部有效指令中距離所述譯 碼后指令最近的有效指令確定為所述譯碼后指令的所述操作數(shù)的相關(guān)指令;第二判斷步驟,用于判斷所述相關(guān)指令的指令執(zhí)行結(jié)果是否已經(jīng)寫回或正在寫回;以及第二設(shè)置步驟,用于在經(jīng)由所述第二判斷步驟判定所述相關(guān)指令的指令執(zhí)行結(jié)果已經(jīng) 寫回或正在寫回時(shí),將所述譯碼后指令的所述操作數(shù)的狀態(tài)設(shè)置為已準(zhǔn)備好。
11. 根據(jù)權(quán)利要求io所述的指令調(diào)度裝置,其特征在于,所述操作數(shù)狀態(tài)更新步驟包括第三判斷步驟,用于判斷指令執(zhí)行結(jié)果正在寫回的指令是否為所述未發(fā)射指令的操作 數(shù)的相關(guān)指令;以及第三設(shè)置步驟,用于在經(jīng)由所述第三判斷步驟判定指令執(zhí)行結(jié)果正在寫回的指令是所 述未發(fā)射指令的所述操作數(shù)的相關(guān)指令時(shí),將所述未發(fā)射指令的所述操作數(shù)的狀態(tài)設(shè)置為 已準(zhǔn)備好。
12. 根據(jù)權(quán)利要求8 11中任一項(xiàng)所述的指令調(diào)度裝置,其特征在于,在所述指令發(fā)射 步驟中,根據(jù)所述微處理器的寬度選擇單發(fā)射策略或多發(fā)射策略來進(jìn)行所述待發(fā)射指令的 發(fā)射。
13. 根據(jù)權(quán)利要求12所述的指令調(diào)度裝置,其特征在于,當(dāng)選擇所述單發(fā)射策略時(shí),在 所述指令發(fā)射步驟中按照時(shí)間順序或者優(yōu)先級來進(jìn)行所述待發(fā)射指令的發(fā)射。
14. 根據(jù)權(quán)利要求12所述的指令調(diào)度裝置,其特征在于還包括用于根據(jù)操作類型對所述操作隊(duì)列中的指令進(jìn)行分類的指令分類步驟;并且 所述保留站包括分別與各所述操作類型相對應(yīng)的子保留站;其中,當(dāng)選擇所述多發(fā)射策略時(shí),在所述指令發(fā)射步驟中基于所述指令分類步驟的分 類結(jié)果,在與所述待發(fā)射指令的操作類型相對應(yīng)的子保留站有空閑時(shí),將所述待發(fā)射指令 發(fā)射至與所屬操作類型相對應(yīng)的子保留站。
全文摘要
對微處理器中從操作隊(duì)列向保留站發(fā)射指令進(jìn)行動態(tài)調(diào)度的裝置和方法,包括指令寫入步驟,基于要寫入操作隊(duì)列的譯碼后指令與操作隊(duì)列中的有效指令之間的數(shù)據(jù)相關(guān)性、已經(jīng)寫回和正在寫回的指令執(zhí)行結(jié)果,設(shè)置譯碼后指令的各操作數(shù)的狀態(tài)后將其寫入;操作數(shù)狀態(tài)更新步驟,基于操作隊(duì)列中各未發(fā)射指令與指令執(zhí)行結(jié)果正在寫回的指令之間的數(shù)據(jù)相關(guān)性,更新各未發(fā)射指令的操作數(shù)的狀態(tài);待發(fā)射判斷步驟,基于各未發(fā)射指令的各操作數(shù)的狀態(tài),判斷是否存在所有操作數(shù)均已準(zhǔn)備好的待發(fā)射指令;以及指令發(fā)射步驟,在保留站有空閑時(shí),將所判定的待發(fā)射指令發(fā)射至保留站。通過基于指令之間的數(shù)據(jù)相關(guān)性來實(shí)現(xiàn)操作數(shù)已準(zhǔn)備好的指令發(fā)射到保留站,能夠有效提高流水線效率。
文檔編號G06F9/38GK101710272SQ20091023669
公開日2010年5月19日 申請日期2009年10月28日 優(yōu)先權(quán)日2009年10月28日
發(fā)明者徐翠萍, 李祖松, 汪文祥, 郝守青 申請人:北京龍芯中科技術(shù)服務(wù)中心有限公司