專利名稱::隨機(jī)測試程序生成方法和系統(tǒng)以及設(shè)計(jì)驗(yàn)證方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及微處理器的指令級(jí)功能驗(yàn)證,特別涉及一種隨機(jī)測試程序生成方法和系統(tǒng)以及相應(yīng)的"i殳計(jì)馬!S正方法。
背景技術(shù):
:隨著設(shè)計(jì)規(guī)模的擴(kuò)大,尤其是多核技術(shù)的發(fā)展,控制邏輯越來越復(fù)雜,涉及的狀態(tài)空間也日益擴(kuò)大,驗(yàn)證在處理器設(shè)計(jì)過程中成為非常關(guān)鍵的一當(dāng)前生成測試程序的方法主要有人工手寫測試程序、約束隨機(jī)測試生成以及覆蓋率驅(qū)動(dòng)的測試生成。在超大規(guī)模集成電路(VLSI)的設(shè)計(jì)驗(yàn)證中,約束隨機(jī)測試生成是最主要的方法,對于那些采用隨機(jī)難以覆蓋到的功能點(diǎn),可以采用人工手寫測試程序的方法作為輔助。雖然隨機(jī)生成的測試程序覆蓋面廣,可能覆蓋到設(shè)計(jì)和驗(yàn)證人員完全沒有想到的功能角落,但是大量隨機(jī)生成的測試向量也會(huì)造成驗(yàn)證功能點(diǎn)的重復(fù)覆蓋,延長驗(yàn)證的收斂時(shí)間,降低驗(yàn)證效率,因此需要在產(chǎn)生隨機(jī)程序的同時(shí)人為加入一些約束,使之盡量不重復(fù),從而更有效、更有針對性的完成驗(yàn)證任務(wù)。隨機(jī)測試程序生成的方法和架構(gòu)從90年代開始逐漸成熟,一^:包括兩部分測試模板文件和隨機(jī)求解引擎。前者用來描述指令序列,如指令的種類、變量的約束條件等;后者接受模板文件中提取出來的隨機(jī)變量和約束信息,建立一個(gè)約束網(wǎng)絡(luò),將問題轉(zhuǎn)成一個(gè)約束滿足問題(CSP:constraintsatisfactionproblem),求該約束滿足問題的均勻分布的隨才幾解。針對約束求解問題,R.Dechter首先提出了桶消元方法用以計(jì)算推理網(wǎng)絡(luò)的解空間,該方法不會(huì)引入過多的術(shù)語,可以用以計(jì)算約束滿足問題的解空間。但是盡管桶消元法已經(jīng)具有較低的內(nèi)存開銷,它也是指數(shù)級(jí)的,不能處理規(guī)模較大的約束滿足問題。因此,降低計(jì)數(shù)函數(shù)的維數(shù)成了當(dāng)務(wù)之芻、Dechter和Emek等人又提出劃分小桶的做法來減小時(shí)空問題,用多個(gè)維數(shù)較小的計(jì)數(shù)函數(shù)來近似表示單個(gè)維數(shù)較大的計(jì)數(shù)函數(shù)。很明顯,小桶消元法的精確度很大程度上依賴于小桶個(gè)數(shù)t的取值。實(shí)踐證明,t越大,雖然空間復(fù)雜度降低,但所需的時(shí)間也相應(yīng)增加,這就意味著需要在時(shí)間和空間中折中。綜上所述,采用現(xiàn)有的約束求解技術(shù)生成隨機(jī)測試程序具有很高的時(shí)空復(fù)雜度,迫切需要一種簡易、高效地隨機(jī)測試程序生成方法,其隨機(jī)變量所在的約束網(wǎng)絡(luò)的解空間的均勻度高,程序的冗余度和重復(fù)程度低,具有更高的驗(yàn)證廣度和深度。
發(fā)明內(nèi)容本發(fā)明提供一種隨機(jī)測試程序生成方法和系統(tǒng),其目的在于提高當(dāng)前隨機(jī)測試程序生成中約束求解的均勻度,提高隨機(jī)驗(yàn)證的效率。根據(jù)本發(fā)明的一個(gè)方面,提供了一種隨機(jī)測試程序生成方法,包括下列步驟1)編寫并解析指令模板,并構(gòu)建約束網(wǎng)絡(luò);2)利用小桶間的相容度計(jì)算小桶的計(jì)數(shù)函數(shù);3)基于所述計(jì)數(shù)函數(shù)根據(jù)所述約束網(wǎng)絡(luò)來計(jì)算隨機(jī)變量的隨機(jī)解;4)利用所述隨機(jī)解設(shè)置指令的操作數(shù),生成由所述指令構(gòu)成的隨機(jī)測試程序。在該方法中,所述步驟2)包括下列步驟根據(jù)公式=SyFLt,iV,生成桶bucketp中的小桶的初始計(jì)數(shù)函數(shù)《',其中12pS桶個(gè)數(shù),1S"桶bucketp中小桶個(gè)數(shù)t,Xp是所述桶bucketp中的隨機(jī)變量,iV,是分到所述小桶的計(jì)數(shù)函數(shù)或約束條件,1S/S小桶bucketpi中的計(jì)數(shù)函數(shù)和約束條件個(gè)數(shù);根據(jù)A=rtZ^mm(""")估算在所述小桶6""'中對變量Xp取不1I同值時(shí)所述小桶tocte^與所述桶bucketp中其它小桶^cfe^的相容度A,其中iq、小桶個(gè)數(shù)t,^為所述小桶6z^中除Xp外的隨機(jī)變量集合,iv/表示小桶kcfe^,的計(jì)數(shù)函數(shù);根據(jù)w=z,pP,nw,Etaeto,,計(jì)算所述小桶的計(jì)數(shù)函數(shù)Wf,并把所述計(jì)數(shù)函數(shù)《分到~中序號(hào)數(shù)最大的隨機(jī)變量對應(yīng)的小桶中。根據(jù)本發(fā)明的另一方面,提供了一種隨機(jī)測試程序生成系統(tǒng),包括約束網(wǎng)絡(luò)構(gòu)建部件,用于編寫并解析指令模板,并構(gòu)建約束網(wǎng)絡(luò);約束求解器,用于基于利用小桶間的相容度計(jì)算的小桶的計(jì)數(shù)函數(shù)根據(jù)所述約束網(wǎng)絡(luò)來計(jì)算隨機(jī)變量的隨機(jī)解;指令生成部件,用于根據(jù)所述隨機(jī)解設(shè)置指令的操作數(shù),生成由所述指令構(gòu)成的隨機(jī)測試程序。在該系統(tǒng)中,所述約束網(wǎng)絡(luò)構(gòu)建部件進(jìn)一步包括指令模板編寫模塊,用于編寫指令模板;解析器,用于解析所述指令模板并構(gòu)建約束網(wǎng)絡(luò)。在該系統(tǒng)中,所述指令生成部件進(jìn)一步包括指令信息設(shè)置模塊,用于設(shè)置指令信息;指令生成模塊,用于根據(jù)所述約束求解器計(jì)算的所述隨機(jī)解設(shè)置指令的操作數(shù),并根據(jù)所述指令信息生成由所述指令構(gòu)成的隨機(jī)測試程序。根據(jù)本發(fā)明的又一方面,提供了一種設(shè)計(jì)驗(yàn)證方法,包括下列步驟利用如上所述的方法生成的隨機(jī)測試程序進(jìn)行設(shè)計(jì)驗(yàn)證。與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于測試程序的驗(yàn)證面更廣,大大減少了實(shí)際RTL仿真時(shí)的時(shí)間消耗,同時(shí)也降低了出錯(cuò)時(shí)的調(diào)試難度。圖1為現(xiàn)有技術(shù)的桶消元方法的流程圖2為根據(jù)本發(fā)明一個(gè)具體實(shí)施例的隨機(jī)測試程序生成的框圖;圖3為根據(jù)本發(fā)明一個(gè)具體實(shí)施例的生成計(jì)數(shù)函數(shù)的流程圖;圖4為計(jì)算隨機(jī)變量的隨機(jī)解的流程圖;圖5為測試程序中指令序列的生成過程。具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖,對根據(jù)本發(fā)明一個(gè)實(shí)施例的基于小桶消元的隨機(jī)測試程序生成方法進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。6圖1的流程圖示出了R,Dechter提出的桶消元方法,其執(zhí)行過程如下步驟S101,初始化根據(jù)變量序列《,義"…,A建立桶序列bucket,bucket2,...bucketn,將每個(gè)約束條件Ci分到各個(gè)桶中,每個(gè)桶bucketp的變量集合為Sp,其中B;^桶個(gè)數(shù)n。若某個(gè)約束條件中變量的下標(biāo)最高為q,則將該約束it入bucketq;步驟S102,定義變量p指向桶序列的最后一個(gè)桶bucketn;步驟S103,利用F=2^11^,^M求桶bucketp的計(jì)數(shù)函數(shù),其中Nt為bucketp中約束條件和新生成的計(jì)數(shù)函數(shù)的集合(N,,N2,...,Nj)中的元素。將Np放入集合&—^J在變量序列中序號(hào)數(shù)最大的變量所對應(yīng)的桶中。步驟S104,p指向下一個(gè)桶;步驟S105,判斷p是否指向桶序列的第一個(gè)桶bucket,如果是,執(zhí)行步驟S106;否則執(zhí)行步驟S103;步驟S106,返回每個(gè)桶中的計(jì)數(shù)函數(shù)。由于每次循環(huán)處理一個(gè)桶,而剩下的桶中的計(jì)數(shù)函數(shù)和約束條件都不會(huì)再含有這個(gè)桶變量,因此稱之為桶消元。從圖1的流程圖中可以看出,求解空間時(shí)是從下往上計(jì)算的;生成解時(shí)順序剛好相反,是從上往下。按照約束網(wǎng)絡(luò)的解空間給隨機(jī)變量分配權(quán)重,從而確定變量的取值。因?yàn)樵摲椒梢灶A(yù)知權(quán)重值,所以生成的解比較接近均勻分布。但是盡管桶消元法內(nèi)存開銷已經(jīng)較低,它也是指數(shù)級(jí)的,不能處理規(guī)模較大的約束滿足問題,其時(shí)空復(fù)雜度為0("'exP(w'W))),其中n叫X卜表示序列X中元素個(gè)數(shù),"V)為約束網(wǎng)絡(luò)在排序c/下的導(dǎo)出寬度(induced-width)。這是因?yàn)橛?jì)數(shù)'函數(shù)NP的自變量為序列^',^,…,疋中Xp前面的某些變量的集合,有可能維數(shù)比較大,如果每個(gè)變量的值域都很大,那么計(jì)算該函數(shù)要消耗很多時(shí)間,存儲(chǔ)它的結(jié)果也會(huì)占用很多空間。為解決上述問題,Dechter和Emek等人提出的小桶消元方法用多個(gè)維數(shù)較小的計(jì)數(shù)函數(shù)來近似表示單個(gè)維數(shù)較大的計(jì)數(shù)函數(shù)。例如,對一個(gè)維數(shù)為16、值域?yàn)閧1,0}的計(jì)數(shù)函數(shù),它所需的空間為2,若拆分成四個(gè)維數(shù)為4的計(jì)數(shù)函數(shù),所需的空間就減少到4*24。小桶消元方法在桶消元法的基礎(chǔ)上對上述計(jì)算計(jì)數(shù)函數(shù)的步驟S103進(jìn)行了改進(jìn)把bucketp中的約束條件和計(jì)數(shù)函數(shù)W"^…',乂分到t個(gè)小桶中Q,={Q,a,...,Q},對a的計(jì)數(shù)函數(shù)Av…,氣,iv/^5^rd;對込e",〃1,計(jì)數(shù)函數(shù)為乂,…,A^,則^=加3^17:,,,,其中"^ULa-{^},&,為小桶^中約束條件和計(jì)數(shù)函數(shù)的變量集合。將^"放入^中序號(hào)數(shù)最大的變量所對應(yīng)的桶中。該小桶消元方法的精確度很大程度上依賴于小桶個(gè)數(shù)t的取值。實(shí)踐證明,t越大,雖然空間復(fù)雜度降低,但所需的時(shí)間也相應(yīng)增加,這就意味著需要在時(shí)間和空間二者中折中。此外,這種拆分降低了求解的準(zhǔn)確性,因?yàn)榧s束網(wǎng)絡(luò)被分解成多個(gè)分支后,各分支之間存在一定的互斥性,滿足某個(gè)分支的取值可能在另一分支中不能滿足;而且由于bucketp中除^i"以外的計(jì)數(shù)函數(shù)可以采用多種計(jì)算方法,如取最小值、平均值等,因此必須對計(jì)數(shù)函數(shù)的求解方法進(jìn)行修正。考慮時(shí)間和空間復(fù)雜度,根據(jù)本發(fā)明的一個(gè)具體實(shí)施例對上述小桶消元方法的計(jì)算計(jì)數(shù)函數(shù)的步驟進(jìn)行了進(jìn)一步改進(jìn)把bucketp中的約束條件和計(jì)數(shù)函數(shù)W"W,…,^分到t個(gè)小桶中Q,={Z>wc^,pl,...,tedte。,,…,6wcfe},其中1^fa。才艮據(jù)本發(fā)明的一個(gè)實(shí)施例,采用如下計(jì)算過程根據(jù)小桶序號(hào)從大到小的次序依次計(jì)算每個(gè)小桶的計(jì)數(shù)函數(shù)根據(jù)如下公式(1)生成小桶^""p'的初始計(jì)數(shù)函數(shù)為《',本領(lǐng)域普通技術(shù)人員可以理解,每個(gè)小桶可能沒有計(jì)數(shù)函數(shù),也可能具有一個(gè)或多個(gè)計(jì)數(shù)函數(shù),在此處用符號(hào)《'表示小桶&d'中的所有計(jì)數(shù)函數(shù)其中,M表示小桶6""^'中被分到的約束條件或計(jì)數(shù)函數(shù),1S/S小桶bucketpi中的計(jì)數(shù)函數(shù)和約束條件個(gè)數(shù)。根據(jù)如下公式(2)估算在6""^'中對變量Xp取不同值時(shí)該小桶與其它小桶的相容度,即綜合考慮對變量Xp所對應(yīng)的大桶bucketp中t個(gè)小桶除6wefe以外的其他所有小桶^cfc^的計(jì)數(shù)函數(shù)min(Af(s),l)其中&為小桶^cfe^中除Xp外的所有變量集合,s表示中的變量,與Wf'類似,表示小桶^cfe^.的計(jì)數(shù)函數(shù);利用如下公式(3)計(jì)算小桶^"的計(jì)數(shù)函數(shù)《=yATT(3);將該計(jì)數(shù)函數(shù)放入除桶變量xp以外的其它變量中序號(hào)數(shù)最大的變量對應(yīng)的小桶中,即將《分到&'中序號(hào)數(shù)最大的隨機(jī)變量對應(yīng)的小桶中。因?yàn)锳表示當(dāng)Xp取某值時(shí),在其它小桶中能夠被接受的概率的連積,近似反映了各個(gè)子變量間的相等關(guān)系,因此這種新算法較為平衡地處理了各小桶間的關(guān)系,求得的解空間有更好的均勻度。本領(lǐng)域普通技術(shù)人員可以理解,上面僅給出用于計(jì)算相容度的一種實(shí)施方法,也可以采用其它方式計(jì)算相容度。圖2示出了根據(jù)本發(fā)明的一個(gè)具體實(shí)施例基于上述改進(jìn)的小桶消元方法的隨機(jī)測試程序生成的框圖。如圖所示,隨機(jī)測試程序生成方法包括以下步驟步驟S201:編寫指令模板,其包含了體系結(jié)構(gòu)相關(guān)的信息,例如寄存器分組、指令分組和指令序列的定義,同時(shí)還包含了一些隨機(jī)變量的聲明以及它們之間的約束關(guān)系。一個(gè)指令模板的示例如下:指令分組,^^7Yw/grawp—"函c寄存器分組f未被指定權(quán)值m"o的寄存器在完全隨機(jī)的模式下不會(huì)產(chǎn)生,以保護(hù)其存儲(chǔ)的內(nèi)容定義單個(gè)隨機(jī)變量-w妙G定義隨機(jī)變量數(shù)組2Scope2定義約束條件-表l支持的約束關(guān)系的示例<table>tableseeoriginaldocumentpage10</column></row><table>n6arg1:vararg2:var|constantargWarg2gt或〉argl:窗arg2:var|constantarg>arg2argl:vararg2:vatjconstantargl〈arg2ge或>=argl:vararg2:varjconstantargl〉arg2le或<=argl:vararg2:varconstantargl<=arg2alignargl:vararg2:constantarg]%arg2==0定義宏-Macro—n畫e7va/w6定義指令序列,6tey^呵譜zce一/ia艦/wGmwp—"畫^operawdctra/_/,c^mwcfcom2/....../""/mM//"s&g—"函e/""/附es7*操作數(shù)約束^emn^o朋的形式為操作數(shù)字段名=<常數(shù)|隨機(jī)變量名>頂層序列配置-步驟S202,對指令模板進(jìn)行文法分析,將信息分成兩部分一部分是隨機(jī)變量和約束定義,一部分是指令序列的定義信息,該指令序列的定義信息用于后面具體數(shù)據(jù)結(jié)構(gòu)的定義,指導(dǎo)指令序列的生成。根據(jù)隨機(jī)變量和約束定義構(gòu)建隨機(jī)變量約束網(wǎng)絡(luò),作為約束求解器的輸入。一個(gè)約束網(wǎng)纟各的示例如下約束網(wǎng)絡(luò)11=(X,D,C),其中變量集合IMAS,^;變量域集合^={{1,2},{2,5,6},{0,3,5}},z),為變量Z,.的取值區(qū)間;約束集合C-W^^,^^^。步驟S203,基于改進(jìn)的小桶消元方法根據(jù)步驟S202中構(gòu)建的約束網(wǎng)ii絡(luò),產(chǎn)生均勻分布的隨機(jī)解。該步驟主要包括兩步乂人下往上生成計(jì)數(shù)函數(shù);從上往下計(jì)算變量的值。下面結(jié)合圖3和圖4詳細(xì)說明該過程圖3示出了根據(jù)本發(fā)明一個(gè)具體實(shí)施例的生成計(jì)數(shù)函數(shù)的流程步驟S301,初始化創(chuàng)建桶,其數(shù)量等于隨機(jī)變量數(shù),并全部清空;步驟S302,根據(jù)每個(gè)隨機(jī)變量的取值區(qū)間生成臨時(shí)值域。因?yàn)閺牟襟ES201中指令模板的定義可知,除寄存器號(hào)的約束外,其它約束都是針對連續(xù)變量,而它們的計(jì)數(shù)函數(shù)的時(shí)間和空間占用都是冪級(jí)膨脹,因此對連續(xù)變量應(yīng)先根據(jù)變量取值區(qū)間的權(quán)重采集st個(gè)抽樣值,經(jīng)過預(yù)處理后作為其臨時(shí)值域,然后才進(jìn)行桶消元。此外,如果解空間無解或產(chǎn)生的解數(shù)目達(dá)到一定數(shù)目cnt時(shí)則需要重新抽樣,優(yōu)選的,cnt為st的l2倍,cnt太小會(huì)導(dǎo)致桶消元核心結(jié)構(gòu)重建過于頻繁,從而降低了系統(tǒng)的效率。閾值st的選擇會(huì)影響抽樣的均勻程度當(dāng)st取值太大,同樣會(huì)造成計(jì)數(shù)函數(shù)的計(jì)算和存儲(chǔ)開銷膨脹;當(dāng)st取值太小,很有可能會(huì)使得符合要求的值太少。所以應(yīng)該根據(jù)實(shí)際應(yīng)用中具體情況來確定st的值,而且不同的變量可以選用不同的抽樣數(shù)。步驟S303,建立隨機(jī)變量與桶的對應(yīng)關(guān)系,即變量Xi對應(yīng)的桶為bucket"步驟S304,對所有隨機(jī)變量進(jìn)行排序。首先,初始化對約束網(wǎng)絡(luò)變量集合X中的每個(gè)變量Xi,設(shè)其相關(guān)變量的集合為Ri,且^=^;然后,對Xi所在的每個(gè)約束條件,假設(shè)該約束條件涉及的變量集合為S,那么令i,仨i,uS-最后,根據(jù)iRii從大到小的順序排列Xi,得到的序列即為所求。因?yàn)橄嚓P(guān)變量少的變量排在后面,消元時(shí)其對應(yīng)的桶先處理,每處理完一個(gè)桶消一次元,因此處理相關(guān)變量多的桶時(shí),大部分變量早已消去,因此維數(shù)也就比原來減少很多。經(jīng)過這樣的預(yù)處理,求解的時(shí)間和內(nèi)存開銷降低了很多。步驟S305,基于上述改進(jìn)的小桶消元方法計(jì)算小桶的計(jì)數(shù)函數(shù)。圖4示出計(jì)算隨機(jī)變量的隨機(jī)解的流程。其中變量index用來控制變量的求解方向,即從上往下步驟S401,初始化所有隨機(jī)變量,設(shè)置其為未賦值狀態(tài)且index=1;步驟S402,對選取的隨機(jī)變量,根據(jù)指令模板中的信息,獲取其臨時(shí)值域;步驟S403,對值域中的每個(gè)值,判斷其是否違反約束,如果違反,執(zhí)行步驟S402,重新獲取值域;反之,則執(zhí)行步驟S404;步驟S404,計(jì)算該變量所在的桶中的所有計(jì)數(shù)函數(shù)在當(dāng)前賦值情況下的值,將其值作為該變量的權(quán)重;步驟S405,根據(jù)步驟S404中的權(quán)重挑選一個(gè)值,并且將index指向下一個(gè)桶,即index=index+1,如果index指向最后一個(gè)小桶,則執(zhí)行步驟S406,否則執(zhí)行步驟S402;步驟S406,檢查每個(gè)變量是否都賦值完,是則執(zhí)行步驟S407;否則,執(zhí)行步驟S402,完成剩余變量的賦值;步驟S407,檢查所有約束關(guān)系在當(dāng)前賦值下是否都滿足,是則完成約束網(wǎng)絡(luò)的求解過程;否則,執(zhí)行步驟S402,重新獲取值域,使不滿足的約束關(guān)系在新的賦值下得到滿足。步驟S204,根據(jù)指令序列采用的描述語言,建立該語言下步驟S202中所述指令序列信息的數(shù)據(jù)結(jié)構(gòu),同時(shí)設(shè)置指令序列所需的其他信息,具體包括定點(diǎn)寄存器定義、浮點(diǎn)寄存器定義、指令分組、序列定義和頂層序列定義,并設(shè)立測試程序的長度和隨機(jī)種子。下面是一條指令數(shù)據(jù)結(jié)構(gòu)的具體實(shí)例F/eW一wa/d化;i^W一wa,V似-步驟S205,根據(jù)步驟S203中計(jì)算的隨機(jī)解來設(shè)置指令的操作數(shù),并根據(jù)步驟S204中建立的指令數(shù)據(jù)結(jié)構(gòu)生成指令序列,該指令序列構(gòu)成測試程序。下面結(jié)合圖5說明指令序列的生成過程步驟S501,作為入口,第一次生成指令時(shí),指令緩沖必然為空,此后逐步往該緩沖中加入指令。如果指令緩沖為空,則執(zhí)行步驟S503;否則執(zhí)行步驟S502;步驟S502,從緩沖中取出一條臨時(shí)指令,但它還不是最終生成的指令,需要送到步驟S508中進(jìn)行進(jìn)一步修正;步驟S503,從頂層配置中選出一個(gè)頂層序列項(xiàng);步驟S504,判斷步驟S503中選出的序列項(xiàng)的類型,先看其是否是指令序列,若是,則執(zhí)行步驟S505;否則,執(zhí)行步驟S506;步驟S505,根據(jù)指令信息中給出的索引值在指令序列所在的數(shù)據(jù)結(jié)構(gòu)中找到相應(yīng)的序列定義,生成臨時(shí)指令串,放入指令緩沖中,這樣下次循環(huán)開始時(shí)才會(huì)生成序列的內(nèi)容;步驟S506,如果序列項(xiàng)不是指令序列時(shí),就要判斷其是否是指令分組,若是,則執(zhí)行步驟S507;否則,執(zhí)行步驟S508;步驟S507,根據(jù)指令信息中給出的索引值在指令分組所在的數(shù)據(jù)結(jié)構(gòu)中找到相應(yīng)的單條指令的操作碼;步驟S508,根據(jù)指令的操作碼按照步驟S204中的指令數(shù)據(jù)結(jié)構(gòu)隨機(jī)生成一條實(shí)際的指令;步驟S509,檢查生成的指令的操作數(shù)有沒有約束。對分組和單指令類型的操作數(shù)是沒有約束的,指令直接存入指令緩沖,而從指令緩沖中取出的臨時(shí)指令帶有約束,執(zhí)行步驟S510;步驟S510,對有約束的指令,需要根據(jù)步驟S203中求得的隨機(jī)變量的隨機(jī)解修正指令的操作數(shù),然后再將其放入指令緩沖中。上述生成的隨機(jī)測試程序可以用于分別由模擬器和待測才莫塊(DUT)運(yùn)行,并根據(jù)二者的運(yùn)行結(jié)果相同與否來確定待測模塊設(shè)計(jì)是否成功。該操作具體如下模擬器運(yùn)行步驟S205中生成的測試程序,給出測試程序中每條指令運(yùn)行結(jié)果,包括寄存器堆的狀態(tài)以及整個(gè)測試程序完成后內(nèi)存存儲(chǔ)的內(nèi)容。同時(shí),還修正某些不符合要求的操作數(shù),以使指令能在RTL正常工作。待測模塊(DUT)運(yùn)行步驟S205中生成的測試程序,進(jìn)行RTL仿真,得到實(shí)際設(shè)計(jì)模塊的寄存器堆的狀態(tài)和內(nèi)存中的值。比較上述RTL得到的實(shí)際結(jié)果與模擬器運(yùn)行產(chǎn)生的參考結(jié)果。如果二者一致,則待測模塊設(shè)計(jì)沒有錯(cuò)誤;如果結(jié)果不一致,說明DUT和模擬器的行為有差異,此時(shí)需要查看程序的上下文,分析是參照結(jié)果的錯(cuò)誤還是設(shè)計(jì)錯(cuò)誤。比較結(jié)果時(shí),為了既能快速定位錯(cuò)誤點(diǎn)又能確保較快的仿真速度,對寄存器堆,該測試程序在每條指令提交時(shí)就會(huì)將參照結(jié)果與系統(tǒng)仿真結(jié)果進(jìn)行實(shí)時(shí)比較檢測,及時(shí)發(fā)現(xiàn)系統(tǒng)設(shè)計(jì)中的問題。當(dāng)有指令提交時(shí)就把提交指令的參考值從結(jié)果文件中取出,并與RTL的仿真結(jié)果比較,如果發(fā)現(xiàn)不一致就說明有錯(cuò)誤,終止仿真。對于內(nèi)存,整個(gè)測試程序都執(zhí)行完時(shí),系統(tǒng)從用戶態(tài)切換到核心態(tài),將cache中的數(shù)據(jù)刷新到內(nèi)存,然后再統(tǒng)一比較。根據(jù)本發(fā)明的一個(gè)實(shí)施例,提供了一種基于小桶消元的隨才幾測試程序生成系統(tǒng),包括下列部件約束網(wǎng)絡(luò)構(gòu)建部件,用于編寫并解析指令模板,并構(gòu)建約束網(wǎng)絡(luò)。進(jìn)一步地,該約束網(wǎng)絡(luò)構(gòu)建部件包括指令模板編寫模塊,用于編寫指令模板;解析器,用于解析所述指令模板并構(gòu)建約束網(wǎng)絡(luò)。約束求解器,用于基于利用小桶間的相容度計(jì)算的小桶的計(jì)數(shù)函數(shù)根據(jù)所述約束網(wǎng)絡(luò)來計(jì)算隨機(jī)變量的隨機(jī)解。指令生成部件,用于根據(jù)所述隨機(jī)解設(shè)置指令的操作數(shù),生成由所述指令構(gòu)成的隨機(jī)測試程序。進(jìn)一步地,該指令生成部件包括指令信息設(shè)置模塊,用于設(shè)置指令信息;指令生成模塊,用于根據(jù)所述約束求解器計(jì)算的所述隨機(jī)解設(shè)置指令的操作數(shù),并根據(jù)所述指令信息生成由所述指令構(gòu)成的隨機(jī)測試程序。通過在求解約束網(wǎng)絡(luò)的小桶消元方法中引入相容度因子生成計(jì)數(shù)函數(shù),可以得到更均勻的隨機(jī)解,增加了操作數(shù)取值的多樣性,能更充分地把一種模式的各種情況展現(xiàn)出來。因?yàn)橛幂^短的測試程序就能達(dá)到很廣的覆蓋面,大大減少了實(shí)際RTL仿真時(shí)的時(shí)間消耗,同時(shí)也降低了出錯(cuò)時(shí)的調(diào)試難度。應(yīng)該注意到并理解,在不脫離后附的權(quán)利要求所要求的本發(fā)明的精神和范圍的情況下,能夠?qū)ι鲜鲈敿?xì)描述的本發(fā)明做出各種修改和改進(jìn)。因此,要求保護(hù)的技術(shù)方案的范圍不受所給出的任何特定示范教導(dǎo)的限制。權(quán)利要求1.一種隨機(jī)測試程序生成方法,包括下列步驟1)編寫并解析指令模板,并構(gòu)建約束網(wǎng)絡(luò);2)利用小桶間的相容度計(jì)算小桶的計(jì)數(shù)函數(shù);3)基于所述計(jì)數(shù)函數(shù)根據(jù)所述約束網(wǎng)絡(luò)來計(jì)算隨機(jī)變量的隨機(jī)解;4)利用所述隨機(jī)解設(shè)置指令的操作數(shù),生成由所述指令構(gòu)成的隨機(jī)測試程序。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟2)包括下列步驟根據(jù)公式《'=>\"PLatM生成桶bucketp中的小桶Zmcfe/。,的初始計(jì)數(shù)函數(shù)《',其中1S/72桶個(gè)數(shù),1^K桶bucketp中小桶個(gè)數(shù)t,Xp是所述桶bucketp中的隨機(jī)變量,7v,是分到所述小桶的計(jì)數(shù)函數(shù)或約束條件,1S/^小桶bucketpj中的計(jì)數(shù)函數(shù)和約束條件個(gè)數(shù);根據(jù)p,n^j估算在所述小桶6""中對變量xp取不is以'i同值時(shí)所述小桶6wc/c,與所述桶bucketp中其它小桶^cfe、的相容度p,,其中iy^小桶個(gè)數(shù)t,^為所述小桶^dt中除Xp外的隨機(jī)變量集合,iv/表示小桶6wcfe^.的i十凄t函凄史;根據(jù)a//^5^An,,^計(jì)算所述小桶^"的計(jì)數(shù)函數(shù)《,并把所述計(jì)數(shù)函數(shù)ivf分到中序號(hào)數(shù)最大的隨機(jī)變量對應(yīng)的小桶中。3.—種隨機(jī)測試程序生成系統(tǒng),包括約束網(wǎng)絡(luò)構(gòu)建部件,用于編寫并解析指令模板,并構(gòu)建約束網(wǎng)絡(luò);約束求解器,用于基于利用小桶間的相容度計(jì)算的小桶的計(jì)數(shù)函數(shù)根據(jù)所述約束網(wǎng)絡(luò)來計(jì)算隨機(jī)變量的隨機(jī)解;指令生成部件,用于根據(jù)所述隨機(jī)解設(shè)置指令的操作數(shù),生成由所述指令構(gòu)成的隨機(jī)測試程序。4.根據(jù)權(quán)利要求3所述的系統(tǒng),其特征在于,所述約束網(wǎng)絡(luò)構(gòu)建部件進(jìn)一步包括指令模板編寫模塊,用于編寫指令模板;解析器,用于解析所述指令模板并構(gòu)建約束網(wǎng)絡(luò)。5.根據(jù)權(quán)利要求3或4所述的系統(tǒng),其特征在于,所述指令生成部件進(jìn)一步包括指令信息設(shè)置模塊,用于設(shè)置指令信息;指令生成模塊,用于根據(jù)所述約束求解器計(jì)算的所述隨機(jī)解設(shè)置指令的操作數(shù),并根據(jù)所述指令信息生成由所述指令構(gòu)成的隨機(jī)測試程序。6.—種設(shè)計(jì)驗(yàn)證方法,包括下列步驟利用如權(quán)利要求1所述的方法生成的隨機(jī)測試程序進(jìn)行設(shè)計(jì)驗(yàn)證。全文摘要本發(fā)明提供一種隨機(jī)測試程序生成方法,包括下列步驟1)編寫并解析指令模板,并構(gòu)建約束網(wǎng)絡(luò);2)利用小桶間的相容度計(jì)算小桶的計(jì)數(shù)函數(shù);3)基于所述計(jì)數(shù)函數(shù)根據(jù)所述約束網(wǎng)絡(luò)來計(jì)算隨機(jī)變量的隨機(jī)解;4)利用所述隨機(jī)解設(shè)置指令的操作數(shù),生成由所述指令構(gòu)成的隨機(jī)測試程序。利用該方法生成的測試程序更廣,減少了實(shí)際RTL仿真時(shí)的時(shí)間消耗,同時(shí)也降低了出錯(cuò)時(shí)的調(diào)試難度。文檔編號(hào)G06F9/44GK101551749SQ20091008376公開日2009年10月7日申請日期2009年5月11日優(yōu)先權(quán)日2009年5月11日發(fā)明者李潮激,沈海華,玲王申請人:中國科學(xué)院計(jì)算技術(shù)研究所