專利名稱:使用類型位跟蹤二級高速緩存中儲存的錯誤校正碼及預解碼位的制作方法
技術(shù)領域:
本發(fā)明涉及微處理器,特別涉及有關微處理器內(nèi)可變長度指令的解碼。
背景技術(shù):
為x86指令集所撰寫的應用軟件的數(shù)目相當多。因此,盡管有較新且較先進的指令集的導入,微處理器設計者還是持續(xù)設計出可執(zhí)行x86指令集的微處理器。
x86指令集較為復雜,且其特征為具有多個可變長度指令。x86指令集的一例示一般性格式系示于圖1。如該圖所示,一個x86指令包含一至五個可選擇的前綴字節(jié)102、以及后續(xù)的一操作碼字段104、一可選擇的尋址模式(Mod R/M)字節(jié)106、可選擇的標度-索引-基底(optionalScale-Index-Base;簡稱SIB)字節(jié)108、可選擇的位移字段110、及可選擇的直接數(shù)據(jù)域位112。
操作碼字段104定義特定指令的基本操作。一個或多個前綴字節(jié)102修改特定操作碼的系統(tǒng)默認操作。例如,可利用其中一個前綴字節(jié)102來改變指令的地址或操作數(shù)大小,以便置換用于內(nèi)存尋址的系統(tǒng)默認的區(qū)段,或指示處理器重復一字符串操作若干次。操作碼字段104接續(xù)在可選擇的前綴字節(jié)102之后,且操作碼字段104的長度可以是一或二個字節(jié)。尋址模式(Mod R/M)字節(jié)106指定所用的寄存器、以及內(nèi)存尋址模式。標度-索引-基底(SIB)字節(jié)108只用于采用標度因子及索引因子的32位相對基底地址。SIB字節(jié)108內(nèi)的基底字段指定哪一寄存器存放有地址計算的基底值,且SIB字節(jié)108內(nèi)的索引字段指定哪一寄存器存放有索引值。SIB字節(jié)108內(nèi)的標度字段指定該索引值將要乘上的二的乘冪值,而將上述操作的結(jié)果連同任何位移值加到該基底值。下一指令字段是一位移字段110,該位移字段110是可選擇的,且其長度可以是一至四個字節(jié)。位移字段110存放有用于地址計算的常數(shù)??蛇x擇的直接數(shù)據(jù)域位112的長度也可以是一至四個字節(jié),且直接數(shù)據(jù)域位112存放有用來作為指令操作數(shù)的常數(shù)。最短的x86指令的長度只有一個字節(jié),且包含單一的操作碼字節(jié)。80286將指令的最大長度設定為10個字節(jié),而80386及80486容許的指令長度最大可到15個字節(jié)。
x86指令集的復雜性在實施高效能的x86兼容微處理器時造成許多困難。更具體而言,x86指令的可變長度使指令的解碼較困難。指令的解碼通常涉及確定一指令的邊界;然后識別該指令內(nèi)的每一個字段,例如操作碼及操作數(shù)字段。通常在自指令高速緩存提取指令時,進行指令解碼,然后才執(zhí)行指令。
確定指令邊界的一種方法涉及當從主存儲器讀取每一指令并將該指令儲存在指令高速緩存時,生成并儲存該指令的一個或多個預解碼位(predecode)。所述預解碼位提供了與其相關聯(lián)的指令字節(jié)有關的信息。例如,所觸發(fā)的一預解碼起始位指示該相關聯(lián)的指令字節(jié)是指令的第一字節(jié)。一旦計算出特定指令字節(jié)的起始位之后,即將該起始位連同該指令字節(jié)儲存在指令高速緩存中。當執(zhí)行一個″提取(fetch)″時,從指令高速緩存讀取若干指令字節(jié),并將所述指令字節(jié)解碼,以便為執(zhí)行而作準備。掃描任何相關聯(lián)的起始位,以便生成該提取的個別指令的有效遮蓋。有效遮蓋(valid mask)是一系列的位,其中每一位對應于一特定的指令字節(jié)。與指令的第一字節(jié)、該指令的最后一個字節(jié)、及在該指令的第一與最后一個字節(jié)之間的所有字節(jié)相關聯(lián)的有效遮蓋位被觸發(fā)。所有其它的有效遮蓋位并未被觸發(fā)。一旦計算出該有效遮蓋之后,即可將該有效遮蓋用來遮蔽其它指令不得使用的字節(jié)。
現(xiàn)在請參閱圖2,圖中表示一例示性的有效遮蓋。圖中表示提取120的一部分、及其相關聯(lián)的起始位122。假設要生成指令B128的有效遮蓋126,且觸發(fā)起始位122A與起始位122B間的所有位,以便生成罩蓋126。一旦生成了有效遮蓋126之后,即可利用有效遮蓋126來遮蔽提取120內(nèi)不是指令B128的一部分的所有字節(jié)。
如前文所述,預解碼信息尤其適用于減少解碼時間。通過將預解碼信息連同指令字節(jié)儲存在指令高速緩存中,則即使(諸如在一循環(huán)中)執(zhí)行了對應的指令若干次,也只須要計算該預解碼信息一次。然而,不幸的是當自指令高速緩存中取代或舍棄該指令時,即失掉了任何相關聯(lián)的預解碼信息。下一次將該指令讀取到指令高速緩存時,必須再度生成預解碼信息。當因分支錯誤預測或高速緩存未命中而將該指令讀取到指令高速緩存時,等候預解碼信息計算所造成的時間延遲尤其可能損及效率。與在需要一些指令之前以推測方式預提取所述指令不同,由于分支錯誤預測或高速緩存未命中的指令提取可能在等候接收所請求的指令時,造成微處理器的解碼器及功能單元的停頓。在此種情況中,生成預解碼信息所需的時間對該微處理器的效能可能造成嚴重的影響。
由于上述這些理由及其它的理由,需要一種可縮短預解碼時間的方法及裝置。尤其需要一種可縮短用來生成先前已從一指令高速緩存舍棄的指令的預解碼信息所需的時間的方法及裝置。
在發(fā)明人為Rupaka Mahalingaiah的美國專利6,092,182″使用ECC/奇偶校驗位存儲預解碼信息Using ECC/Parity Bits to Store PredecodeInformation″中,提出了這些問題的一個可能的解決方案,亦即將預解碼信息儲存在二級高速緩存的ECC/奇偶校驗位中。有利的結(jié)果是在某些情況中,可能避開對被舍棄的指令字節(jié)的預解碼的延遲。
然而,所提出的解決方案仍然無法使二級高速緩存中儲存的數(shù)據(jù)避免一個及多個的位錯誤。由于現(xiàn)有的微處理器的較高工作頻率及較高的集成度,所以儲存錯誤(尤其是高速緩存中的儲存錯誤)是一個潛在的問題點。因此,需要一種可減少被舍棄的預解碼信息量且仍然保留有至少能檢測出某些常見類型的錯誤(例如單一位錯誤)的能力的系統(tǒng)及方法。
發(fā)明內(nèi)容
本發(fā)明所述的一種用來儲存被舍棄的指令預解碼信息的系統(tǒng)及方法可至少部分地解決前文所述的問題。在一個實施例中,被設定成儲存被舍棄的指令預解碼信息的微處理器可包含預解碼單元及加載/儲存單元。可將該預解碼單元設定成接收指令字節(jié),并生成對應的預解碼信息。亦可將該預解碼單元設定成將指令字節(jié)及對應的預解碼信息儲存在一指令高速緩存中??蓪⒃摷虞d/儲存單元設定成接收若干數(shù)據(jù)字節(jié),并將所述數(shù)據(jù)字節(jié)儲存在一數(shù)據(jù)高速緩存中。該指令高速緩存及數(shù)據(jù)高速緩存可合而形成該處理器的″一級″高速緩存。該處理器亦可包含二級高速緩存,且將該二級高速緩存設定成分別從該指令高速緩存及數(shù)據(jù)高速緩存接收并儲存被舍棄的指令字節(jié)及數(shù)據(jù)字節(jié)。亦可將該二級高速緩存設定成接收并儲存所儲存的被舍棄指令字節(jié)的奇偶校驗信息及預解碼信息、以及所儲存的被舍棄數(shù)據(jù)字節(jié)的錯誤校正碼(Error Correction Code;簡稱ECC)位。
在一個實施例中,該微處理器亦可包含奇偶校驗位生成及檢查邏輯電路,該奇偶校驗位生成及檢查邏輯電路被設定成為二級高速緩存中儲存的指令字節(jié)生成奇偶校驗位。亦可將該奇偶校驗位生成及檢查邏輯電路設定成檢查從該二級高速緩存讀取的指令字節(jié)的奇偶校驗位。在某些實施例中,亦可將該指令高速緩存設定成儲存奇偶校驗信息,因而可對指令高速緩存及二級高速緩存中的指令字節(jié)進行奇偶校驗檢查。
同樣地,該微處理器亦可包含錯誤檢查及校正邏輯電路,且該錯誤檢查及校正邏輯電路被設定成為該二級高速緩存中儲存的數(shù)據(jù)字節(jié)生成錯誤檢查及校正碼位??蓪⒃撳e誤檢查及校正邏輯電路設定成檢查從該二級高速緩存讀取的數(shù)據(jù)字節(jié)的ECC位。在某些實施例中,可將該錯誤檢查及校正邏輯電路設定成校正從該數(shù)據(jù)高速緩存讀取的(而非從該二級高速緩存讀取的)數(shù)據(jù)字節(jié)中的至少一個位錯誤。
在某些實施例中,可將該二級高速緩存分成若干緩存行(例如邏輯列及(或)行),其中將每一緩存行設定成儲存被舍棄的數(shù)據(jù)或被舍棄的指令字節(jié)。可將指示位(也被稱為″數(shù)據(jù)類型″位)用于該二級高速緩存的每一緩存行,以便指示(a)被舍棄的指令字節(jié)、預解碼信息、及奇偶校驗信息、或(b)儲存在該緩存行中的ECC信息及數(shù)據(jù)字節(jié)。在某些實施例中,該二級高速緩存可以是內(nèi)容獨占式高速緩存,此時該二級高速緩存儲存唯一的被舍棄的指令字節(jié)及數(shù)據(jù)字節(jié)、以及其對應的ECC位、奇偶校驗位、預解碼位、及指示位。在其它的實施例中,該二級高速緩存可以是內(nèi)容蘊含式高速緩存,此時該二級高速緩存也儲存尚未被舍棄的指令字節(jié)及數(shù)據(jù)字節(jié)的拷貝。
本發(fā)明亦可考慮到一種用來儲存被舍棄的預解碼信息的系統(tǒng)。在一個實施例中,該系統(tǒng)可包含被設定成接收指令字節(jié)及數(shù)據(jù)字節(jié)的處理器??蓪⒃撎幚砥髟O定成根據(jù)所述指令字節(jié)形成的指令而對所述數(shù)據(jù)字節(jié)操作。該系統(tǒng)亦可包含一個高速緩存,該高速緩存被設定成從該處理器接收并儲存被舍棄的指令字節(jié)及被舍棄的數(shù)據(jù)字節(jié)。可將該高速緩存設定成接收并儲存所述被舍棄的指令字節(jié)的奇偶校驗信息及預解碼信息。亦可將該高速緩存設定成接收并儲存所儲存的所述被舍棄的數(shù)據(jù)字節(jié)的ECC位??蓪⒃摳咚倬彺嬖O定成響應請求所述被舍棄的數(shù)據(jù)字節(jié)的該處理器,而將所述被舍棄的數(shù)據(jù)字節(jié)及對應的ECC位提供給該處理器。同樣地,可將該高速緩存設定成響應請求所述被舍棄的指令字節(jié)的該處理器,而將所儲存的所述被舍棄的指令字節(jié)以及對應的奇偶校驗信息及預解碼信息提供給該處理器。有利之處為該處理器可利用來自該指令高速緩存的該預解碼信息,以取代為所述指令字節(jié)重新生成新的預解碼信息。如果發(fā)生寫入所述指令字節(jié)的情況(例如自行修改程序代碼),則可使所儲存的預解碼信息無效(例如,以將無效常數(shù)儲存在該預解碼信息上的方式),并可計算新的奇偶校驗信息。
在某些實施例中,可將該高速緩存實施為在與該處理器共同的一晶粒上形成的二級高速緩存。在其它的實施例中,可在與該處理器不同的晶粒上形成該高速緩存。在某些實施例中,可將該高速緩存分成被設定成儲存被舍棄的指令字節(jié)(及對應的預解碼信息及奇偶校驗信息)的第一部分、及被設定成儲存被舍棄的數(shù)據(jù)字節(jié)及對應的ECC信息的第二部分。
本發(fā)明亦考慮到一種用來儲存被舍棄的預解碼信息的方法。在一個實施例中,該方法可包含下列步驟接收指令字節(jié);以及生成所述指令字節(jié)的對應的預解碼信息。然后可將所述指令字節(jié)及預解碼信息儲存在第一內(nèi)存中??身憫鲋噶钭止?jié)在該第一內(nèi)存中被覆寫,而將至少一部分的所述指令字節(jié)及該預解碼信息輸出到第二內(nèi)存??缮蓪谠摰诙?nèi)存中儲存的所述指令字節(jié)及預解碼信息的至少一個奇偶校驗位,并將將所述奇偶校驗位儲存在該第二內(nèi)存中。該方法亦可包含下列步驟接收數(shù)據(jù)字節(jié);以及將所述數(shù)據(jù)字節(jié)儲存在第三內(nèi)存中。可響應所述數(shù)據(jù)字節(jié)在該第三內(nèi)存中被覆寫,而將至少一部分的所述數(shù)據(jù)字節(jié)儲存到該第二內(nèi)存。所述數(shù)據(jù)字節(jié)可具有所生成的ECC信息,且將ECC信息連同所述數(shù)據(jù)字節(jié)儲存在該第二內(nèi)存中。亦可生成該第二內(nèi)存中的每一緩存行的指示位,并將所述指示位儲存在該第二內(nèi)存中,以便指示該第二內(nèi)存中儲存了指令字節(jié)以及預解碼位與奇偶校驗信息、或數(shù)據(jù)字節(jié)以及ECC信息。
雖然易于對本發(fā)明作出各種修改及替代形式,還是以附圖舉例的方式表示出本發(fā)明的一些特定實施例,且本文將詳細說明這些特定實施例。然而,我們應當了解,本發(fā)明的所有附圖及詳細說明的用意并非將本發(fā)明限于所揭示的特定形式,相反地,本發(fā)明將涵蓋在最后權(quán)利請求所定義的本發(fā)明精神及范圍內(nèi)的所有修改、等效物、及替代方式。本文所用的小標題只是為了組織上的目的,并非用來限制說明書或申請專利的范圍。在本說明書全文的用法中,措詞″可能″(″may″)是一種容許性的用法(亦即,其意義具有可能性),而不是一種強制性的用法(亦即,其意義為必須)。同樣地,措詞″包括″(″include″、″including″、及″includes″)意指包括但不僅限于所包括的事項。
若參照下文中的詳細說明,并配合各附圖,將可易于了解本發(fā)明的其它目的及優(yōu)點,這些附圖有圖1是一般性x86指令格式的方塊圖。
圖2是有效遮蓋的一個實施例的方塊圖。
圖3是微處理器的一個實施例的方塊圖。
圖4標出在圖3所示指令高速緩存與二級高速緩存間的接口的一個圖5標出圖4所示指令高速緩存的一個實施例與圖4所示二級高速緩存的一個實施例間的關系的細節(jié)。
圖6是一種用來儲存二級高速緩存中的預解碼信息的方法的一個圖7A及圖7B示出用來儲存被舍棄的預解碼信息的系統(tǒng)的不同實施例。
圖8A及圖8B是用來儲存被舍棄的預解碼信息的方法的不同實施例的流程圖。
圖9示出用來儲存被舍棄的預解碼信息的系統(tǒng)的另一個實施例。
圖10標出采用圖3所示微處理器的計算機系統(tǒng)的一個實施例。
具體實施例方式
現(xiàn)在請參閱圖3,圖中表示微處理器10的一個實施例的方塊圖。微處理器10包含預提取/預解碼單元12、分支預測單元14、指令高速緩存16、指令對準單元18、多個解碼單元20A至20C、多個指令保留區(qū)22A至22C、多個功能單元24A至24C、加載/儲存單元26、數(shù)據(jù)高速緩存28、寄存器文件30、重新排序緩沖區(qū)32、及MROM單元34。本文中標示為一特定代號及一接續(xù)的字母的各組件可概括地只標示其代號。例如,可將各指令保留區(qū)22A至22C概括地標示為指令保留區(qū)22。
預提取/預解碼單元12被連接而自一主存儲器子系統(tǒng)(圖中未示出)接收指令,且又連接到指令高速緩存16及分支預測單元14。同樣地,分支預測單元14連接到指令高速緩存16。分支預測單元14亦連接到指令對準單元18及功能單元24A至24C。指令高速緩存16又連接到MROM單元34及指令對準單元18。指令對準單元18又連接到加載/儲存單元26及各別的解碼單元20A至20C。各個解碼單元20A至20C連接到指令保留區(qū)22A至22C,而所述指令保留區(qū)22A至22C又連接到各別的功能單元24A至24C。此外,指令對準單元18及指令保留區(qū)22連接到寄存器文件30及重新排序緩沖區(qū)32。功能單元24連接到加載/儲存單元26、寄存器文件30、及重新排序緩沖區(qū)32。數(shù)據(jù)高速緩存28連接到加載/儲存單元26及主存儲器子系統(tǒng)。最后,MROM單元34連接到指令對準單元18。
預提取/預解碼單元12自主存儲器預提取指令。預提取/預解碼單元12將所述可變長度指令預解碼為固定長度指令,然后將所述固定長度指令儲存在指令高速緩存16。可使用預提取架構(gòu),而在指令被實際請求之前,先對這些指令進行預提取及預解碼。預提取/預解碼單元12可采用各種預提取架構(gòu)。在繼續(xù)進行對預解碼單元12及指令高速緩存16的更詳細說明之前,將先說明與該圖所示例示微處理器10的實施例有關的一般概貌。
微處理器10可采用分支預測,以便以推測方式提取在有條件的分支指令之后的指令。包含分支預測單元14,以便執(zhí)行分支預測操作。在一個實施例中,儲存指令高速緩存16中的每一個緩存行的每一個16字節(jié)部分的至多兩個分支目標地址。當將一個特定的緩存行預解碼時,預提取/預解碼單元12確定起始的分支目標??赡芤驁?zhí)行緩存行內(nèi)的指令,而發(fā)生對與該緩存行對應的所述分支目標的后續(xù)更新。指令高速緩存16將所提取的指令地址的指示提供給分支預測單元14。此種方式可在形成分支預測時讓分支預測單元14確定要選擇哪些分支目標地址。指令對準單元18及功能單元24將更新信息提供給分支預測單元14。因為分支預測單元14儲存該緩存行的每一個16字節(jié)部分的兩個目標,所以可能不會將對該緩存行內(nèi)的某些分支指令的預測儲存在分支預測單元14中??蓪⒅噶顚蕟卧?8設定成檢測分支預測單元14并未預測到的各分支指令。功能單元24執(zhí)行所述分支指令,并確定是否錯誤預測了所預測的分支方向。該分支方向可以是″采用″,此時從該分支指令的目標地址提取后續(xù)的指令。相反地,該分支方向可以是″不采用″,此時從接續(xù)該分支指令的各記憶位置提取后續(xù)的指令。當檢測到錯誤預測的分支指令時,從微處理器10的各單元舍棄該錯誤預測的分支之后的各指令。分支預測單元14可采用各種適用的分支預測算法。
指令高速緩存16是一種用來儲存從預提取/預解碼單元12接收的指令的高速高速緩存。然后自指令高速緩存16提取所儲存的指令,并將所述指令傳送到指令對準單元18。在一個實施例中,可將指令高速緩存16設定成一組關系型結(jié)構(gòu)。指令高速緩存16可額外地采用路(way)預測架構(gòu),以便加速訪問時間。例如,并不訪問用來識別每一緩存行的指令的標記,然后將所述標記與提取地址比較,以便選擇一路;而是指令高速緩存16可預測所訪問的路。在此種方式下,系在訪問內(nèi)存數(shù)組之前,以推測方式選擇該路。使用路預測時,指令高速緩存16的訪問時間可類似于一直接對映式高速緩存。在讀取了指令字節(jié)之后,執(zhí)行標記比較,以供驗證。如果該路預測是錯誤的,則提取正確的指令字節(jié),并舍棄(進一步沿著處理線路向下的)不正確的指令字節(jié)。請注意,可以用完全關系型、組關系型、或直接映射方式來實施指令高速緩存16。
MROM單元34是一被設定成儲存″快速路徑指令″序列的只讀存儲器??焖俾窂街噶钍墙獯a器20A至20C及功能單元24A至24C可解碼及執(zhí)行的指令。相反地,″MROM指令″是過于復雜而使解碼單元20A至20C及功能單元24A至24C無法直接解碼或執(zhí)行的指令。當指令高速緩存16輸出MROM指令時,MROM單元34響應時系輸出一序列的快速路徑指令。更具體而言,MROM單元34分析該MROM指令,并將該MROM指令轉(zhuǎn)換為子集的已定義的快速路徑指令,以便完成所需的操作。MROM單元34將該子集的快速路徑指令派發(fā)到解碼單元20A至20C。
一旦自指令高速緩存16提取了若干指令字節(jié)之后,即將所述指令字節(jié)傳送到指令對準單元18。指令對準單元18將所述指令傳送到其中一個解碼單元20A至20C。亦檢測寄存器操作數(shù)信息,并將該寄存器操作數(shù)信息傳送到寄存器文件30及重新排序緩沖區(qū)32。此外,如果所述指令需要執(zhí)行一個或多個內(nèi)存操作,則指令對準單元18將所述內(nèi)存操作派發(fā)到加載/儲存單元26。將每一個經(jīng)過解碼的指令連同該指令中可能包含的操作數(shù)地址信息及位移或直接數(shù)據(jù)派發(fā)到指令保留區(qū)22。
微處理器10支持非循序執(zhí)行,因而采用重新排序緩沖區(qū)32來追蹤寄存器讀取及寫入操作的原始程序順序,而實施寄存器更名,以便可進行推測式指令執(zhí)行、及分支錯誤預測的還原,并協(xié)助精確的異常狀況處理。在對一涉及一寄存器的更新的指令的解碼時,保留重新排序緩沖區(qū)32內(nèi)的一暫時性儲存位置。該暫時性儲存位置儲存因指令的推測式執(zhí)行而生成的推測式寄存器狀態(tài)。如果分支預測是錯誤的,則可在重新排序緩沖區(qū)32中使所述以推測方式執(zhí)行的指令的結(jié)果以及該錯誤預測的路徑無效,然后才將所述結(jié)果及該錯誤預測的路徑寫入寄存器文件30。同樣地,如果特定的指令造成異常狀況,則可舍棄在造成異常狀況的該指令之后的各指令。在此種方式下,異常狀況是″精確的″(亦即,在該異常狀況之前,并不會完成造成該異常狀況的指令之后的各指令)。請注意,如果在程序順序是在特定指令前面的各指令之前先執(zhí)行該特定指令,則以推測方式執(zhí)行該特定指令。在前面的各指令可能是分支指令、或造成異常狀況的指令,在此種情況中,重新排序緩沖區(qū)32可舍棄推測式結(jié)果。
將指令對準單元18的輸出端上提供的經(jīng)過解碼的所述指令及直接數(shù)據(jù)或位移數(shù)據(jù)直接傳送到各別的指令保留區(qū)22。在一個實施例中,每一個指令保留區(qū)22可存放多至三個的等候發(fā)出到對應的功能單元的待處理指令的指令信息(亦即,經(jīng)過解碼的指令以及操作數(shù)值、操作數(shù)標記、及(或)直接數(shù)據(jù))。請注意,對于該圖所示的實施例而言,每一個指令保留區(qū)22與一個專用的功能單元24相關聯(lián)。因此,指令保留區(qū)22及功能單元24形成三個專用的″發(fā)出位置″。換言之,指令保留區(qū)22A及功能單元24A形成發(fā)出位置0。由功能單元24A執(zhí)行對準且派發(fā)到指令保留區(qū)22A的指令。同樣地,指令保留區(qū)22B及功能單元24B形成發(fā)出位置一;且指令保留區(qū)22C及功能單元24C形成發(fā)出位置二。
在對一個特定指令解碼時,如果所需的操作數(shù)是寄存器位置,則將寄存器地址信息同時傳送到重新排序緩沖區(qū)32及寄存器文件30。本領域技術(shù)人員當可了解,x86寄存器文件包括八個32位的實際寄存器(亦即,通常被稱為EAX、EBX、ECX、EDX、EBP、ESI、EDI、及ESP)。在采用x86微處理器架構(gòu)的微處理器10實施例中,寄存器文件30包含每一個所述32位實際寄存器的儲存位置。寄存器文件30內(nèi)可包含額外的儲存位置,以便為MROM單元34所使用。重新排序緩沖區(qū)32包含用于改變了這些寄存器的內(nèi)容的執(zhí)行結(jié)果的若干暫時性儲存位置,因而可容許非循序執(zhí)行。將重新排序緩沖區(qū)32的暫時性儲存位置保留給在解碼時確定會修改其中一個所述實際寄存器的內(nèi)容的每一個指令。因此,在執(zhí)行特定程序的各時點上,重新排序緩沖區(qū)32可具有其中存放了特定寄存器的推測式執(zhí)行內(nèi)容的一個或多個位置。
如果在將特定指令解碼之后,確定重新排序緩沖區(qū)32具有指定給寄存器且用來作為該特定指令的操作數(shù)的一個或多個先前位置,則重新排序緩沖區(qū)32將下列信息傳送到對應的指令保留區(qū)(1)最近指定的位置中的值;或(2)該最近指定的位置的一標記,而傳送該標記的前提是最終將執(zhí)行該先前指令的功能單元尚未生成該值。如果重新排序緩沖區(qū)32具有一個保留給特定寄存器的位置,則自重新排序緩沖區(qū)32提供該操作數(shù)值(或重新排序緩沖區(qū)標記),而不是自寄存器文件30提供該操作數(shù)值(或重新排序緩沖區(qū)標記)。如果重新排序緩沖區(qū)32中并沒有任何保留給所需寄存器的位置,則直接自寄存器文件30取得該值。如果該操作數(shù)對應于記憶位置,則將該操作數(shù)值經(jīng)由加載/儲存單元26提供給指令保留區(qū)。
在一特定實施例中,重新排序緩沖區(qū)32被設定成儲存并以一個單元的方式同時操作被解碼的各指令。本文將該這種設定稱為″線串導向″(″line-oriented″)。通過合起來操作數(shù)個指令,即可簡化重新排序緩沖區(qū)32內(nèi)所采用的硬件。例如,當指令對準單元18派發(fā)一個或多個指令時,本實施例中包含的一個線串導向重新排序緩沖區(qū)即分配足以儲存與三個指令有關的指令信息的儲存位置。相反地,在傳統(tǒng)的重新排序緩沖區(qū)中,是根據(jù)實際派發(fā)的指令數(shù)目,而分配可變量量的儲存位置。可能需要較大數(shù)目的邏輯閘,才能分配該可變量量的儲存位置。當已執(zhí)行了每一個同時被解碼的指令時,即將各指令結(jié)果同時儲存到寄存器文件30。然后該儲存位置是可自由分配給另一組同時被解碼的指令。此外,因為是將控制邏輯電路分攤到數(shù)個同時被解碼的指令,所以減少了每一指令所采用的控制邏輯電路量??蓪⒂脕碜R別特定指令的重新排序緩沖區(qū)標記分成兩個字段一個緩存行標記及一個偏移量標記。該緩存行標記識別包含該特定指令的該組同時被解碼的指令,而該偏移量標記識別該組內(nèi)的哪一指令對應于該特定指令。請注意,將指令結(jié)果儲存到寄存器文件30并釋出對應的儲存位置被稱為使該指令″退休″(″retiring″)。又請注意,可在微處理器10的各種實施例中采用任何重新排序緩沖區(qū)的形式。
如前文所述,指令保留區(qū)22儲存指令,直到對應的功能單元24執(zhí)行所述指令為止。是在下列的條件下選擇一指令以供執(zhí)行(i)已提供該指令的操作數(shù);以及(ii)尚未提供在相同指令保留區(qū)22A至22C內(nèi)且按照程序順序是在該指令之前的那些指令的操作數(shù)。請注意,當其中一個功能單元24執(zhí)行一指令時,將該指令的結(jié)果直接傳送到正在等候該結(jié)果的任何指令保留區(qū)22,同時傳送該結(jié)果,以便更新重新排序緩沖區(qū)32(通常將該技術(shù)稱為″結(jié)果傳送″(″result forwarding″))。在傳送相關聯(lián)的結(jié)果的時鐘周期中,可選擇一指令以供執(zhí)行,并將該指令傳送到一功能單元24A至24C。在此例中,指令保留區(qū)22將所傳送的結(jié)果繞送到功能單元24。
在一個實施例中,將每一功能單元24A至24C設定成執(zhí)行加法及減法的整數(shù)算術(shù)運算以及移位、旋轉(zhuǎn)、邏輯運算、及分支操作。請注意,亦可采用浮點運算單元(圖中未示出)來進行浮點運算。該浮點運算單元可用一個協(xié)同處理器的方式工作,自MROM單元34接收指令,然后與重新排序緩沖區(qū)32交換訊息,以便完成該指令。此外,可將功能單元24設定成執(zhí)行地址生成,以供加載/儲存單元26所執(zhí)行的加載及儲存內(nèi)存操作。
每一個功能單元24還將與有條件分支指令的執(zhí)行相關的信息提供給分支預測單元14。如果分支預測是不正確的,則分支預測單元14清除在該錯誤預測的分支之后的已進入指令處理線路的各指令,并從指令高速緩存16或主存儲器提取所需的指令。請注意,在此種情況中,舍棄了原始程序序列中在該錯誤預測的分支指令之后發(fā)生的指令結(jié)果,其中包括已經(jīng)經(jīng)過推測式執(zhí)行且暫時儲存在加載/儲存單元26及重新排序緩沖區(qū)32的那些指令結(jié)果。
如果正在更新寄存器值,則將功能單元24所生成的結(jié)果傳送到重新排序緩沖區(qū)32,而如果記憶位置的內(nèi)容改變了,則將該結(jié)果傳送到加載/儲存單元26。如果要將該結(jié)果儲存在寄存器,則當將該指令解碼時,重新排序緩沖區(qū)32將該結(jié)果儲存在保留給該寄存器的值的位置。設有多個結(jié)果總線38,用以從功能單元24及加載/儲存單元26傳送結(jié)果。結(jié)果總線38傳送所生成的結(jié)果、以及用來識別所執(zhí)行的指令的重新排序緩沖區(qū)標記。
加載/儲存單元26提供功能單元24與數(shù)據(jù)高速緩存28間的一接口。在一個實施例中,加載/儲存單元26被設定成具有一載入/儲存緩沖區(qū),該載入/儲存緩沖區(qū)具有八個儲存位置,用以儲存待處理的加載或儲存的數(shù)據(jù)及地址信息。當該緩沖區(qū)已填滿時,指令對準單元18必須等候到加載/儲存單元26有了可供待處理的加載或儲存請求信息的空間為止。加載/儲存單元26也執(zhí)行加載內(nèi)存操作對待處理的儲存內(nèi)存操作的相關性檢查,以便確保數(shù)據(jù)的一致性。內(nèi)存操作是在處理器10與主存儲器子系統(tǒng)間的數(shù)據(jù)轉(zhuǎn)移。內(nèi)存操作可能是利用內(nèi)存中儲存的操作數(shù)的指令的結(jié)果,內(nèi)存操作也可能是引發(fā)數(shù)據(jù)轉(zhuǎn)移但并未引發(fā)任何其它操作的加載/儲存指令的結(jié)果。此外,加載/儲存單元26可包含用于諸如區(qū)段寄存器及與x86處理器架構(gòu)所定義的地址轉(zhuǎn)換機制有關的其它寄存器等的特殊寄存器的一特殊寄存器儲存單元。
在一個實施例中,加載/儲存單元26被設定成以推測方式執(zhí)行加載內(nèi)存操作。可按照程序順序執(zhí)行儲存內(nèi)存操作,但也可將儲存內(nèi)存操作以推測方式儲存到所預測的路中。如果該預測的路是不正確的,則隨即將在該儲存內(nèi)存操作之前的數(shù)據(jù)還原到該預測的路,且將該儲存內(nèi)存操作執(zhí)行到正確的路。在另一個實施例中,也可以推測方式執(zhí)行儲存操作。將推測式執(zhí)行的儲存操作連同緩存行在更新之前的一份拷貝置入一儲存緩沖區(qū)。如果后來因分支錯誤預測或異常狀況而舍棄該推測式執(zhí)行的儲存操作,則可將該緩存行還原到該緩沖區(qū)中儲存的值。請注意,可將加載/儲存單元26設定成執(zhí)行任何數(shù)量的推測式執(zhí)行,其中包括沒有任何推測式執(zhí)行。
數(shù)據(jù)高速緩存28是一種高速的高速緩存,用以暫時性地儲存在加載/儲存單元26與主存儲器子系統(tǒng)之間轉(zhuǎn)移的數(shù)據(jù)。在一個實施例中,數(shù)據(jù)高速緩存28在八路組關系型結(jié)構(gòu)中具有最多可儲存64k字節(jié)數(shù)據(jù)的容量。與指令高速緩存16類似,數(shù)據(jù)高速緩存28可采用路預測機制。我們應當了解,可以用各種特定的存儲器形式來實現(xiàn)數(shù)據(jù)高速緩存28,這些形式包括組關系型形式及直接映射式形式。
在采用x86微處理器架構(gòu)的微處理器10的特定實施例中,指令高速緩存16及數(shù)據(jù)高速緩存28是被線性尋址的。利用指令所指定的偏移量及x86地址轉(zhuǎn)換機制的區(qū)段部分所指定的基址而形成該線性地址?;蚩蓪⒕€性地址轉(zhuǎn)換為物理地址,以便訪問主存儲器。x86地址轉(zhuǎn)換機制的記憶頁部分指定了該線性地址至物理地址的轉(zhuǎn)換。請注意,線性尋址的高速緩存儲存線性地址標記??刹捎靡唤M物理標記(圖中未示出),以便將線性地址對映到物理地址,并檢測轉(zhuǎn)換別名。此外,該物理標記區(qū)段可執(zhí)行線性地址至物理地址的轉(zhuǎn)換。
預提取/預解碼單元及指令高速緩存如前文所述,許多諸如Intel 82491/82492高速緩存SRAM的被用來作為微處理器的外部高速緩存的內(nèi)存裝置可以設定成儲存奇偶校驗信息。在一個實施例中,可針對每八個數(shù)據(jù)位而儲存一個奇偶校驗位。假設需要偶數(shù)的奇偶校驗,則一個011010112的數(shù)據(jù)字節(jié)將有一個觸發(fā)的奇偶校驗位,因而觸發(fā)的位的總數(shù)是偶數(shù)。可由微處理器生成該奇偶校驗位,然后將該奇偶校驗位連同數(shù)據(jù)字節(jié)儲存在該外部高速緩存。當微處理器從該高速緩存讀取該數(shù)據(jù)時,該微處理器可計算所觸發(fā)的數(shù)據(jù)位及奇偶校驗位的數(shù)目。如果所得到的值不符合所選擇的奇偶校驗,則發(fā)生了一奇偶校驗錯誤,且該微處理器可采取適當?shù)男袆?,例如將發(fā)生了一內(nèi)存錯誤的訊息通知操作系統(tǒng)。其它的內(nèi)存裝置可將額外的位分配給錯誤檢查及校正(Error Checking and Crrection;簡稱ECC)。
雖然諸如服務器等的高級系統(tǒng)通常支持奇偶校驗檢查及ECC,但是許多中低級系統(tǒng)的設計者會因為發(fā)生數(shù)據(jù)錯誤的機率較低,而選擇不啟動這些特殊功能。在這些系統(tǒng)中,可將二級高速緩存中的奇偶校驗位及ECC位用來儲存預解碼信息。此種方式可以在不需要系統(tǒng)級上的廣泛硬件改變的情況下,有利地提升效能。
現(xiàn)在請參閱圖4,圖中表示預解碼單元12及指令高速緩存16的一個實施例的細節(jié)。在該實施例中,預解碼單元12經(jīng)由總線接口邏輯電路52而連接到高速緩存50。高速緩存50包含一低存取時間的寬頻內(nèi)存,該內(nèi)存設于與微處理器10相同的硅芯片上,或設于連接到附近(例如,在子卡上、或在接近微處理器10的主機板上)的獨立硅芯片上。高速緩存50可包括靜態(tài)隨機存取內(nèi)存(Static Random Access Memory;簡稱SRAM)、同步動態(tài)隨機存取內(nèi)存(Synchronous Dynamic Random AccessMemory;簡稱SDRAM)、或其它類型的低存取時間內(nèi)存。高速緩存50可設于與微處理器10相同的硅芯片、或獨立的硅芯片上。在某些實施例中,可將高速緩存50稱為″二級″高速緩存,這是因為該高速緩存是第二最接近微處理器10的功能單元的高速緩存,亦即,在第一級指令高速緩存16及數(shù)據(jù)高速緩存28之后。亦可將高速緩存50稱為″外部高速緩存″,這是因為該高速緩存是在微處理器的外部。
總線接口邏輯電路52可包含多任務器、緩沖器、收發(fā)器、驅(qū)動器、或可起動或者改善微處理器10與高速緩存50間的數(shù)據(jù)信號、地址信號、及控制信號的傳輸?shù)娜魏纹渌愋偷目偩€接口邏輯電路。在某些實施例中,在微處理器10與二級高速緩存50之間可能不需要有任何總線接口邏輯電路52。例如,如果微處理器10及二級高速緩存50在物理上是充分相互接近,且其輸出晶體管的驅(qū)動能力夠高,則微處理器10及高速緩存50可在無須總線接口邏輯電路52的情況下相互連接。
預解碼單元12被設定成接收來自分支預測單元14預提取的指令地址,并將所述指令地址經(jīng)由總線68、總線接口邏輯電路52、及內(nèi)存總線56而傳送到高速緩存50。如果二級高速緩存50正在儲存對應于所請求地址的指令字節(jié),則將預定數(shù)目的指令字節(jié)(例如,緩存行的32個字節(jié)經(jīng)由總線56、總線接口邏輯電路52、及總線68而傳送到預解碼單元12。如果所請求的指令字節(jié)并未被儲存在二級高速緩存50,則高速緩存50被設定成自主存儲器子系統(tǒng)擷取所請求的指令字節(jié)。一旦自主存儲器子系統(tǒng)傳送了所請求的指令字節(jié)之后,即將所述指令字節(jié)傳送到指令高速緩存16。亦可將所述指令字節(jié)儲存在高速緩存50中。
當預解碼單元12接收到所請求的指令字節(jié)時,即為每一個指令字節(jié)生成預解碼信息。在該圖所示的實施例中,預解碼單元12為每一指令字節(jié)生成一起始位。假設預解碼單元12響應一請求地址的輸出而接收32個字節(jié)(例如一緩存行),則可將預解碼單元12設定成為每一指令字節(jié)生成一個起始位,因而總共生成32個起始位。一旦生成了起始位之后,即將所述起始位傳送到指令高速緩存16,且將所述起始位連同其相關聯(lián)的指令字節(jié)儲存在指令高速緩存16。可局部地將指令高速緩存16組織成多個緩存行儲存位置64及多個預解碼信息儲存位置62,其中一個預解碼信息儲存位置對應于一個緩存行儲存位置。亦可將所述指令字節(jié)及預解碼位直接傳送到指令對準單元18。
一旦指令高速緩存16內(nèi)的所有緩存行儲存位置64被填滿之后,可利用若干種不同的算法來確定在發(fā)生高速緩存未命中時應取代哪一緩存行。例如,為了減少在最近的未來將需要用到的信息被舍棄的機會,可使用記錄了高速緩存訪問順序的最近最少使用(Least-RecentlyUsed;簡稱LRU)取代架構(gòu)。當選擇將要覆寫的緩存行時,將對應的預解碼信息儲存位置62中儲存的相關聯(lián)的預解碼信息自指令高速緩存16經(jīng)由預解碼單元12及總線接口邏輯電路52而輸出到高速緩存50。預解碼單元12亦傳送對應于被覆寫的指令高速緩存信息的地址。
當高速緩存50自預解碼單元12及指令高速緩存16接收到所述預解碼位及對應的地址時,高速緩存50設定成將所述預解碼位儲存在與對應的地址相關聯(lián)的奇偶校驗位儲存位置60。在某些實施例中,亦可將指令高速緩存16中將要被覆寫的所述實際指令字節(jié)連同所述預解碼位輸出到高速緩存50,以供儲存。這種形式在支持自行修改程序代碼的微處理器10的某些實施例中可能是有利的。例如,指令高速緩存16可″監(jiān)視″儲存地址,以便確定儲存指令是否將覆寫指令高速緩存16內(nèi)儲存的指令字節(jié)。如果確系如此,則可對指令高速緩存16及數(shù)據(jù)高速緩存28執(zhí)行該儲存指令,因而修改所需的指令字節(jié)。在這種形式中,可將預解碼單元12設定成重新計算已被修改的指令的預解碼信息,然后將重新計算出的所述預解碼位寫到指令高速緩存16。如果高速緩存50被設定成延時寫回式高速緩存(write-back cache),則當在指令高速緩存16中覆寫用來儲存所述被修改的指令字節(jié)的緩存行儲存位置時,可將所述被修改的指令字節(jié)寫到高速緩存50。
在將預解碼信息(和指令字節(jié),如按此設定)寫到高速緩存50之后,可以用新的指令字節(jié)及新的預解碼信息安全地覆寫指令高速緩存16內(nèi)的該緩存行儲存位置及預解碼信息儲存位置。當預解碼單元12接收到對已輸出到高速緩存50的指令字節(jié)的預提取或提取請求時,預解碼單元12將所請求的地址輸出到高速緩存50。如果高速緩存50仍然儲存所述對應的指令字節(jié)及預解碼信息(亦即,所述指令字節(jié)及預解碼信息尚未被取代),則可將高速緩存50設定成將所述指令字節(jié)及預解碼信息傳送到預解碼單元12。預解碼單元12可將所述指令字節(jié)及對應的預解碼信息傳送到指令對準單元18及指令高速緩存16。在該實施例中,有利之處為可避開為所請求的指令字節(jié)生成新的預解碼信息的程序。如前文所述,當發(fā)生分支錯誤預測或高速緩存未命中,且功能單元24A至24C有停頓的危險時,此種方式可能對微處理器10的某些實施例特別有利。
另一方面,如果高速緩存50已經(jīng)以位于另一地址上的其它指令字節(jié)取代了所需的所述指令字節(jié),則可將高速緩存50設定成從主存儲器解取所請求的字節(jié),并將所述字節(jié)傳送到預解碼單元12。可將高速緩存50設定成當將所述指令字節(jié)傳送到預解碼單元12時,觸發(fā)特定的控制信號,以便指示指令高速緩存16并未具有所傳送的所述指令字節(jié)的有效預解碼信息。
在另一個實施例中,控制單元80可監(jiān)視高速緩存50,并將一特定的預解碼位的無效序列寫到對應于正在被來自主存儲器的新指令字節(jié)取代的一指令儲存位置58的奇偶校驗/ECC位儲存位置60。此種方式有效地″設定了″所述新指令字節(jié)的預解碼信息的″起始值″。在該方式中,可將高速緩存50被設定成當預解碼單元12請求對應的指令字節(jié)時,輸出該無效序列的預解碼位。有利之處為該該方式中,高速緩存50可以是一支持奇偶校驗/ECC的標準高速緩存,且無須以任何方式修改該標準高速緩存,即可得知正在輸出的預解碼位是有效的或無效的。相反地,亦可將預解碼單元12設定成檢查其自高速緩存50接收的預解碼位。如果所述預解碼位與預定的無效序列相符,則可將預解碼單元12設定成計算新的預解碼信息。如果所述預解碼位并不符合該預定的無效序列,則可將預解碼單元12設定成將所述預解碼位自二級高速緩存50傳送到指令高速緩存16(且于必要時傳送到指令對準單元18/解碼單元20A至20C)。
請注意,總線56及68可以是任何方便的容量,例如16、32、64、或128位??蓪?shù)據(jù)、地址、及控制總線多任務化,而減少所用的總線信號線的數(shù)目。在某些實施例中,可將預解碼單元12及二級高速緩存50設定成為所傳送的及接收的地址生成奇偶校驗位。然而,并不需要儲存這些奇偶校驗位,且可于傳送每一地址之后,舍棄這些奇偶校驗位。
在又一個實施例中,預解碼信息以及起始位可被預解碼單元12生成,且被儲存在指令高速緩存16中。例如,用來識別其相關聯(lián)的指令字節(jié)是否為指令的最后字節(jié)的終止位、以及用來指示其相關聯(lián)的指令字節(jié)是否為一操作碼字節(jié)的操作碼位亦可被預解碼單元12生成,并被儲存在指令高速緩存16中。視高速緩存50內(nèi)可用的奇偶校驗及(或)ECC位60的數(shù)目而定,當在高速緩存16中取代指令字節(jié)時,可將這些預解碼位的全部或部分傳送到高速緩存50。
在某些實施例中,可將解碼單元20A至20C設定成檢測預解碼單元12所提供的或自指令高速緩存16讀取的預解碼信息是否為不正確的。視用來生成預解碼信息的方法而定,可能由于不同的原因而發(fā)生預解碼信息的不正確。當預解碼信息是不正確的時,可將解碼單元20A至20C設定成在預解碼單元12重新生成預解碼信息時停頓所述解碼單元。然后可將新的預解碼信息寫到指令高速緩存16,以便覆寫該不正確的預解碼信息。在另一個實施例中,可將解碼單元20A至20C設定成只須舍棄不正確的預解碼信息,并自行完成解碼。
現(xiàn)在請參閱圖5,圖中表示指令高速緩存16及高速緩存50的一個實施例的更多細節(jié)。如前文所述,可將指令高速緩存16設定成具有若干指令儲存位置62及預解碼信息儲存位置64。每一個預解碼信息儲存位置對應于一個指令儲存位置。例如,儲存位置80中儲存的預解碼信息對應于指令儲存位置82中儲存的指令字節(jié)。在該圖所示的實施例中,儲存位置80儲存對應于位置82中儲存的每一指令字節(jié)的起始位。
如該圖所示,高速緩存50可儲存與指令高速緩存16相同的指令字節(jié)。例如,當首次向程序代碼區(qū)段72請求指令時,可從主存儲器將所述指令讀取到二級高速緩存50及指令高速緩存16。然而,請注意,二級高速緩存50將沒有程序代碼區(qū)段72的預解碼數(shù)據(jù)。因此,系將預定的無效常數(shù)(在此例中為00000000…)儲存在位置90。當預解碼單元12接收所述指令字節(jié)時,預解碼單元12將檢測該無效常數(shù),并繼續(xù)計算程序代碼區(qū)段72的預解碼信息。然后將該預解碼信息儲存在指令高速緩存16內(nèi)的儲存位置80。
當首次請求程序代碼區(qū)段78中的指令時,將進行相同的程序。然而,一旦在指令高速緩存16中取代了程序代碼區(qū)段78的所述指令字節(jié)之后,該預解碼信息即被寫回到二級高速緩存50,且被儲存在位置94。如果在指令高速緩存16中取代了程序代碼區(qū)段78之后,且在二級高速緩存50中取代了程序代碼區(qū)段78之前,再度請求程序代碼區(qū)段78,則可自位置94至96讀取程序代碼區(qū)段78的所述指令字節(jié)及預解碼信息,并將所述指令字節(jié)及預解碼信息儲存在指令高速緩存16。此種狀態(tài)系示于該圖。
雖然可將任何預定序列的位用來作為一無效常數(shù),但是在某些實施例中,選擇一個不可能被預解碼單元12生成的一預解碼位序列可能是有利的。例如,假設最大的指令長度是16字節(jié)且一緩存行長度是32字節(jié),則預解碼單元12將不可能接收到具有32個連續(xù)指令字節(jié)且不含至少一個起始字節(jié)的一緩存行。因此,選擇一個包含32個零的無效常數(shù)可能是有利的,這是因為該無效常數(shù)可減少不正確的無效操作的次數(shù)。當預解碼單元12所計算出的預解碼位等于預定的無效常數(shù)時,可能發(fā)生一個錯誤的無效操作。如果發(fā)生此種情況,則將舍棄從高速緩存50讀取的原始預解碼位,并可計算新的預解碼位,而且即使原始的預解碼位是正確的,也是如此執(zhí)行。
在一個實施例中,可單獨在微處理器10內(nèi)實施前文所述的所述特征。例如,控制單元80的功能可被省略,或被包含在微處理器10內(nèi)。同樣地,在某些實施例中,總線接口邏輯電路52亦可被省略,或被包含在微處理器10內(nèi)。完全在微處理器10內(nèi)實施前文所述的所述功能時,可有利地降低實施一用來儲存前文揭示的預解碼信息的計算機系統(tǒng)的成本。在其它的實施例中,可將所需的所述功能分布到微處理器10以及一個或多個接口或支持芯片。
現(xiàn)在請參閱圖6,圖中表示用來將預解碼信息儲存在二級高速緩存50的方法的一個實施例的流程圖。在步驟140中,首先從指令高速緩存16請求指令字節(jié)。如果在步驟142中確定所請求的字節(jié)儲存在指令高速緩存16內(nèi),則在步驟152中將所述字節(jié)連同其對應的預解碼信息傳送到指令對準單元18及解碼單元20A至20C。另一方面,如果在步驟142中確定所請求的指令字節(jié)并未被儲存在指令高速緩存16內(nèi),則在步驟144中將所請求的地址傳送到二級高速緩存50。如果在步驟146中確定所請求的指令字節(jié)并未被儲存在二級高速緩存50,則在步驟148中自主存儲器子系統(tǒng)讀取所述指令字節(jié)。當在步驟148中自主存儲器子系統(tǒng)接收到所請求的指令字節(jié)時,在步驟150中將所述指令字節(jié)連同無效常數(shù)儲存在二級高速緩存50。如前文所述,該無效常數(shù)有效地設定二級高速緩存50內(nèi)的預解碼信息儲存位置的起始值,因而將應生成新的預解碼信息的訊息通知預解碼單元12。當預解碼單元12在步驟154中接收到所述指令字節(jié)及預解碼位時,即在步驟156中檢查所述預解碼位,以便確定所述預解碼位是否等于該無效常數(shù)。如果在步驟156中確定所述預解碼位等于該無效常數(shù),則預解碼單元12設定成在步驟164中生成新的預解碼信息。然后在步驟158中,將所述指令字節(jié)及新的預解碼信息儲存在指令高速緩存16。如果在步驟160中確定儲存所述指令字節(jié)及新的預解碼信息必須要取代指令高速緩存16內(nèi)先前儲存的緩存行,則在步驟166中將對應于正在被覆寫的該先前儲存的緩存行的預解碼信息儲存到二級高速緩存50。
請注意,此處以循序的方式描述該圖中的所述步驟只是為了說明的目的。其它的實施例是可能的且可被考慮的??珊喜⒒蚱叫械貓?zhí)行前文所述的若干步驟。例如,可平行地執(zhí)行步驟150及154。此外,如前文所述,涉及無效常數(shù)的使用的所有步驟都是可供選用的。
儲存具有被舍棄的指令及數(shù)據(jù)字節(jié)的奇偶校驗及(或)ECC信息前文所述所述實施例的一個缺點在于二級高速緩存中儲存的指令及數(shù)據(jù)字節(jié)無法免除因奇偶校驗及(或)ECC(錯誤檢查及校正)位被用來儲存預解碼信息而生成的單一及多個位錯誤。然而,在某些實施例中,可修改前文所述的方法及系統(tǒng),以便對二級高速緩存中儲存的數(shù)據(jù)字節(jié)及指令字節(jié)提供對單一及(或)多個位錯誤的至少某些保護。
現(xiàn)在請參閱圖7A,圖中表示用來將預解碼信息儲存在二級高速緩存同時也保護所儲存的數(shù)據(jù)字節(jié)及指令字節(jié)不會有單一及多個位錯誤的一個系統(tǒng)的實施例。通常將高速緩存設定成一般被稱為緩存行的若干邏輯列及(或)行。如該圖所示,指令高速緩存16中的每一緩存行可儲存對應于所儲存的指令字節(jié)184A的一個奇偶校驗位180A及預解碼信息182A。如參照前述的實施例而說明的,預解碼位182A提供與指令字節(jié)184A有關的信息(例如,起始字節(jié)、終止字節(jié)、及操作碼字節(jié)信息)。如前文所述,可將預解碼位182A用來減少將指令字節(jié)184A解碼所需的時間。例如,可將指示指令字節(jié)184A內(nèi)的起始字節(jié)及終止字節(jié)的預解碼位182A用來迅速地對準指令字節(jié)184A內(nèi)的各指令??筛鶕?jù)預解碼位182A及指令字節(jié)184A的總和,而計算奇偶校驗位180A,以便生成偶數(shù)奇偶校驗或奇數(shù)奇偶校驗。在另一個實施例中,可只根據(jù)指令字節(jié)184A,而計算奇偶校驗位180A(亦即,提供只檢測指令字節(jié)184A內(nèi)的奇數(shù)的位錯誤的能力)。在該實施例中,有可能將更多的保護提供給指令字節(jié)184A,而預解碼位182A則未受到保護。此種方式在預解碼位182A只是預測性的實施例中是可接受的。例如,可能稍后會確定預解碼位182A是無效的。
可將數(shù)據(jù)高速緩存28設定成具有若干緩存行。每一緩存行可具有其本身一組的數(shù)據(jù)字節(jié)188A及對應的ECC位186A。如前文所述,可選擇ECC位186A,以便可檢測數(shù)據(jù)字節(jié)188A內(nèi)的單一及某些多個位錯誤。在某些實施例中,亦可根據(jù)可檢測并校正單一位錯誤的一算法而選擇ECC位186A。
在本文的用法中,ECC信息意指錯誤校正碼信息。在數(shù)字電子系統(tǒng)中,是以二進制格式(亦即若干一及零)來表示信息。當將二進制信息自一點傳送到另一點,或?qū)⒍M制信息儲存在一內(nèi)存時,必然有發(fā)生錯誤的機會。例如,可能將一個一當作一個零,或者可能將一個零當作一個一。可能因媒體缺陷、電子噪聲、組件故障、連接不良、老化、輻射、其其它因素而造成此種錯誤。當錯誤地解釋一個位時,即是發(fā)生了一個″位錯誤″。錯誤校正是檢測所述錯誤并校正這些位錯誤的程序。可以用硬件或軟件來執(zhí)行錯誤校正,但是最好是以特殊用途的硬件來執(zhí)行高數(shù)據(jù)傳輸速率的錯誤校正,這是因為軟件解決方案通常是太慢了。由于內(nèi)存組件密度及工作頻率增加,所以發(fā)生單一或多個位錯誤的機率也可能增加。因此,錯誤校正碼的支持可能變得更為重要。例如,在某些便攜式系統(tǒng)中,由于可大幅減少內(nèi)存更新的速率,因而現(xiàn)在也要靠錯誤校正碼來大幅延長系統(tǒng)的電池使用時間。有利之處為可利用若干種不同的ECC算法來實施本發(fā)明所揭示的系統(tǒng)及方法。算法的特定選擇可能取決于內(nèi)存結(jié)構(gòu)、及可用來儲存ECC信息的位數(shù)。又請注意,在某些實施例中,可將ECC位186A及數(shù)據(jù)字節(jié)188A合并成為ECC算法的一部分。
在本文的用法中,奇偶校驗檢查是一種用來檢測內(nèi)存系統(tǒng)中的單一位錯誤的基本方法。支持奇偶校驗檢查的內(nèi)存通常為每一字節(jié)提供一個額外位的內(nèi)存儲存空間,但是其它設置也是可行的。該額外的位是用來儲存可進行錯誤檢測的信息。該系統(tǒng)內(nèi)存中儲存的每一字節(jié)的數(shù)據(jù)包含八個位的實際數(shù)據(jù),而每一位是一個一或一個零。因此,可以算出一字節(jié)中的零或一的總數(shù)。例如,字節(jié)10110011具有三個零及五個一。字節(jié)00100100具有六個零及兩個一。因此,某些字節(jié)具有偶數(shù)的一,而某些字節(jié)具有奇數(shù)的一。當起動奇偶校驗檢查時,每當將一個字節(jié)寫入內(nèi)存時,被稱為奇偶校驗生成器/檢查器的邏輯電路即檢查該字節(jié),并確定該數(shù)據(jù)字節(jié)具有偶數(shù)的或奇數(shù)的一。如果該數(shù)據(jù)字節(jié)具有一偶數(shù)的一,則將第九(或奇偶校驗)位設定為一個一,否則,將該第九位設定為一個零。其結(jié)果即是不論原始八個數(shù)據(jù)位中有多少個一,當一起檢查所有九個位時,必然是奇數(shù)的一。此種實施例被稱為″奇數(shù)奇偶校驗″。也可具有偶數(shù)奇偶校驗,此時該奇偶校驗生成器/檢查器將使總和必然成為偶數(shù)。
當從內(nèi)存讀回數(shù)據(jù)時,該奇偶校驗電路此時是用來作為檢查器。該電路讀回所有的九個位,并確定是否有一奇數(shù)或偶數(shù)的一。如果有一偶數(shù)的一,則在一奇數(shù)的這些位中必然有一錯誤。這就是奇偶校驗內(nèi)存用來檢測單一位錯誤的方式。該奇偶校驗生成器/檢查器將可確定有一個位是錯誤的,但是與前文所述的ECC例子不同,該奇偶校驗生成器/檢查器并無法確定哪一位是錯誤的。有利之處為可以與內(nèi)存的讀取及寫入操作平行的方式來執(zhí)行奇偶校驗生成及檢查。因此,奇偶校驗生成及檢查不會減緩該內(nèi)存系統(tǒng)的操作。
在某些實施例中,亦可以平行的方式執(zhí)行錯誤檢查及校正碼。在其它的實施例中,可以以循序操作的方式來執(zhí)行錯誤檢查及校正,因而將稍微減緩系統(tǒng)操作,這是因為需要有可讓錯誤檢查及校正電路來校正所檢測到的任何錯誤的時間。然而,此種延遲取決于內(nèi)存架構(gòu)的實施,且可能是較緩慢的(例如,慢了百分之二至三)。
請再參閱圖7A,在一個實施例中,可將數(shù)據(jù)高速緩存28設定成組關聯(lián)的方式。因此,每一組可包含對應于一行的若干個″路″。ECC位186A可對應于特定緩存行中的數(shù)據(jù)(亦即,單一行與列或單一路間的交叉)。亦可以用類似的方式設定指令高速緩存16。因此,指令高速緩存16中的每一緩存行可以有其本身的一組奇偶校驗位及預解碼位180A及182A。在某些實施例中,可在處理器10的晶片上實現(xiàn)二級高速緩存50。有利之處為此種方式可讓二級高速緩存50在與處理器10相同的頻率下工作。
在一個實施例中,可將二級高速緩存50設定成一個″內(nèi)容獨占式″高速緩存,此種內(nèi)容獨占式高速緩存只存放有將因發(fā)生沖突的未命中而要被寫回到內(nèi)存子系統(tǒng)的被舍棄的或復制回的緩存區(qū)段。這些術(shù)語″被舍棄的″(″victimized″)或″復制回的″(″copy-back″)意指先前存放在一級高速緩存(亦即指令高速緩存16及數(shù)據(jù)高速緩存28但必須被覆寫(被舍棄的或被逐出的)以便騰出空間給較新的數(shù)據(jù)的緩存區(qū)段。在一個實施例中,二級高速緩存50可以是256K字節(jié),而指令高速緩存16及數(shù)據(jù)高速緩存28可以分別是64K字節(jié),因而將總共384K字節(jié)的專用儲存空間提供給處理器10。請注意,這些高速緩存容量只是舉例,且視處理器10的確切實施例而定,其它的容量也是可行的。同樣地,可將二級高速緩存50實施為在處理器10之外的芯片上。在其它的實施例中,可將二級高速緩存50實施為″內(nèi)容蘊含式″高速緩存,此種內(nèi)容蘊含式高速緩存包含指令高速緩存16及數(shù)據(jù)高速緩存28中所有數(shù)據(jù)的一份拷貝。此外,在某些實施例中,指令高速緩存16及數(shù)據(jù)高速緩存28可以有不同的容量。在某些實施例中,亦可將二級高速緩存50實施為一組關系型高速緩存。
如該圖所示,一旦指令高速緩存16中的一特定緩存行需要儲存新的指令字節(jié)時,則先前預解碼的指令字節(jié)182A及184A即″被舍棄″。因為二級高速緩存50可儲存(a)具有預解碼信息及奇偶校驗信息的指令字節(jié)、或(b)具有ECC信息的數(shù)據(jù)字節(jié),所以可儲存一指示位(例如程序代碼指示位190),以便指示何種類型的信息被儲存在該二級高速緩存中。解多任務器(demux)316可利用指示位190來選擇來自奇偶校驗檢查單元314或錯誤檢查及校正單元312的輸出作為輸出320。亦可將解多任務器316設定成響應自奇偶校驗檢查單元314或錯誤檢查及校正單元312接收到一個錯誤指示,而觸發(fā)或輸出一個錯誤中斷信號318。例如,如果奇偶校驗檢查單元314確定已發(fā)生了一奇偶校驗錯誤,則可將解多任務器316設定成觸發(fā)中斷信號318。同樣地,可將解多任務器316設定成響應來自錯誤檢查及校正單元312的一對應的錯誤信號,而觸發(fā)錯誤信號318。如該圖所示,可將錯誤檢查及校正單元312設定成接收ECC位186B及數(shù)據(jù)字節(jié)188B。
可將奇偶校驗檢查單元314設定成接收奇偶校驗位180B、預解碼位182B、及指令字節(jié)184B。如前文所述,可確定預解碼位182B及指令字節(jié)184B中被觸發(fā)位的數(shù)目,而生成奇偶校驗位180B。如該圖所示,指示位190及192可指示指令碼或數(shù)據(jù)字節(jié)被儲存在二級高速緩存50的對應的緩存行中??蓪⒔舛嗳蝿掌?16設定成接收指示位或數(shù)據(jù)類型位170(例如位190及192),以便選擇來自奇偶校驗檢查單元314或ECC單元312的輸出。
如該圖所示,可針對指令高速緩存16中的每一緩存行而儲存一個奇偶校驗位180A。例如,可將奇偶校驗位180A用來指示緩存行300的奇偶校驗。同樣地,可將ECC位186A用來把錯誤檢查及校正提供給數(shù)據(jù)高速緩存28中的緩存行302內(nèi)的數(shù)據(jù)字節(jié)188A。雖然圖中將二級高速緩存50示為直接映射式高速緩存,但是亦可將二級高速緩存50實施為具有多個行或″路″的組關系型或完全關系型高速緩存。如該圖所示,可響應正在寫入指令高速緩存16及數(shù)據(jù)高速緩存28的新數(shù)據(jù)覆寫了(亦即舍棄了)該資料,而將一級緩存行300及302寫到二級高速緩存50。
雖然該圖中并未示出,但是亦可將奇偶校驗檢查單元314用來檢查自指令高速緩存16讀取(亦即,包括讀取被傳送到該處理器的指令對準單元、解碼單元、及執(zhí)行單元的指令,并包括讀取將被傳送到二級高速緩存50的被舍棄的指令)的奇偶校驗。在另一個實施例中,可實施奇偶校驗檢查單元314的另一實例,以便提供該功能。同樣地,亦可將錯誤檢查及校正單元312(或其另一實例)用來執(zhí)行自數(shù)據(jù)高速緩存28讀取的錯誤檢查及校正。
在一個實施例中,可以兩個部分來實施二級高速緩存50,其中每一部分儲存不同類型的信息。例如,可將二級高速緩存50的該第一部分設定成唯一地儲存指令字節(jié)以及對應的預解碼位及奇偶校驗位??蓪⒍壐咚倬彺?0的該第二部分設定成唯一地儲存數(shù)據(jù)字節(jié)及ECC位。有利之處為二級高速緩存的該實施例有可能減少儲存數(shù)據(jù)類型位170(例如程序代碼位190及數(shù)據(jù)位192)的需求。然而,當執(zhí)行具有不同的指令字節(jié)與數(shù)據(jù)字節(jié)間的比率的不同程序時,此種類型有可能會降低二級高速緩存50的效率。請注意,可識別該信息來自一級高速緩存的哪一部分(亦即,來自指令高速緩存16或數(shù)據(jù)高速緩存28),而生成數(shù)據(jù)類型位170。例如,來自指令高速緩存16的信息可自動接收用來指示該信息是指令碼信息的數(shù)據(jù)類型位。同樣地,來自數(shù)據(jù)高速緩存28而將要儲存在二級高速緩存50的信息可自動接收用來指示該信息是數(shù)據(jù)的數(shù)據(jù)類型位(例如數(shù)據(jù)位192)。
現(xiàn)在請參閱圖7B,圖中表示用來儲存被舍棄的指令字節(jié)及預解碼信息的系統(tǒng)的另一個實施例。在該實施例中,奇偶校驗信息并未被儲存在指令高速緩存16中,且ECC信息并未被儲存在數(shù)據(jù)高速緩存28中。此種方式可有利地減少用來實施指令高速緩存16及數(shù)據(jù)高速緩存28所需的晶片空間。相反地,當自指令高速緩存16讀出指令字節(jié)184A并將指令字節(jié)184A寫到二級高速緩存50時,奇偶校驗單元402可生成指令字節(jié)184A的奇偶校驗位。同樣地,當自數(shù)據(jù)高速緩存28讀出數(shù)據(jù)字節(jié)188A并將數(shù)據(jù)字節(jié)188A儲存到二級高速緩存50時,可將二級高速緩存設定成生成數(shù)據(jù)字節(jié)188A的ECC位。該系統(tǒng)的其余部分可以以與圖7A所示實施例類似的方式操作。
現(xiàn)在請參閱圖8A,圖中表示用來儲存預解碼信息的方法的一個實施例。在該實施例中,于步驟240中開始提取,以便加載一組所需的指令字節(jié)。在步驟242中,響應該提取,而搜尋該指令高速緩存,以便確定該指令高速緩存是否儲存了所需的指令字節(jié)。如果指令高速緩存的確儲存了所需的指令字節(jié),則在步驟252中自指令高速緩存讀取所述指令字節(jié)及對應的預解碼信息。此種情況被稱為″指令高速緩存命中″,且通常是較佳的,這是因為指令高速緩存通常具有比內(nèi)存系統(tǒng)較短的延遲時間。然而,如果指令高速緩存中并未儲存所需的指令字節(jié),則可在步驟244中向二級高速緩存請求所述指令字節(jié)。如前文所述,在某些實施例中,可再予處理器及一級高速緩存相同的芯片或晶粒上實施該二級高速緩存。如果在步驟246中確定該二級高速緩存中并未儲存所需的信息,則可在步驟248中自主存儲器讀取所述指令字節(jié)及對應的奇偶校驗信息。如本領域技術(shù)人員所了解的,可能有除二級高速緩存以外的額外級層的高速緩存,作為主存儲器子系統(tǒng)的一部分。在某些實施例中,可將該主存儲器子系統(tǒng)設定成支持奇偶校驗信息或ECC。例如,可將該主存儲器子系統(tǒng)設定成儲存寫到主存儲器及自主存儲器讀取的數(shù)據(jù)的奇偶校驗位及ECC位。然而,在其它的實施例中,該主存儲器子系統(tǒng)可以不儲存或支持奇偶校驗信息及(或)ECC信息。
在某些實施例中,可將該二級高速緩存設定成儲存該一級高速緩存中的所有信息的一復制拷貝。在這些實施例中,可將自主存儲器讀取的所述指令字節(jié)連同一奇偶校驗位、一指示位(例如數(shù)據(jù)類型位)、以及尚未針對所述指令字節(jié)生成的預解碼位的無效常數(shù)儲存到該二級高速緩存。如果業(yè)已生成了所述預解碼位,或者一旦已經(jīng)生成了所述預解碼位,則可在步驟250中將所述預解碼位儲存到該二級高速緩存,而覆寫該無效常數(shù)。然而,如前文所述,在其它的實施例中,該二級高速緩存可以是″內(nèi)容獨占式高速緩存″,因而只儲存來自一級高速緩存的被舍棄的信息。在這些實施例中,于該程序的此時點上,可以不將自主存儲器子系統(tǒng)讀取的所述指令字節(jié)儲存到二級高速緩存。一旦自主存儲器子系統(tǒng)接收到所述指令字節(jié)之后,可將一個或多個預解碼單元設定成在步驟252中生成所述指令字節(jié)的預解碼位。
在支持對自主存儲器讀取的信息進行奇偶校驗檢查的實施例中,可將該預解碼單元(或一奇偶校驗單元)設定成在步驟254中檢查奇偶校驗以便確保自主存儲器正確地接收了數(shù)據(jù)。請注意,在某些實施例中,可在該預解碼單元生成對應的預解碼位之前或與其平行的方式,執(zhí)行該奇偶校驗檢測。如果有一錯誤,則可將該預解碼單元設定成在步驟256中將錯誤信號或中斷發(fā)送到處理器。如果該奇偶校驗檢查并未指示錯誤,則可在步驟258中檢查自主存儲器子系統(tǒng)讀取的所述預解碼位,以便確定所述預解碼位是否等于該無效常數(shù)。
如果所述預解碼位等于該無效常數(shù),則可將該預解碼單元設定成在步驟260中生成新的預解碼信息。如果所述預解碼位不等于該無效常數(shù),則可將該預解碼單元設定成在步驟262中將所述指令字節(jié)及先前生成的預解碼位儲存到指令高速緩存。請注意,在某些實施例中,亦可將該指令高速緩存設定成儲存所述指令字節(jié)的奇偶校驗位。在其它的實施例中,一旦自指令高速緩存讀出所述指令字節(jié),并將所述指令字節(jié)儲存到二級高速緩存之后(亦即,于被舍棄時),可生成所述指令字節(jié)的奇偶校驗位。因此,在某些實施例中,可以只針對二級高速緩存執(zhí)行奇偶校驗檢查。在其它的實施例中,可針對指令高速緩存(亦即一級高速緩存)及二級高速緩存執(zhí)行奇偶校驗檢查。此外,在某些實施例中,亦可針對主存儲器子系統(tǒng)執(zhí)行奇偶校驗檢查。
如果所述預解碼位等于該無效常數(shù),則可將該預解碼單元設定成在步驟262中將所述指令字節(jié)、所述預解碼位、及奇偶校驗信息儲存到指令高速緩存。如果立即需要該數(shù)據(jù),則亦可將所述指令字節(jié)提供給所述解碼單元,以供處理。在稍后的時點上,可在步驟264中覆寫或舍棄指令高速緩存中正在儲存所述指令字節(jié)及預解碼信息的對應的緩存行。在此種情況中,可在步驟266中將來自指令高速緩存的預解碼信息及指令字節(jié)連同一對應的奇偶校驗位及一數(shù)據(jù)類型位儲存到二級高速緩存。
現(xiàn)在請參閱圖8B,圖中表示用來處理被舍棄的數(shù)據(jù)字節(jié)的方法的一個實施例。首先,加載/儲存單元可在步驟370中請求或提取數(shù)據(jù)字節(jié)。作為該提取程序的一部分,可在步驟372中檢查一級高速緩存或數(shù)據(jù)高速緩存,以便確定該高速緩存中是否儲存了所需的數(shù)據(jù)字節(jié)。如果數(shù)據(jù)高速緩存中儲存了所述數(shù)據(jù)字節(jié),則可在步驟374中自數(shù)據(jù)高速緩存讀取所述數(shù)據(jù)字節(jié)以及其對應的ECC信息。然而,如果數(shù)據(jù)高速緩存中并未儲存所述所需的數(shù)據(jù)字節(jié),則可在步驟376中向二級高速緩存請求該數(shù)據(jù)。如果在步驟378中確定二級高速緩存中并未儲存該數(shù)據(jù),則可在步驟380中自主存儲器讀取所需的數(shù)據(jù)字節(jié)。
如前文所述,與參照圖8A所述的奇偶校驗信息類似,ECC信息可被下列的方式支持(a)只在二級高速緩存中支持ECC信息;(b)在一級高速緩存及二級高速緩存中支持ECC信息;或(b)在一級高速緩存、二級高速緩存、及主存儲器子系統(tǒng)中支持ECC信息。其它的組合也是可行的(例如,只在主存儲器子系統(tǒng)及二級高速緩存中支持ECC信息)。對于支持來自主存儲器的ECC信息的實施例而言,一旦自主存儲器子系統(tǒng)接收到所述數(shù)據(jù)字節(jié)之后,即可在步驟382中檢查對應的ECC信息。如果該信息是錯誤的,則該錯誤檢查及校正單元可嘗試校正該錯誤。如果該錯誤是無法校正的,則可在步驟384中通知一錯誤。如果該ECC信息是正確的(或錯誤被校正了),則可在步驟386中將該ECC信息連同所述數(shù)據(jù)字節(jié)儲存在二級高速緩存中,如前文中參照圖8A所述的,該例子系假設內(nèi)容蘊含式二級高速緩存。在某些實施例中,該二級高速緩存可以是內(nèi)容獨占式高速緩存,且在自主存儲器直接讀取的數(shù)據(jù)在一級高速緩存中被舍棄之前,可以不將該資料儲存在二級高速緩存。
在稍后的某一時點上,可在步驟392中舍棄或覆寫用來儲存所述數(shù)據(jù)字節(jié)及ECC信息的一級緩存行。在此種情況中,可在步驟366中將來自數(shù)據(jù)高速緩存的所述數(shù)據(jù)字節(jié)連同對應的ECC位及一數(shù)據(jù)類型位儲存到二級高速緩存??蓪⒃摂?shù)據(jù)類型位用來指示所儲存的信息是數(shù)據(jù)及ECC信息(而不是指令字節(jié)以及奇偶校驗信息及預解碼信息)。
現(xiàn)在請參閱圖9,圖中表示被設定成儲存被舍棄的指令字節(jié)的預解碼信息且仍然對被舍棄的數(shù)據(jù)字節(jié)提供奇偶校驗及(或)ECC保護的計算機系統(tǒng)的一個實施例。在該實施例中,處理器10包含一級指令高速緩存16及一級數(shù)據(jù)高速緩存28。處理器10亦包含預解碼/預提取單元12及加載/儲存單元26。如該圖所示,預提取/預解碼單元12及加載/儲存單元26可分別包含一奇偶校驗生成及檢查單元402、以及錯誤檢查及校正單元404。
在該實施例中,二級高速緩存50被設定成具有干儲存位置406,而所述儲存位置406被設定成儲存二級高速緩存50中儲存的對應的字節(jié)的奇偶校驗信息及(或)ECC信息。在該實施例中,該計算機系統(tǒng)亦包含一內(nèi)存控制器410。內(nèi)存控制器410可包含奇偶校驗單元414,而奇偶校驗單元414被設定成為來自主存儲器420的字節(jié)生成并檢查奇偶校驗。對于支持奇偶校驗的實施例而言,可將主存儲器子系統(tǒng)420設定成具有用來儲存奇偶校驗信息430的額外的儲存位置。
在其它的實施例中,內(nèi)存控制器410亦可包含錯誤檢查及校正單元416,該錯誤檢查及校正單元416被設定成為主存儲器子系統(tǒng)420中儲存的信息生成并檢查錯誤校正碼。請注意,可針對用來在內(nèi)存420、內(nèi)存控制器410、與處理器10之間傳送信息的總線而生成額外的錯誤檢查及校正信息。該信息可以是本文所述的ECC信息及(或)奇偶校驗信息以外的信息。如前文所述,在某些實施例中,可將內(nèi)存子系統(tǒng)420及內(nèi)存控制器410設定成不支持奇偶校驗信息及(或)ECC信息。亦如該圖所示,在某些實施例中,可將二級高速緩存50設定成儲存每一緩存行的數(shù)據(jù)類型位408。
舍棄緩存行,并自內(nèi)存420讀取對應的指令字節(jié)(所述指令字節(jié)本身也受到ECC信息的保護),即可利用一級指令高速緩存16中的奇偶校驗位來校正所檢測到的單一位錯誤。相反地,可修改一級數(shù)據(jù)高速緩存28中儲存的數(shù)據(jù),因而不會將內(nèi)存420中的數(shù)據(jù)的原始拷貝用來校正錯誤。因此,在某些實施例中,在數(shù)據(jù)高速緩存28中設有ECC信息尤其是有用的,可提供校正錯誤的替代性機制,以取代自內(nèi)存420復制數(shù)據(jù)字節(jié)。
例示的計算機系統(tǒng)現(xiàn)在請參閱第10圖,圖中表示采用微處理器10的計算機系統(tǒng)500的一個實施例的方塊圖。在所示系統(tǒng)中,主存儲器504經(jīng)由內(nèi)存總線506而連接到總線橋接器502(該總線橋接器502可用來作為內(nèi)存控制器),且圖形控制器508經(jīng)由AGP總線510而連接到總線橋接器502。最后,多個PCI裝置512A及512B經(jīng)由PCI總線514而連接到總線橋接器502??蛇M一步設有輔助總線橋接器516,以便經(jīng)由一EISA/ISA總線520而將電氣接口提供給一個或多個EISA或ISA裝置518。微處理器10系經(jīng)由CPU總線524而連接到總線橋接器502。
總線橋接器502提供了微處理器10、主存儲器504、圖形控制器508、與連接到PCI總線514的各裝置間的接口。當自連接到總線橋接器502的一個裝置接收到操作時,總線橋接器502識別該操作的目標(例如,該目標是特定的裝置;或者在PCI總線514的情況中,該目標是在PCI總線514)上)??偩€橋接器502將該操作傳送到目標裝置??偩€橋接器502通常將操作自來源裝置所使用的協(xié)議轉(zhuǎn)換為目標裝置或總線所使用的協(xié)議。
除了將ISA/EISA總線接口提供給PCI總線514之外,輔助總線橋接器516可視需要而進一步設有額外的功能。例如,在一個實施例中,輔助總線橋接器516包含一主PCI仲裁器(圖中未示出),用以仲裁PCI總線514的主控權(quán)。計算機系統(tǒng)500內(nèi)亦可視需要而包含在輔助總線橋接器516外部或整合到輔助總線橋接器516內(nèi)的輸入/輸出控制器(圖中未示出),以便對一鍵盤及鼠標522以及各種串行端口及并行端口提供操作上的支持。在其它的實施例中,可在微處理器10與總線橋接器502之間將一外部高速緩存單元(圖中未示出)進一步連接到CPU總線524。在替代實施例中,可將該外部高速緩存連接到總線橋接器502,且可將該外部高速緩存的高速緩存控制邏輯電路整合到總線橋接器502。
主存儲器504是一種用來儲存應用程序且微處理器10執(zhí)行時所主要使用的內(nèi)存。適用的主存儲器504包括動態(tài)隨機訪問內(nèi)存(DynamicRandom Access Memory;簡稱DRAM),且最好是多個記憶組的同步DRAM(Synchronous DRAM;簡稱SDRAM)。
PCI裝置512A及512B代表諸如網(wǎng)絡適配卡、視訊加速器、聲卡、硬盤機或軟盤機或磁盤控制器、小型計算機系統(tǒng)接口(Small ComputerSystem Interface;簡稱SCSI)卡、及電話卡等的各種周邊裝置。同樣地,ISA裝置518代表諸如調(diào)制解調(diào)器、聲卡、及GPIB或現(xiàn)場使用總線適配卡等各種數(shù)據(jù)擷取適配卡等的各種周邊裝置。
提供圖形控制器508,以便控制文字及影像在顯示器526上的成像。圖形控制器508可包含本領域已知的典型圖形加速器,以便使可有效地移進及移出主存儲器504的三維數(shù)據(jù)結(jié)構(gòu)成像。圖形控制器508因而可以是AGP總線510的一主控裝置,這是因為圖形控制器508可請求并取得總線橋接器502內(nèi)的目標接口的使用權(quán),因而可訪問主存儲器504。專用的圖形總線可適應自主存儲器504迅速地獲取數(shù)據(jù)。對于某些操作而言,可將圖形控制器508進一步設定成在AGP總線510上生成PCI協(xié)議交易。總線橋接器502的AGP接口因而可包含用來支持AGP協(xié)議交易以及PCI協(xié)議目標及來源裝置交易的功能。顯示器526是可顯示影像或文字的任何電子顯示器。適用的顯示器526包括陰極射線管(CathodeRay Tube;簡稱CRT)及液晶顯示器(Liquid Crystal Display;簡稱LCD)等。
請注意,雖然在前文的說明中使用了AGP、PCI、以及ISA或EISA總線作為例子,但是可視需要而代用任何的總線架構(gòu)。又請注意,計算機系統(tǒng)500可以是包含額外的微處理器的一多重處理計算機系統(tǒng)。
又請注意,本發(fā)明的說明可能提及各種信號的觸發(fā)。在本文的用法中,如果信號載有用來指示特定狀況的數(shù)值,則該信號″被觸發(fā)″(″asserted″)。相反地,如果信號載有用來指示缺少特定狀況的數(shù)值,則該信號″被停止觸發(fā)″(″deasserted″)。當信號載有邏輯零值時,或相反地,當信號載有邏輯一值時,可將該信號定義為被觸發(fā)。此外,在前文的說明中,曾經(jīng)述及舍棄了各種值??梢匀舾煞N方式舍棄一值,但通常涉及修改該值,以便接收該值的邏輯電路不理會該值。例如,如果如果該值包含一位,則可使該值的狀態(tài)反相,而舍棄該值。如果該值是n位的值,則其中一種該n位的編碼可指示該值是無效的。將該值設定為該無效的編碼,即可使該值被舍棄。此外,一個n位的值可包含一有效位,而當設定該有效位時,即可指示該n位的值是有效的。該有效位的復位可包含該值的舍棄。也可以使用其它舍棄數(shù)值的方法。
至此已揭示了一種用來儲存預解碼信息以及被舍棄的指令字節(jié)及(或)數(shù)據(jù)字節(jié)的系統(tǒng)及方法。雖然已相當詳細地討論了各圖式所述及及所示的實施例,但是其它的實施例是可能的且可被考慮的。我們當了解,所述圖式及詳細說明的用意并非在將本發(fā)明限制在所揭示的特定形式,相反地,其用意在涵蓋在最后的申請專利范圍所定義本發(fā)明的精神及范圍內(nèi)的所有修改、等效物、及替代形式。
權(quán)利要求
1.一種微處理器,包含預解碼單元(12),該預解碼單元被設定成接收指令字節(jié),并生成對應的預解碼信息;連接到該預解碼單元的一指令高速緩存(16),該指令高速緩存被設定成儲存所述指令字節(jié)及對應于所述指令字節(jié)的預解碼信息;加載/儲存單元(26),該加載/儲存單元被設定成接收數(shù)據(jù)字節(jié);數(shù)據(jù)高速緩存(28),該數(shù)據(jù)高速緩存被設定成從該加載/儲存單元接收并儲存所述數(shù)據(jù)字節(jié);以及二級高速緩存(50),該二級高速緩存被設定成從該指令高速緩存接收并儲存被舍棄的指令字節(jié),并從該數(shù)據(jù)高速緩存接收并儲存被舍棄的數(shù)據(jù)字節(jié),其中該二級高速緩存被設定成接收并儲存所述儲存的被舍棄的指令字節(jié)的奇偶校驗信息及預解碼信息,其中該二級高速緩存被設定成接收并儲存所述儲存的被舍棄的數(shù)據(jù)位組的錯誤校正碼位。
2.根據(jù)權(quán)利要求1所述的微處理器,進一步包含奇偶校驗位生成及檢查邏輯電路(402),該奇偶校驗位生成及檢查邏輯電路被設定成為傳送到該二級高速緩存的指令字節(jié)生成奇偶校驗位,并檢查從該二級緩存內(nèi)存?zhèn)魉偷闹噶钭止?jié)的奇偶校驗位。
3.根據(jù)權(quán)利要求1所述的微處理器,進一步包含錯誤檢查及校正邏輯電路(404),且該錯誤檢查及校正邏輯電路被設定成為傳送到該二級高速緩存的數(shù)據(jù)字節(jié)生成所述錯誤校正碼位,并檢查從該二級高速緩存?zhèn)魉偷臄?shù)據(jù)字節(jié)的所述錯誤校正碼位。
4.根據(jù)權(quán)利要求3所述的微處理器,其中該錯誤檢查及校正邏輯電路(404)被設定成利用所述錯誤校正碼位來校正從該二級高速緩存?zhèn)魉偷乃鰯?shù)據(jù)位組中的至少一個位錯誤。
5.根據(jù)權(quán)利要求1所述的微處理器,其中該二級緩存內(nèi)存被分成若干緩存行,其中所述緩存行包含第一儲存區(qū)及第二儲存區(qū),其中每一緩存行被設定成儲存一個或多個指示位,用以指示(a)各指令位組系儲存在該緩存行的第一儲存區(qū),且各預先解碼位及一奇偶校驗位系儲存在該緩存行的第二儲存區(qū);或(b)各數(shù)據(jù)字節(jié)系儲存在該緩存行的第一儲存區(qū),且各錯誤校正碼位系儲存在該緩存行的第二儲存區(qū)。
6.一種方法,包含下列步驟接收指令字節(jié);生成所述指令字節(jié)的預解碼信息;將所述指令字節(jié)及預解碼信息儲存在第一內(nèi)存(16)中;響應所述指令字節(jié)在該第一內(nèi)存中被覆寫,而將至少一部分的所述指令字節(jié)及該預解碼信息連同奇偶校驗信息輸出到第二內(nèi)存(50);接收數(shù)據(jù)字節(jié);將所述數(shù)據(jù)字節(jié)儲存到第三內(nèi)存(28);以及響應所述數(shù)據(jù)字節(jié)在該第三內(nèi)存中被覆寫,而將至少一部分的所述數(shù)據(jù)字節(jié)連同對應的錯誤校正碼信息輸出到該第二內(nèi)存。
7.根據(jù)權(quán)利要求6所述的方法,其中該第二內(nèi)存被分成若干緩存行,其中該方法進一步包含將一指示位儲存在該第二內(nèi)存中的每一緩存行,其中該指示位系用來指示所述預解碼位或所述錯誤校正碼位被儲存在該緩存行中。
8.根據(jù)權(quán)利要求7所述的方法,進一步包含下列步驟將每一邏輯區(qū)段的一指示位儲存在該第二內(nèi)存中,其中該指示位系用來指示預解碼位或錯誤檢查及校正位被儲存在該第二內(nèi)存中。
9.根據(jù)權(quán)利要求7所述的方法,進一步包含下列步驟將至少一個所儲存的奇偶校驗位以及所述指令位組的對應的儲存部分及該預解碼信息傳送回該處理器,其中該處理器被設定成如果該奇偶校驗位是正確的,則使用所傳送的該預解碼信息,而不必生成新的預解碼信息。
10.一種計算機系統(tǒng),包含主系統(tǒng)內(nèi)存(402);連接到該主系統(tǒng)內(nèi)存的內(nèi)存控制器(410);連接到如權(quán)利要求1-5任一項所述的內(nèi)存控制器的微處理器(10)。
全文摘要
本發(fā)明揭示了一種微處理器,該微處理器被設定成儲存被舍棄的指令及數(shù)據(jù)字節(jié)。在一個實施例中,該微處理器包含預解碼單元、指令高速緩存、數(shù)據(jù)高速緩存、及二級高速緩存。該預解碼單元接收指令字節(jié),并生成對應的預解碼信息,且該預解碼信息連同所述指令字節(jié)被儲存在該指令高速緩存。該數(shù)據(jù)高速緩存接收并儲存數(shù)據(jù)字節(jié)。該二級高速緩存被設定成接收并儲存來自該指令高速緩存的被舍棄的指令字節(jié)、以及奇偶校驗信息及預解碼信息,且接收并儲存來自該數(shù)據(jù)高速緩存的被舍棄的數(shù)據(jù)字節(jié)、以及錯誤校正碼位??蓪⒅甘疚粌Υ嬖诰彺嫘胁糠?,以便指示該緩存行中儲存的數(shù)據(jù)的類型。
文檔編號G06F9/38GK1522410SQ02813010
公開日2004年8月18日 申請日期2002年4月2日 優(yōu)先權(quán)日2001年6月26日
發(fā)明者G·D·小左拉斯基, G D 小左拉斯基 申請人:先進微裝置公司