天天看點

小白練習跑覆寫率從0到100%

目錄

一. 前期準備

二. 跑case且分析覆寫率

三. 更換随機種子提高覆寫率

四. 再次分析覆寫率 

五. 寫定向激勵去提高覆寫率

六. 覆寫率到100%

一. 前期準備

前期準備工作包括驗證環境的搭建,定義功能覆寫率,準備makefile腳本。熟悉常用指令。

根據自定義的makefile腳本,主要用到三個指令:

任務 指令
跑一次case make comp elab run COV=1 TESTNAME=...
合并覆寫率 make mergecov
打開DVE分析覆寫率 make dvecov
用sh腳本跑case source ...

注意: makefile裡面是否給随機種子+ntb_random_seed,必須加上随機種子,這樣在多次跑相同case的時候才會産生不同的随機種子。

用sh腳本跑case需要提前準備一個sh腳本(友善一次跑多個case),在terminal下touch my_test1即可建立一個名為my_test1的文檔,一般我習慣命名為my_test1,my_test2。在文檔中将多條case和合并覆寫率和打開DVE分析的指令放在其中,随後在terminal中source my_test1則可自動執行下面指令。

一個sh腳本控制的文檔
小白練習跑覆寫率從0到100%

二. 跑case且分析覆寫率

跑一次冒煙測試

小白練習跑覆寫率從0到100%
小白練習跑覆寫率從0到100%

跑一次不同位址的測試

小白練習跑覆寫率從0到100%
小白練習跑覆寫率從0到100%

 跑一次不同位寬的資料測試

小白練習跑覆寫率從0到100%
小白練習跑覆寫率從0到100%

 字不對齊測試

小白練習跑覆寫率從0到100%
小白練習跑覆寫率從0到100%

 複位測試

小白練習跑覆寫率從0到100%
小白練習跑覆寫率從0到100%

在跑完不同的case後,覆寫率增長如下表

測試 代碼覆寫率 功能覆寫率
冒煙測試 71.34 20.07
不同位址 76.34 39.80
不同位寬 79.68 52.30
字不對齊測試 96.68 71.05
複位測試 96.78 71.05

字不對齊測試後,代碼覆寫率增長比較快,主要是在這個case中首次将data的高16位指派了,前面三個case的指派主要在低16位,于是data高位的代碼toggle覆寫到了。但是覆寫率沒有達到100%,于是我們嘗試更換随機種子重新跑。

三. 更換随機種子提高覆寫率

為了提高覆寫率,可以更換随機種子将中間三個case再跑四次(這裡可以用到sh腳本),但是覆寫率提升并不大,代碼覆寫率沒變,功能覆寫率從71.05%提高到72.37%。

小白練習跑覆寫率從0到100%

四. 再次分析覆寫率 

于是我們分析檢視哪些地方沒有覆寫到,先分析代碼覆寫率的toggle;

小白練習跑覆寫率從0到100%
  1. 此時HWDATA和HRDATA在某些位置的toggle還沒有覆寫,可以寫定向激勵去覆寫,依次發送HWDATA的值為32’h0000_0000,32’hFFFF_FFFF, 32’h0000_0000,實作各個bit位的0->1,1->0跳轉;
  2. HREADY,HREADYOUT由于DUT的行為恒1,是以可以exclude掉;
  3. HRESP由于設計的DUT恒0,是以可以exclude掉;
  4. HSELBRAM可以給初值1,在複位任務中非阻塞指派将其置0,随後釋放的時候置1;
  5. HTRANS由于DUT不支援突發傳輸,是以并沒有BUSY和SEQ狀态,可以exclude掉;

然後分析功能覆寫率:

小白練習跑覆寫率從0到100%

 可以看到多次随機但仍然沒有随機到addr_end,邊界位址難以覆寫到,是以應該寫一個定向激勵去覆寫邊界位址,同時發現非法位址沒有覆寫,因為我們本身并沒有寫非法位址的激勵,是以我們另外寫一個seq,裡面去覆寫這三個點。

注意:主要exclude掉的應該是設計的行為導緻的必然不可能出現的情況。

五. 寫定向激勵去提高覆寫率

寫定向激勵去滿足HWDATA和HRDATA的toggle。

小白練習跑覆寫率從0到100%

 寫定向激勵去滿足功能覆寫率

小白練習跑覆寫率從0到100%

注意:新寫seq,test,且兩個sv檔案都要放入到頭檔案svh裡面,在test中挂載對應的seq。

六. 覆寫率到100%

将新寫的兩個test放到另一個文檔裡面my_test2。

小白練習跑覆寫率從0到100%

 在重新跑完定向的激勵後,導入之前exclude的檔案,最後發現功能覆寫率和代碼覆寫率均達到100%

小白練習跑覆寫率從0到100%

繼續閱讀