為了實現驗證目標,測試用例開發者需要控制測試激勵的生成以覆蓋特定的場景。測試用例開發者可以用下面這些方法控制測試激勵的創建:
添加約束條件來控制單個數據項。
使用UVM sequences來控制多個數據項的順序。這種方法提供了更多的靈活性和控制。
約束數據項
默認情況下,sequencers會生成完全隨機的數據項。測試用例編寫者可以控制生成的數據項數量,并向數據項添加約束。為了約束數據項,需要:
識別驗證組件中的數據項類和它們的字段。
創建一個數據項類的派生,增加或覆蓋默認約束。
在測試用例中,調整環境以使用新定義的數據項。
使用命令行選項指定測試用例名稱來運行仿真。
數據項類的定義
派生類中的幾個字段來自于DUT規格。例如,一個幀(frame)應該有一個payload被發送到DUT。其他字段的存在是為了幫助測試用例開發者控制激勵數據的生成。例如,字段parity_type不被發送到DUT,但它允許測試用例開發者輕松地指定和控制奇偶分布。這樣的控制字段被稱為 "旋鈕knobs"。
驗證組件的文檔應該列出數據項的旋鈕、它們的作用和合法范圍。
數據項約束可以來自DUT的規范,例如一個合法的幀必須有不等于0的error_bits_c。數據項中不同類型的約束對數據項的生成進行約束。例如,在約束塊default_parity_type中,奇偶校驗位被約束為90%合法(good parity)和10%非法(bad parity)。
創建一個特定的測試用例
在測試用例中,用戶可能希望改變數據項的生成方式。例如,測試用例開發者可能希望有short delays,這可以通過派生一個新的數據項類并根據需要添加約束或其他類成員來實現。
UVM類庫的factory機制可以用來將派生類(short_delay_frame)引入到環境中。
調用factory函數set_type_override_by_type(),指示環境使用short-delay幀。有時,測試用例可能想向某一個接口發送特殊的流量,同時繼續向其他接口發送常規流量。這可以通過在一個UVM組件中使用set_inst_override_by_type()來實現。
set_inst_override_by_type("uart_env0.master.sequencer.*", uart_frame::get_type(), short_delay_frame::get_type());
通配符也可以用來覆蓋一些組件的實例,例如:
set_inst_override_by_type("uart_env*.master.sequencer.*", uart_frame::get_type(), short_delay_frame::get_type());
責任編輯:彭菁
-
數據
+關注
關注
8文章
7139瀏覽量
89576 -
仿真
+關注
關注
50文章
4124瀏覽量
133991 -
DUT
+關注
關注
0文章
189瀏覽量
12490
原文標題:創建約束隨機測試用例
文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論