專利名稱:微處理器指令集驗(yàn)證方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種微處理器指令集的驗(yàn)證方法,具體用于微處理器設(shè)計(jì)各階段的功能驗(yàn)證。
背景技術(shù):
指令集驗(yàn)證在微處理器設(shè)計(jì)中非常關(guān)鍵并貫穿于整個(gè)設(shè)計(jì)過程。指令集定義實(shí)現(xiàn)的功能越多,電路的集成復(fù)雜度的越高,指令集驗(yàn)證工作的復(fù)雜度和工作量越大。設(shè)計(jì)一種自動(dòng)化、可移植、驗(yàn)證覆蓋率高的指令集驗(yàn)證方法對(duì)設(shè)計(jì)正確性、可靠性和縮短芯片從設(shè)計(jì)到流片的時(shí)間非常重要。傳統(tǒng)的功能驗(yàn)證方法是通過人工編寫大量的“指令序列”作為驗(yàn)證激勵(lì),施加到 微處理器設(shè)計(jì)上,通過EDA軟件查看波形,檢查指令執(zhí)行的正確性。這種驗(yàn)證方法具有很大的“隨意性”,通常是設(shè)計(jì)者考慮到某一方面的指令集功能,就設(shè)計(jì)相應(yīng)的指令序列,由微處理器執(zhí)行該段序列來驗(yàn)證設(shè)計(jì)的正確性。這樣就很難完全覆蓋到微處理器指令集定義的全部功能。隨著微處理器設(shè)計(jì)規(guī)模的增大,需要編寫用于驗(yàn)證的指令序列數(shù)量成指數(shù)量級(jí)增長,自動(dòng)化程度不高。而且當(dāng)指令集定義發(fā)生改變時(shí),需要針對(duì)微處理器重新設(shè)計(jì)驗(yàn)證指令序列,之前的驗(yàn)證代碼很難被移植到新設(shè)計(jì)的驗(yàn)證上。另一種方法是利用高級(jí)語言,如C語言,編寫復(fù)雜的驗(yàn)證程序,經(jīng)過編譯器編譯成二進(jìn)制碼,在微處理器上運(yùn)行該二進(jìn)制代碼對(duì)微處理器設(shè)計(jì)進(jìn)行驗(yàn)證。這種方法的缺點(diǎn)是,編譯器采用優(yōu)化策略對(duì)二進(jìn)制代碼經(jīng)過優(yōu)化后,產(chǎn)生的驗(yàn)證代碼不能夠完全覆蓋到微處理器的設(shè)計(jì),在一些路徑上會(huì)缺少對(duì)應(yīng)的驗(yàn)證激勵(lì)。
發(fā)明內(nèi)容
為了克服現(xiàn)有技術(shù)的不足,本發(fā)明提供一種自動(dòng)化、可移植的微處理器指令集驗(yàn)證方法,以提高驗(yàn)證的覆蓋率。本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案包括以下步驟步驟I、將監(jiān)控程序加載到微處理器中,并啟動(dòng)微處理器運(yùn)行監(jiān)控程序;步驟2、對(duì)微處理器支持的指令集分類,每一類指令由一組參數(shù)確定,針對(duì)每一類指令,設(shè)計(jì)一個(gè)指令驗(yàn)證的代碼框架,將需要驗(yàn)證的指令或指令序列嵌入到這個(gè)代碼框架中;步驟3、對(duì)每組參數(shù)按照取指范圍遍歷取值,根據(jù)每組參數(shù)值的組合,生成驗(yàn)證的指令或指令序列,并將這個(gè)指令或指令序列嵌入到步驟2的驗(yàn)證代碼框架中;步驟4、將驗(yàn)證代碼框架加載到微處理器中,并發(fā)送協(xié)議字給微處理器上的監(jiān)控程序,使微處理器轉(zhuǎn)入到驗(yàn)證代碼框架的執(zhí)行;步驟5、查詢微處理器驗(yàn)證結(jié)束協(xié)議字,如果驗(yàn)證代碼執(zhí)行結(jié)束,將執(zhí)行結(jié)果讀出;否則,繼續(xù)查詢;步驟6、將步驟5的執(zhí)行結(jié)果和指令執(zhí)行的期望結(jié)果比較,結(jié)果正確,將比較結(jié)果記錄到日志文件中,轉(zhuǎn)步驟2,繼續(xù)遍歷驗(yàn)證;否則,輸出錯(cuò)誤信息,并記錄到日志文件。所述的監(jiān)控程序按以下步驟操作步驟1-1、查詢驗(yàn)證代碼框架加載結(jié)束協(xié)議字,如果協(xié)議字有效,轉(zhuǎn)步驟1-2 ;否則繼續(xù)查詢;步驟1-2、跳轉(zhuǎn)至驗(yàn)證代碼框架,執(zhí)行指令驗(yàn)證代碼;
步驟1-3、驗(yàn)證代碼執(zhí)行結(jié)束,置驗(yàn)證結(jié)束協(xié)議字,并跳轉(zhuǎn)到步驟1-2,繼續(xù)下一次驗(yàn)證的查詢。所述的指令驗(yàn)證代碼框架按以下步驟設(shè)計(jì)步驟2-1、根據(jù)指令的分類,確定驗(yàn)證該類指令所需要的參數(shù),并根據(jù)參數(shù),生成指令序列A,通過執(zhí)行指令序列A準(zhǔn)備好當(dāng)前指令驗(yàn)證的微處理器的狀態(tài);步驟2-2、根據(jù)參數(shù)生成當(dāng)前被驗(yàn)證的指令B,將指令B添加到序列A之后,生成序列 A&B ;步驟2-3、在序列A&B之后添加一段保護(hù)指令B執(zhí)行結(jié)果的指令序列C。本發(fā)明的有益效果是本發(fā)明提出了一套微處理器指令集自動(dòng)驗(yàn)證的方法。通過將當(dāng)前驗(yàn)證的指令的各字段以參數(shù)化的形式進(jìn)行配置,可以對(duì)參數(shù)進(jìn)行遍歷組合,實(shí)現(xiàn)對(duì)微處理器設(shè)計(jì)中所有路徑的驗(yàn)證覆蓋。驗(yàn)證結(jié)果采用自動(dòng)比對(duì)的形式,以文件記錄的形式輸出,避免了通過分析仿真波形才能判斷指令執(zhí)行真確性的弊端,實(shí)現(xiàn)了自動(dòng)、高效率的驗(yàn)證。發(fā)明中提出的驗(yàn)證方法可以移植到在微處理器設(shè)計(jì)各階段的驗(yàn)證平臺(tái)上,如仿真驗(yàn)證階段的TestBench、時(shí)序驗(yàn)證階段的功能驗(yàn)證TestBench、FPGA驗(yàn)證平臺(tái)、微處理器的系統(tǒng)驗(yàn)證平臺(tái)上。
圖I :本發(fā)明主流程圖;圖2 :監(jiān)控程序流程圖;圖3 :驗(yàn)證代碼框架設(shè)計(jì)流程圖;圖4 :本發(fā)明的具體實(shí)施實(shí)例框圖;圖5 :具體實(shí)施實(shí)例程序存儲(chǔ)不意圖。
具體實(shí)施例方式本發(fā)明包括以下步驟步驟I、將監(jiān)控程序加載到微處理器中,并啟動(dòng)微處理器運(yùn)行監(jiān)控程序;步驟2、對(duì)微處理器支持的指令集分類,每一類指令由一組參數(shù)確定。針對(duì)每一類指令,設(shè)計(jì)一個(gè)指令驗(yàn)證的代碼框架,需要驗(yàn)證的指令或指令序列嵌入到這個(gè)代碼框架中;步驟3、對(duì)每組參數(shù)按照取指范圍遍歷取值,根據(jù)每組參數(shù)值的組合,生成驗(yàn)證的指令或指令序列,并將這個(gè)指令或指令序列嵌入到步驟2的驗(yàn)證代碼框架中;步驟4、將驗(yàn)證代碼框架加載到微處理器中,并發(fā)送協(xié)議字給微處理器上的監(jiān)控程序,使微處理器轉(zhuǎn)入到驗(yàn)證代碼框架的執(zhí)行;
步驟5、查詢微處理器“驗(yàn)證結(jié)束”協(xié)議字。如果驗(yàn)證代碼執(zhí)行結(jié)束,將執(zhí)行結(jié)果讀出;否則,繼續(xù)查詢;步驟6、將步驟5的執(zhí)行結(jié)果和指令執(zhí)行的期望結(jié)果比較。結(jié)果正確,將比較結(jié)果記錄到日志文件中,轉(zhuǎn)步驟2,繼續(xù)遍歷驗(yàn)證;否則,輸出錯(cuò)誤信息,并記錄到日志文件。在上述方案中,步驟I所述的監(jiān)控程序按以下步驟操作步驟1-4、查詢驗(yàn)證代碼框架加載結(jié)束協(xié)議字。如果協(xié)議字有效,轉(zhuǎn)步驟1-2 ;否貝U,轉(zhuǎn)步驟1-1,繼續(xù)查詢;步驟1-5、跳轉(zhuǎn)至驗(yàn)證代碼框架程序段,執(zhí)行指令驗(yàn)證代碼;步驟1-6、驗(yàn)證代碼執(zhí)行結(jié)束,置“驗(yàn)證結(jié)束”協(xié)議字,并跳轉(zhuǎn)到步驟1-2,繼續(xù)下一次驗(yàn)證的查詢。
在上述方案中,步驟2所述的指令驗(yàn)證代碼框架按以下步驟設(shè)計(jì)步驟2-4、根據(jù)指令的分類,確定驗(yàn)證該類指令所需要的參數(shù),并根據(jù)參數(shù),生成指令序列A.通過執(zhí)行指令序列A準(zhǔn)備好當(dāng)前指令驗(yàn)證的微處理器的狀態(tài);步驟2-5、根據(jù)參數(shù)生成當(dāng)前被驗(yàn)證的指令B.將指令B添加到序列A之后;步驟2-6、為避免指令執(zhí)行的結(jié)果被其他指令段“污染”,在序列A&B之后添加一段指令序列C,用來保護(hù)指令B執(zhí)行的結(jié)果。下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明進(jìn)一步說明。微處理器的指令集按照完成的功能對(duì)指令進(jìn)行分類寄存器賦值指令一立即數(shù)向寄存器賦值、寄存器-寄存器賦值、條件寄存器賦值;訪存指令——包括存儲(chǔ)器向寄存器加載指令和寄存器向存儲(chǔ)器加載指令;算術(shù)邏輯指令一包括算術(shù)運(yùn)算指令和邏輯運(yùn)算指令;跳轉(zhuǎn)控制指令一包括跳轉(zhuǎn)指令、子程序調(diào)用和子程序返回指令。如圖4,微處理器401實(shí)現(xiàn)了設(shè)計(jì)定義的指令集,是被驗(yàn)證的對(duì)象。該微處理器采用RISC結(jié)構(gòu)實(shí)現(xiàn),指令執(zhí)行分成四級(jí)流水,分別是“取指”一“譯碼”一“執(zhí)行”一“寫回”。微處理器401的實(shí)現(xiàn)包括寄存器組(包括通用寄存器、地址寄存器、索引寄存器和其它寄存器)、核內(nèi)指令存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器和ALU數(shù)據(jù)通路。結(jié)合本實(shí)例,發(fā)明提出的驗(yàn)證方法模型,由微處理器設(shè)計(jì)401、微處理器外部存儲(chǔ)單元402、主處理器接口 403、指令代碼生成框架單元404、數(shù)據(jù)比較406、結(jié)果文件輸出405,組成自動(dòng)化的指令集驗(yàn)證系統(tǒng),如圖4所示。主處理器接口 403、指令代碼生成框架單元404、數(shù)據(jù)比較406、結(jié)果文件輸出405構(gòu)成指令集驗(yàn)證的主處理器模擬端。主處理器模擬端控制指令集驗(yàn)證的流程,實(shí)現(xiàn)了驗(yàn)證方法的主流程。按以下步驟實(shí)施SO:通過處理器接口向微處理器加載協(xié)議字監(jiān)控程序,啟動(dòng)監(jiān)控程序的運(yùn)行;SI:隨機(jī)生成指令驗(yàn)證的參數(shù),包括測(cè)試比較數(shù)據(jù)、操作類型OpType、源操作數(shù)Rsrc (包括操作數(shù)類型,操作數(shù)寄存器索引)、目的操作數(shù)Rdst (包括操作數(shù)類型,操作數(shù)寄存器索引)、條件位cond等指令參數(shù)。根據(jù)指令分類,每種指令分別由一組參數(shù)確定;S2:根據(jù)SI的參數(shù),生成指令驗(yàn)證代碼的框架;S3:根據(jù)處理器指令集的定義,將指令驗(yàn)證代碼的框架翻譯成二進(jìn)制碼;
S4:通過處理器接口將驗(yàn)證代碼加載到微處理器的指令存儲(chǔ)器中;S5:發(fā)出啟動(dòng)指令驗(yàn)證協(xié)議字,控制微處理器跳轉(zhuǎn)到指令驗(yàn)證代碼的執(zhí)行;S6:查詢微處理器指令驗(yàn)證結(jié)束協(xié)議字,并讀回執(zhí)行結(jié)果;S7:正確性檢查。結(jié)果正確,結(jié)果以日志記錄,轉(zhuǎn)SI,繼續(xù)下一條指令的驗(yàn)證;否貝IJ,錯(cuò)誤信息記錄到日志文件,轉(zhuǎn)SI。以“算術(shù)邏輯指令”為實(shí)例,說明指令驗(yàn)證代碼的框架的操作方法“算術(shù)邏輯指令”驗(yàn)證需要的參數(shù)有(OpType, Rsrc, Rdst, Opl, 0p2, Nif)
其中,OpType :算術(shù)邏輯指令操作類型。取值范圍為指令集定義的10種算術(shù)邏輯操作;Rsrc :源操作數(shù)I寄存器索引值。取值范圍為微處理器設(shè)計(jì)中8個(gè)通用寄存器;Rdst :源操作數(shù)2和目的寄存器索引值。取值范圍為微處理器設(shè)計(jì)中8個(gè)通用寄存器;Opl :源操作數(shù)I數(shù)據(jù)。取值范圍根據(jù)微處理器的設(shè)計(jì)為32位無符號(hào)或有符號(hào)數(shù)據(jù),在數(shù)據(jù)表示范圍內(nèi)隨機(jī)取值;0p2 :源操作數(shù)2數(shù)據(jù)。取值范圍根據(jù)微處理器的設(shè)計(jì)為32位無符號(hào)或有符號(hào)數(shù)據(jù),在數(shù)據(jù)表示范圍內(nèi)隨機(jī)取值;Nif :定浮點(diǎn)操作類型參數(shù)。根據(jù)以上參數(shù)設(shè)計(jì)的指令驗(yàn)證代碼的框架見表I。表I
序列段指令序列說明
AORsrc-eOpl將數(shù)據(jù)Opl加載到源寄存器
"AlRdst^Op2將數(shù)據(jù)Op2加載到目的寄存器
BRdst<-Rsrc OpTypeNif Rdst 被驗(yàn)證的算術(shù)邏輯指令C Mem令Rdst將目的寄存器內(nèi)的執(zhí)行結(jié)果保護(hù)到存儲(chǔ)器中驗(yàn)證時(shí),首先由主處理器通過處理器接口 403加載協(xié)議字監(jiān)控程序到微處理器的監(jiān)控程序段501,并啟動(dòng)微處理器的運(yùn)行。此時(shí),監(jiān)控程序檢查主處理器模擬端是否將指令驗(yàn)證代碼加載到指令存儲(chǔ)區(qū)的指令驗(yàn)證代碼段502中。如果監(jiān)控程序接收到啟動(dòng)協(xié)議字503 (位于數(shù)據(jù)存儲(chǔ)器內(nèi)),監(jiān)控程序跳轉(zhuǎn)到指令驗(yàn)證框架代碼段502執(zhí)行。執(zhí)行完成后,寫結(jié)束協(xié)議字到協(xié)議約定的數(shù)據(jù)存儲(chǔ)區(qū)內(nèi)504,并跳轉(zhuǎn)到監(jiān)控程序中,繼續(xù)等待啟動(dòng)下一條指令的驗(yàn)證,如圖5所示。指令驗(yàn)證代碼完成對(duì)處理器指令集各項(xiàng)功能的驗(yàn)證,根據(jù)驗(yàn)證項(xiàng)的不同,指令驗(yàn)證代碼可以完成簡(jiǎn)單指令逐條驗(yàn)證、指令相關(guān)等功能項(xiàng)的驗(yàn)證工作。本實(shí)例實(shí)現(xiàn)自動(dòng)化的驗(yàn)證方式,每一類指令通過一組參數(shù)惟一確定,在驗(yàn)證協(xié)議中,根據(jù)這組參數(shù)生成指令驗(yàn)證的代碼框架。參數(shù)的范圍由微處理器的硬件結(jié)構(gòu)決定。上述的四類指令可以通過四組參數(shù)來確定,在驗(yàn)證流程中分成四個(gè)驗(yàn)證分支來實(shí)現(xiàn)。
對(duì)于當(dāng)前驗(yàn)證的指令,需要將所有的源操作數(shù)在指令執(zhí)行前,存放到指令指定的寄存器中。在本發(fā)明的驗(yàn)證方法中,通過增加輔助指令序列,用來設(shè)置當(dāng)前指令驗(yàn)證的環(huán)境,主要是設(shè)置當(dāng)前微處理器的寄存器組的狀態(tài)。同時(shí),指令驗(yàn)證采用在線自動(dòng)化的驗(yàn)證方式,為避免指令執(zhí)行結(jié)束后,指令的執(zhí)行結(jié)果被“污染”,在指令驗(yàn)證代碼框架中增加了將指令執(zhí)行結(jié)果及時(shí)保護(hù)的指令序列。
為實(shí)現(xiàn)對(duì)指令所有執(zhí)行路徑的完全覆蓋,可以將所有的參數(shù)采用遍歷的方法,以提高對(duì)設(shè)計(jì)的覆蓋率??紤]到設(shè)計(jì)過程中驗(yàn)證效率,可以在驗(yàn)證過程中,隨機(jī)選取一組或幾組參數(shù)值進(jìn)行功能的正確性檢驗(yàn)。
權(quán)利要求
1.一種微處理器指令集驗(yàn)證方法,其特征在于包括下述步驟 步驟I、將監(jiān)控程序加載到微處理器中,并啟動(dòng)微處理器運(yùn)行監(jiān)控程序; 步驟2、對(duì)微處理器支持的指令集分類,每一類指令由一組參數(shù)確定,針對(duì)每一類指令,設(shè)計(jì)一個(gè)指令驗(yàn)證的代碼框架,將需要驗(yàn)證的指令或指令序列嵌入到這個(gè)代碼框架中;步驟3、對(duì)每組參數(shù)按照取指范圍遍歷取值,根據(jù)每組參數(shù)值的組合,生成驗(yàn)證的指令或指令序列,并將這個(gè)指令或指令序列嵌入到步驟2的驗(yàn)證代碼框架中; 步驟4、將驗(yàn)證代碼框架加載到微處理器中,并發(fā)送協(xié)議字給微處理器上的監(jiān)控程序,使微處理器轉(zhuǎn)入到驗(yàn)證代碼框架的執(zhí)行; 步驟5、查詢微處理器驗(yàn)證結(jié)束協(xié)議字,如果驗(yàn)證代碼執(zhí)行結(jié)束,將執(zhí)行結(jié)果讀出;否貝U,繼續(xù)查詢; 步驟6、將步驟5的執(zhí)行結(jié)果和指令執(zhí)行的期望結(jié)果比較,結(jié)果正確,將比較結(jié)果記錄到日志文件中,轉(zhuǎn)步驟2,繼續(xù)遍歷驗(yàn)證;否則,輸出錯(cuò)誤信息,并記錄到日志文件。
2.根據(jù)權(quán)利要求I所述的微處理器指令集驗(yàn)證方法,其特征在于所述的監(jiān)控程序按以下步驟操作 步驟1-1、查詢驗(yàn)證代碼框架加載結(jié)束協(xié)議字,如果協(xié)議字有效,轉(zhuǎn)步驟1-2 ;否則繼續(xù)查詢; 步驟1-2、跳轉(zhuǎn)至驗(yàn)證代碼框架,執(zhí)行指令驗(yàn)證代碼; 步驟1-3、驗(yàn)證代碼執(zhí)行結(jié)束,置驗(yàn)證結(jié)束協(xié)議字,并跳轉(zhuǎn)到步驟1-2,繼續(xù)下一次驗(yàn)證的查詢。
3.根據(jù)權(quán)利要求I所述的微處理器指令集驗(yàn)證方法,其特征在于所述的指令驗(yàn)證代碼框架按以下步驟設(shè)計(jì) 步驟2-1、根據(jù)指令的分類,確定驗(yàn)證該類指令所需要的參數(shù),并根據(jù)參數(shù),生成指令序列A,通過執(zhí)行指令序列A準(zhǔn)備好當(dāng)前指令驗(yàn)證的微處理器的狀態(tài); 步驟2-2、根據(jù)參數(shù)生成當(dāng)前被驗(yàn)證的指令B,將指令B添加到序列A之后,生成序列A&B ; 步驟2-3、在序列A&B之后添加一段保護(hù)指令B執(zhí)行結(jié)果的指令序列C。
全文摘要
本發(fā)明提供了一種微處理器指令集驗(yàn)證方法,將監(jiān)控程序加載到微處理器中;對(duì)微處理器支持的指令集分類,將需要驗(yàn)證的指令嵌入到代碼框架中;遍歷每組參數(shù)按生成驗(yàn)證的指令,嵌入到驗(yàn)證代碼框架中;將驗(yàn)證代碼框架加載到微處理器中,查詢微處理器驗(yàn)證結(jié)束協(xié)議字,將執(zhí)行結(jié)果和指令執(zhí)行的期望結(jié)果比較,結(jié)果正確,將比較結(jié)果記錄到日志文件中,否則,輸出錯(cuò)誤信息,并記錄到日志文件。本發(fā)明避免了通過分析仿真波形才能判斷指令執(zhí)行真確性的弊端,實(shí)現(xiàn)了自動(dòng)、高效率的驗(yàn)證。
文檔編號(hào)G06F9/46GK102902906SQ20121036223
公開日2013年1月30日 申請(qǐng)日期2012年9月26日 優(yōu)先權(quán)日2012年9月26日
發(fā)明者曹輝, 楊靚, 盧強(qiáng), 何衛(wèi)強(qiáng) 申請(qǐng)人:中國航天科技集團(tuán)公司第九研究院第七七一研究所