在UVM中,Testcase是一個類,它封裝了測試用例開發者編寫的特定激勵序列。
創建Base Test
下面首先開發了一個Base Test。這個Base Test是所有基于ubus_example_env開發的測試用例的一個起點。
base test的build_phase()創建了ubus_example_env。任何從ubus_example_base_test派生的Testcase都會繼承ubus_example_base_test中的所有定義,這意味著如果派生的Testcase調 用 super.build_phase() , 也會將構建top-levelenvironment。
從Base Test基類創建測試用例
測試用例編寫者可以從Base Test派生出使用相同驗證環境的測試用例。top-level environment是由Base Test的build_phase()創建的,派生測試用例可 以 對run_phase()做一些 調 整 ( 例 如,改變環境中執行的 default sequence ) 。下 面 是一 個繼 承 自ubus_example_base_test 的簡單測試用例。
這個測 試 用例改變了由masters[0] agent和slaves[0]agent執 行 的default sequence。
通過基類super.build_phase(),將創建驗證環境ubus_example_env0以及它的所有驗證子組件。因此,任何會影響這些驗證組件構建的配置(比如要創建多少個masters)都必須在調用super.build_phase()之前設置好。
對于這個例子,由于sequences要到后面的phase才開始獲取,所以可以在調用super.build_phase()之后再調用uvm_config_db::set。
選擇測試用例
在定義了擴展測試用例后,需要調用uvm_pkg::run_test()任務來選擇一個要執行仿真的測試用例。它的原型是:
task run_test(string test_name="");
UVM支持通過兩種不同的機制指明要運行的測試用例。
測試用例(即已經向factory注冊的測試用例名稱)可以直接傳遞給run_test()任務,也可以通過+UVM_TESTNAME在命令行中聲明。
如果兩種機制都使用,命令行優先。一旦選擇了一個測試用例名稱,run_test()任務就會調用factory機制來創建一個測試用例的實例,實例名稱為uvm_test_top。最后,run_test()通過執行各個phase來啟動測試。
下面的例子顯示了如何通過仿真器的命令行參數向run_test()任務提供類型名為test_read_modify_write的測試。使用命令行參數可以避免在調用run_test()的任務中hardcode指定testcase名稱。在一個initial語句中,調用run_test()如下:
// DUT, interfaces, and all non-UVM code initial uvm_pkg::run_test();
使用仿真器命令行選項選擇一個test_read_modify_write類型的測試用例,使用以下命令:
% simulator-command other-options +UVM_TESTNAME=test_read_modify_write
如果提供給run_test()的測試用例名稱不存在,仿真器將立即調用$fatal報錯退出。如果發生這種情況,很可能是名字打錯了或者是`uvm_component_utils宏沒有被使用注冊這個testcase。
通過使用這種方法,只改變+UVM_TESTNAME參數,可以運行多個測試,而不必重新編譯測試平臺。
??
審核編輯:劉清
-
仿真器
+關注
關注
14文章
1017瀏覽量
83722 -
UVM
+關注
關注
0文章
182瀏覽量
19167
原文標題:創建UVM Testcase
文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論