專利名稱:微處理器及其除錯方法
技術領域:
本發(fā)明涉及一種多核心微處理器,特別是涉及一種監(jiān)控多核心微處理器的指令執(zhí) 行及其除錯方法。
背景技術:
目前的微處理器非常復雜,且對其進行除錯是個非常困難的工作。微處理器的研 發(fā)人員通常使用一軟件功能模塊(software functional model)來模擬微處理器的架構行 為,以作為除錯工具。相較于Verilog模擬器等其他軟件模塊,軟件功能模塊會更有用,因 為它更可迅速地模擬大量指令的執(zhí)行。軟件功能模塊是根據(jù)系統(tǒng)架構來的定義每次執(zhí)行單 一指令,因此可有效地對單核心處理器(single core processor)進行除錯。軟件功能模塊也可用來對多核心處理器(multi-core processor)進行除錯,軟 件功能模塊各別不同的范例會在每核心上被用來模擬指令執(zhí)行,只要各核心彼此不互相影 響,就可模擬的很好。然而,多核心處理器常產(chǎn)生一些錯誤,而這些錯誤通常只會出現(xiàn)在多 核心之間的存儲器存取時,或當各核心彼此共用同一個存儲器地址時,如共享一軟件信號 (software semaphore)時。各核心實質(zhì)上會在不同時間存取共用的存儲器地址,例如,第一 核心讀取一信號(semaphore)并等待第二核心來寫入該信號。除非軟件功能模塊的兩范例 執(zhí)行指令時,非常近似于實際處理器在發(fā)生錯誤時所執(zhí)行指令的順序,否則軟件功能模塊 就無法有效地對多核心處理器進行除錯。因此亟需提出一種控制被模擬的各核心彼此間執(zhí) 行指令的順序,其近似于后芯片(post-silicon)的多核心處理器的順序。
發(fā)明內(nèi)容
本發(fā)明揭示一微處理器的除錯方法,其中微處理器具有多個核心。所述的方 法包括使微處理器去執(zhí)行指令的一實際執(zhí)行(actual execution),并從微處理器獲得 一心跳信息,其明確指出各核心彼此間執(zhí)行指令的一實際執(zhí)行順序(actual execution sequence)。所述的方法也包括,命令一軟件功能模塊的多個相關范例根據(jù)實際執(zhí)行順序來 執(zhí)行指令,以產(chǎn)生指令執(zhí)行的模擬結果。所述的方法還包括比較模擬結果與指令執(zhí)行的實 際結果,以判斷兩者是否符合。本發(fā)明復揭露一種微處理器,其包括多個核心,每一個核心會輸出一指令執(zhí)行指 示(instruction execution indicator),用來指示各核心在每一時鐘期間,所執(zhí)行的指令 數(shù)目。微處理器還包括一心跳產(chǎn)生器(heartbeat generator),其從每個核心接收指令執(zhí) 行指示。心跳產(chǎn)生器用來對每一個在外部總線上的處理核心產(chǎn)生一心跳指示(heartbeat indicator),以回應指令執(zhí)行指示,而心跳指示則指出了每一核心在外部總線的每個時鐘 周期中,所執(zhí)行的指令數(shù)量。本發(fā)明又揭示一微處理器,其包括多個核心,每一個核心會產(chǎn)生一指令執(zhí)行指示 (instruction execution indicator),用來指示各核心在每一時鐘周期期間,所執(zhí)行的指 令數(shù)目。微處理器又包括一儲存陣列(memory array),其儲存在一段時鐘周期期間中,各核心所產(chǎn)生的指令執(zhí)行指示。微處理器還包括一總線接口單元(bus interface unit),其耦 接于微處理器外部的一總線。總線接口單元用來將儲存于儲存陣列中的指令執(zhí)行指示,寫 入至微處理器外部的一存儲器中。
圖1為本發(fā)明所揭示的具有雙核心處理器的計算機系統(tǒng)的功能方塊圖。圖2為本發(fā)明所揭示的軟件功能模塊模擬環(huán)境的功能方塊圖。圖3為本發(fā)明所揭示的圖2的操作模擬環(huán)境的方法流程圖。圖4為本發(fā)明所揭示的雙核心處理器的一具體實施例的功能方塊圖。圖5為本發(fā)明所揭示的依據(jù)圖4實施例的速率控制器的操作例示表。圖6為本發(fā)明所揭示的雙核心處理器的另一具體實施例的功能方塊圖。圖7為本發(fā)明所揭示的依據(jù)圖6實施例的速率控制器的操作例示表。圖8為本發(fā)明所揭示的雙核心處理器的又一具體實施例的功能方塊圖。圖9為本發(fā)明所揭示的依據(jù)圖8實施例的速率控制器的操作例示表。圖10為本發(fā)明所揭示的雙核心處理器的再一具體實施例的功能方塊圖。圖11為本發(fā)明所揭示的依據(jù)圖10實施例的速率控制器的操作例示表。圖12為本發(fā)明所揭示的雙核心處理器的更一具體實施例的功能方塊圖。圖13為本發(fā)明所揭示的依據(jù)圖12實施例的速率控制器的操作例示表。圖14為本發(fā)明所揭示的圖2的操作模擬環(huán)境的方法流程圖。圖15為本發(fā)明所揭示的雙核心處理器的更一具體實施例的功能方塊圖。圖16為本發(fā)明所揭示的依據(jù)圖15實施例的速率控制器的操作例示表。附近圖符號說明100102103104A104B105,105A,105B106,106A,106B108112114116118122124202204206A
5
計算機系統(tǒng) 雙核心處理器 心跳產(chǎn)生器 第一核心 第二核心 指令執(zhí)行指示 心跳訊號 邏輯分析器 存儲器 處理器總線 數(shù)據(jù)夾
處理器總線傳輸信息 心跳訊號信息 軟件功能模塊模擬環(huán)境 模擬初始狀態(tài)產(chǎn)生器 速率控制器
第一核心的軟件功能模塊范例
206B第二核心的軟件功能模塊范例
208實際結果產(chǎn)生器
226比較單元
212模擬初始存儲器映像
214A第一核心的模擬初始狀態(tài)
214B第二核心的模擬初始狀態(tài)
222實際結果存儲器映像
224A第一核心的實際結果狀態(tài)
224B第二核心的實際結果狀態(tài)
232模擬結果存儲器映像
234A第一核心的模擬結果狀態(tài)
234B第二核心的模擬結果狀態(tài)
218A,218B命令
228取否指示器
1212除錯存儲器陣列
1214L2快取存儲器
1216總線接口單元
S302-S312步驟
S1402-S1418步驟
具體實施例方式本發(fā)明實施例中提到的多核心處理器,用來產(chǎn)生心跳訊號(heartbeat signal), 以指示各核心彼此間的執(zhí)行指令速率。處理器的研發(fā)人員可如同處理器運作般獲得心跳 訊號,并使用得到的心跳信息,來動態(tài)地控制每一核心的軟件功能模塊對每一核心所的執(zhí) 行指令的速率。藉此,心跳訊號提供明顯指標給軟件功能模塊,使其得以窺見所需的多核 心處理器的內(nèi)部操作,以控制被模擬的各核心彼此間執(zhí)行指令的順序,此順序會近似于 實際出現(xiàn)錯誤的多核心處理器的執(zhí)行指令順序。在某些實施例中,處理器會在系統(tǒng)總線 (architectural processor bus)上提供心跳訊號信息,但這樣會影響在多核心處理器上 執(zhí)行程序的時序間,而導致當致能(enable)心跳時,錯過一些錯誤。因此,在本發(fā)明實施例 中,處理器是非侵入性地在外部邊帶總線(external sideband bus)上提供心跳訊號,而不 是在系統(tǒng)總線上提供心跳訊號。請參考圖1,其為本發(fā)明所揭示的具有雙核心處理器102的計算機系統(tǒng)100的功 能方塊圖,雙核心處理器(dual-core processor) 102會產(chǎn)生心跳訊號106。計算機系統(tǒng) (computing system) 100包括一雙核心處理器102,其包括兩個核心,如圖中的第一核心 104A以及一第二核心104B,兩者可合并以核心104統(tǒng)稱。在本發(fā)明實施例中,雙核心處理器 102的每一核心104是微處理器核心,其符合威盛電子股份有限公司(VIA Technologies, Inc)所設計的威盛凌瓏處理器架構(VIA Nano architecture) 0雖然本實施例是以雙核 心處理器舉例,但其他利用心跳訊號106提供信息給多個核心的處理器,亦為本發(fā)明所保 護的范圍。
雙核心處理器102還包括一心跳產(chǎn)生器(heartbeat generator) 103,其耦接于每 一個核心104。具體來說,第一核心104A產(chǎn)生一指令執(zhí)行指示(instruction execution indicator) 105A,用來指示在一時鐘周期中所執(zhí)行的指令數(shù)目;第二核心104B產(chǎn)生一指令 執(zhí)行指示(instruction execution indicator) 105B,用來指示在一時鐘周期中所執(zhí)行的 指令數(shù)目,心跳產(chǎn)生器103則產(chǎn)生心跳訊號106來指示核心104已執(zhí)行的指令,以回應指令 執(zhí)行指示105。在本發(fā)明實施例中,核心104執(zhí)行指令的假設執(zhí)行,且指令執(zhí)行指示105告 知心跳產(chǎn)生器103指令已被完成,意即,不同于假設執(zhí)行而已,其仍會更新核心104的系統(tǒng) 狀態(tài)。計算機系統(tǒng)100還包括一存儲器112,其耦接于雙核心處理器102,雙核心處理器 102的每一核心104可編寫成周期性地停止執(zhí)行使用者程序指令,并儲存(dump)目前狀態(tài) 至存儲器112的一預定地址,以及讀出(flush)本身快取存儲器的內(nèi)容至存儲器112,在此 視為一檢查點(checkpoint)。核心104的狀態(tài)包括其內(nèi)部暫存器的狀態(tài),在此視為一檢查 點狀態(tài)(checkpoint state)。更具體地說,每一核心104可藉由研發(fā)人員編寫成持續(xù)執(zhí)行 一預定數(shù)量的指令(如100,000個指令)后,便進行停止執(zhí)行指令、儲存檢查點狀態(tài)、讀出 快取存儲器、重新執(zhí)行指令等動作,直到下次累積預定數(shù)量指令,再重復上述動作,以此類 推。計算機系統(tǒng)100又包括一邏輯分析器(logic analyzer) 108,在本發(fā)明實施例中, 邏輯分析器108包括雙核心處理器102里其中一個核心104。邏輯分析器108監(jiān)控處理器 總線114以及取得上面的傳輸(transaction),包括寫入檢查點狀態(tài)至存儲器112以及讀出 快取存儲器等數(shù)據(jù)傳輸。邏輯分析器108也監(jiān)控并取得心跳訊號106,其儲存所擷取到的信 息至一數(shù)據(jù)夾(file) 116,如一磁盤(disk drive)中,而數(shù)據(jù)夾116包括擷取到的處理器總 線傳輸信息118以及心跳訊號信息122。在本發(fā)明實施例中,心跳訊號106會在一邊帶總線 (Sideband Bus)上被提供給雙核心處理器102,舉例來說,邊帶總線為JTAG總線,其可被雙 核心處理器102芯片內(nèi)部的一分散服務處理器(s印arate service processor)使用。計算機系統(tǒng)100又包括一軟件功能模塊模擬環(huán)境(software functional model simulation environment) 124,其包括一個或多個模擬計算機系統(tǒng),其有別于包含微處理 器102的計算機系統(tǒng)100。軟件功能模塊模擬環(huán)境IM使用擷取到并儲存于數(shù)據(jù)夾116中 的處理器總線傳輸信息118以及心跳訊號信息122,來模擬雙核心處理器102的操作情形, 以下會有詳細說明。請再參考圖2,其為本發(fā)明所揭示的軟件功能模塊模擬環(huán)境124的功能方塊 圖。軟件功能模塊模擬環(huán)境1 包括一模擬初始狀態(tài)產(chǎn)生器(simulated initial state generator) 202、一速率控制器(rate contro 11 er) 204、一第一核心的軟件功能模塊范 例206A、一第二核心的軟件功能模塊范例206B、一實際結果產(chǎn)生器208、以及一比較單元 (comparison function) 2沈。雖然這些元件都是由軟件實作出的,但部份或全部元件亦可 由硬件來實作,以增加執(zhí)行速度。模擬初始狀態(tài)產(chǎn)生器202接收擷取到的處理器總線信息118,以用來產(chǎn)生一模擬 初始存儲器映像(simulated initial memory image) 212、一第一核心的模擬初始狀態(tài) 214A、以及一第二核心的模擬初始狀態(tài)214B。隨后,模擬初始存儲器映像212被復制為一 模擬結果存儲器映像(simulated result memory image) 232,且第一核心的模擬初始狀態(tài)214A到被復制為一第一核心的模擬結果狀態(tài)234A、而第二核心的模擬初始狀態(tài)214B則 被復制為到一第二核心的模擬結果狀態(tài)234B。為方便說明,假設每一核心104都已儲存一 第一檢查點狀態(tài)(包括上述的內(nèi)部暫存器的狀態(tài))、并已讀出(flush)本身快取存儲器的 內(nèi)容、重新執(zhí)行預定數(shù)量指令后、又儲存一第二檢查點及讀出快取存儲器的內(nèi)容。此外,更 假設處理器總線傳輸信息118包括了第一與第二檢查點的總線傳輸以及兩者之間的所有 傳輸,這些傳輸藉由執(zhí)行預定數(shù)量指令后而產(chǎn)生。請見美國臨時專利申請案第61Λ97,505 號,其于2010年1月22日申請,當中描述兩核心104之間的檢查點進行同步的方法。根據(jù)本發(fā)明實施例,模擬初始狀態(tài)產(chǎn)生器202藉由以下方法來產(chǎn)生模擬初始存儲 器映像212 (1)檢測在雙核心處理器102中的第一檢查點以及第二檢查點之間,讀取存儲器 112中一地址的傳輸。(2)判斷上述的讀取傳輸是否為第一、第二檢查點之間,第一次對這個地址作讀取 的傳輸。(3)如果是,則對此傳輸產(chǎn)生一存儲器地址記錄(memory location record),其包 括存儲器地址以及讀取的數(shù)據(jù)值。藉由上述方法,模擬初始狀態(tài)產(chǎn)生器202便產(chǎn)生少量的 模擬初始存儲器映像212。然而,少量的存儲器映像已能滿足軟件功能模塊范例206需求, 因為在第一、第二檢查點之間,軟件功能模塊范例206只需要讀取之前產(chǎn)生的存儲器地址, 若否,即表示在實際的雙核心處理器102上有錯誤產(chǎn)生。模擬初始狀態(tài)產(chǎn)生器202可直接從擷取于處理器總線傳輸信息118的第一檢查點 狀態(tài),以產(chǎn)生第一核心的模擬初始狀態(tài)214A。在本發(fā)明實施例中,如上所述,在每個檢查點 上,每個核心104根據(jù)一預定格式來分別寫入自身狀態(tài)信息至存儲器112中的一預定地址, 其使得模擬初始狀態(tài)產(chǎn)生器202能在處理器總線傳輸信息118的內(nèi)部找到第一核心104A 的第一檢查點狀態(tài)。同樣地,模擬初始狀態(tài)產(chǎn)生器202亦直接從擷取于處理器總線傳輸信 息118的第一檢查點狀態(tài),來產(chǎn)生第二核心的模擬初始狀態(tài)214B。實際結果產(chǎn)生器208接收圖1中的處理器總線傳輸信息118,用以產(chǎn)生一第一核心 的實際結果狀態(tài)224A、一第二核心的實際結果狀態(tài)224B以及一實際結果存儲器映像222。 實際結果產(chǎn)生器208直接從擷取于處理器總線傳輸信息118的第二檢查點狀態(tài),來產(chǎn)生第 一核心的實際結果狀態(tài)224A。根據(jù)一在本發(fā)明實施例中,如上所述,在每個檢查點上,每個 核心104根據(jù)一預定格式來分別寫入自身檢查點狀態(tài)至存儲器112中一預定地址,其致能 使得實際結果產(chǎn)生器208來發(fā)現(xiàn)能在處理器總線傳輸信息118的內(nèi)部的找到第一核心104A 的第二檢查點狀態(tài)。同樣地,實際結果產(chǎn)生器208亦直接從擷取于處理器總線傳輸信息118 的第二檢查點狀態(tài),來產(chǎn)生第二核心的實際結果狀態(tài)224B。比較單元2 將第一核心的實 際結果狀態(tài)224A與一第一核心的模擬結果狀態(tài)234A進行比較,并將第二核心的實際結果 狀態(tài)224B與一第二核心的模擬結果狀態(tài)234B進行比較的情形,將在后面做更進一步的討 論。在本發(fā)明實施例中,實際結果產(chǎn)生器208藉由以下方法來產(chǎn)生實際結果存儲器映 像 222 (1)檢測在雙核心處理器102中的第一檢查點以及第二檢查點之間,寫入存儲器 112中一地址的傳輸,所述傳輸包括每個核心104在第二檢查點將自身快取存儲器內(nèi)容寫
8入至存儲器112中。(2)判斷上述寫入傳輸是否為第一、第二檢查點之間,最后一次對這個地址做寫入 傳輸。(3)如果是,則對此傳輸產(chǎn)生一存儲器地址記錄(memory location record),其包 括存儲器地址以及寫入的數(shù)據(jù)值。藉由上述方法,實際結果產(chǎn)生器208便產(chǎn)生少量的實際 結果存儲器映像222。然而,少量的存儲器映像已能滿足軟件功能模塊范例206需求,因為 在第一、第二檢查點之間,軟件功能模塊范例206只需要寫入之前產(chǎn)生的存儲器地址。若 否,則表示在實際的雙核心處理器102上有錯誤產(chǎn)生。至于比較單元2 將會拿實際結果 存儲器映像222與一模擬結果存儲器映像232進行比較的情形,將在后面做更進一步的討 論。速率控制器204接收圖1中所擷取到的心跳訊號信息122,用以產(chǎn)生命令218A至 第一核心的軟件功能模塊范例206A,以及產(chǎn)生命令218B至第二核心的軟件功能模塊范例 206B。命令218A動態(tài)控制軟件功能模塊范例206彼此間執(zhí)行指令的速率。在本發(fā)明實施例 中,每一命令218控制軟件功能模塊范例執(zhí)行N個指令,其中N是定義于命令中。在另一實 施例中,軟件功能模塊范例206為多線程(multi-threaded)且通過諸如信號(semaphore) 來相互通訊。在本發(fā)明實施例中,命令會控制一個核心104的軟件功能模塊范例206去執(zhí) 行X個指令,直到另一核心104的軟件功能模塊范例206執(zhí)行Y個指令后才停止。接下來 的圖示將詳細說明速率控制器204如何使用心跳訊號信息122來發(fā)出命令218,以動態(tài)地控 制軟件功能模塊范例206彼此間執(zhí)行指令的速率。每個軟件功能模塊范例206模擬了核心104的系統(tǒng)行為。第一核心的軟件功能模 塊范例206A存取(read/write)第一核心的模擬結果狀態(tài)234A,而第二核心的軟件功能模 塊范例206B存取(read/write)第二核心的模擬結果狀態(tài)234B。此外,每個軟件功能模塊 范例206也會在執(zhí)行存儲器存取指令時,依據(jù)速率控制器204的命令來讀取且/或?qū)懭肽?擬結果存儲器映像232。特別是,由第一核心的軟件功能模塊范例206A寫入數(shù)據(jù)至模擬結 果存儲器映像232時,第二核心的軟件功能模塊范例206B會知道,反之亦然,如此便分別影 響了軟件功能模塊范例206的模擬結果狀態(tài)234。每個軟件功能模塊范例206執(zhí)行完預定 數(shù)量(例如100,000個)指令后,被復制到第一核心的模擬結果狀態(tài)234A的第一核心的模 擬初始狀態(tài)214A,將會被更新變成真正的第一核心的模擬結果狀態(tài)234A,且被復制到第二 核心的模擬結果狀態(tài)234B的第二核心的模擬初始狀態(tài)214B,也將會被更新變成真正的第 二核心的模擬結果狀態(tài)234B。比較單元2 將第一核心的模擬結果狀態(tài)234A與第一核心 的實際結果狀態(tài)224A進行比較,并將第二核心的模擬結果狀態(tài)234B與第二核心的實際結 果狀態(tài)224B進行比較,以判斷真正的雙核心處理器102是否在第一及第二檢查點之間出現(xiàn) 了錯誤,而比較結果則由取否指示器(pass/fail indicator) 2 所指出。此外,每個軟件 功能模塊范例206執(zhí)行完預定數(shù)量(例如100,000個)指令后,被復制到模擬結果存儲器 映像232的模擬初始存儲器映像212的值,將會被更新而變成真正的模擬結果存儲器映像 232。比較單元2 將模擬結果存儲器映像232與實際結果存儲器映像222進行比較,以判 斷真正的雙核心處理器102是否在第一及第二檢查點之間出現(xiàn)了錯誤,比較結果則由取/ 否指示器所指出。因此,經(jīng)由使用速率控制器204作中介的優(yōu)勢,心跳訊號信息122可用來動態(tài)地控制每個軟件功能模塊范例206執(zhí)行指令的速率。也就是說,速率控制器204可控制軟件功 能模塊范例206彼此間執(zhí)行指令的順序,如此而指令可按照核心104存取存儲器的適當順 序來定適當?shù)膩韴?zhí)行順序,于是能以精確地從各核心104與存儲器112的實際初始狀態(tài)來 模擬實際的雙核心處理器102的運作行為,此即比較單元2 可將實際雙核心處理器102 的運作行為與其模擬的運作行為進行比較的原因。請參考圖3,其為本發(fā)明所揭示的圖2的操作模擬環(huán)境124的方法流程圖。如圖3 所示,軟件功能模塊模擬環(huán)境1 首先根據(jù)圖14中的步驟S1406,來產(chǎn)生一模擬結果存儲器 映像232以及模擬結果狀態(tài)234,其會分別與實際結果存儲器映像222以及進行實際結果狀 態(tài)2M進行比較(步驟S1408)。流程開始于步驟S302。在步驟S302中,速率控制器204從數(shù)據(jù)夾116接收心跳訊號信息122。接著流程 前往步驟S304。步驟S304中,在心跳訊號信息122所指出的心跳訊號106的下一個時鐘周期中, 速率控制器204檢查每個核心104的心跳訊號106的值。心跳訊號106的值會于下列各實 施例與圖示中再作說明。接著流程前往步驟S306。在步驟S306中,速率控制器204判斷核心N (第一核心104A或第二核心104B)是 否產(chǎn)生心跳。如果是,則執(zhí)行步驟S308 ;否則回到步驟304去檢測下一個時鐘周期。在步驟S308中,速率控制器204發(fā)出命令218以驅(qū)使核心N的軟件功能模塊范例 206根據(jù)所判斷出的心跳信息來執(zhí)行一個或多個指令,這部份后面會再詳述。接著流程前往 步驟S312。接著,步驟S312中,核心N的軟件功能模塊范例206執(zhí)行下一指令或與模擬結果 存儲器映像232及模擬結果狀態(tài)234相關的指令。如果是執(zhí)行一存儲器讀取指令,則核心 N的軟件功能模塊范例206將讀取模擬結果存儲器映像232。如果是執(zhí)行一存儲器寫入指 令,則軟件功能模塊范例206會對核心N更新模擬結果存儲器映像232。之后又回到步驟 S304繼續(xù)檢查下一時鐘周期。以下將說明指令執(zhí)行指示105、心跳產(chǎn)生器103、心跳訊號106、及其被速率控制器 204所使用的各種實施例。請參考圖4,其為本發(fā)明所揭示的雙核心處理器的一具體實施例的功能方塊圖。在 圖4、圖5中,核心104與心跳訊號106的時鐘速率相同。此外,核心104在每一核心時鐘 周期可執(zhí)行完一個指令。如圖所示,每個核心104的指令執(zhí)行指示105都是一個比特,若核 心104在核心時鐘周期內(nèi)完成一個指令時,則該比特為真(true),否則為假(false)。同樣 地,心跳產(chǎn)生器103產(chǎn)生一比特的心跳訊號106A,若第一核心104A有在核心時鐘周期內(nèi)完 成一個指令時,則該比特為真,否則為假;且心跳產(chǎn)生器103產(chǎn)生一比特的心跳訊號106B, 若第二核心104B有在核心時鐘周期內(nèi)完成一個指令時,則該比特為真,否則為假。然而,須 注意在指令執(zhí)行指示105及其相關心跳訊號106產(chǎn)生時可能會有延遲時間。在實施例中, 由于核心104和心跳訊號106會根據(jù)不同的時鐘來源運作,因此心跳產(chǎn)生器103包括同步 邏輯電路,用以同步指令執(zhí)行指示105及心跳訊號106。請參考圖5,其揭示在圖4實施例中,速率控制器204的操作例示表。圖表中包括 六個時鐘周期,標示為0-5,其對應于速率控制器204在圖3步驟S302中,所收到的心跳訊 號信息122中的六個時鐘。速率控制器204從心跳訊號信息122中收到的第一核心104A
10的心跳訊號106A以及第二核心104B的心跳訊號106B,亦如圖所示。此外,在每個時鐘周期 中,根據(jù)圖3中的步驟S306的判斷,圖表標示了速率控制器204在所對應的模擬時鐘周期 期間,是否控制第一核心的軟件功能模塊范例206A去執(zhí)行指令,以及是否控制第二核心的 軟件功能模塊范例206B去執(zhí)行指令。在本例示中,第一核心106A在時鐘1,3-5的心跳訊 號106A為真,因此速率控制器204在模擬的時鐘1,3-5期間,將命令第一核心的軟件功能 模塊范例206A執(zhí)行指令。另一方面,第二核心106B在時鐘0-2,4的心跳訊號106B為真, 因此速率控制器204在模擬的時鐘0-2,4期間,將命令第二核心的軟件功能模塊范例206B 執(zhí)行指令。請再參考圖6,其為本發(fā)明所揭示的雙核心處理器另一實施例的功能方塊圖。圖 6、圖7相似于圖4、圖5,核心104與心跳訊號106的時鐘速率相同。然而,在本實施例中, 核心104在每一核心時鐘周期可執(zhí)行完多個指令,例如三個,亦可為其他數(shù)量,不以所揭示 的為限。如圖所示,每個核心104的指令執(zhí)行指示105都是兩個比特,用來指出核心104在 一個核心時鐘周期內(nèi)執(zhí)行完的指令數(shù)量。同樣地,心跳產(chǎn)生器103產(chǎn)生兩比特的心跳訊號 106A,用來指出第一核心104A在一個核心時鐘周期內(nèi)所執(zhí)行完的指令數(shù)量,并產(chǎn)生兩比特 的心跳訊號106B,用來指出第二核心104B在一個核心時鐘周期內(nèi)執(zhí)行完的指令數(shù)量。請參考圖7,其為本發(fā)明所揭示的依據(jù)圖6實施例的速率控制器的操作例示表,其 與圖5的圖表相似。然而,如圖所示,在每個時鐘周期中,速率控制器204從心跳訊號信息 122中收到的第一核心104A的心跳訊號106A的數(shù)值會包含0_3,而不是0 (假)或1 (真)。 同樣地,在每個時鐘周期中,根據(jù)圖3中的步驟S306的判斷,圖表標示了速率控制器204在 所對應的模擬時鐘周期期間,是否根據(jù)圖3中的步驟S308,會控制第一核心的軟件功能模 塊范例206A去執(zhí)行指令(如果是,會標示有多少指令被執(zhí)行)、以及是否控制第二核心的軟 件功能模塊范例206B去執(zhí)行指令(如果是,會標示有多少指令被執(zhí)行)。本例示中,第一 核心104A在時鐘0,2的心跳訊號106A是0,在時鐘4時是1,在時鐘3時是2,以及在時鐘 1,5時是3,因此,速率控制器204將命令第一核心的軟件功能模塊范例206A在模擬的時鐘 0,2期間,執(zhí)行0個指令;在模擬的時鐘4期間,執(zhí)行1個指令;在模擬的時鐘3期間,執(zhí)行 2個指令;以及在模擬的時鐘1,5期間,執(zhí)行3個指令。另一方面,第二核心104B在時鐘3, 5的心跳訊號106B是0,在時鐘0,4時是1,在時鐘1,2時是2,而沒有任一時鐘的心跳訊號 106B為3,因此,速率控制器204命令第二核心的軟件功能模塊范例206B在模擬的時鐘3, 5期間,執(zhí)行0個指令;在模擬的時鐘0,4期間,執(zhí)行1個指令;在模擬的時鐘1,2期間,執(zhí) 行2個指令;而不會有任一時鐘執(zhí)行3個指令。請參考圖8,其為本發(fā)明所揭示的雙核心處理器的又一具體實施例的功能方塊圖。 圖8、圖9相似于圖6、圖7,每個核心104在每一核心時鐘周期可完成多個指令。然而,在本 實施例中,核心104的時鐘速率是心跳訊號106的時鐘速率的好幾倍,例如十倍,亦可為其 他數(shù)量,不以所揭示的為限。此外,每個核心104的指令執(zhí)行指示105都是一個比特,當核 心104完成一預訂數(shù)量指令,則該比特為真(true),否則為假(false)。在實施例中,所述 的預訂數(shù)量為32個,但不以所揭示的為限。具體來說,預訂數(shù)量至少要與時鐘比率(clock ratio)以及每一核心104可于一時鐘周期中完成的最大數(shù)量指令的積一樣大。一實施例 中,核心104的完成單元(retire unit)包括一計數(shù)器(counter),用來計數(shù)每時鐘周期中 所完成的指令數(shù)量,而指令執(zhí)行指示105是計數(shù)器的有效比特(effectively bit)M(M =log2N),其中N是時鐘比率以及核心104可于一時鐘周期中完成的最大數(shù)量指令的積。同 樣地,心跳產(chǎn)生器103依據(jù)指令執(zhí)行指示105A產(chǎn)生一比特的心跳訊號106A,以及依據(jù)指令 執(zhí)行指示105B產(chǎn)生一比特的心跳訊號106B。請參考圖9,其為本發(fā)明所揭示的依據(jù)圖8實施例的操作速率控制器的操作例示 表。本實施例的圖表與圖5相似,但須注意圖5和圖7中,因為核心104的時鐘速率與心跳 訊號106的時鐘速率是一樣的,每時鐘周期的心跳訊號信息122指出在相對應的核心時鐘 周期中完成一或多個指令,因此,圖中的核心和心跳訊號106的時鐘周期是相互對應的(時 鐘0-5)。然而,在圖9中,每時鐘周期的心跳訊號信息122是指出在多個時鐘周期中所完 成的指令數(shù)量,因此,圖中所示的時鐘周期僅與心跳訊號106相對應。此外,在每個時鐘周 期中,根據(jù)圖3中的步驟S306的判斷,圖表指出了速率控制器204在所對應的模擬時鐘周 期期間,是否如圖3的步驟S308所述,是控制通過命令218A指示第一核心的軟件功能模塊 范例206A去執(zhí)行32個指令,以及是否控制通過命令218B指示第二核心的軟件功能模塊范 例206B去執(zhí)行32個指令。本例示中,第一核心106A在時鐘1,5的心跳訊號106A為真, 因此,在心跳訊號106的時鐘1,5時會模擬出32個時鐘,速率控制器204便在模擬出的32 個時鐘期間,通過命令218A指示第一核心的軟件功能模塊范例206A執(zhí)行32個指令。另一 方面,由于第二核心106B在時鐘0,2,4的心跳訊號106B為真,因此,在心跳訊號106的時 鐘0,2,4時會模擬出32個時鐘,而速率控制器204便在模擬出的32個時鐘期間,通過命令 218B指示第一核心的軟件功能模塊范例206B執(zhí)行32個指令。請參考圖10,其為本發(fā)明所揭示的雙核心處理器的再一具體實施例的功能方塊 圖。圖10、圖11相似于圖8、圖9,核心104在每一核心時鐘周期可完成多個指令,且當核 心104完成一預訂數(shù)量指令(如32個),則一比特的心跳訊號106為真,否則指令執(zhí)行指示 105為假(false)。然而,本實施例中與圖6相似,每個指令執(zhí)行指示105是兩比特,用來指 出在每時鐘周期中,核心104完成的指令數(shù)量。本實施例中,一旦核心104完成預定數(shù)量的 指令,心跳產(chǎn)生器103便在心跳訊號106上產(chǎn)生一真值。在實施例中,心跳產(chǎn)生器103包括 一計數(shù)器(counter),用來計數(shù)每時鐘周期中已完成的指令數(shù)量,而心跳訊號106是計數(shù)器 的有效比特M (M= log2N)。請參考圖11,其為本發(fā)明所揭示的依據(jù)圖10實施例的速率控制器的操作例示表。 本實施例圖表與圖9相似,所接收到的心跳訊號信息122、圖示意思也相同,在此就不予贅 述。請參考圖12,其為本發(fā)明所揭示的雙核心處理器的更一具體實施例的功能方塊 圖。圖12、圖13相似于圖10、圖11,核心104在每一核心時鐘周期可完成多個指令,且核心 104的時鐘速率是心跳訊號106的時鐘速率的好幾倍。每個指令執(zhí)行指示105是兩比特, 用來指出在每時鐘周期中,核心104所完成的指令數(shù)量。然而,本實施例還包括一除錯存儲 器陣列(debug memory array) 1212,心跳產(chǎn)生器103根據(jù)指令執(zhí)行指示105來寫入心跳訊 號信息122至除錯存儲器陣列1212。一在實施例中,心跳產(chǎn)生器103是將每個時鐘周期所 收到的指令執(zhí)行指示105寫進除錯存儲器陣列1212。心跳產(chǎn)生器103隨后再從除錯存儲 器陣列1212讀出心跳訊號信息122,并在通過處理器總線114上將其寫入系統(tǒng)存儲器112 中。當心跳訊號信息122寫進系統(tǒng)存儲器112時,邏輯分析器108便擷取了心跳訊號信息 122。心跳產(chǎn)生器103是將心跳訊號信息122寫入系統(tǒng)存儲器112的一預定地址,如此便致
12能一來邏輯分析器108便能將其儲存至數(shù)據(jù)夾116,而寫入的心跳訊號信息122在之后會被 速率控制器204使用,一如圖3的所示。本實施例的心跳訊號信息122是與圖6、圖7的相 似,亦即每時鐘的心跳訊號信息122用以指出核心104在該時鐘所完成的指令數(shù)量。心跳 產(chǎn)生器103會對雙核心處理器102的一總線接口單元(bus interface unit) 1216產(chǎn)生需 求(requests),總線接口單元1216是使雙核心處理器102連接至處理器總線114的接口。 根據(jù)在一實施例中,心跳產(chǎn)生器103產(chǎn)生的需求是最低優(yōu)先權的需求,其可傳至總線接口 單元1216,并當處理器總線114閑置(idle)時,總線接口單元1216才試著產(chǎn)生在處理器總 線114上的傳輸,以將心跳訊號信息122從除錯存儲器陣列1212寫進系統(tǒng)存儲器112。如 此可能減少因侵入性地在處理器總線114寫入心跳訊號信息122(相對于圖4至圖11以及 圖15至圖16中,在非侵入式的邊帶總線(noninvasive sideband bus)上寫入心跳訊號信 息122),因而影響雙核心處理器102操作時序的可能性,是以當心跳特征被啟動后錯誤不 再出現(xiàn)。心跳產(chǎn)生器103監(jiān)控整個除錯存儲器陣列1212,當發(fā)現(xiàn)除錯存儲器陣列1212快被 寫滿時,便與總線接口單元1216通訊來提高需求的優(yōu)先權,以盡快寫入心跳訊號信息122。 在實施例中,除錯存儲器陣列1212是類似于雙核心處理器102的L2快取存儲器(L2cache memory) 1214的存儲器陣列,都被核心104共享。雙核心處理器102可更佳地設計成將除錯 存儲器陣列1212設計成為L2快取存儲器1214的附屬物備份,藉此可共享通用的控制邏輯 與電路布局。在一實施例中,除錯存儲器陣列1212的容量是夠大的,以至于在兩個檢查點 的間隔便相對夠小,所以在檢查點到達之前心跳產(chǎn)生器103都不需要再寫入心跳訊號信息 122,這個好處是基于利用非侵入性的方式來寫入心跳信息而來。請參考圖13,其為本發(fā)明所揭示的依據(jù)圖12實施例的速率控制器的操作例示表。 本實施例圖表與圖7相似,所接收到的心跳訊號信息122、圖示意思也相同,在此就不予贅 述。但須注意相對于圖12而言本實施例沒有心跳訊號106,因此每時鐘周期的心跳訊號信 息122指出每時鐘所完成的指令數(shù)量,其中圖中所示的時鐘周期0-5是與核心時鐘周期相 對應。上述實施例的相對優(yōu)缺點將在以下詳述。圖4、圖5以及圖8至圖13的優(yōu)點是,僅 需在多核心處理器封裝上安置較小數(shù)量的外部接腳(Pin),亦即每核心104—個接腳。因 此,這些實施例會比圖6、圖7在芯片大小上更具優(yōu)勢(scalable),因為圖6、圖7的其每個 核心104需要多個接腳,若核心104數(shù)量更多,這個問題更明顯。但有鑒于目前時下的微處 理器都是超純量架構(superscalar),且能于每時鐘周期執(zhí)行多個指令,圖4、圖5的實施例 卻限制每核心104只能在每核心時鐘周期中完成單一指令。相反地,圖6至圖13的實施例 的優(yōu)點在于,可支持核心104于每時鐘周期中完成多個指令。此外,圖4至圖7的實施例限 制核心周期與心跳訊號106總線的周期速率相同,但有鑒于許多時下的微處理器的時鐘速 率都很高,使得實作上無法隨核心時鐘速率來運作一外部總線。相反地,圖8至圖13以及 圖15至圖16 (描述在后)的優(yōu)點在于,可支持核心周期頻率為心跳訊號106的總線頻率的 倍數(shù)的架構。如上所述,圖12、圖13的實施例的缺點是,其為具侵入性而可能會影響多核心 處理器的程序執(zhí)行的時序,如此當致能心跳時,可能會導致錯過一些錯誤。然而,圖12、圖 13的實施例的優(yōu)點在于,不需要額外的外部接腳,而這個優(yōu)點在某些應用上卻是必須的。請參考圖14,其為本發(fā)明所揭示的圖2的操作模擬環(huán)境的方法流程圖。軟件功能 模塊模擬環(huán)境1 被用來判斷在第一及第二檢查點之間是否有發(fā)生錯誤,亦可被運用在系統(tǒng)100操作了一段時間且產(chǎn)生許多組檢查點之后,用以判斷儲存在圖1的數(shù)據(jù)夾116中的 多組第一及第二檢查點之間是否有發(fā)生錯誤。流程起始于步驟S1402。首先,步驟S1402中,實際結果產(chǎn)生器208使用處理器總線傳輸信息118來產(chǎn)生由 雙核心處理器102在兩檢查點之間,執(zhí)行預定數(shù)量指令的實際結果存儲器映像222以及實 際結果狀態(tài)224,一如圖2的所示。流程接著前往步驟S1404。接著,步驟S1404中,模擬初始狀態(tài)產(chǎn)生器202使用處理器總線傳輸信息118來產(chǎn) 生模擬初始存儲器映像212以及模擬初始狀態(tài)214,一如圖2的所示。流程接著前往步驟 S1406。步驟S1406中,復制模擬初始存儲器映像212到模擬結果存儲器映像232,且復制 第一核心的模擬初始狀態(tài)214A到第一核心的模擬結果狀態(tài)234A,以及復制第二核心的模 擬初始狀態(tài)214B到第二核心的模擬結果狀態(tài)234B。隨后,速率控制器204以及軟件功能 模塊范例206使用復制的映像來更新模擬結果存儲器映像232以及模擬結果狀態(tài)234,一 如圖3的所示。須注意在圖3的操作中,于每個核心的指令執(zhí)行里,可能發(fā)生其中一個核心 104執(zhí)行一存儲器寫入指令、而另一個核心104執(zhí)行一存儲器讀取指令,諸如上述的信號寫 入與讀取(semaphore write and read)的情形。如果在這類的讀寫動作之間的指令數(shù)量 小于心跳訊號信息122的間隔(granularity),則在雙核心處理器102的實際執(zhí)行期間,會 存在多種可能影響實際存儲器存取的順序。因此,軟件功能模塊模擬環(huán)境1 若檢測到這 個情形,將假設存儲器存取的可能順序,再依照該可能順序來執(zhí)行步驟S1406,并記錄操作 情形。須注意圖8至圖11的實施例所產(chǎn)生的心跳訊號信息122,其間隔大于圖6至圖7以 及圖12至圖13 ;而圖12至圖13的實施例所產(chǎn)生的心跳訊號信息122的間隔又大于圖4至 圖5。較大的間隔會使軟件功能模塊模擬環(huán)境124需要更多的時間來完成圖14的操作程 序,因為存儲器存取順序的數(shù)量可能會很多。流程接著前往步驟S1408。步驟S1408中,比較單元2 將步驟S1406產(chǎn)生的模擬結果與步驟S1402產(chǎn)生的 實際結果進行比較,流程接著前往步驟S1412。在步驟S1412中,將判斷比較結果是否相符合,如果是,則進行步驟S1414,否則進 行步驟S1416。步驟S1414中,比較單元2 在取否指示器2 上產(chǎn)生一取值(pass value),流程 中止于步驟S1414。在步驟S1416中,軟件功能模塊模擬環(huán)境IM判斷是否有其他可能的存儲器存取 順序未被執(zhí)行,如果有,則回到步驟S1406,并使用不同的存儲器存取順序來操作;否則,則 進行步驟S1418。在步驟S1418中,比較單元2 在取否指示器2 上產(chǎn)生一否值(fail value)。 流程中止于步驟S1418。請參考圖15,其為本發(fā)明圖1所揭示雙核心處理器102的另一實施例的功能方塊 圖。圖15、圖16相似于圖10、圖11,每個核心104在每一核心時鐘周期可完成多個指令,且 核心104的時鐘速率是心跳訊號106的時鐘速率的好幾倍,每個指令執(zhí)行指示105是兩比 特,用來指出每時鐘周期中,核心104所完成的指令數(shù)量。然而,本在圖15的實施例里,的 在每個總線時鐘周期中,心跳產(chǎn)生器103產(chǎn)生兩比特的心跳訊號106A,106B,其分別指出第 一核心104A及第二核心104B執(zhí)行所完成的指令數(shù)量為0,8,16,或32。
請參考圖16,其為本發(fā)明圖2所揭示的速率控制器204,在圖15實施例下的操作 例示表。本實施例圖表部份與圖7、圖9、圖11相似,如圖所示,每核心時鐘中,速率控制器 204從心跳訊號信息122中接收的心跳訊號106的值從0至3。同樣地,在每個時鐘周期中, 根據(jù)圖3中的步驟S306的判斷,圖表標示了速率控制器204根據(jù)圖3中的步驟S308,在所 對應的模擬時鐘周期期間,是否通過命令218A以控制第一核心的軟件功能模塊范例206A 去執(zhí)行指令(如果是,會標示有多少指令被執(zhí)行),以及是否通過命令218B來控制第二核 心的軟件功能模塊范例206B去執(zhí)行指令(如果是,會標示有多少指令被執(zhí)行)。在本例示 中,第一核心104A在時鐘0,2的心跳訊號106A是0,在時鐘4時是1,在時鐘3時是2,以及 在時鐘1,5時是3。因此,速率控制器204通過命令218A指示第一核心的軟件功能模塊范 例206A在模擬的時鐘0,2期間執(zhí)行0個指令;在模擬的時鐘4期間執(zhí)行8個指令;在模擬 的時鐘3期間執(zhí)行16個指令;以及在模擬的時鐘1,5期間執(zhí)行32個指令。另一方面,第二 核心1048在時鐘3,5的心跳訊號106B是0,在時鐘0,4時是1,在時鐘1,2時是2,而沒有 任一時鐘的心跳訊號為3。因此,速率控制器204會通過命令218B控制第二核心的軟件功 能模塊范例206B在模擬的時鐘3,5期間執(zhí)行0個指令;在模擬的時鐘0,4期間執(zhí)行8個指 令;在模擬的時鐘1,2期間執(zhí)行16個指令;而不會有任一時鐘執(zhí)行32個指令。圖15、圖16的實施例的優(yōu)點,是在圖14的操作下,可提供的間隔比圖8至圖11的 實施例更好。此外,本發(fā)明實施例中的心跳訊號106,亦可用在具有更細間隔的例子中,而在 這種情形下的錯誤模式并不需要讓每個核心104皆重新產(chǎn)生錯誤。例如,假設在邊帶總線 上有八個心跳訊號106,多核心處理器包括四個核心104,但只必須運作兩個核心104來重 新產(chǎn)生錯誤。這個情況下,心跳產(chǎn)生器103編寫成只使用八個心跳訊號106比特中的四個, 用來分別指出每個核心104完成的指令數(shù)量(0,2,4,6,8,10,12,14,16,18,20,22,24,26, 28,或 32 個)。雖然上述實施例中,每核心104執(zhí)行單一線程,但亦可設計成同時執(zhí)行多個線程, 并由心跳信息指出線程所完成的指令。此外,雖然上述實施例中,兩核心104具有相同的核心時鐘周期,但亦可具有不同 的核心時鐘周期,而由心跳訊號信息122指出兩核心速率,而速率控制器204在產(chǎn)生命令 218時便可以列入考量。另一實施例是使用Verilog模擬器來模擬實際的處理器,其致能除錯器,以在任 何時間存取處理器的任何通信連結(net),包括用來標示每核心執(zhí)行指令及存取存儲器的 次數(shù)的訊號。這些訊號可致能除錯器來提供信息給軟件功能模塊,如此便如同實際的處理 器(或至少如石繼處理器的Verilog模擬),可同時執(zhí)行指令及存取存儲器。然而,這樣會 帶來三個缺點第一,取決于模擬中的時鐘周期/指令的數(shù)量,Verilog模擬器會耗費非常 大量的系統(tǒng)資源及時間,因而使Verilog模擬變成是不太可能實施的方式,而且無法解決 某些類型的錯誤。第二,Verilog模擬器模擬出的運作行為,一定與實際的處理器的運作行 為不同。第三,Verilog模擬器模擬出的解決方法,需要把處理器設計成具有理想每時鐘一 狀態(tài)重現(xiàn)功能(perfect state-per-clock replay)的能力,這是很難實作出的。一般來說, 具有理想每時鐘一狀態(tài)重現(xiàn)功能的微處理器可隨一輸入狀態(tài)(input state)被載入,該輸 入狀態(tài)定義整個處理器的狀態(tài),意即,沒有任何處理器的狀態(tài)不能藉由載入輸入狀態(tài)來獲 得初始化。而本發(fā)明所提的實施例并不會有上述Verilog模擬器的缺點。
盡管本發(fā)明描述各種實施例,但不以所揭示的為限,計算機相關技術領域的技術 人員,皆可依據(jù)需求修改本發(fā)明所揭示的實施例,然所有不脫離本發(fā)明精神的變更仍應 包含在本發(fā)明的權利要求中。例如,軟件可實作功能、架構、模塊、模擬和/或上述各裝 置、方法。藉由使用一般程序語言(如C,C++)、硬件描述語言(hardware description languages, HDL),包括Verilog硬件描述語言等,或其他可用的程序,來實作本發(fā)明所述的 軟件。這樣的軟件可儲存于任何計算機可用的儲存媒體,如磁帶(magnetic tape)、半導 體、磁盤(magnetic disk)、或光盤(optical disc)(例如 CD-ROM, DVD-ROM 等)、網(wǎng)絡、有 線/無線或其他通訊媒體。本發(fā)明所述的裝置及方法實施例可包含于一半導體智能核心 (semiconductor intellectual property core),如一為處理器核心(例如內(nèi)嵌于硬件描 述語言中),且可轉(zhuǎn)成硬件形式,以生產(chǎn)于集成電路上。此外,本發(fā)明所述的裝置及方法亦可 是硬件和軟件的組合,不以所揭示的為限。以上所述僅為本發(fā)明的較佳實施例而已,并非用以限定本發(fā)明的權利要求的范 圍;凡其它未脫離發(fā)明所揭示的精神下所完成的等效改變或修飾,諸如將本發(fā)明應用在一 般用途計算機的處理器裝置等,均應包含在本發(fā)明的權利要求內(nèi)。
權利要求
1.一種微處理器的除錯方法,該微處理器具有多個核心,包含使微處理器去執(zhí)行指令的一實際執(zhí)行;從該微處理器獲得一心跳信息,其指出這些核心彼此間執(zhí)行指令的一實際執(zhí)行順序;命令一軟件功能模塊的多個相關范例根據(jù)該實際執(zhí)行順序來執(zhí)行指令,以產(chǎn)生執(zhí)行該 指令的一模擬結果;及比較該模擬結果與執(zhí)行該指令的一實際結果,以判斷兩者是否符合。
2.如權利要求1所述的方法,其中該實際結果以及該模擬結果包含這些核心在執(zhí)行完 后的一狀態(tài)。
3.如權利要求2所述的方法,其中該實際結果以及該模擬結果還包含執(zhí)行完后的一存 儲器狀態(tài)。
4.如權利要求1所述的方法,還包含若該模擬結果與該實際結果不符合,則標示一錯誤。
5.如權利要求1所述的方法,其中在對同一個存儲器地址進行一存儲器寫入指令以及 一存儲器讀取指令之間執(zhí)行的指令數(shù)量,小于該心跳信息的間隔,則存在多個可能影響存 儲器存取的可能執(zhí)行順序,其中命令該軟件功能模塊的多個相關范例執(zhí)行指令的步驟中, 是根據(jù)這些可能執(zhí)行順序來命令該軟件功能模塊的這些相關范例執(zhí)行指令,直到該模擬結 果與該實際結果符合為止。
6.如權利要求5所述的方法,還包含若所有這些執(zhí)行順序的該模擬結果都與該實際結果不符合,則標示一錯誤。
7.如權利要求1所述的方法,其中該心跳信息包含多個記錄,其為在指令的該實際執(zhí) 行期間的多個心跳,其中每一該記錄指出這些核心實際執(zhí)行的指令數(shù)量,而命令該軟件功 能模塊的多個相關范例執(zhí)行指令的步驟中,包含對每筆的這些記錄,命令該軟件功能模塊的每一該相關范例去實際執(zhí)行這些記錄中記 錄的指令數(shù)量。
8.如權利要求1所述的方法,其中從該微處理器獲得該心跳信息的步驟中,包含擷取 在一外部總線上實際執(zhí)行指令期間,該微處理器產(chǎn)生的心跳訊號。
9.一種微處理器,包含多個核心,每一這些核心輸出一指令執(zhí)行指示,用來指出這些核心在每一時鐘周期中 所執(zhí)行的指令數(shù)目;及一心跳產(chǎn)生器,其從每一這些核心接收該指令執(zhí)行指示,并對每一個在一外部總線上 的這些核心產(chǎn)生一心跳指示,其中該心跳指示指出了每一這些核心在該外部總線的每個時 鐘中,所執(zhí)行的指令數(shù)量。
10.如權利要求9所述的微處理器,其中這些核心的時鐘周期速率與該外部總線的時 鐘周期速率相同。
11.如權利要求9所述的微處理器,其中這些核心的時鐘周期速率大于該外部總線的 時鐘周期速率,其中每一該心跳指示指出的指令執(zhí)行數(shù)量比在每一該指令執(zhí)行指示指出的 可完成指令的最大數(shù)量還大。
12.如權利要求11所述的微處理器,其中這些核心的時鐘周期速率與該外部總線的時 鐘周期速率的比率為J,每一該指令執(zhí)行指示指出的可完成指令的最大數(shù)量為K,每一該心跳指示指出的指令執(zhí)行數(shù)量為L,其中L大于或等于J和K的積。
13.如權利要求11所述的微處理器,其中每一該心跳指示包含一單一比特。
14.如權利要求9所述的微處理器,其中每一這些核心包含一計數(shù)器,用來計數(shù)每時鐘 周期中已執(zhí)行的指令數(shù)量,其中該指令執(zhí)行指示為該計數(shù)器的計數(shù)值的一輸出比特。
15.如權利要求14所述的微處理器,其中該計數(shù)器的計數(shù)值的該輸出比特是比特M,且 M= log2N,其中N是該核心的時鐘與該外部總線的時鐘的比率以及該核心于每時鐘周期中 可完成的最大數(shù)量指令的積。
16.如權利要求9所述的微處理器,其中該心跳產(chǎn)生器包含一與每一這些核心相關的 計數(shù)器,用來計數(shù)每時鐘周期中已執(zhí)行的指令數(shù)量,其中該指令執(zhí)行指示為該計數(shù)器的計 數(shù)值的一輸出比特。
17.如權利要求16所述的微處理器,其中該計數(shù)器的計數(shù)值的該輸出比特是比特M,且 M= log2N,其中N是該核心的時鐘與該外部總線的時鐘的比率以及該核心于每時鐘周期中 可完成的最大數(shù)量指令的積。
18.如權利要求17所述的微處理器,其中每一該指令執(zhí)行指示為一比特,且每一該心 跳指示包含一單一比特。
19.如權利要求9所述的微處理器,其中該外部總線包含一邊帶總線,其耦接于該微處 理器,該邊帶總線不同于耦接于微處理器的主處理器總線。
20.如權利要求19所述的微處理器,其中至少有部份的該邊帶總線為一JTAG總線。
21.如權利要求19所述的微處理器,其中該邊帶總線為一服務處理器總線,其耦接于 該微處理器內(nèi)部的一服務處理器。
22.一種微處理器,包含多個核心,每一個核心會產(chǎn)生一指令執(zhí)行指示,用來指示各核心在每一時鐘期間,所執(zhí) 行的指令數(shù)目;一儲存陣列,其儲存在一段時鐘期間中,由這些核心所產(chǎn)生的指令執(zhí)行指示;及一總線接口單元,其耦接于該微處理器的一外部總線,其中該總線接口單元用來將儲 存于儲存陣列中的該指令執(zhí)行指示寫入至該微處理器的一外部存儲器中。
23.如權利要求22所述的微處理器,其中該總線接口單元以相較于其他處理該外部總 線上的傳輸?shù)淖畹蛢?yōu)先權來將該指令執(zhí)行指示寫入至該外部存儲器中。
24.如權利要求19所述的微處理器,還包含一心跳產(chǎn)生器,耦接于該儲存陣列以及該總線接口單元,用來從每一這些核心接收該 指令執(zhí)行指示,其中該心跳產(chǎn)生器是在該段時鐘期間中寫入該指令執(zhí)行指示至儲存陣列, 并從該儲存陣列讀出該指令執(zhí)行指示,使該總線接口單元將其寫至該外部存儲器。
25.如權利要求M所述的微處理器,其中該心跳產(chǎn)生器等候從該儲存陣列中讀出該指 令執(zhí)行指示,并在該段時鐘期間結束后以使該總線接口單元將該指令執(zhí)行指示寫至該外部 存儲器。
26.如權利要求M所述的微處理器,其中該心跳產(chǎn)生器周期性地從該儲存陣列中讀出 該指令執(zhí)行指示,以使該總線接口單元將其寫至該外部存儲器。
全文摘要
一種微處理器及其除錯方法。該微處理器的除錯方法,其中微處理器具有多個核心。所述的方法包括首先,使微處理器去執(zhí)行指令的一實際執(zhí)行(actual execution),并從微處理器獲得一心跳信息,其明確指出核心彼此間執(zhí)行指令的一實際執(zhí)行順序(actual execution sequence)。接著,命令一軟件功能模塊的多個相關范例根據(jù)實際執(zhí)行順序來執(zhí)行指令,以產(chǎn)生指令執(zhí)行的模擬結果。最后,比較模擬結果與指令執(zhí)行的實際結果,以判斷兩者是否符合。每個核心輸出一指令執(zhí)行指示,用以指出在每個核心時序中由核心所執(zhí)行指令數(shù)量;心跳產(chǎn)生器則對每個在外部總線上的核心產(chǎn)生一心跳指示,用以指出在每個外部總線時序周期中,由每個核心所執(zhí)行的指令數(shù)量。
文檔編號G06F11/00GK102096607SQ20111006308
公開日2011年6月15日 申請日期2011年3月16日 優(yōu)先權日2010年3月16日
發(fā)明者杰森.陳, 羅德尼.E.虎克, 達魯斯.D.嘉斯金斯 申請人:威盛電子股份有限公司