專利名稱:一種多周期指令執(zhí)行方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)字處理設(shè)備,電子設(shè)備及處理系統(tǒng)技術(shù)領(lǐng)域,特別涉及一種多周期 指令執(zhí)行方法和裝置。
背景技術(shù):
微處理器是一個(gè)集成在一片上的半導(dǎo)體集成電路,包括對(duì)一系列算術(shù)邏輯操作的 控制和執(zhí)行。設(shè)計(jì)處理器的基本任務(wù)之一是要縮短解釋指令的時(shí)間,即提高處理機(jī)指令執(zhí) 行的速度。通常提高指令執(zhí)行速度的途徑有如下三種1、提高處理機(jī)的工作主頻;2、采用更好的算法和設(shè)計(jì)更好的功能部件;3、多條指令并行執(zhí)行,稱為指令級(jí)并行技術(shù)。最近兩年,處理器的更高性能由于不能從傳統(tǒng)結(jié)構(gòu)中得到解決,因此提出了各種 提高性能的策略。其中提高時(shí)鐘頻率和功能單元性能似乎是有限的,最好的方法是提高并 行性,當(dāng)前高性能處理器結(jié)構(gòu)的主要特點(diǎn)就是采用了各種并行處理技術(shù)。提高操作并行性, 有兩個(gè)途徑實(shí)現(xiàn)提高每條指令執(zhí)行的操作的數(shù)量,或者是提高每個(gè)指令周期中執(zhí)行指令 的數(shù)量。提高執(zhí)行指令數(shù)量的方法有兩種超標(biāo)量和超長(zhǎng)指令字(VLIW)。VLIW體系結(jié)構(gòu)微處理器通過(guò)優(yōu)化編譯器靜態(tài)地將可并行執(zhí)行的操作安排在一個(gè) 超長(zhǎng)指令字中的各個(gè)指令段上。一條長(zhǎng)指令包含多個(gè)可以并行操作指令,每一個(gè)基本指令 由相應(yīng)的硬件完成操作,一個(gè)時(shí)鐘周期內(nèi)能執(zhí)行多個(gè)簡(jiǎn)單指令。對(duì)于一個(gè)特定的VLIW結(jié)構(gòu),取指令字和指令分發(fā)可以是一級(jí)或多級(jí)流水,每條指 令進(jìn)入功能單元前經(jīng)過(guò)的流水線是相同,進(jìn)入功能單元后,不同指令的執(zhí)行周期數(shù)不同,流 水線級(jí)數(shù)不同。VLIW微處理器以其硬件控制簡(jiǎn)單和具有開(kāi)發(fā)指令級(jí)并行性的巨大潛力而著稱,這 種潛力是以資源的重復(fù)和指令的靜態(tài)調(diào)度作為代價(jià)的。為了使VLIW指令并行性效率最大 化,編譯器必須發(fā)現(xiàn)足夠的可填充的指令代碼,為了避免出現(xiàn)數(shù)據(jù)相關(guān)的問(wèn)題,編譯器必須 確定當(dāng)前硬件結(jié)構(gòu)下的指令執(zhí)行周期數(shù)以完成調(diào)度。因此當(dāng)硬件升級(jí)時(shí),指令執(zhí)行周期數(shù) 可能發(fā)生改變,舊版本的二進(jìn)制碼在新硬件上有可能執(zhí)行錯(cuò)誤。針對(duì)單一功能單元的流水 線有執(zhí)行周期數(shù)變長(zhǎng)和執(zhí)行周期數(shù)變短兩種情況。因此在不采取任何措施的情況下,當(dāng)執(zhí) 行周期數(shù)發(fā)生變化時(shí),指令執(zhí)行后的結(jié)果會(huì)發(fā)生改變,產(chǎn)生錯(cuò)誤結(jié)果。
發(fā)明內(nèi)容
本發(fā)明旨在至少解決上述技術(shù)問(wèn)題之一,特別是解決在硬件發(fā)生變化和指令執(zhí)行 周期改變所帶來(lái)的二進(jìn)制碼兼容問(wèn)題。為達(dá)到上述目的,本發(fā)明一方面提出了一種多周期指令執(zhí)行方法,其中,在開(kāi)啟二 進(jìn)制兼容模式下執(zhí)行所述多周期指令執(zhí)行方法,所述多周期指令執(zhí)行方法包括以下步驟: 對(duì)指令碼進(jìn)行初始化且保存完成初始化的指令信息;根據(jù)所有完成初始化的有效指令信息判決下一條進(jìn)入流水線的指令為正常流水線指令或者空泡指令且產(chǎn)生指示信號(hào);根據(jù)所述 指令信息判斷是否對(duì)執(zhí)行結(jié)果進(jìn)行緩存、直接寄存或者緩存寫(xiě)入寄存器,且為后續(xù)進(jìn)入流 水線的指令提供所述執(zhí)行結(jié)果;根據(jù)所述指示信號(hào)和所述執(zhí)行結(jié)果對(duì)所述指令信息進(jìn)行判 斷以更新所述指令信息。在本發(fā)明的一個(gè)實(shí)施例中,所述指令信息重點(diǎn)包括current 當(dāng)前硬件版本允許 跟隨的指令數(shù),其值等于所述當(dāng)前硬件版本指令執(zhí)行周期數(shù)減1 ;previous 之前硬件版本 允許跟隨的指令數(shù),其值等于所述之前硬件版本指令執(zhí)行周期數(shù)減1 ;exist 實(shí)際跟隨所 述指令的指令數(shù);valid 實(shí)際跟隨所述指令并且有效的指令數(shù),為跟隨在當(dāng)前指令后的所 述正常流水線指令的數(shù)量;和信息標(biāo)志位。在本發(fā)明的一個(gè)實(shí)施例中,所述指令碼在進(jìn)入譯碼階段后開(kāi)始初始化以置所述指 令碼的exist = 0,valid = 0,獲取所述指令碼的current和previous的值,及相關(guān)控制 位信號(hào)。在本發(fā)明的一個(gè)實(shí)施例中,根據(jù)所有完成初始化的有效指令信息判決下一條進(jìn)入 流水線的指令為正常流水線指令或者空泡指令包括向所述流水線發(fā)送指令選擇信號(hào),所 述指令選擇信號(hào)用于控制進(jìn)入譯碼級(jí)的指令為正常指令或是空泡指令;在所述指令選擇信 號(hào)控制進(jìn)入譯碼級(jí)的指令為空泡指令時(shí)向所述流水線的前置流水線發(fā)送停止一個(gè)執(zhí)行周 期的信號(hào);為更新所述指令信息提供所述流水線加入正常指令或是空泡指令的指示信號(hào); 當(dāng)所述指示信號(hào)為所述空泡指令的指示信號(hào)時(shí)為所述指令信息的更新提供所述指令信息 的信息單元號(hào)以更新所述指令信息。在本發(fā)明的一個(gè)實(shí)施例中,所述指令信息加入空泡指令的條件為current > previous ;exist > = previous ;exist < current ;current-previous-(exist-valid) > 0o在本發(fā)明的一個(gè)實(shí)施例中,所述指令信息的更新包括讀取所有指令信息的單元 信息有效位為1的所有信息單元的值;判斷每一個(gè)所述信息單元的exist和current以依 據(jù)判斷結(jié)果和所述指示信號(hào)和所述執(zhí)行結(jié)果來(lái)更新所述指令信息。在本發(fā)明的一個(gè)實(shí)施例中,根據(jù)所述有效指令信息的previous、current、exist 和valid的值進(jìn)行判斷以依據(jù)判斷結(jié)果對(duì)所述執(zhí)行結(jié)果進(jìn)行緩存、直接寄存或者緩存寫(xiě)入 寄存器。在本發(fā)明的另一方面還提出了一種多周期指令執(zhí)行裝置,包括指令信息解碼模 塊,用于對(duì)指令碼進(jìn)行初始化;指令信息存儲(chǔ)模塊,用于保存完成初始化的指令信息;流水 線控制模塊,用于根據(jù)所有完成初始化的有效指令信息判決下一條進(jìn)入流水線的指令為正 常流水線指令或者空泡指令且產(chǎn)生指示信號(hào);緩存控制模塊,所述緩存控制模塊根據(jù)所述 指令信息判斷是否對(duì)執(zhí)行結(jié)果進(jìn)行緩存、直接寄存或者緩存寫(xiě)入寄存器,且為后續(xù)進(jìn)入流 水線的指令提供所述執(zhí)行結(jié)果;和指令信息更新模塊,所述指令信息更新模塊根據(jù)所述指 示信號(hào)和所述執(zhí)行結(jié)果對(duì)所述指令信息進(jìn)行判斷以更新所述指令信息。在本發(fā)明的一個(gè)實(shí)施例中,所述流水線控制子模塊首先向所述流水線發(fā)送指令選 擇信號(hào),所述指令選擇信號(hào)用于控制進(jìn)入譯碼級(jí)的指令為正常指令或是空泡指令;其次在 所述指令選擇信號(hào)控制進(jìn)入譯碼級(jí)的指令為空泡指令時(shí)向所述流水線的前置流水線發(fā)送 停止一個(gè)執(zhí)行周期的信號(hào);然后為所述指令信息的更新提供所述流水線加入正常指令或是空泡指令的指示信號(hào);最后當(dāng)所述指示信號(hào)為所述空泡指令的指示信號(hào)時(shí)為所述指令信息 的更新提供所述指令信息的信息單元號(hào)以更新所述指令信息。在本發(fā)明的一個(gè)實(shí)施例中,所述指令選擇信號(hào)用于控制進(jìn)入譯碼級(jí)的指令為 空泡才h 令的條件為current > previous ;exist > = previous ;exist < current ; current-previous-(exist-valid) > 0。在本發(fā)明的一個(gè)實(shí)施例中,所述指令信息更新模塊首先讀取所有指令信息的單元 信息有效位為1的所有信息單元的值;然后判斷每一個(gè)所述信息單元的exist和current 以依據(jù)判斷結(jié)果和所述指示信號(hào)和所述執(zhí)行結(jié)果來(lái)更新所述指令信息;最后把更新完成的 所述指令信息保存到指令信息存儲(chǔ)模塊中。在本發(fā)明的一個(gè)實(shí)施例中,所述緩存控制模塊根據(jù)所述有效指令信息的 previous, current, exist和valid的值進(jìn)行判斷以依據(jù)判斷結(jié)果對(duì)所述執(zhí)行結(jié)果進(jìn)行緩 存、直接寄存或者緩存寫(xiě)入寄存器。根據(jù)本發(fā)明實(shí)施例的多周期指令執(zhí)行方法,保證了指令間的數(shù)據(jù)關(guān)系的正確性, 從而確保了在新硬件環(huán)境下同樣能夠正確執(zhí)行舊版本硬件環(huán)境下的指令二進(jìn)制碼,進(jìn)一步 解決了由于硬件升級(jí)帶來(lái)的指令周期數(shù)改變的二進(jìn)制碼兼容問(wèn)題,保證了后續(xù)指令執(zhí)行結(jié) 果的正確性。本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變 得明顯,或通過(guò)本發(fā)明的實(shí)踐了解到。
本發(fā)明上述的和/或附加的方面和優(yōu)點(diǎn)從下面結(jié)合附圖對(duì)實(shí)施例的描述中將變 得明顯和容易理解,其中圖1為本發(fā)明實(shí)施例的超長(zhǎng)指令字(VLIW)架構(gòu)的流水線示意圖;圖2為本發(fā)明實(shí)施例的多周期指令執(zhí)行方法流程圖;圖3為本發(fā)明實(shí)施例的多周期指令執(zhí)行方法示意圖;圖4為本發(fā)明實(shí)施例的多周期指令執(zhí)行方法與流水線的連接示意圖;圖5為本發(fā)明實(shí)施例的多周期指令執(zhí)行裝置結(jié)構(gòu)圖。
具體實(shí)施例方式下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終 相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過(guò)參考附 圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能解釋為對(duì)本發(fā)明的限制。本發(fā)明通過(guò)引入二進(jìn)制碼執(zhí)行模式的概念和相應(yīng)的多周期指令執(zhí)行方法,保證了 指令間的數(shù)據(jù)關(guān)系的正確性,從而確保了在新硬件環(huán)境下同樣能夠正確執(zhí)行舊版本硬件環(huán) 境下的指令二進(jìn)制碼,進(jìn)一步解決了由于硬件升級(jí)帶來(lái)的指令周期數(shù)改變的二進(jìn)制碼兼容 問(wèn)題,保證了后續(xù)指令執(zhí)行結(jié)果的正確性。本發(fā)明是針對(duì)由于硬件環(huán)境改變所造成的指令 執(zhí)行結(jié)果不一致,而提出的一種多周期指令執(zhí)行方法,該方法能夠通過(guò)在流水線上插入空 泡指令和緩存指令執(zhí)行結(jié)果兩種方式保證流水線上后續(xù)指令在新舊版本硬件環(huán)境下執(zhí)行 的一致性,從而保證了在指令執(zhí)行周期發(fā)生變化后執(zhí)行指令的正確性。
下面參考附圖描述根據(jù)本發(fā)明實(shí)施例的多周期指令執(zhí)行方法。為了能對(duì)本發(fā)明的實(shí)施例有更清楚的認(rèn)識(shí),本發(fā)明提出的多周期指令執(zhí)行方法是 針對(duì)超長(zhǎng)指令字(VLIW)架構(gòu)的流水線實(shí)施的,所以,以下就對(duì)本發(fā)明實(shí)施例提出的超長(zhǎng)指 令字(VLIW)架構(gòu)的流水線做簡(jiǎn)單介紹,如圖1所示,為本發(fā)明實(shí)施例的超長(zhǎng)指令字(VLIW) 架構(gòu)的流水線示意圖,從圖1中可以明顯看出,一條超長(zhǎng)指令字(圖中為取指令字階段)包 含多個(gè)可以并行操作的指令,每一個(gè)基本指令由相應(yīng)功能單元完成操作。對(duì)于本實(shí)施例提 出的VLIW架構(gòu),取指令字和指令分發(fā)可以是一級(jí)或多級(jí)流水,而每條基本指令進(jìn)入功能單 元前經(jīng)過(guò)的流水線是相同的,然而在基本指令進(jìn)入功能單元后,不同的基本指令的執(zhí)行周 期數(shù)不盡相同,所以流水線級(jí)數(shù)也不同。如圖2所示,為本發(fā)明實(shí)施例的多周期指令執(zhí)行方法流程圖,同時(shí)參考圖3、圖4來(lái) 看。該多周期指令執(zhí)行方法包括以下步驟步驟S101,對(duì)指令碼進(jìn)行初始化且保存完成初始化的指令信息。具體地,所述指 令碼為基本指令的二進(jìn)制碼,且來(lái)自功能單元譯碼級(jí)之前的流水線寄存器,從圖4中能夠 明顯看到功能單元譯碼級(jí)之前的流水線寄存器。在圖3中能夠看出,指令碼在指令信息 解碼模塊中進(jìn)行初始化,并且把初始化完成的指令信息存儲(chǔ)到指令信息存儲(chǔ)模塊中,該指 令信息由9個(gè)值組成,分別為單元信息有效位、指令信息有效位、舊版允許尾隨指令數(shù) previous、新版允許尾隨指令數(shù)current、實(shí)際尾隨指令數(shù)eXist、實(shí)際尾隨并且有效的 指令數(shù)vaild,其中vaild為尾隨在當(dāng)前指令后的所述正常流水線指令的數(shù)量,如果尾隨 的指令是其他指令要求加入的空泡指令,則不計(jì)入vaild的值,在本發(fā)明的實(shí)施例中,空泡 指令為nop指令、當(dāng)然,也可以用其他形式的指令代替nop指令,寫(xiě)入緩存指示位、被緩存的 寄存器號(hào)、緩存的數(shù)據(jù)。其中,把單元信息有效位和指令信息有效位初始化置1,通過(guò)實(shí)際處 理器的指令譯碼得到current和previous的實(shí)際值,把exist和vaild的值置0,寫(xiě)入緩存 指示位置0,被緩存的寄存器號(hào)和緩存的數(shù)據(jù)置無(wú)效,完成本次指令信息初始化。步驟S102,根據(jù)所有完成初始化的有效指令信息判決下一條進(jìn)入流水線的指令為 正常流水線指令或者空泡指令且產(chǎn)生指示信號(hào)。具體地,同時(shí)參考圖3,流水線控制模塊通 過(guò)比較所述指令信息的值判決下一條進(jìn)入流水線的指令為正常流水線指令或者空泡指令, 更具體地,同時(shí)參考圖4,只有當(dāng)所述指令信息的值滿足條件current > previous ;exist > = previous ;exist < current ;current-previous-(exist-valid) > 0。該流水線控制模塊發(fā)送指令選擇信號(hào)到流水線以控制下一條進(jìn)入流水線的指令 為nop指令,同時(shí)發(fā)送流水線stall信號(hào)到流水線中用于停止相應(yīng)的流水線一個(gè)執(zhí)行周期, 需要注意的是該流水線stall信號(hào)在指令進(jìn)入流水線譯碼級(jí)之前完成。相反的,如果所述 指令信息不滿足條件時(shí),控制進(jìn)入流水線的指令為正常流水線指令。在本發(fā)明的一個(gè)實(shí)施 例中,參考圖3和圖4,流水線控制模塊還用于在每個(gè)執(zhí)行周期過(guò)程中發(fā)送指示信號(hào)給指令 信息更新模塊,該指令信息更新模塊根據(jù)指示信號(hào)更新當(dāng)前執(zhí)行周期中的指令信息的值, 為下一個(gè)執(zhí)行周期中流水線控制模塊和緩存控制模塊提供正確指令信息的值,以便對(duì)指令 做出相應(yīng)的操作。
步驟S103,根據(jù)所述指令信息判斷是否對(duì)執(zhí)行結(jié)果進(jìn)行緩存、直接寄存或者緩存 寫(xiě)入寄存器,且為后續(xù)進(jìn)入流水線的指令提供所述執(zhí)行結(jié)果。具體地,參考圖3,在本發(fā)明的 一個(gè)實(shí)施例中,首先比較該指令信息的exist與current的值,只有當(dāng)exist = current時(shí), 該緩存控制模塊從流水線得到該指令的執(zhí)行結(jié)果和執(zhí)行結(jié)果寄存器號(hào),當(dāng)指令信息滿足條 件寫(xiě)入緩存指示位1;exist = current ;previous_current+(exist-valid) > 0。把執(zhí)行結(jié)果和結(jié)果寄存器號(hào)存儲(chǔ)到指令信息存儲(chǔ)模塊中,當(dāng)后續(xù)指令需要所述執(zhí) 行結(jié)果的時(shí)候再把該執(zhí)行結(jié)果從指令信息存儲(chǔ)模塊轉(zhuǎn)移到流水線寄存器中供后續(xù)指令使用。在本發(fā)明的一個(gè)實(shí)施例中,當(dāng)滿足條件exist = current ;previous_current+(exist-valid) = 0 ;寫(xiě)入緩存指示位0。該緩存控制模塊直接把從流水線獲取的指令執(zhí)行結(jié)果存儲(chǔ)到流水線寄存器中供 后續(xù)指令使用。同時(shí),緩存控制模塊把執(zhí)行結(jié)果發(fā)送給信息更新模塊,信息更新模塊根據(jù)該執(zhí)行 結(jié)果更新當(dāng)前執(zhí)行周期中的指令信息的值。步驟S104,根據(jù)所述指示信號(hào)和所述執(zhí)行結(jié)果對(duì)所述指令信息進(jìn)行判斷以更新所 述指令信息。具體地,從圖3中能夠看出,在本發(fā)明的一個(gè)實(shí)施例中,該指令信息更新模塊 獲取流水線控制模塊發(fā)送的指示信號(hào)和緩存控制模塊發(fā)送的執(zhí)行結(jié)果,比較每個(gè)信息單元 的exist和current的值,當(dāng)其滿足下列條件時(shí)
exist < current單元信息有效位維持 指令信息有效位維持 current 維持 previous 維持 exist 加 1 vaild 根據(jù)“流水線指示 信號(hào)”和“信息單元號(hào)”的 值,判決是加1還是維持 寫(xiě)入緩存指示位維持 被緩存的寄存器號(hào)維持 緩存的數(shù)據(jù)維持根據(jù)上述條件更新指令信息,從而更新每個(gè)執(zhí)行周期中指令信息存儲(chǔ)模塊中的相 應(yīng)的指令信息的值,并把更新完畢的指令信息提供給流水線控制模塊和緩存控制模塊供下 一個(gè)執(zhí)行周期使用。為了對(duì)本發(fā)明實(shí)施例有更為深刻的理解,以下就具體舉例的方式對(duì)本發(fā)明進(jìn)行詳 細(xì)的描述。同時(shí)參考圖3、和圖4,在本發(fā)明的一個(gè)實(shí)施例中以指令進(jìn)入流水線譯碼級(jí)電路 后開(kāi)始說(shuō)明,在該例子中,指令序列包括指令 0 :current = 0,previous = 0,一條單周期指令;指令 A, current = 2, previous = 1 ;指令 B,current = 3,previous = 3。當(dāng)指令周期數(shù)變長(zhǎng),指令序列00A(右邊的指令先進(jìn)流水線譯碼,A首先進(jìn)入流水 線進(jìn)行譯碼)在舊版本執(zhí)行時(shí)第二個(gè)指令0讀取的是A的執(zhí)行結(jié)果,而在新版本中采用本 發(fā)明的提出的多周期指令執(zhí)行方法保證了執(zhí)行結(jié)果的正確性,以下就上述指令說(shuō)明該方法 的具體實(shí)施過(guò)程。
9
周期數(shù)1 流水線控制模塊正常流水;緩存控制模塊無(wú)操作;信息存儲(chǔ)模塊對(duì)指令A(yù)的信息初始化包括單元信息有效位置1,指令信息有效位 置1,current置2,previous置1,exist置0,vaild置0,持寫(xiě)入緩存指示位置0,被緩存 的寄存器號(hào)置無(wú)效,緩存的數(shù)據(jù)置無(wú)效。周期數(shù)2 流水線控制模塊讀取A的信息,由于exist < previous,不滿足加nop條件,所 以正常流水;緩存控制模塊由于exist不等于previous,所以無(wú)操作;信息存儲(chǔ)模塊指令A(yù)的信息eXist < current,正常流水,單元信息有效位1, 指令信息有效位置l,current置2,previouS置l,exist置l,vaild置1,持寫(xiě)入緩存指示 位置0,被緩存的寄存器號(hào)置無(wú)效,緩存的數(shù)據(jù)置無(wú)效;對(duì)第一個(gè)0的信息初始化包括單元信息有效位置1,指令信息有效位置1,current 置0,previous置0,exist置0,vaild置0,寫(xiě)入緩存指示位置0,被緩存的寄存器號(hào)置無(wú) 效,緩存的數(shù)據(jù)置無(wú)效。周期數(shù)3 流水線控制模塊讀取A的信息,由于exist等于previous滿足加nop條件,所以 加nop指令。讀取第一個(gè)0的信息,由于exist = previous,不滿足加nop條件,所以正常 流水;緩存控制模塊讀取A的信息,由于exist < current,所以無(wú)操作;讀取第一個(gè) 0 的信息,判斷 exist = current,previous_current+(exist-valid) =0寫(xiě)入緩存指示位0,滿足直接寫(xiě)寄存器;信息存儲(chǔ)模塊指令A(yù)的信息eXist < current,自己要求加nop,單元信息有效 位置1,指令信息有效位置1,current置2,previous置1,exist置2,vaild置2,持寫(xiě)入 緩存指示位置0,被緩存的寄存器號(hào)置無(wú)效,緩存的數(shù)據(jù)置無(wú)效;第一個(gè)0的信息由于exist = current,所以信息置無(wú)效。周期數(shù)4 流水線控制模塊讀取A的信息,由于exist大于previous,不滿足加nop條件, 所以正常流水;緩存控制模塊讀取A的信息,exist = current, previous-current+(exist-valid) = 0,寫(xiě)入緩存指示位0,滿足直接寫(xiě)寄存器; 信息存儲(chǔ)模塊指令A(yù)的信息eXist = current,信息置無(wú)效,對(duì)nop的信息進(jìn)行 初始化。通過(guò)本例可以看出執(zhí)行序列為0,Nop, 0,A,由于在新版本中比舊版本中A的執(zhí)行 周期多了一個(gè)執(zhí)行周期,所以在新版本中插入了一個(gè)nop指令,保證了 A在執(zhí)行完畢后第二 個(gè)指令0可以讀取A的執(zhí)行結(jié)果。下面就以上述A,B,0指令為例,當(dāng)指令出現(xiàn)嵌套時(shí),指令序列00AB (右邊指令先進(jìn) 流水線)在舊版本執(zhí)行時(shí)第二個(gè)指令0讀取的是A的執(zhí)行結(jié)果,第二個(gè)指令0讀取的是B的執(zhí)行前的結(jié)果。所以當(dāng)在新版本執(zhí)行周期發(fā)生改變的情況下,以下就本發(fā)明舉例說(shuō)明該方法的執(zhí)行過(guò)程。由于周期數(shù)1、2、3的執(zhí)行過(guò)程和上述舉例中的執(zhí)行過(guò)程基本相同,為了防止冗 余,在此不做過(guò)多的解釋。周期數(shù)1:進(jìn)指令B周期數(shù)2:進(jìn)指令A(yù)周期數(shù)3 進(jìn)第一個(gè)指令0周期數(shù)4 流水線控制模塊讀取B的信息,由于exist < previous,所以不加nop ;讀取A的信息,exist > = previous,滿足加nop條件,加nop ;讀取第一個(gè)0的信息,exist = previous,不滿足加nop條件;緩存控制模塊讀取B的信息,由于exist < current,所以無(wú)操作;讀取A的信息,exist < current,無(wú)操作;讀取第一個(gè) 0 的信息,exist = current, previous-current+(exist-valid) = 0 寫(xiě)入緩存指示位0,滿足直接寫(xiě)寄存器;信息存儲(chǔ)模塊指令B的信息eXist < current,其他指令要求加nop,單元信息 有效位置1,指令信息有效位置1,current置3,previous置3,exist置3,vaild置2,持 寫(xiě)入緩存指示位置0,被緩存的寄存器號(hào)置無(wú)效,緩存的數(shù)據(jù)置無(wú)效;指令A(yù)的信息exist < current,自己要求加nop,單元信息有效位置1,指令信息有效位置1,current置2, previous置1,exist置2,vaild置2,持寫(xiě)入緩存指示位置0,被緩存的寄存器號(hào)置無(wú)效, 緩存的數(shù)據(jù)置無(wú)效;第一個(gè)0的信息exist = currnt,信息置無(wú)效。周期數(shù)5 流水線控制模塊讀取B的信息,不滿足加nop條件;讀取A的信息,不滿足加nop條件;緩存控制模塊讀取B的信息,exist = current, previous-current+ (exist-valid) > 0,寫(xiě)緩存,為指令信息存儲(chǔ)模塊提供執(zhí)行結(jié)果,結(jié)果 寄存器號(hào),寫(xiě)入緩存提示位為1 ;讀取A的信息,直接寫(xiě)入寄存器;讀取第一個(gè)0的信息, exist = current,previous-current+(exist-valid) = 0 寫(xiě)入緩存指不位0,滿足直接寫(xiě) 寄存器;信息存儲(chǔ)模塊指令B的信息eXist < current,其他指令要求加nop,單元信息有效位置1,指令 信息有效位置1,current置3,previous置3,exist置3,vaild置3,持寫(xiě)入緩存指示位置 0,被緩存的寄存器號(hào)置無(wú)效,緩存的數(shù)據(jù)置無(wú)效;指令A(yù)的信息信息置無(wú)效;第二個(gè)0的 信息初始化。周期數(shù)6:流水線控制模塊正常流水;緩存控制模塊讀取B的信息,exist = current, previous-current+(exist-valid) = 0,寫(xiě)入緩存提示位為1,從指令信息存儲(chǔ)模塊提讀取 執(zhí)行結(jié)果,結(jié)果寄存器號(hào),寫(xiě)入寄存器;
信息存儲(chǔ)模塊B指令信息置無(wú)效;新指令的信息初始化。通過(guò)本例的執(zhí)行方法得到執(zhí)行序列為0,Νορ,0,Α,Β,因?yàn)椴迦肓艘粋€(gè)nop指令,所 以第二個(gè)指令0可以讀取正確的值,而插入nop指令帶給指令B的影響通過(guò)緩存得到了消 除,所以第二個(gè)指令0也正確的讀取了 B執(zhí)行前的值,在緩存寫(xiě)入寄存器后,后續(xù)的指令可 以讀取指令B執(zhí)行完畢的值,保證了新版本執(zhí)行結(jié)果同樣滿足舊版本的執(zhí)行要求。本發(fā)明另一方面還提出了一種相應(yīng)的多周期指令執(zhí)行裝置,如圖5所示為本發(fā)明實(shí)施例的多周期指令執(zhí)行裝置整體結(jié)構(gòu)圖,該多周期指令執(zhí)行裝置100包括指令信息解碼 模塊110、指令信息存儲(chǔ)模塊120、流水線控制模塊130、指令信息更新模塊140和緩存控制 模塊150。其中,指令信息解碼模塊110,用于對(duì)指令碼進(jìn)行初始化。指令信息存儲(chǔ)模塊120, 用于保存完成初始化的指令信息。流水線控制模塊130,用于根據(jù)所有完成初始化的有效指 令信息判決下一條進(jìn)入流水線的指令為正常流水線指令或者空泡指令且產(chǎn)生指示信號(hào)。緩 存控制模塊140,所述緩存控制模塊140根據(jù)所述指令信息判斷是否對(duì)執(zhí)行結(jié)果進(jìn)行緩存、 直接寄存或者緩存寫(xiě)入寄存器,且為后續(xù)進(jìn)入流水線的指令提供所述執(zhí)行結(jié)果。指令信息 更新模塊150,所述指令信息更新模塊150根據(jù)所述指示信號(hào)和所述執(zhí)行結(jié)果對(duì)所述指令 信息進(jìn)行判斷以更新所述指令信息。在本發(fā)明的一個(gè)實(shí)施例中,所述流水線控制模塊130首先向所述流水線發(fā)送指令 選擇信號(hào),所述指令選擇信號(hào)用于控制進(jìn)入譯碼級(jí)的指令為正常指令或是空泡指令,其次 在所述指令選擇信號(hào)控制進(jìn)入譯碼級(jí)的指令為空泡指令時(shí)向所述流水線的前置流水線發(fā) 送停止一個(gè)執(zhí)行周期的信號(hào),然后為所述指令信息的更新提供所述流水線加入正常指令或 是空泡指令的指示信號(hào),最后當(dāng)所述指示信號(hào)為所述空泡指令的指示信號(hào)時(shí)為所述指令 信息的更新提供所述指令信息的信息單元號(hào)以更新所述指令信息。其中,所述指令選擇 信號(hào)用于控制進(jìn)入譯碼級(jí)的指令為空泡指令的條件為current > previous, exist > = previous, exist < current ;current-previous-(exist-valid) > 0。在本發(fā)明的一個(gè)實(shí)施例中,所述緩存控制模塊緩140緩存數(shù)據(jù)的條件為eXist = current,和previous-current+(exist-valid) > 0。且在滿足緩存條件后發(fā)送執(zhí)行結(jié)果給 信息更新模塊150用于把所述緩存指示位置1。在本發(fā)明的一個(gè)實(shí)施例中,所述指令信息更新模塊150首先讀取所述指令信息 的所述單元信息有效位為1的所有信息單元的值,然后判斷每一個(gè)所述信息單元的所述 exist和所述current的值以依據(jù)判斷結(jié)果和流水線控制模塊130發(fā)送的指示信號(hào)與緩存 控制模塊140發(fā)送的執(zhí)行結(jié)果來(lái)更新所述指令信息,最后把更新完成的所述指令信息保存 到指令信息存儲(chǔ)模塊120中。通過(guò)本發(fā)明實(shí)施例提出的多周期指令執(zhí)行方法,保證了指令間的數(shù)據(jù)關(guān)系的正確 性,從而確保了在新硬件環(huán)境下同樣能夠正確執(zhí)行舊版本硬件環(huán)境下的指令二進(jìn)制碼,進(jìn) 一步解決了由于硬件升級(jí)帶來(lái)的指令周期數(shù)改變的二進(jìn)制碼兼容問(wèn)題,保證了后續(xù)指令執(zhí) 行結(jié)果的正確性。盡管已經(jīng)示出和描述了本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域的普通技術(shù)人員而言,可以 理解在不脫離本發(fā)明的原理和精神的情況下可以對(duì)這些實(shí)施例進(jìn)行多種變化、修改、替換 和變型,本發(fā)明的范圍由所附權(quán)利要求及其等同限定。
權(quán)利要求
一種多周期指令執(zhí)行方法,其特征在于,在開(kāi)啟二進(jìn)制兼容模式下執(zhí)行所述多周期指令執(zhí)行方法,其中,多周期指令執(zhí)行方法包括以下步驟對(duì)指令碼進(jìn)行初始化且保存完成初始化的指令信息;根據(jù)所有完成初始化的有效指令信息判決下一條進(jìn)入流水線的指令為正常流水線指令或者空泡指令且產(chǎn)生指示信號(hào);根據(jù)所述指令信息判斷是否對(duì)執(zhí)行結(jié)果進(jìn)行緩存、直接寄存或者緩存寫(xiě)入寄存器,且為后續(xù)進(jìn)入流水線的指令提供所述執(zhí)行結(jié)果;根據(jù)所述指示信號(hào)和所述執(zhí)行結(jié)果對(duì)所述指令信息進(jìn)行判斷以更新所述指令信息。
2.如權(quán)利要求1所述的多周期指令執(zhí)行方法,其特征在于,所述指令信息重點(diǎn)包括 current 當(dāng)前硬件版本允許跟隨的指令數(shù),其值等于所述當(dāng)前硬件版本指令執(zhí)行周期數(shù)減1;previous 之前硬件版本允許跟隨的指令數(shù),其值等于所述之前硬件版本指令執(zhí)行周 期數(shù)減1 ;exist 實(shí)際跟隨所述指令的指令數(shù);valid 實(shí)際跟隨所述指令并且有效的指令數(shù),為跟隨在當(dāng)前指令后的所述正常流水線 指令的數(shù)量;和 信息標(biāo)志位O
3.如權(quán)利要求2所述的多周期指令執(zhí)行方法,其特征在于,所述指令碼在進(jìn)入譯碼階 段后開(kāi)始初始化以置所述指令碼的exist = 0,valid = 0,獲取所述指令碼的current和 previous的值,及相關(guān)控制位信號(hào)。
4.如權(quán)利要求1所述的多周期指令執(zhí)行方法,其特征在于,根據(jù)所有完成初始化的有 效指令信息判決下一條進(jìn)入流水線的指令為正常流水線指令或者空泡指令包括向所述流水線發(fā)送指令選擇信號(hào),所述指令選擇信號(hào)用于控制進(jìn)入譯碼級(jí)的指令為正 常指令或是空泡指令;在所述指令選擇信號(hào)控制進(jìn)入譯碼級(jí)的指令為空泡指令時(shí)向所述流水線的前置流水 線發(fā)送停止一個(gè)執(zhí)行周期的信號(hào);為更新所述指令信息提供所述流水線加入正常指令或是空泡指令的指示信號(hào); 當(dāng)所述指示信號(hào)為所述空泡指令的指示信號(hào)時(shí)為所述指令信息的更新提供所述指令 信息的信息單元號(hào)以更新所述指令信息。
5.如權(quán)利要求4所述的多周期指令執(zhí)行方法,其特征在于,所述指令信息加入空泡指 令的條件為current > previous ; exist > = previous ; exist < current ;current-previous-(exist-valid) > 0。
6.如權(quán)利要求4所述的多周期指令執(zhí)行方法,其特征在于,所述指令信息的更新包括 讀取所有指令信息的單元信息有效位為1的所有信息單元的值;判斷每一個(gè)所述信息單元的exist和current以依據(jù)判斷結(jié)果和所述指示信號(hào)和所述 執(zhí)行結(jié)果來(lái)更新所述指令信息。
7.如權(quán)利要求6所述的多周期指令執(zhí)行方法,其特征在于,根據(jù)所述有效指令信息的 previous, current, exist和valid的值進(jìn)行判斷以依據(jù)判斷結(jié)果對(duì)所述執(zhí)行結(jié)果進(jìn)行緩 存、直接寄存或者緩存寫(xiě)入寄存器。
8.一種多周期指令執(zhí)行裝置,其特征在于,包括 指令信息解碼模塊,用于對(duì)指令碼進(jìn)行初始化;指令信息存儲(chǔ)模塊,用于保存完成初始化的指令信息;流水線控制模塊,用于根據(jù)所有完成初始化的有效指令信息判決下一條進(jìn)入流水線的 指令為正常流水線指令或者空泡指令且產(chǎn)生指示信號(hào);緩存控制模塊,所述緩存控制模塊根據(jù)所述指令信息判斷是否對(duì)執(zhí)行結(jié)果進(jìn)行緩存、 直接寄存或者緩存寫(xiě)入寄存器,且為后續(xù)進(jìn)入流水線的指令提供所述執(zhí)行結(jié)果;和指令信息更新模塊,所述指令信息更新模塊根據(jù)所述指示信號(hào)和所述執(zhí)行結(jié)果對(duì)所述 指令信息進(jìn)行判斷以更新所述指令信息。
9.如權(quán)利要求8所述的多周期指令執(zhí)行裝置,其特征在于,所述流水線控制子模塊首 先向所述流水線發(fā)送指令選擇信號(hào),所述指令選擇信號(hào)用于控制進(jìn)入譯碼級(jí)的指令為正常 指令或是空泡指令;其次在所述指令選擇信號(hào)控制進(jìn)入譯碼級(jí)的指令為空泡指令時(shí)向所述 流水線的前置流水線發(fā)送停止一個(gè)執(zhí)行周期的信號(hào);然后為所述指令信息的更新提供所述 流水線加入正常指令或是空泡指令的指示信號(hào);最后當(dāng)所述指示信號(hào)為所述空泡指令的指 示信號(hào)時(shí)為所述指令信息的更新提供所述指令信息的信息單元號(hào)以更新所述指令信息。
10.如權(quán)利要求9所述的多周期指令執(zhí)行裝置,其特征在于,所述指令選擇信號(hào)用于控 制進(jìn)入譯碼級(jí)的指令為空泡指令的條件為current > previous ; exist > = previous ; exist < current ;current-previous-(exist-valid) > 0。
11.如權(quán)利要求10所述的多周期指令執(zhí)行裝置,其特征在于,所述指令信息更新模塊 首先讀取所有指令信息的單元信息有效位為1的所有信息單元的值;然后判斷每一個(gè)所述 信息單元的exist和current以依據(jù)判斷結(jié)果和所述指示信號(hào)和所述執(zhí)行結(jié)果來(lái)更新所述 指令信息;最后把更新完成的所述指令信息保存到指令信息存儲(chǔ)模塊中。
12.如權(quán)利要求11所述的多周期指令執(zhí)行裝置,其特征在于,所述緩存控制模塊根據(jù) 所述有效指令信息的previous、current, exist和valid的值進(jìn)行判斷以依據(jù)判斷結(jié)果對(duì) 所述執(zhí)行結(jié)果進(jìn)行緩存、直接寄存或者緩存寫(xiě)入寄存器。
全文摘要
本發(fā)明提出了一種多周期指令執(zhí)行方法,包括以下步驟對(duì)指令碼進(jìn)行初始化且保存完成初始化的指令信息;根據(jù)所有完成初始化的有效指令信息判決下一條進(jìn)入流水線的指令為正常流水線指令或者空泡指令且產(chǎn)生指示信號(hào);根據(jù)所述指令信息判斷是否對(duì)執(zhí)行結(jié)果進(jìn)行緩存、直接寄存或者緩存寫(xiě)入寄存器,且為后續(xù)進(jìn)入流水線的指令提供所述執(zhí)行結(jié)果;根據(jù)所述指示信號(hào)和所述執(zhí)行結(jié)果對(duì)所述指令信息進(jìn)行判斷以更新所述指令信息。通過(guò)本發(fā)明的多周期指令執(zhí)行方法,保證了在指令執(zhí)行周期發(fā)生變化后執(zhí)行指令的正確性。
文檔編號(hào)G06F9/38GK101866281SQ201010207978
公開(kāi)日2010年10月20日 申請(qǐng)日期2010年6月13日 優(yōu)先權(quán)日2010年6月13日
發(fā)明者何虎, 楊旭, 章道陵, 黎崢 申請(qǐng)人:清華大學(xué)