版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、基于VMM驗證方法學(xué)的MCU驗證環(huán)境來源:中國集成電路 作者:朱思良導(dǎo)讀 隨著SystemVerilog成為IEEE的P1800規(guī)范,越來越多的項目開始采用基于SystemVerilog的驗證方法學(xué)來獲得更多的重用擴展性、更全面的功能覆蓋率,以及更合理的層次化驗證結(jié)構(gòu)。本文主要提出了一種基于SystemVerilog的VMM驗證方法學(xué)的驗證環(huán)境。在這個驗證環(huán)境中,驗證了一個8位的MCU,這個MCU主要應(yīng)用在數(shù)據(jù)卡項目中,主要特點是時鐘周期與指令周期相等,并且相對于標準MUC指令需要時鐘周期較少。關(guān)鍵詞:SystemVerilogVMM1 簡介隨著設(shè)計的復(fù)雜程度不斷增加,要求
2、把更多的資源放到驗證上,不但要求驗證能夠覆蓋所有的功能,還希望能夠給出大量的異常情況來檢查DUT對應(yīng)異常的處理狀態(tài),這在傳統(tǒng)測試方法下往往是難以實現(xiàn)的。此外,設(shè)計不斷地重用,而驗證也希望能夠重用一樣的驗證模塊,這就催生了層次化的驗證方法。Synopsys的 VMM驗證方法學(xué)提供了基于SystemVerilog的驗證方法,包括了有約束的隨機數(shù)生成,層次化的驗證結(jié)構(gòu),以及以功能覆蓋率為指標的驗證流程。在本文中,圍繞Synopsys的VMM(Verification Methodology Manual)構(gòu)建了一個MCU驗證環(huán)境。2 DUT在這個環(huán)境中驗證了一個8位MCU,該CPU時鐘周期即為指令周
3、期,兼容MCU指令集,包含8位的運算邏輯單元,包含了ACC、B、PSW等常用的寄存器,4組R0-R7的R寄存器,支持直接,間接尋址,支持位操作,跳轉(zhuǎn)指令可以為8位有符號相對地址跳轉(zhuǎn)或者11位,16位無符號絕對地址跳轉(zhuǎn)。4個優(yōu)先級12個中斷,中斷包括外部輸入中斷,以及串口和計數(shù)器等的內(nèi)部中斷,15位可編程Watchdog,另外包含程序ROM接口,外部RAM接口,內(nèi)部RAM以及SFR接口。MCU本身并不包含memory,所有的ROM以及RAM都是通過外部接口進行通信,這里在VMM環(huán)境里實現(xiàn)了行為級的 memory model,來保存程序代碼和數(shù)據(jù)。以下是MCU的簡要模塊框圖。圖1 MCU內(nèi)部結(jié)構(gòu)這
4、個MCU也是在原有基礎(chǔ)上改進了指令周期,減少了大部分指令執(zhí)行所需的指令周期。因為部分指令所需要的指令周期的縮短,很多原有采樣和賦值時間相應(yīng)發(fā)生較大變化,在功能驗證的基礎(chǔ)上,需要關(guān)注是否因此對下一條指令產(chǎn)生影響,特別是中斷和部分指令同時發(fā)生時的一些特殊情況。MCU的指令執(zhí)行都會通過讀寫RAM memory來實現(xiàn),另外所有的外設(shè)都會通過配置SFR memory來啟動相應(yīng)功能,并會對相應(yīng)的SFR置位來顯示外設(shè)的工作結(jié)果或是狀態(tài),這里RAM memory和SFR memory內(nèi)容就是需要關(guān)注的檢測點,只要保證RAM memory以及SFR memory內(nèi)容的正確,就可以驗證MCU的所有功能正確。3 基
5、于VMM的MCU驗證結(jié)構(gòu)基于VMM的MCU驗證就需要充分利用VMM的特點,即為有約束的隨機數(shù)生成、自動數(shù)據(jù)對比檢查,和功能覆蓋率收集。3.1 有約束的隨機指令生成傳統(tǒng)的MCU驗證,需要寫匯編代碼,注入MCU程序ROM進行仿真,匯編代碼的質(zhì)量和覆蓋率是影響驗證的主要因素。除了可以將應(yīng)用程序作為 TestCase,只能根據(jù)驗證目標編寫對應(yīng)的TestCase。這樣的TestCase屬于Direct TestCase,只能覆蓋一部分功能,尤其是MCU有指令組合的情況,以及除了ALU單元的外設(shè)單元,當(dāng)外設(shè)單元與內(nèi)部指令并行工作,Direct TestCase往往是不能滿足要求的。這里,VMM提供了有約束
6、的隨機數(shù)生成,可以將MCU指令集進行分類,將同一格式的指令歸為一類,這樣可以通過一定的約束隨機的生成指令以及指令所需的參數(shù),在下一節(jié)的指令類中會詳細講解關(guān)于指令的分類與生成。指令生成后,實現(xiàn)了一個匯編器,這個匯編器是由C代碼實現(xiàn)的,通過DPI將MCU的C模型接入驗證環(huán)境中,這樣生成的匯編指令可以實時轉(zhuǎn)化為16進制代碼,并且直接讀入MCU的ROM進行仿真。隨機指令生成,可以添加節(jié)省人力,并且給出更加特殊的TestCase,此外還可以對易錯的情況添加額外的約束,讓邊緣情況測試幾率更大,從而做到更多的驗證。3.2 自動數(shù)據(jù)對比檢查寫匯編代碼,讀入程序ROM,通過仿真來觀測結(jié)果,結(jié)果的正確性通過波形觀
7、察,這種驗證方法測試數(shù)量比較有限,只能在人力控制范圍內(nèi)進行驗證,不適合于遞歸以及大量TestCase的驗證。此外,在以往的MCU驗證中,一旦發(fā)生功能錯誤,真正的錯誤點有可能是多個指令之前,需要往前查找波形,往往 debug時候查找問題源會耗費大量時間,甚至有些深層次的問題因為不屬于驗證目標,或者不在觀測點內(nèi),往往會被忽略。在環(huán)境里,已經(jīng)引入的隨機的指令生成,這就需要一個參照模型能夠生成對應(yīng)的參照結(jié)果。這里實現(xiàn)一個用C語言描述的MCU參照模型,同樣通過DPI將MCU的C模型接入驗證環(huán)境中,這個模型以16進制代碼作為輸入,可以在每一條指令執(zhí)行寫出一個參照結(jié)果。MCU的都是通過RAM保存數(shù)據(jù),SFR
8、寄存器來保存狀態(tài),可以通過對比memory中的數(shù)據(jù),來保證MCU的每一條指令的工作狀態(tài)都是和參考模型是一致的。而且每次添加TestCase后都不需要觀測波形或是生成參照結(jié)果,甚至可以直接將應(yīng)用程序放入環(huán)境中加以測試。在環(huán)境里通過C參考模型寫出的每一條指令后的狀態(tài)會保存下來,由ScoreBoard來讀入,環(huán)境可以讀出MCU執(zhí)行程序 ROM后RAM和SFR的值并傳遞給ScoreBoard,由ScoreBoard來進行自檢,并且在log中寫出自檢結(jié)果。3.3 功能覆蓋率收集在Direct TestCase下,匯編代碼都是特定目的的測試代碼,所關(guān)注的寄存器狀態(tài),或是真實指令執(zhí)行情況往往很難統(tǒng)計,代碼覆
9、蓋率能提供的信息相當(dāng)有限。在 VMM環(huán)境中,可以通過模型的執(zhí)行結(jié)果來統(tǒng)計指令的執(zhí)行情況,因為模型和RTL是功能一致的,內(nèi)部數(shù)據(jù)每條指令之后都會對比自檢,可以將模型運行的結(jié)果和模型內(nèi)部對應(yīng)的SFR狀態(tài)位作為功能覆蓋率收集點,將關(guān)注的功能寫為覆蓋率模型,在仿真中自動收集,并在仿真所有TestCase后將覆蓋率結(jié)果合并在一起,給出一個最終的功能覆蓋率,這里要求功能覆蓋率和代碼覆蓋率都為100%。4 驗證功能模塊的具體實現(xiàn)4.1 簡介以VMM為基礎(chǔ),實現(xiàn)了一個驗證8位MCU的平臺,這個平臺可以隨機生成一系列的指令,并且在每個指令后進行自檢。下面就這個平臺的詳細實現(xiàn)加以介紹,4.2小節(jié)將會介紹隨機指令生
10、成,以及Scenario約束的實現(xiàn),4.3小節(jié)將會介紹Driver部分,這里Driver實現(xiàn)了Transactor的任務(wù),除了實現(xiàn)匯編,將16進制代碼讀入ROM模型中,還要調(diào)用MCU的C模型并產(chǎn)生結(jié)果供后續(xù)ScoreBoard對比。 4.4小節(jié)將會介紹MCU的C模型,C模型行為是直接影響MCU是否正確的保證。4.5小節(jié)將會介紹memory模型的實現(xiàn),包括Internal SFR、Internal RAM、External SFR以及External RAM。4.6小節(jié)介紹過于ScoreBoard的自檢機制,以及自動終止仿真的方法。4.7小節(jié)將會介紹關(guān)于功能覆蓋率模型的建立。4.2 指令數(shù)據(jù)包以
11、及Scenario Generator在VMM環(huán)境中,所有的數(shù)據(jù)都是擴展vmm_data得到,在這里首先對指令分類,相同格式的指令皆為同一類型,具體部分分類表格如表1中所示。 分類的依據(jù)在于指令格式,例如對從工作寄存器Rn到A的操作,或是從直接地址Rx到A的操作,這樣可以通過約束一個種類來隨機化指令格式,生成指令格式以后可以根據(jù)指令格式來填入相應(yīng)的隨機值。首先就是約束指令格式對應(yīng)的指令,代碼如:constraint add_mode_decide_kind(addr_mode=RN_A) -> kind inside MOV, ADD, ADDC, SUBB, XCH, ANL
12、, ORL, XRL;(addr_mode=RX_A) -> kind inside MOV, ADD, ADDC, SUBB, XCH, ANL, ORL, XRL;然后約束對應(yīng)的寄存器地址,立即數(shù),相對地址等,代碼如:constraint inst_validdi_x inside 0:255;reg_y inside 0:255;reg_i inside 0, 1;reg_n inside 0: 7;。得到了指令的格式,隨機得到指令,指令參數(shù),在以上約束下就可以生成一條符合語法的指令。通過在TestCase中約束指令格式,或是地址數(shù)據(jù)就可以在TestCase中控制Generator
13、生成的指令,通過變換隨機種子就可以生成不同類型的指令集合。使用宏定義對數(shù)據(jù)類擴展就可以得到數(shù)據(jù)類的Generator和Channel:vmm_channel(inst)vmm_scenario_gen(inst, “inst”)每次scenario Generator生成一條指令,并且通過channel傳遞給Driver??梢詫⒁幌盗屑s束做為一個scenario,這樣可以控制指令與指令之間的關(guān)系,將一系列scenario合并可以生成更多的隨機組合,例如:$void(scenario_kind) = R0_OP -> foreach(itemsi)itemsi.addr_mode insi
14、de 0,1,2,4,5,6,7,8,10,11,12,13,14,21,22,23,24,26,27,28=;itemsi.reg_x inside 0;itemsi.reg_n inside 0;itemsi.reg_i inside 0;驗證這里能夠做到盡可能大量重復(fù)地測試某些指令的集合,以便將一些邊緣情況測到,例如實際應(yīng)用上會反復(fù)使用累加器或是反復(fù)調(diào)用R0-R7,都可以通過約束來實現(xiàn)。大量隨機的代碼測試下,可以給出更邊緣的TestCase,盡可能地測試到一些邊緣情況。4.3 Driver這里Driver實現(xiàn)了Transactor的功能,除了實現(xiàn)將asm代碼匯編,將16進制代碼讀入ROM
15、模型中,還要調(diào)用MCU的C模型并產(chǎn)生結(jié)果,供后續(xù)ScoreBoard對比。由于匯編器需要將所有指令代碼讀入進行統(tǒng)一匯編,由Generator生成的所有指令代碼在Driver中會被寫入asm文件,通過DPI調(diào)用一個匯編的 C function來處理這個asm文件,生成一個HEX 代碼文件,Driver可以讀入這個HEX 代碼,并且寫入一個用SystemVerilog實現(xiàn)的ROM模型中,另外通過DPI調(diào)用一個C的MCU仿真器,可以實時寫出每一條指令MCU的SFR、 RAM狀態(tài),同樣這些狀態(tài)都保留在單獨的文件中,以作為ScoreBoard的輸入。因為MCU的指令組合可以說是無法測全的,真正的測試往往
16、要發(fā)生在應(yīng)用代碼測試上,Driver除了可以接受從channel中得到的指令,也可以直接從外部文件得到asm代碼或是16進制代碼,這樣已有的MCU測試代碼或是應(yīng)用程序都可以在這個環(huán)境中直接調(diào)用。此外,中斷的外部輸入也有隨機的數(shù)據(jù)灌入,外部端口的輸入數(shù)據(jù)也是在指令數(shù)據(jù)包中產(chǎn)生,并且由TestCase控制的。MCU工作方式的特殊性,導(dǎo)致Driver相對于驗證環(huán)境較為獨立,與驗證環(huán)境的接口都是磁盤文件。4.4 C模型環(huán)境中使用兩個C模型:匯編器和仿真器,將asm代碼匯編成為16進制代碼,并仿真16進制代碼。通過DPI調(diào)用C函數(shù)如下:import “DPI” function void asmb_r(
17、string in_file, string out_file);import “DPI” function void siml(int run_for_n_ins, string in_file2, string in_file1, string in_file, string out_file, string out_file2, string out_file3, string out_file4);如Driver所示,輸入輸出都是磁盤文件。匯編器通過查表將指令翻譯成16進制代碼,對于變量將用哈希表實現(xiàn),通過查表替換,插入校驗碼,最后得出的16進制代碼,作為MCU的C模型仿真輸入,并且由
18、Driver的ROM模型讀入。仿真器輸入16進制代碼,通過先解碼16進制代碼,然后逐條執(zhí)行代碼,所有memory都是在C中實現(xiàn),每個指令分別調(diào)用相應(yīng)的函數(shù),此外還有相應(yīng)的中斷函數(shù)處理中斷,在每一條指令后寫出SFR,Internal RAM以及External RAM中的值到磁盤文件中,以作為RTL仿真的參照,C模型的結(jié)果直接影響整個驗證的準確性,因為RTL是由時鐘驅(qū)動,而C模型是不帶時序關(guān)系,有些指令的執(zhí)行結(jié)果需要根據(jù)時序做部分調(diào)整,調(diào)整模型在驗證中占去較多資源。4.5 memory模型MCU外圍連接了四個外部memory,包括Internal SFR、Internal RAM、Externa
19、l SFR以及External RAM。在驗證MCU時,memory中的值就可以保證MCU的工作狀態(tài),因此在驗證中,MCU的外部memory都是用SystemVerilog實現(xiàn)的行為模型,除了通過interface io來響應(yīng)MCU的讀寫要求之外,還有數(shù)據(jù)通道通往ScoreBoard,這里每個MCU時鐘都會將memory值記錄下來送往ScoreBoard,由于Internal SFR、Internal RAM、External SFR僅有128 byte,數(shù)據(jù)量較小,可以每個時鐘周期來檢查,但對于External RAM有64k byte,對比或是傳輸都比較耗費資源。另外,對External
20、RAM的操作并不多,這里實現(xiàn)的是在Testcases中約束對于External RAM的地址都為低256 byte,這樣可以有效地控制數(shù)據(jù)量并且在每個時鐘周期檢查memory狀態(tài),另外一種可選方式是每隔一定數(shù)量的指令來對比External RAM的值,同樣對仿真影響較小。4.6 ScoreBoardScoreBoard收集到從各個memory傳遞過來的memory值,因此對應(yīng)一塊memory就會有一塊ScoreBoard,對比通過讀取MCU 的C模型寫出的memory狀態(tài)值,由于MCU模型寫出的值是每條指令執(zhí)行之后的值而memory傳遞過來的數(shù)據(jù)為每個時鐘周期,這里 ScoreBoard不但要
21、負責(zé)解讀C模型寫出的參照memory結(jié)果文件,通過參照將確認每個指令執(zhí)行時鐘周期長度,然后從memory模型傳遞過來的數(shù)據(jù)中選取該指令執(zhí)行之后一個時鐘周期的數(shù)據(jù)與參照數(shù)據(jù)進行對比,考慮到部分數(shù)據(jù)會有延遲,ScoreBoard在對比時,不僅僅考慮當(dāng)前比較時間點上的數(shù)據(jù),如果對比失敗,ScoreBoard的自檢會進入子線程,繼續(xù)讀取memory傳遞過來的數(shù)據(jù),考慮到MCU支持指令延遲操作最多8個時鐘周期,如果在后續(xù)16個周期內(nèi)得到正確的值,ScoreBoard會認為結(jié)果正確,并且中止子線程返還檢查成功標志。MCU指令一旦開始運行,尤其是隨機指令,指令執(zhí)行不是順序,有時會跳入死循環(huán),很難設(shè)定仿真中止時間,這里設(shè)定了兩種機制,一種是仿真指令計數(shù),另一種就是根據(jù)覆蓋率分析,通過VMM的覆蓋率分析函數(shù),可以動態(tài)的得到覆蓋率情況,如果隨機指令跳入死循環(huán),覆蓋率就會一直維持不變,每次覆蓋率分析不變就進行計數(shù),當(dāng)計數(shù)超過限定,就會讓ScoreBoard結(jié)束,通過環(huán)境對ScoreBoa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 老年病科科普講解大賽
- 塑料廠施工合同填寫樣本
- 商場通風(fēng)系統(tǒng)改造及安裝協(xié)議
- 生態(tài)保護晉升管理策略
- 購物中心倒水泥板施工合同
- 生態(tài)園區(qū)小青瓦安裝協(xié)議
- 水果店營業(yè)員招聘合同
- 世界文化遺產(chǎn)博物館管理辦法
- 藥店營銷專員勞動合同
- 醫(yī)院病房樓租賃與承包合同條款
- 福建省漳州市十校聯(lián)盟2024-2025學(xué)年高一上學(xué)期11月期中考試 數(shù)學(xué) 含解析
- 幼兒園老師說課培訓(xùn)課件
- 房貸延期代理合同(2篇)
- 2023年曲靖市中醫(yī)醫(yī)院招聘考試真題
- 海洋研學(xué)勞動課程設(shè)計
- 林業(yè)基礎(chǔ)知識考試題庫單選題100道及答案解析
- 2024年盤錦北方瀝青股份限公司招聘18人高頻難、易錯點500題模擬試題附帶答案詳解
- 電氣工程及其自動化職業(yè)規(guī)劃課件
- 《短視頻拍攝與制作》課件-3短視頻拍攝的三大技巧
- (高清版)DZT 0399-2022 礦山資源儲量管理規(guī)范
- 【川教版】《生命 生態(tài) 安全》四上第11課《預(yù)防流感》課件
評論
0/150
提交評論