TWI468936B - 用於產生驗證程式之系統及方法 - Google Patents

用於產生驗證程式之系統及方法 Download PDF

Info

Publication number
TWI468936B
TWI468936B TW97103841A TW97103841A TWI468936B TW I468936 B TWI468936 B TW I468936B TW 97103841 A TW97103841 A TW 97103841A TW 97103841 A TW97103841 A TW 97103841A TW I468936 B TWI468936 B TW I468936B
Authority
TW
Taiwan
Prior art keywords
instruction
cpu
executing
instructions
result
Prior art date
Application number
TW97103841A
Other languages
English (en)
Other versions
TW200849005A (en
Inventor
James H Robinson
Original Assignee
Mips Tech Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mips Tech Inc filed Critical Mips Tech Inc
Publication of TW200849005A publication Critical patent/TW200849005A/zh
Application granted granted Critical
Publication of TWI468936B publication Critical patent/TWI468936B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • G06F11/263Generation of test inputs, e.g. test vectors, patterns or sequences ; with adaptation of the tested hardware for testability with external testers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2205Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
    • G06F11/2236Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test CPU or processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/39Circuit design at the physical level

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Description

用於產生驗證程式之系統及方法
在設計積體電路的過程中,電路設計者必須測試並驗證積體電路設計之設計與製造過程中所有階段的正確性。
一特定類型的積體電路包含中央處理單元(central processing unit,CPU)(也可稱為處理器)、微處理器以及核心(core)或是裝置,其操作係由執行指令來控制。藉由一組指令對CPU進行編程而控制機器執行各種任務之任一者來處理資料。在本專利申請的上下文中係廣泛的使用CPU這個術語來涵蓋任何形式的CPU。值得注意的是,CPU涵蓋了多線程(multi-threaded)或是多核心CPU,其中多線程可存取至少一共用資源(包含記憶體以及暫存器)。
由於消費者對不同應用範圍之專門處理能力所需求的效能,使得CPU變的越來越複雜。許多CPU使用專門的指令集,包含最佳化來執行特定工作的指令集(例如呈現多媒體內容)。
因此,隨著複雜度的增加,確保CPU結構是否正確地應用於CPU設計並且以可預測的方法操作之測試也變成更複雜且更專門的工作。
測試CPU設計的一種方法為撰寫“測試”程式(又叫做驗證程式)來測試CPU的部分或所有功能。驗證程式通常為由CPU設計者所撰寫的手寫程式(在許多例子中由工程師所撰寫),特別用來測試CPU的一部份。由於驗證程式為可於任何架構相容CPU(硬體或模擬)上執行之自我檢測組合語言 程式。很不幸的,由於測試程式通常是相對較小的靜態碼,通過所有的測試並不足以證明特定的設計在每一方面皆符合CPU架構或是不具有程式錯誤。
另一類型的驗證程式會產生隨機指令序列。隨機碼序列可探測遠超過藉由手寫或直接測試可達成之結構邊緣特性。在核心發展的初步階段之後,CPU將會通過所有的手寫程式,但是實現隨機指令序列的程式將會繼續尋找大量的程式錯誤。不幸的,此程式僅可於RTL模擬環境中執行,RTL模擬環境非常的慢、限制可執行的測試數量並且在大部分例子中算昂貴的,若無法取得合成RTL則無法執行之。值得注意的是,RTL為抽象的邏輯解釋(通常透過硬體描述語言或是HDL(例如Verilog或是VHDL)而精確地定義)而不是不連續的原始邏輯閘(布林邏輯(boolean-logic))網表(netlist)或是CPU的較高階抽象作用。
當使用隨機程式來測試CPU的特性時,必須透過某些方法來判定待測CPU是否正確的執行該隨機程式。其中一種方法為於待測CPU以及參考模型(通常為CPU模擬器)上執行該程式,並且比較執行的結果。藉由比較測試結束時兩個模型中的暫存器狀態以及記憶體來達成。另外,若可取得追蹤輸出,則可透過指令基礎來比較兩個模型的指令。由於授權外部參考模型來判斷正確的CPU特性,因此產生此類型的隨機程式相對簡單。此技術的一項缺點為必須產生可正確地在所有狀況下運作的外部參考模型。同樣的,當無法取得任何用於實際硬體的追蹤資料時會限制比 較CPU特性與參考模型的能力。另外對可產生的隨機特性有明顯的限制。例如,為了避免對記憶體的讀/寫保留區域執行載入或儲存指令,因此當計算用於載入或儲存的基本暫存器值必須有所限制。
由於驗證程式通常為非常小的不會隨時間改變的靜態碼,因此當執行特定指令時,驗證程式將不會永遠足以測試可能發生於複雜的CPU內部之所有狀態。
此外,目前的驗證程式無法永遠可以輕易的適應變換的CPU設計,因此當CPU越來越複雜時驗證程式會變的比較沒有幫助。例如,即使CPU架構中的基本指令集可向後相容,較舊的驗證程式也無法用來測試較新的擴充指令集。
本發明實施例提供一種自我檢測驗證系統、方法以及軟體應用程式,可隨機產生用來測試模擬、原型或是製造(實體)中央處理單元(CPU)的混合指令。
本發明實施例提供可隨機產生用來測試模擬、原型或是產品(實體)的中央處理單元(CPU)之混合指令的自我檢測驗證系統、方法以及軟體應用程式。
本發明之自我檢測驗證系統為可於電腦系統(例如圖1之電腦系統)上執行的軟體應用程式。圖1顯示適用於本發明實施例之電腦系統100的示意圖。電腦系統100可用來執行應用程式以及/或系統服務,例如根據本發明實施例之 部署(deployment)服務。
電腦系統100包含處理器102、唯讀記憶體(ROM)104、隨機存取記憶體(RAM)106以及輸入/輸出裝置,例如磁碟機108、鍵盤110(或是其他輸入周邊設備,例如滑鼠、輸入板、軌跡球、觸控螢幕或是其他適當的裝置)、顯示器112(或是任何其他輸出周邊設備,例如印表機、揚聲器或任何其他適當的輸出裝置)、以及通訊鏈結114。電腦包含可儲存於ROM 104、RAM 106或是磁碟機108並且可以被處理器102所執行之程式。通訊鏈結114係連接至電腦網路,但是無法連接至電話線、天線、閘道器或是任何其他類型的通訊鏈結。
磁碟機108包含任何適當的儲存媒體,例如軟碟機、硬碟機、CD ROM機或是磁帶機。電腦系統100可使用單一磁碟機或是複數磁碟機。電腦系統100可使用任何適當的作業系統116,例如WindowsTM 或UnixTM
值得注意的是,在前面圖示中所描述的計算系統僅作為本發明的說明,且在本發明申請專利範圍內的實施例皆可於任何適當的計算系統上執行,因此可利用任何適當的硬體以及/或軟體來實現計算系統。
圖1中的軟體應用程式118包含複數模組。以下將會詳細的介紹該模組。
軟體應用程式118係用來產生驗證程式120,驗證程式包含隨機產生的混合指令。接下來,隨機產生的混合指令可用來測試模擬或真實的CPU。本發明實施例之驗證程式 120在接下來的說明中又叫做自我檢測隨機驗證程式(SRVP)。
SRVP概述
SRVP的目的為測試CPU來判斷CPU是否如目的CPU結構與CPU指令集般正確的運作。在此實施例中,CPU的所有參考資料提及實現MIPS相容架構的CPU,CPU架構的所有參考資料提及MIPS相容架構。
由美國加州Mountain View的MIPS Technologies所發展的MIPS架構模型係與MIPS科技在1980年代所發展之RISC(Reduced Instruction Set)CPU架構模型相似。早期的MIPS架構實現為32位元(具有32位元寬的暫存器以及資料路徑),而較晚期的版本係擴充至64位元。MIPS架構其中一項值得注意的特徵為其基本指令集與延續的架構彼此相容。五種向後相容的修訂MIPS指令集存在於此應用程式的申請日,分別為MIPSI、MIPS II、MIPS III、MIPS IV以及MIPS 32/64。然而,本發明之驗證程式可用來測試未來的擴充指令集。本發明實施例以及本發明申請專利範圍所定義的範圍可應用於任何類型的CPU,且並非用來限定為該MIPS指令集。
圖2顯示SRVP的架構圖。SRVP 200包含兩種指令,分別為測試指令202以及查驗點204與206。測試指令202為隨機指令產生器所產生的隨機指令(參照圖3)。當執行SRVP時,查驗點204包含用來驗證所有被隨機指令修正之 暫存器與記憶區段的程式碼,在執行指令後(或是指令的子集合),查驗點204包含正確值。
查驗點204亦可包含在執行隨機指令前將記憶體與暫存器初始化至特定狀態的程式碼。在此實施例中,查驗點1(204)包含初始化程式碼,而查驗點2(206)包含暫存器檢查程式碼。在包含至少一個隨機指令群組的例子中,單一查驗點可包含用於前隨機指令群組的暫存器測試程式碼,以及用於後隨機產生指令群組的初使化程式碼。
若所有的查驗點皆不具有錯誤的通過,則執行來到通過副程式,用來回報SRVP已成功地完成。在特定時間內無法達到該通過副程式的任何操作會被視為失敗的操作。例如,原則上,程式錯誤可能會導致從執行連續不確定的位置跳到任何記憶體位置來執行。
SRVP係被提供於CPU的組合語言中。例如,寫入至MIPS語言的SRVP僅包含MIPS相容指令。這樣一來,SRVP可執行於支援該CPU架構(可包含實體CPU或是CPU模擬器)的任何裝置。SRVP不會取決於例如軌跡支援或是外部參考可取得性等任何特性。
SRVP產生系統
圖3之SRVP產生系統300為用來產生上述SRVP類型的彈性框架(framework)。使用者可使用SRVP系統產生不同類型的SRVP來覆蓋CPU架構的至少一區段。
SRVP產生系統300包含用來產生SRVP的樣版 (template)模組302。樣版模組302為用來產生連續隨機指令304的程式,SRVP系統使用該隨機指令304來建立驗證程式306(SRVP的其中一個例子)。樣版模組302包含描述即將建立於驗證程式305內之連續隨機指令304的一組規則,該規則係由使用者所設定並且受到使用者的控制。
例如,使用者可建立包含大量負載的序列,並且透過儲存指令將特定的重要性設置於於CPU負載/儲存架構。另外,使用者可選擇半隨機序列(例如隨機負載)接著設置隨機儲存指令以及隨機算數指令,並接著迴圈重複指令數次。SRVP系統300不用對產生隨機指令序列的類型或是相對順序設任何限制,留給使用者最大的彈性來產生要求提供大範圍CPU特性的測試。
樣版模組302產生的隨機指令序列304將會透過查驗點分散地插入驗證程式306(參照圖2)。查驗點為在執行指令或是判斷CPU是否正確的執行隨機指令之前對暫存器與記憶體值執行初始化的指令。查驗點根據包含於樣版模組302內的規則以及來自CPU模擬器模組308的資訊而自動產生。
CPU模擬器
SRVP系統300也包含CPU模擬器308,可用來接收指令並且可於執行指令之後模擬CPU中所有可量測的值。可量測的值包含暫存器以及記憶體之值。因此,可取得用來產生查驗點所需之必要資訊。為了插入查驗點,使用者送 出請求至CPU模擬器308來產生必要的查驗點碼。使用者可選擇隨機指令序列中查驗點的頻率。
CPU模擬器308包含所有CPU暫存器312的儲存元件310以及直接作為CPU參考的外部記憶體314。在接下來的段落中係以MIPS相容架構為例。在MIPS相容架構中的暫存器312又叫做特權資源架構(Privileged Resource Architecture,PRA)。
模擬器308可以判斷任何既定指令在CPU上的效果,包含CPU的期望輸出、所有暫存器的狀態以及由CPU直接控制之外部記憶體狀態。在此實施例中,模擬器308提供SRVP用來判斷執行已產生測試的CPU應有的正確行為之MIPS架構的參考模型。
CPU模擬器可以為獨特的軟體模組或是可以和SRVP系統整合在一起。
當提供特殊指令至模擬器時,模擬器係判斷當執行指令時會發生的狀況。換句話說,樣版模組提供隨機產生的指令至模擬器,並且接收若執行指令時所期望的CPU狀態回饋。
當隨機產生指令時,隨機產生的指令有相當的機率會使CPU進入不可預期或不感興趣狀態之指令類別。
例如,有某些MIPS架構無法預測CPU的結果狀態的非許可指令序列。接下來的指令序列可使MIPS CPU進入未定義狀態:
此處的mul指令將結果直接寫入暫存器,並且使hi/lo記憶體點進入不可預期狀態。因此,將值從hi(mfhi)移動的指令係將暫存器v1設定為不可預期之值,使得接下來的指令從位址v1(jr v1)跳位,導致程式跳位置不明的位址。這可以導致例外或是不期望的結果,並且可以繼續執行位址空間中任何可想到的位址。
換句話說,隨機產生的指令可導致具破壞性且不可預期的行為,並因而造成不感興趣的驗證觀點。
在另一實施例中,隨機產生的指令可導致記憶體中的區段碼被隨機值覆寫。這會造成CPU模擬器無法預測的行為。因此,本發明實施例之SRVP系統包含查驗機制來避免使CPU進入不可預期狀態的指令。
查驗機制的操作為對樣版模組回報接收樣版模組的指令以及執行指令的結果。
回報的結果係屬於四類型的其中一者,也就是不可預期、例外、分支(branch)以及一般類型。
不可預期:執行時會產生不可預期回應的指令(如上所述)。如此一來,將無法辨別將這樣的指令包含於SRVP中的好處。
例外:導致例外的指令(具有特定的接口向量以及PRA狀態)。若指令包含於SRVP中,SRVP也必須包含例外處 理器來處理所討論的例外。
例外處理器係查驗每個例外的發生,並且繼續執行正確的程式位址,直到修正所有使CPU發生例外的狀態。例外處理器接下來會使程式執行跳位至繼續產生隨機指令的期望位址。
分支:導致分支的指令。若該指令保留於SRVP中,接下來的指令必須瞭解將會從分支目標位址繼續執行指令。分支指令的例子為“beq t1,t2,label”。若暫存器t1與t2中的值相同,則模擬器回報期望的結果為分支。因此,若使用者選擇將該指令插入SRVP,則必須將適當的指令插入SRVP來處理分支。
一般:可更新PRA狀態但不會改變執行流程的指令。此指令可以不做任何修改的保留於SRVP中。
使用者可根據結果類型(也就是不可預期、例外、分支以及一般)選擇是否將該指令包含於SRVP中。例如,若使用者想要產生具有低例外的SRVP,則可選擇不要插入會產生例外的指令。
然而,某些會產生不可預期的結果的指令可透過將某些額外的碼插入SRVP而呈現為可預期的。SRVP系統包含一些可降低產生不可預期的結果或是不感興趣例外之指令數量的常式。
用於不可預期狀態的改變資訊
SRVP系統提供改變資訊。改變資訊為描述可以對SRVP執行改變而將SRVP的期望狀態表現為可預測類型的 資訊。改變資訊可包含於執行指令前改變CPU狀態的指令,因此於執行指令時可確保達到可預測的結果。改變資訊也可包含用來設定暫存器值或是記憶體位址的資訊,使得執行指令不會造成例外的發生。
採取任何一種形式皆可執行必要的改變(但通常與改變CPU狀態有關聯),其中一方面可透過插入查驗點的方式執行改變。隨機指令不需要被表現為可預測指令的程序中斷。因此,SRVP有助於樣版產生器建立用來產生可預測、非例外結果之未受限的隨機指令序列。
透過特定實施例中會詳細說明提供改變資訊的特徵。其中一個實施例為在隨機指令序列中載入或儲存指令。
完全隨機載入與儲存指令對隨機碼來說為容易出現問題。在MIPS架構中,載入或儲存的位址為與包含於基底暫存器中的值偏移(offset)16位元處(或是對索引載入/儲存而言為兩個暫存器相加之值)。在理想的情況下,由於任意的先前指令,使得包含於基底暫存器中的值應該完全地隨機計算(可提供所有可能待測位址之較佳機率)。
然而,除非記憶體以及核心PRA以特定的方式來設定,否則從任意基底位址所建立的載入或儲存指令無法在每個例子中產生可預測結果。
因此,在確保達到可預測結果的同時利用隨機產生載入以及儲存操作的能力,使得SRVP系統使用複製技術“產生追溯轉換查考緩衝區(translation lookaside buffer,TLB)項目”。
MIPS架構支援多重虛擬位址空間,每個虛擬位址係分割為片段。在一些實施例中,MIPS CPU可包含記憶體管理單元,用來翻譯所有由CPU透過轉換查考緩衝區(最近翻譯虛擬分頁編號之完全相關快取記憶體)產生的虛擬位址。也就是,每個TLB項目皆持有虛擬分頁編號、位址空間辨識器以及分頁框架編號。
因此,於載入/儲存指令參考虛擬記憶體位址處,對應的實體記憶體位址係透過包含於CPU之TLB的映射表來計算。這在一些CPU架構中會常常發生。例如,在具有TLB的MIPS32 CPU中,透過TLB可存取CPU可用的75%的總位址空間。
當載入或儲存指令遇上虛擬記憶體位址且在目前CPU的TLB中無法找到對應的項目時,SRVP軟體應用程式係回報若執行時請求指令的結果可能為”遺失”TLB的例外。
另外,模擬器也會提供需要產生之TLB項目類型的資訊,使得位址映射至用來測試讀取或寫入的記憶體區域。接下來,樣版模組可藉由在SRVP中指令位至前的查驗點處增加適當的指令以產生建議的映射。當樣版模組再度請求指令時,模擬器會觀察映射並且產生可預測非例外的結果。
其他技術也可用來確保取得可預測的結果。例如,SRVP系統亦透過正確初始化的記憶體來提供技術。該技術被複製為“追溯記憶體初始化”。
當載入企圖讀取先前未初始化的實體記憶體之字時, 若在測試中的值儲存於某些先前點的位置時,CPU模擬器通知樣版模組結果可能是可預測的。接下來,樣版模組可透過於執行載入前插入適當的指令追溯實體記憶體之字的初使化。
同樣的技術也可用於可能發生位址對齊例外或是SRVP可能意外存取記憶體保留區域的狀況。也就是,若透過樣版模組選取隨機存取位置,隨機位置可能無法將記憶體空間的粒度列入考量,因而導致例外。同樣的,隨機產生的記憶體位置可意外的存取記憶體的保留區域,也會造成無法預測的結果。在第三實施例中,使用者可能想要強迫SRVP存取記憶體的特定區域。透過請求模擬器提供即時偏移選擇而達成。換句話說,模擬器可要求樣版模組使用特定的即時值來執行載入或儲存。
使用這些技術可以在不限制如何計算基底暫存器值的情況下隨機的將載入與儲存插入SRVP。藉由使用追溯TLB項目產生、追溯記憶體初始化以及即時偏移選擇的技術建立查驗點並將其插入SRVP中的載入或儲存指令之前,大部分的隨機載入與儲存可造成可預測、非例外的結果並且指向實體記憶體與快取記憶體的期望區域。
值得注意的是,此處所說明的技術也可應用於多線程以及多核心系統,其中至少一資源(例如記憶體或是暫存器)係由CPU內不同的執行線程所共用。對具有多執行線程的CPU來說,產生器對每個執行線程建立個別的隨機指令串流。將適當的碼插入SRVP以確保每個系統的線程執行適 當的隨機指令序列。假使多線程存取相同的儲存元件(可能是CPU暫存器或是外部記憶體),除非將某些同步指令序列插入SRVP來確保存取共用記憶體元件的順序出現於線程間,否則存取這些儲存元件的結果可能會無法預測。當發生這樣不可預測的存取時,模擬器係提供改變資訊至產生器建議需要什麼樣的同步事件來呈現共用儲存元件(記憶體或暫存器)的存取結果為可預測的。藉由將該建議的同步事件插入至SRVP,產生器可產生具有可預測結果之隨機多線程指令序列。
SRVP流程的例子
參照接下來簡化的例子可詳細說明本發明實施例所述之方法。值得注意的是,實際的例子中可能會產生幾千甚至幾百萬個指令,為了清楚且易於瞭解的原因,此處僅提供簡化的例子。
參照圖4,在第一步驟(步驟400)中,使用者對樣版模組執行初始化並選擇性的提供設定檔(profile)(也就是關於使用者想要使用之混合指令的資訊)。例如,使用者可能想要建立具有大量載入/儲存指令的測試。一旦提供期望的設定檔,則樣版會隨機選取符合設定檔的一組指令,配置隨機值至作為每個指令之輸入的每個暫存器,並且產生適當的碼來初始所有的變數以隨機的選取值(步驟402)。例如,樣版可選擇下列的三個指令:
第一指令“add”指令具有兩個輸入暫存器以及一個輸出暫存器,且執行相加指令將使得輸出暫存器之值被設定為兩個輸入暫存器之值的總和。當選擇將“add”指令插入SRVP的隨機指令序列時,SRVP選擇隨機初始值來配置每個相加指令的輸入暫存器。值得注意的是,隨機選取值是從特殊的設計中選取出來,選取非平均分佈之值來修改命中極端例子(corner case)的機率(例如溢位)。特殊的設計代表收集在最高可能值以及最低可能值附近之值,或是可激發CPU內算數邏輯單元中邊緣效應(edge effect)之具有二進位樣版之值。對一些隨機指令序列來說會將一或兩個相加指令的輸入暫存器之值計算為隨機序列中先前指令的輸出值,在這樣例子中可跳過配置用於暫存器的隨機輸入值。
該樣版產生組合語言碼(assembly code)來初始所有的值(步驟406)。下列碼會設置於第一查驗點的開端:LI(s6,0x23d1fca9) LI(s2,0xe62af518) LI(t4,0x062a3cb1)
接下來,通知模擬器將所有適當的暫存器設定至對應值(步驟404)。在本發明實施例中,指令’LI’用來將即時值載入暫存器的組合語言巨指令(marco)。
樣版將第一指令提供至模擬器(步驟406)並於執行指令後判斷模擬器(CPU)的期望狀態,因而判斷隨機產生指令是 否產生可預測且感興趣的結果。換句話說,指令“add t0,s6,s2”會被傳遞至模擬器。因此,模擬器預處理該指令並且判斷將t0設定至0x09fcf1c1為正常運作的結果。
模擬器將判斷結果回傳至樣版模組。由於該結果為正常運作的結果,樣版將指令寫入SRVP(步驟408)並且命令模擬器模擬指令的作用,並且將所有內部儲存元件之值設定為需要的(required)(步驟410),在該實施例中必要的儲存器代表將t0設定至0x09fcf1c1。
接下來,處理程序回到判斷是否有任何需要查驗(步驟412)並且配置第二指令的其他指令。樣版模組將“mul t8,t4,t0”提供至模擬器,且該模擬器預處理指令(步驟406),並於執行指令後判斷模擬器的期望狀態。在本發明實施例中的該指令字會導致正常的執行,t8會被設定至0x60366271且HI/LO累加器會被設定為不可預測的狀態。
由於來自模擬器的資訊,樣版會將指令插入驗證程式(步驟408)。接下來,模擬器係處理該指令並且將代表t8之內部儲存元件值設定至0x60366271,並且宣布HI/LO累加器位於未知狀態(步驟410)。
接下來,處理程序回到判斷是否具有任何需要測試的其他指令(步驟412),並且配置第三指令。樣版將指令“lw t7,19(t8)”提供至模擬器來欲處理該指令,並且回傳CPU的期望狀態(步驟406)。在此實施例中,指令字會導致來自虛擬位址0x60366284之TLB失敗的例外。
本發明的目的在於在需要樣版的情況下用來產生TLB 失敗之外的非例外載入。因此,在指令寫入SRVP之前將該指令會被分類為一種類型(步驟414),若可以的話則接著產生改變資訊(步驟416)來克服TLB失敗的問題。
在本發明實施例中,改變資訊為將碼插入上述查驗點以產生用於討論中虛擬位址的TLB映射。
樣版隨機選取目前未使用的TLB項目,更新模擬器中TLB的狀態來反應新的映射並且將下列映射產生碼插入上述查驗點:
在上述碼的片段中,v1為樣版保留用於查驗點的暫存器。選取映射的細節將會使虛擬位址映射至測試可存取之實體位址。
接下來,樣版將新的指令“lwt7,19(t8)”提供至模擬器(步驟406)來執行預處理(若即將執行該指令),以判斷模擬器的期望狀態。模擬器知道討論中的虛擬位址映射至實體 位址0x01066284。然而,模擬器不知道儲存於此記憶體位置之值。因此,模擬器通知載入指令的結果可能會將暫存器t7設定為未知值。由於結果為未知,因此必須判斷指令類型,且模擬器會藉由將一值寫入實體位置0x01066284來提供呈現可預測結果之建議的改變資訊。
為了回應上述建議,樣版係於先前的查驗點中插入指令,以將記憶體字0x01066284初始為隨機值,並且通知模擬器記憶體字已被初始化為該值。此係藉由插入下列的碼片段而達成:
查驗點碼片段使用未映射的虛擬位址來將一值寫入討論中的實體位址。查驗點將會在必要的特權等級時執行處理,以存取位址空間之未映射片段。
處理程序再次的重複,樣版將指令“lw t7,19(t8)”傳遞至模擬器執行欲處理,以判斷模擬器的期望狀態(步驟406)。模擬器通知結果為正常執行,並且將t7設定至0xbd91075f。
接下來,樣版將指令插入SRVP(步驟408)。將組合語言指令lw t7,19(t8)傳遞至模擬器來模擬執行指令時模擬器的期望狀態。模擬器將代表t7之內部儲存元件之值設定至0xbd91075f來更新模擬器中的所有值(步驟410),並且將TLB映射索引0x1a傳遞至樣版。因此,樣版會保留模擬器所提供的TLB映射。模擬器現在無法追溯覆寫此TLB映 射。TLB映射可能只能於驗證產生的載入指令後被覆寫。
接下來,樣版請求產生新的查驗點(步驟420)。在此查驗點中必須檢查所有執行指令的輸出值。模擬器產生下列碼片段,且樣版係將下列碼片段插入驗證程式:
在此實施例中,t6為保留給查驗點使用的暫存器。“Fail”為回報失敗的副程式。若樣版產生任何其他TLB映射,這些映射會被新增至目前查驗點的末端。由於覆寫該項目不會影響先前“lw”指令的特性,因此樣版不必保留0x1a這個剛被使用的TLB項目。
因此,根據以上所述程序係產生下列自我檢測碼:
EnterCheckpointprivilege()以及ExitCheckpointPrivilege()這兩個程式為組合語言巨集,可用來取得或停止用來實現查驗點中指令的必要特權等級(例如存取未映射記憶體區段或是寫入TLB項目)。這些程式包含於驗證程式中,以允許無障礙的執行程式。
如上所述,此實施例提供可自動產生複雜、感興趣、自我檢測以及強固驗證程式的系統、方法以及軟體應用程式。藉由使用SRVP軟體應用程式可以讓使用者選擇類型、指令的組合與順序、產生的指令、產生適當的暫存器以及記憶體參考值、插入查驗點並且收集並自動回報結果。這也允許使用者較佳的測試CPU設計。
另外,SRVP框架與任何特殊CPU架構設計無關。使用框架可用來產生用於提供適當的樣版以及模擬器之任何CPU架構以及任何CPU指令集的隨機產生自我檢測驗證程式。
本發明第一實施例提供一種方法來產生用於CPU的驗證程式,包含隨機產生可於CPU上執行的至少一指令,將隨機產生的指令提供至CPU模擬器,模擬器於執行指令之後回傳CPU狀態,並且建議改變CPU的先前狀態來修改至少一指令的影響。
方法可包含將至少一指令的狀態分類,並且可以從包含一般類型、分支類型、例外類型以及不可預期類型的群組中選擇狀態。 若該狀態為一般狀態,則可以將至少一指令寫入驗證程式。
若指令狀態為不可預期,則可以將狀態回報給使用者,或是必須決定用來呈現可預期指令的改變資訊,以將改變資訊插入驗證程式來呈現至少一可預期指令。
改變資訊可以採用執行至少一指令之前用來設定至少一暫存器的暫存器設定碼以及/或用來設定被至少一指令參考的至少一記憶體位址之記憶體映射資訊。模擬器較佳為用來決定改變資訊。
若指令狀態為分支,則可以將分支處理指令插入驗證程式。另外,若指令狀態為例外,則可以將例外處理指令插入驗證程式。
也可以將用來回報CPU狀態的至少一指令(例如查驗點)插入驗證程式。CPU可以為可利用MIPS指令集的中央處理單元。
本發明第二實施例提供一種方法,用來產生用於CPU的驗證程式,包含接收關於複數指令類型的輸入,對每個複數指令類型隨機產生可於CPU上執行的至少一指令,將每個至少一隨機產生指令提供至CPU模擬器,因此模擬器係於執行每個至少一指令之後回傳CPU的期望狀態。
本發明第三實施例提供一種系統,用來產生用於CPU的驗證程式,包含產生器,用來產生可於CPU上執行的至少一指令,以及模擬器,用來接收隨機產生的指令,其中模擬器係於執行指令之後回傳CPU的狀態。
本發明第四實施例提供隨機產生的軟體應用程式,用來驗證CPU的操作,包含至少一隨機產生指令以及至少一查驗點,用來驗證執行隨機產生指令時電路的狀態。
本發明第五實施例提供於電腦系統上執行的電腦程式,用來執行本發明第一實施例的方法步驟。
本發明第六實施例提供包含本發明第五實施例之電腦程式的電腦可讀取媒體。
在本發明實施例中,SRVP為寫入MIPS組合語言(指令集)中的程式。SRVP可於任何MIPS相容CPU(不論是硬體或模擬)上執行。必須瞭解的是,本發明實施例可用來產生用於任何類型的CPU或是積體電路之驗證程式。SRVP碼(如上所述)的設計係使得不同測試類型的結構更簡單並且有彈性。雖然指令係來自可取得指令的樣版,熟悉此記憶之人士可透過改變包含於樣版中的指令及以及改變模擬器輕易的改寫本發明實施例而產生適用於任何CPU類型的驗證程式。熟悉此記憶之人士皆瞭解,這樣的變更與修改並未脫離本發明之精神和範圍。
100‧‧‧電腦系統
102‧‧‧處理器
104‧‧‧唯讀記憶體
106‧‧‧隨機存取記憶體
108‧‧‧磁碟機
110‧‧‧鍵盤
112‧‧‧顯示器
114‧‧‧通訊鏈結
116‧‧‧作業系統
118‧‧‧軟體應用程式
120‧‧‧驗證程式
200‧‧‧SRVP
202‧‧‧測試指令
204‧‧‧查驗點
206‧‧‧查驗點
300‧‧‧SRVP產生系統
302‧‧‧樣版模組
304‧‧‧隨機指令
306‧‧‧驗證程式
308‧‧‧模擬器模組
310‧‧‧儲存元件
312‧‧‧暫存器
314‧‧‧外部記憶體
為讓本發明之上述和其他目的、特徵、和優點能更明顯易懂,下文特舉出較佳實施例,並配合所附圖式,作說明如下:圖1顯示一種計算系統,該計算系統可操作本發明實施例所述之軟體應用程式。
圖2顯示本發明實施例之驗證程式的元件示意圖。 圖3顯示用來產生圖2之驗證程式的軟體應用程式模組的示意圖。
圖4顯示用來產生本發明實施例之驗證程式的流程圖。
100‧‧‧電腦系統
102‧‧‧處理器
104‧‧‧唯讀記憶體
106‧‧‧隨機存取記憶體
108‧‧‧磁碟機
110‧‧‧鍵盤
112‧‧‧顯示器
114‧‧‧通訊鏈結
116‧‧‧作業系統
118‧‧‧軟體應用程式
120‧‧‧驗證程式

Claims (23)

  1. 一種產生用於一中央處理單元(CPU)之一驗證程式的方法,該方法包含隨機產生可於該CPU執行的一指令;將該隨機產生的指令提供至一CPU模擬器,自該CPU模擬器接收執行該指令後的該CPU之一預期狀態以及能夠改變該CPU的一先前狀態之改變資訊,以修改該指令的效果,將一執行該指令的結果分類為一般類型、分支類型、例外類型、及不可預期類型之其中一者,若該執行該指令的結果為不可預期類型,則利用該改變資訊以改變該CPU之該先前狀態,而使該指令的該結果成為可預期的。
  2. 如申請專利範圍第1項之方法,更包含,若該執行該指令的結果為一般類型,則將該指令寫入該驗證程式。
  3. 如申請專利範圍第1項之方法,更包含,將該改變資訊插入該驗證程式以改變該CPU之該先前狀態,以使該指令的該結果成為可預期的。
  4. 如申請專利範圍第3項之方法,其中插入該改變資訊包含在執行該指令前,插入一暫存器設定碼至包含該指令之指令的一隨機串流,且其中,該暫存器設定碼係插入至該串流中在該指令的執行次序之前的一位置。
  5. 如申請專利範圍第4項之方法,其中插入該改變資訊包含插入一記憶體映射資訊,以設定由該指令所 參考的一記憶體位址,且其中,該記憶體映射資訊係插入至該串流中在該指令的執行次序之前的一位置。
  6. 如申請專利範圍第5項之方法,其中該記憶體位址為實體與虛擬位址之其中一者。
  7. 如申請專利範圍第1項之方法,更包含,若執行該指令的結果為分支類型,則將分支處理指令插入該驗證程式。
  8. 如申請專利範圍第1項之方法,更包含,若執行該指令的結果為例外類型,則將例外處理指令插入該驗證程式。
  9. 如申請專利範圍第1項之方法,更包含將用來回傳該CPU狀態的至少一指令插入該驗證程式。
  10. 如申請專利範圍第1項之方法,其中該CPU係使用MIPS指令集。
  11. 一種產生用於一中央處理器(CPU)之一驗證程式的系統,該系統包含:一產生器,用來隨機產生可於該CPU上執行之一指令;以及一模擬器,用來接收該隨機產生的指令,其中該模擬器係回傳執行該指令後的該CPU之一預期狀態以及能夠改變該CPU的一先前狀態之一改變資訊,以修改該指令的效果,一分類模組,用來將執行該指令的結果分類為一般類型、分支類型、例外類型,以及未期望類型之其中一者,以及一回報模組,若該執行該指令的結果為未期望類型,則該回報模組決定該改變資 訊,以改變該CPU之該先前狀態,而使該指令的該結果成為可預期的。
  12. 如申請專利範圍第11項之系統,更包含一改變資訊模組,其可使得該改變資訊在該指令的執行次序之前的指令之一隨機串流的一位置插入該驗證程式,以使該指令成為可預期的。
  13. 如申請專利範圍第12項之系統,其中該改變資訊包含一暫存器設定碼,其係插入包含該指令之指令的一隨機串流,且其中該暫存器設定碼係在該指令的執行次序之前的指令之一隨機串流的一位置。
  14. 如申請專利範圍第12項之系統,其中該改變資訊包含記憶體映射資訊,用來設定由該指令所參考的一記憶體位址,且其中,該記憶體映射資訊係插入至該串流中在該指令的執行次序之前的一位置。
  15. 如申請專利範圍第14項之系統,其中該記憶體位址為實體與虛擬位址之其中一者。
  16. 如申請專利範圍第11項之系統,其中若執行該指令的結果為分支類型,則該改變資訊包含分支處理指令。
  17. 如申請專利範圍第11項之系統,其中若執行該指令的結果為例外類型,則該改變資訊包含例外處理指令。
  18. 如申請專利範圍第11項之系統,更包含一查驗點模組,用來將用來回傳該CPU狀態之至少一指令插入該驗證程式。
  19. 如申請專利範圍第18項之系統,其中該查驗點模組係執行於一特權等級,該特權等級不同於該指令之特權等級。
  20. 一種隨機產生的程式,用來驗證一中央處理器(CPU)上的執行之一或多個線程的操作,該程式體現在一非暫時性電腦可讀取媒體及使一設備執行該程式已完成一方法,包含:產生至少一隨機產生的指令以及至少一查驗點,用來驗證執行之該一或多個線程的其中一者的狀態;以及提供由一模擬器所建議之一同步指令,其中該模擬器係被設置以接收該至少一隨機產生的指令,並在該至少一個隨機產生的指令已被執行之後回傳該CPU之一預期狀態,且其中,由該模擬器所建議的該同步指令係插入至該程式中,以在該至少一個隨機產生的指令被執行時產生可預測結果;以及其中該產生更包含產生複數隨機指令,以同時驗證至少一額外CPU的操作。
  21. 一種用以驗證一中央處理器之一架構的方法,該方法包含隨機產生複數可執行的指令,該等指令包含一載入指令或是一儲存指令,該載入指令或該儲存指令之任一者係被設置以存取一基底暫存器中的一值,以分別決定用於一載入操作或一儲存操作的一記憶體位置,其中: 若一實體位址(physical adderss,PA)第一次被讀取,則插入碼至該等複數可執行指令,使該實體位址之該記憶體位址初始化為一已知值;若一虛擬位址(virtual adderss,VA)被一轉換查考緩衝區(TLB)所映射,並且當一目前指令被執行時該TLB中不具有對應的有效項目(entry),則插入碼於該等複數可執行指令之一先前查驗點中來填充(populate)該TLB,並且映射該載入(load)操作至一可用的實體位址;從該載入指令或該儲存指令中選取一即時偏移值來對齊所計算的虛擬位址;以及若該虛擬位址沒有被映射,且該實體位址不在一驗證測試所需要的記憶體區域內時,則清除該載入指令。
  22. 如申請專利範圍第21項之方法,其中該基底暫存器中之值係由一先前指令序列所產生。
  23. 一種非暫時性電腦可讀取媒體,包含用來使一電腦執行指令以實現申請專利範圍第21項之方法的可執行的指令。
TW97103841A 2007-02-02 2008-02-01 用於產生驗證程式之系統及方法 TWI468936B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US11/670,876 US20080189528A1 (en) 2007-02-02 2007-02-02 System, Method and Software Application for the Generation of Verification Programs

Publications (2)

Publication Number Publication Date
TW200849005A TW200849005A (en) 2008-12-16
TWI468936B true TWI468936B (zh) 2015-01-11

Family

ID=39674567

Family Applications (1)

Application Number Title Priority Date Filing Date
TW97103841A TWI468936B (zh) 2007-02-02 2008-02-01 用於產生驗證程式之系統及方法

Country Status (3)

Country Link
US (1) US20080189528A1 (zh)
TW (1) TWI468936B (zh)
WO (1) WO2008093224A2 (zh)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8479173B2 (en) * 2008-07-09 2013-07-02 International Business Machines Corporation Efficient and self-balancing verification of multi-threaded microprocessors
US20110087861A1 (en) * 2009-10-12 2011-04-14 The Regents Of The University Of Michigan System for High-Efficiency Post-Silicon Verification of a Processor
US8516229B2 (en) * 2010-02-05 2013-08-20 International Business Machines Corporation Two pass test case generation using self-modifying instruction replacement
US20120102458A1 (en) * 2010-10-22 2012-04-26 Microsoft Corporation Generating documentation from tests
US8423343B2 (en) * 2011-01-24 2013-04-16 National Tsing Hua University High-parallelism synchronization approach for multi-core instruction-set simulation
CN106415565B (zh) * 2014-03-28 2019-11-05 爱迪德技术有限公司 保护软件项目
US9448917B2 (en) 2014-04-09 2016-09-20 Samsung Electronics Co., Ltd. System on chip and verification method thereof
US9690680B1 (en) * 2016-09-23 2017-06-27 International Business Machines Corporation Testing hybrid instruction architecture
CN108920314A (zh) * 2018-06-26 2018-11-30 郑州云海信息技术有限公司 一种故障硬件定位方法、装置、系统及可读存储介质
US11361136B2 (en) 2020-07-17 2022-06-14 International Business Machines Corporation Creating multiple use test case
GB2611542B (en) * 2021-10-06 2023-11-15 Advanced Risc Mach Ltd Circuitry and method
CN117076330B (zh) * 2023-10-12 2024-02-02 北京开源芯片研究院 一种访存验证方法、系统、电子设备及可读存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5729554A (en) * 1996-10-01 1998-03-17 Hewlett-Packard Co. Speculative execution of test patterns in a random test generator
US6886125B2 (en) * 2000-02-22 2005-04-26 Hewlett Packard Development Company, L.P. Testing a processor using a random code generator

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3274036B2 (ja) * 1994-05-30 2002-04-15 富士通株式会社 プロセッサの動作モデルと論理検証用試験命令列の自動生成方法及び装置
US5572666A (en) * 1995-03-28 1996-11-05 Sun Microsystems, Inc. System and method for generating pseudo-random instructions for design verification
US6606721B1 (en) * 1999-11-12 2003-08-12 Obsidian Software Method and apparatus that tracks processor resources in a dynamic pseudo-random test program generator
US7082552B2 (en) * 2000-02-08 2006-07-25 Mips Tech Inc Functional validation of a packet management unit
US7287147B1 (en) * 2000-12-29 2007-10-23 Mips Technologies, Inc. Configurable co-processor interface
US7085964B2 (en) * 2001-02-20 2006-08-01 International Business Machines Corporation Dynamic test program generator for VLIW simulation
US6742165B2 (en) * 2001-03-28 2004-05-25 Mips Technologies, Inc. System, method and computer program product for web-based integrated circuit design
US6523104B2 (en) * 2001-07-13 2003-02-18 Mips Technologies, Inc. Mechanism for programmable modification of memory mapping granularity
US6892286B2 (en) * 2002-09-30 2005-05-10 Sun Microsystems, Inc. Shared memory multiprocessor memory model verification system and method

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5729554A (en) * 1996-10-01 1998-03-17 Hewlett-Packard Co. Speculative execution of test patterns in a random test generator
US6886125B2 (en) * 2000-02-22 2005-04-26 Hewlett Packard Development Company, L.P. Testing a processor using a random code generator

Also Published As

Publication number Publication date
WO2008093224A2 (en) 2008-08-07
US20080189528A1 (en) 2008-08-07
TW200849005A (en) 2008-12-16
WO2008093224A3 (en) 2009-12-23

Similar Documents

Publication Publication Date Title
TWI468936B (zh) 用於產生驗證程式之系統及方法
Lowe-Power et al. The gem5 simulator: Version 20.0+
US9201993B2 (en) Goal-driven search of a stochastic process using reduced sets of simulation points
US9665674B2 (en) Automating a microarchitecture design exploration environment
US7779393B1 (en) System and method for efficient verification of memory consistency model compliance
US11204859B2 (en) Partial-results post-silicon hardware exerciser
US10579341B2 (en) Generation of workload models from execution traces
US11734480B2 (en) Performance modeling and analysis of microprocessors using dependency graphs
JP2009230451A (ja) 等価性検証方法、等価性検証プログラム及び等価性検証プログラムの生成方法
US20050086565A1 (en) System and method for generating a test case
Zhang et al. Heterofuzz: Fuzz testing to detect platform dependent divergence for heterogeneous applications
Parasyris et al. A framework for evaluating software on reduced margins hardware
US10331830B1 (en) Heterogeneous logic gate simulation using SIMD instructions
US7673288B1 (en) Bypassing execution of a software test using a file cache
US6775810B2 (en) Boosting simulation performance by dynamically customizing segmented object codes based on stimulus coverage
US8412507B2 (en) Testing the compliance of a design with the synchronization requirements of a memory model
Espinosa et al. Analysis and RTL correlation of instruction set simulators for automotive microcontroller robustness verification
US9448909B2 (en) Randomly branching using performance counters
US10162917B1 (en) Method and system for implementing selective transformation for low power verification
US6813599B1 (en) Efficient memory structure simulation for sequential circuit design verification
US20040088682A1 (en) Method, program product, and apparatus for cache entry tracking, collision detection, and address reasignment in processor testcases
Cordeiro et al. Intrinsics-hmc: An automatic trace generator for simulations of processing-in-memory instructions
Hunt et al. Verifying the FM9801 microarchitecture
US20080300845A1 (en) Monitoring software simulations of hardware systems
US7051301B2 (en) System and method for building a test case including a summary of instructions

Legal Events

Date Code Title Description
MM4A Annulment or lapse of patent due to non-payment of fees