專利名稱:可自我重置的微處理器及其方法
技術領域:
本發明涉及一種微處理器,特別是涉及一種可自我重置的微處理器及其方法。
背景技術:
對目前的微處理器除錯是非常困難的,微處理器的研發人員使用各種技術來試著 重現錯誤以獲得信息來了解錯誤產生的原因。目前所使用的技術包括改變微處理器在一般 正常模式(normal mode)操作下的特征,如此可能導致微處理器和其他系統元件之間的互 動操作變得異常且不可預期,而這些不正常的互動操作也可能產生非預期的結果并妨礙除 錯的成效。因此亟需提出一種新穎的機制,其能重現錯誤,亦不會使微處理器和其他元件相
互影響。
發明內容
鑒于上述,本發明提出一種可部份自我重置的微處理器及其方法,其透過部份重 置機制,期能再制錯誤,亦維持系統正常運作。本發明的一實施例提出一可部份自我重置的微處理器。微處理器包括一總線接口 單元(bus interface unit),其用來將該微處理器連接至一總線,其中該總線包括一訊號, 當該訊號一被設置(asserted)時,便命令所有在總線上的裝置不能(refrain)在總線上初 始化一傳輸(transaction)。微處理器還包括微代碼(microcode),用來根據檢測到的一事 件(event)來使總線接口單元設置該訊號至總線上;重置(reset)微處理器,但對于設置該 訊號至總線的部份總線接口單元則不進行重置;以及在微處理器重置之后,用來控制總線 接口單元取消設置(deassert)該訊號。本發明的另一實施例提供一部份自我重置微處理器的方法。所述的微處理器包 括一總線接口單元(bus interface unit),其用來將該微處理器連接至一總線,其中該總 線包括一訊號,當該訊號一被設置(asserted)后,便命令所有在總線上的裝置不能在總線 上初始化一傳輸(transaction)。所述的方法包括首先,微處理器根據檢測到的一事件 (event)來設置該訊號至總線上;接著,在設置該訊號之后,微處理器自行重置,但不重置 部份用來設置訊號至總線的總線接口單元;最后,重置在微處理器重置之后,微處理器即取 消設置(deassert)在總線上的該訊號。本發明的再一實施例提供一可部份自我重置的微處理器。微處理器包括一中斷控 制器(interrupt controller)及一微代碼。微代碼用來根據檢測到的一事件(event)來 設定一標志(flag);根據檢測到的該事件來儲存微處理器的一狀態至一存儲器中;在設定 標志和儲存狀態之后,微處理器自行重置,但不重置中斷控制器;以及在重置微處理器后, 從存儲器重新載入微處理器的狀態,其中,若微代碼判斷標志被設定(set),則微代碼不會 重新載入中斷控制器的狀態。本發明的又一實施例提供一部份自我重置微處理器的方法,其中微處理器包括一中斷控制器(interrupt controller)。所述的方法包括首先,微處理器根據檢測到的一 事件在內部設定一標志;接著,微處理器根據檢測到的該事件來儲存微處理器的一狀態至 一存儲器中;再來,在設定標志和儲存狀態之后,微處理器自行重置,但不重置中斷控制器; 最后,在重置微處理器后,微處理器從存儲器重新載入自身的狀態,其中,若判斷標志被設 定,則不會重新載入中斷控制器的狀態。
圖1為本發明所揭示的可部份自我重置的微處理器的系統架構圖。
圖2為本發明所揭示的部份自我重置微處理器的方法的步驟流程圖。
附圖符號說明
101系統
100微處理器
102指令快取
104特定模塊寄存器
106儲存元件
108進階可編程中斷控制器
112指令轉譯器
114跟蹤程序
116寄存器別名表
118保留站
122執行單元
124引退單元
128芯片組
132系統存儲器
134區塊下一請求產生邏輯電路
136內部處理器重置訊號
138處理器總線
142與門
144微代碼
146部份重置位
148反向器
152重置邏輯電路
156重置程序
158處理器狀態
162控制寄存器
步驟 S202-S218
具體實施例方式
請先參考圖1,為本發明所揭示的可部份自我重置的微處理器的系統架構圖,其中,系統101包括可部份自我重置的微處理器(partiallyself-resetting microprocessor) 100。系統101包括一系統存儲器132,其耦接于一芯片組(chipset) 128, 并受其控制。系統存儲器132可用來儲存一處理器狀態158,以下會有詳盡的描述。芯片組 1 藉由一處理器總線138 (processor bus)來耦接于微處理器100。一實施例中,處理器 總線138包括一區塊下一請求信號(Block Next Request signal,BNR#signal)。當處理 器總線138上的一裝置,如微處理器100或芯片組128,設置區塊下一請求信號時,可阻止其 他裝置在處理器總線138上初始一個新的傳輸(transaction)。當微處理器100自我重置 時,微處理器100會設置區塊下一請求信號來防止獨占(hang)處理器總線138,以下將加以 詳述。微處理器100包括一含有多階段的管線,其包括各種功能單元。管線包括 一指令快取(instruction cache) 102,其依序耦接于一指令轉譯器(instruction translator)112、 一 寄存器別名表(Register Alias Table, RAT)116、 一 保留站 (reservation station) 118、一執行單元(executionunit) 12 以及一弓| 退單元(retire unit) 124。指令轉譯器112用來將巨集指令(macroinstruction)(如x86系列架構中)轉 譯成微指令(microinstruction),該微指令是內建于微處理器100的精簡指令集計算機架 構(RISC-like microarchitecture)的微指令集中。保留站118發出指令至執行單元122, 并以非循序的方式執行程序(execution out of programorder)。引退單元1 包括一重 排緩沖器(reorder buffer),并依循序的方式來引退指令(retirement of instruction in program order)。執行單元122包括載入/儲存單元(load/store unit)、整數單元 (integer unit)、浮點單元(floating-point unit)、分支單元(branch unit)或單一指令 多重資料單元(SIMD unit)。微處理器100還包括一進階可編程中斷控制器(Advanced ProgrammableInterrupt Controller,APIC) 108,其耦接于執行單元 122 以及一總線接口單 元(bus interface unit) 126,總線接口單元1 作為微處理器100連至處理器總線138的 接口。進階可編程中斷控制器108是接收系統101內部的各種中斷來源,如芯片組1 和周 邊裝置,并傳送這些中斷至專門管理中斷的微處理器100的核心。在本發明實施例中,進階 可編程中斷控制器108的功能與區域進階可編程中斷控制器(Local APIC)類似,相關說明 請參考 2006年 6 月出版,關于 htel IA-32 架構的「Architecture Software Developer's Manual」一書的第三A冊第八章「System Programming Guide」的敘述。微處理器100又包括一儲存元件106,用來儲存一部份重置標志(apartial reset flag)及其地址,儲存元件106耦接于執行單元122。在本發明的一實施例中,部份重置標 志及其儲存地址位于使用者無法尋址的(non-user addressable)儲存元件106中,因此 不會被微處理器100在圖2的步驟S212中,當被微處理器100自我重置時被清除,關于這 部份的細節以下將會詳述。更具體地說,儲存元件106會因開啟(power-on)微處理器100 的電源而清除內容(power-on reset),但不會受非因電源開啟的重置操作(non-power-on reset)而影響,因此藉由設置重置輸入訊號給微處理器100、或是如步驟S212中的自我重 置來進行重置的情形,就不會清除儲存元件106的內容。微處理器100又包括特定模塊寄存器(Model Specific Registers,MSRs) 104,其 耦接于執行單元122。總線接口單元126、進階可編程中斷控制器108、特定模塊寄存器104、部份重置標志及其地址的操作將在下面詳述。微處理器100也包括微代碼(microcode) 144,其包括跟蹤程序 (tracerroutines)114及重置程序(reset routines) 156。跟蹤程序114是一組微代碼程 序,藉由軟件寫入一控制寄存器來被驅動,如使用WRMSR指令來寫入特定模塊寄存器104。 跟蹤程序114(亦可稱為跟蹤器(tracer)),可用來作為對微處理器100除錯以及調整執行 成效的工具。各種事件會驅動跟蹤程序114來收集處理器狀態信息,并將其寫入系統存儲 器132的特定地址。在本發明實施例中,跟蹤程序114藉由定期呼叫而被驅動,例如,每當微處理器 100執行并引退N個指令時(如100,000個指令,此數值可由使用者決定),跟蹤程序114便 儲存處理器狀態158至系統存儲器132。工程師便可從各檢查點(checkpoints)來將所儲 存的處理器狀態158重新載入至一模擬器,以對微處理器100進行除錯,其中模擬器可以是 微處理器100的軟件功能模塊。然而,微處理器100可能有一些未包含在處理器狀態158的 隱藏狀態,因而使模擬器無法再制錯誤。因此,圖1的微處理器100中的跟蹤程序114,便包 含會重置微處理器100并清除其狀態的機制,隨后并依據部分的重置順序,由重置程序156 從系統存儲器132重新載入處理器狀態158,以及在下一個指令時重新(resume)執行。為了使錯誤發生,微處理器100必須歷經一段時間(如一天)依照順序地執行 上述模式(即停止執行,儲存狀態至存儲器,自我重置,從存儲器重新載入狀態,以及繼續 執行)。不幸地,在某些狀況下,若開啟跟蹤程序114的重置機制,在錯誤發生之前,微處理 器100會時常占用處理器總線138。一般而言,正常情況下,微處理器100和芯片組1 會 同時重置,但就發生微處理器100獨占處理器總線138的情形來說,一般的狀況是微處理器 100被重置,而芯片組1 不會被重置,因此會發生微處理器100獨占處理器總線138的情 形。更具體來說,正常情況下,在芯片組1 在處理器總線138上初始傳輸之前,微處理器 100的總線接口單元1 于重置之后,會具有足夠的時間來執行自我初始化的操作。然而, 因為在微處理器100自我重置、而芯片組1 未被重置的情形下,當微處理器100正進行初 始化時,芯片組1 便在處理器總線138上初始傳輸,因而導致處理器總線138被占用的狀 況。跟蹤程序114進行重置所產生第二個問題,是會遺失芯片組1 在重置訊號期間 所產生給微處理器100的中斷。這是因為進階可編程中斷控制器108的重置就是微處理器 100的部份重置,如此導致進階可編程中斷控制器108在重置與重新載入原先儲存的狀態 之間,遺失自己的狀態而無法正確地處理芯片組1 產生的中斷。以下將描述如何解決上述問題,那就是,修改微處理器100僅執行一部份的自我 重置。更具體地說,為了解決上述第二個問題,微處理器100將不重置進階可編程中斷控 制器108,也不從系統存儲器132中重新載入處理器狀態158。為了解決上述第一個問題, 當跟蹤程序114要求微處理器100重置時,總線接口單元126將取得處理器總線138的所 有權,并初始一個空傳輸(dummy transaction),以及在重置微處理器100之前設置區塊下 一請求信號(BNR#),而且不重置進階可編程中斷控制器108或區塊下一請求產生邏輯電路 (BNR#generation logic) 134。圖2的流程圖有詳細的操作描述,而以下將先對總線接口單 元126進行更詳細的描述。總線接口單元1 包括區塊下一請求產生邏輯電路134、重置邏輯電路(resetlogic) 152以及控制寄存器(control register) 162。控制寄存器162可被微代碼144編 程來要求部份重置。在本發明實施例中,控制寄存器162包括一部份重置位146,其提供 給一反向器148,其輸出將提供給一兩輸入端口的與門142。與門142也接收從BIU 126 內部的重置邏輯電路152所傳來的一內部處理器重置訊號136,進而產生一合格重置訊號 (qualifiedreset output) 154,以提供給總線接口單元126的進階可編程中斷控制108及 區塊下一請求產生邏輯電路134。內部處理器重置訊號136也會提供給微處理器100中其 余元件,當然,其他可輕易思及來產生內部處理器重置訊號136與合格重置訊號巧4的邏輯 電路皆為本發明所保護的范圍。接著,請參考圖2,圖2為本發明所揭示的部份自我重置微處理器的方法的步驟流 程圖,其中相關架構請參考圖1。流程開始于步驟S202。首先,步驟S202中,使用者編寫微處理器100的特定模塊寄存器104以周期性地 觸發跟蹤程序114,例如,每引退N個指令(如100,000個指令)就觸發一次。流程前進至 步驟S204。 步驟S204中,周期性產生的事件會觸發跟蹤程序114,跟蹤程序114便儲存處理器 狀態158至存儲器132。在本發明實施例中,跟蹤程序114在儲存狀態之前,會執行一回寫 無效(write-back-invalidate)操作(如執行WBINVD指令)。流程前進至步驟S206。接著,在步驟S206中,跟蹤程序114設定部份重置標志,并儲存先前所存處理器狀 態158的存儲器地址至存儲器132。跟蹤程序114隨后便告知總線接口單元1 進行部份 重置操作。流程前進至步驟S208。在步驟S208中,總線接口單元1 在處理器總線138上初始一個空傳輸,并設置 區塊下一指令訊號以防止芯片組1 在處理器總線138上執行任何傳輸。流程前進至步驟 S212。再來,步驟S212中,總線接口單元1 重置整個微處理器100,除了進階可編程中 斷控制器108及區塊下一請求產生邏輯電路134之外。也就是說,總線接口單元1 設置 內部處理器重置訊號136,但不設置合格重置訊號154,以避免重置進階可編程中斷控制器 108及區塊下一請求產生邏輯電路134。由于總線接口單元1 沒有重置區塊下一請求產 生邏輯電路134,因此會持續設置區塊下一指令訊號。又由于總線接口單元1 沒有重置進 階可編程中斷控制器108,因此當微處理器100被重置時便不會錯過中斷訊號。流程前進至 步驟S214。步驟S214中,由于在步驟S212已進行重置的操作,微處理器100會使得重置程序 156被執行。重置程序156會命令總線接口單元1 取消設置區塊下一請求訊號(其已經 是正常的重置程序156的一部份,例如,從RESET接腳產生重置訊號就包含這個微代碼)。隨后,在步驟S216中,重置程序156檢測到部份重置標志已被設定,便把從在步驟 S206中所儲存在存儲器132中的存儲器地址予以重新載入處理器狀態158。然而,重置程 序156不會重新載入進階可編程中斷控制器108的狀態,而僅是允許進階可編程中斷控制 器108依據重置前的狀態來繼續回應中斷訊號,因此微處理器100并不會錯過遺失任何中 斷訊號。此外,重置程序156將清除部份重置標志。流程前進至步驟S218。最后,步驟S218中,重置程序156重新執行下一個使用者指令,意即,在步驟S204 中跟蹤程序114被觸發之前所完成的最后指令的下一個使用者指令。微處理器100繼續執行使用者指令,直到其他事件觸發跟蹤程序114時,便回到步驟S204重復上述步驟。雖然上述實施例是采用周期性驅動跟蹤程序114來進行重置,但本發明解決了避 免發生錯誤的問題(bus hang),因此亦可廣義應用于使處理器100自我重置且不會重置到 芯片組128的任何情況中。更進一步地,又因為本發明解決了遺失中斷訊號的問題,因此還 可廣義的應用在當微處理器100從先前重置狀態(pre-reset state)回復以繼續中斷的處 理的應用中。再者,本發明雖僅提到x86系列架構的總線(例如,具有區塊下一請求信號),然而 其他能產生使處理器重置的訊號的總線亦包括在內,不以本發明所揭示的內容為限。盡管本發明描述了各種實施例,但不以揭示的內容為限,本領域的技術人員,皆 可在不脫離本發明精神的前提下進行變更。例如,軟件可實作功能、架構、模塊、模擬和 /或上述各裝置、方法。藉由使用一般程序語言(如C,C++)、硬件描述語言(hardware description languages, HDL),包括Verilog硬件描述語言等,或其他可用的程序,來實作 本發明所述的軟件。這樣的軟件可儲存于任何計算機可用的儲存媒體,如磁帶(magnetic tape)、半導體、磁盤(magnetic disk)、或光盤(optical disc)(例如CD-ROM,DVD-ROM等)、 網絡、有線/無線或其他通訊媒體。本發明所提的裝置及方法實施例可包含于一半導體智 能核心(semiconductor intellectual property core),如處理器核心(例如內嵌于硬件 描述語言中),且可通過集成電路的生產轉成硬件形式。此外,本發明所述的裝置及方法亦 可是硬件和軟件的組合,不以所揭示的內容為限。而本發明特別適用于一般用途計算機系 統的微處理器裝置中。以上所述僅為本發明的較佳實施例而已,并非用以限定本發明的權利要求;凡其 它未脫離發明所揭示的精神下所完成的等效改變或修飾,均應包含在本發明的權利要求范 圍內。
權利要求
1.一種可部份自我重置的微處理器,包含一總線接口單元,用來將該微處理器連接至一總線,其中該總線包括一訊號,當該訊號 一被設置時,便命令所有在該總線上的裝置不能在該總線上初始化一傳輸;及一微代碼,用來執行以下操作根據檢測到的一事件使該總線接口單元設置該訊號至該總線上;重置該微處理器,但不重置部份用來設置該訊號至該總線的該總線接口單元;及在該微處理器重置之后,控制該總線接口單元取消設置在該總線上的該訊號。
2.如權利要求1所述的微處理器,是經由該總線來存取一存儲器,其中該微代碼還用 來在重置該微處理器之前,根據檢測到的該事件儲存該微處理器的一狀態至該存儲器,并 于取消設置該訊號之后,從該存儲器中重新載入該微處理器的該狀態。
3.如權利要求2所述的微處理器,還包含一中斷控制器;其中,當該微代碼重置該微處理器時,不會重置該中斷控制器。
4.如權利要求3所述的微處理器,其中該微代碼在重置該微處理器之前會設定該微處 理器內部的一標志,其中,該微代碼會判斷該標志是否設定,若該標志被設定,則當該微代 碼從該存儲器中重新載入該微處理器的該狀態時,不會重新載入該中斷控制器的狀態。
5.如權利要求4所述的微處理器,其中該微代碼判斷該標志是否被設定之后,會清除 該標志ο
6.如權利要求2所述的微處理器,其中該微代碼從該存儲器中重新載入該微處理器的 該狀態之后,會重新執行使用者指令。
7.如權利要求1所述的微處理器,其中所檢測到的該事件是指自從上次重置后,該微 處理器已引退一預定數量的指令。
8.如權利要求1所述的微處理器,其中該訊號為一區塊下一請求信號。
9.一種部份自我重置微處理器的方法,其中該微處理器包括一總線接口單元,其用來 將該微處理器連接至一總線,其中該總線包括一訊號,當該訊號一被設置,便命令所有在該 總線上的裝置不能在該總線上初始化一傳輸,該方法包含該微處理器根據檢測到的一事件設置該訊號至該總線上;在設置該訊號之后,該微處理器自我重置,但不重置部份用來設置該訊號至該總線的 該總線接口單元;及重置該微處理器之后,該微處理器取消設置在該總線上的該訊號。
10.如權利要求9所述的方法,其中該微處理器是經由該總線來存取一存儲器,該方法 還包含在重置該微處理器之前,根據檢測到的該事件來儲存該微處理器的一狀態至該存儲 器;及于取消設置該訊號之后,從該存儲器中重新載入該微處理器的該狀態。
11.如權利要求10所述的方法,其中該微處理器包含一中斷控制器,其中,當重置該微 處理器時,不會重置該中斷控制器。
12.如權利要求11所述的方法,還包含在重置該微處理器之前,該微處理器設定本身內部的一標志;其中,重新載入該微處理器的該狀態的步驟中,包含判斷該標志是否設定,若該標志被 設定,則不重新載入該中斷控制器的狀態。
13.如權利要求12所述的方法,還包含 判斷該標志是否被設定之后,清除該標志。
14.如權利要求10所述的方法,其中儲存該微處理的該狀態至該存儲器以及從該存儲 器重新載入該狀態的步驟是由該微處理器的一微代碼執行。
15.如權利要求10所述的方法,還包含從該存儲器重新載入該微處理器的該狀態后,重新執行使用者指令。
16.如權利要求9所述的方法,其中于檢測該事件步驟中,包含檢測自從上次重置后, 該微處理器是否已引退一預定數量的指令。
17.一種微處理器,可用來部份自我重置,包含 一中斷控制器;及一微代碼,用來執行以下操作 根據檢測到的一事件來設定一標志;根據檢測到的該事件來儲存該微處理器的一狀態至一存儲器中; 在設定該標志與儲存該狀態之后,重置該微處理器而不重置該中斷控制器;及 重置該微處理器后,從該存儲器重新載入該微處理器的該狀態,其中,若該微代碼判斷 該標志被設定,則該微代碼不會重新載入該中斷控制器的狀態。
18.如權利要求17所述的微處理器,其中該微代碼判斷該標志是否被設定之后,會清 除該標志。
19.如權利要求17所述的微處理器,其中該微代碼從該存儲器中重新載入該微處理器 的該狀態之后,會重新繼續執行使用者指令。
20.如權利要求17所述的微處理器,其中該事件是指自從上次重置后,已引退一預定 數量的指令。
21.如權利要求17所述的微處理器,還包含一總線接口單元,用來將該微處理器連接至一總線,其中該總線包括一訊號,當該訊號 一被設置,便命令所有在該總線上的裝置不能在該總線上初始化一傳輸; 其中該微代碼還執行以下操作 重置該微處理器之前,設置該訊號至該總線上;當該微處理器自我重置時,不重置部份用來設置該訊號至該總線的該總線接口單元;及在該微處理器重置之后,取消設置該訊號。
22.如權利要求17所述的微處理器,其中該訊號為一區塊下一請求信號。
23.—種部份自我重置微處理器的方法,其中該微處理器包括一中斷控制器,該方法包含該微處理器根據檢測到的一事件在內部設定一標志; 微處理器根據檢測到的該事件來儲存該微處理器的一狀態至一存儲器中; 在設定該標志和儲存該狀態之后,該微處理器自我重置,但不重置該中斷控制器;及 在重置該微處理器后,該微處理器從該存儲器重新載入該狀態,其中,會判斷該標志是否設定,若判斷該標志被設定,則不會重新載入該中斷控制器的狀態。
24.如權利要求23所述的方法,還包含 判斷該標志是否被設定之后,清除該標志。
25.如權利要求23所述的方法,其中儲存該微處理的該狀態至該存儲器以及從該存儲 器重新載入該狀態的步驟是由該微處理器的一微代碼執行。
26.如權利要求23所述的方法,還包含從該存儲器重新載入該微處理器的該狀態后,繼續執行使用者指令。
27.如權利要求23所述的方法,其中于檢測該事件步驟中,包含檢測自從上次重置后, 是否已引退一預定數量的指令。
28.如權利要求23所述的方法,其中該微處理器包括一總線接口單元,其用來將該微 處理器連接至一總線,其中該總線包括一訊號,當該訊號一被設置,便命令所有在該總線上 的裝置不能在該總線上初始化一傳輸,該方法還包含重置該微處理器之前,設置該訊號至該總線上;當該微處理器自我重置時,不重置部份用來設置該訊號至該總線的該總線接口單元;及在該微處理器重置之后,取消設置該訊號。
29.如權利要求13所述的方法,其中該訊號為一區塊下一請求信號。
全文摘要
一種可自我重置的微處理器及其方法。該微處理器,包括總線接口單元,用來將該微處理器連接至總線,其中該總線包括訊號,當該訊號被設置時,便命令所有在總線上的裝置不能在總線上初始化一傳輸。微處理器還包括微代碼,根據檢測到的事件來使總線接口單元設置該訊號至總線上,用來重置微處理器,但不重置部份用來設置該訊號至總線的總線接口單元;在微處理器重置之后,控制總線接口單元取消設置該訊號。在重置微處理器之前,微代碼將設置標志并儲存處理器狀態至存儲器,但微處理器的中斷控制器并不會隨微處理器而重置。在重置微處理器后,微代碼將指示微處理器從存儲器重新載入自身的狀態,若判斷標志被設定時,則不會重新載入中斷控制器的狀態。
文檔編號G06F11/00GK102073551SQ20111003478
公開日2011年5月25日 申請日期2011年2月9日 優先權日2010年2月16日
發明者G.葛蘭.亨利, 達魯斯.D.嘉斯金斯, 陳巨軒 申請人:威盛電子股份有限公司