基于VMM驗證方法學(xué)的MCU驗證環(huán)境
MCU指令一旦開(kāi)始運行,尤其是隨機指令,指令執行不是順序,有時(shí)會(huì )跳入死循環(huán),很難設定仿真中止時(shí)間,這里設定了兩種機制,一種是仿真指令計數,另一種就是根據覆蓋率分析,通過(guò)VMM的覆蓋率分析函數,可以動(dòng)態(tài)的得到覆蓋率情況,如果隨機指令跳入死循環(huán),覆蓋率就會(huì )一直維持不變,每次覆蓋率分析不變就進(jìn)行計數,當計數超過(guò)限定,就會(huì )讓ScoreBoard結束,通過(guò)環(huán)境對ScoreBoard的監測,一旦ScoreBoard停止,整個(gè)仿真也會(huì )停下。
4.7 功能覆蓋率模型
對于MCU這樣的DUT,代碼覆蓋率已經(jīng)不能夠代表驗證進(jìn)度,而功能覆蓋率也只能代表相當一部分待驗證的功能,這里對于基本的memory,功能覆蓋率僅要求所有位都被指令操作過(guò),對于特殊寄存器SFR,需要指定某些特定位有相應的“0”以及“1”狀態(tài)。代碼如下:
coverpoint memory[‘h87]
{
wildcard bins b87m_0_0 = {8’bxxxxxxx0};
wildcard bins b87m_1_0 = {8‘bxxxxxxx1};
wildcard bins b87m_0_1 = {8’bxxxxxx0x};
wildcard bins b87m_1_1 = {8‘bxxxxxx1x};
}
另外可以收集指令與指令參數的交叉覆蓋率分析,例如:
covergroup gen_port_cov;
coverpoint addr_mode;
coverpoint kind;
cross addr_mode, kind;
option.weight = 0;
endgroup
可以說(shuō)對于MCU這樣的DUT,功能點(diǎn)很難被完全描述,但是功能覆蓋率還是提供了一部分量化指標,供驗證參考。
5 小結
本文實(shí)現了一個(gè)驗證MCU指令的基于VMM的驗證環(huán)境,在這個(gè)環(huán)境里不但可以使用隨機的指令生成來(lái)輸入指令,也可以使用已有的應用程序代碼,另外提供了 memory自檢環(huán)境,可以在每一條指令執行后檢查memory值,從最全面角度保證每條指令執行結果是正確的。此外還提供了功能覆蓋率模型,收集覆蓋率結果。這個(gè)環(huán)境可以被復用擴展,基于這個(gè)MCU開(kāi)發(fā)的軟件都可以在這個(gè)驗證環(huán)境中先運行以保證軟件的正確性。
評論