在UVM中,Testcase是一個(gè)類,它封裝了測(cè)試用例開發(fā)者編寫的特定激勵(lì)序列。
創(chuàng)建Base Test
下面首先開發(fā)了一個(gè)Base Test。這個(gè)Base Test是所有基于ubus_example_env開發(fā)的測(cè)試用例的一個(gè)起點(diǎn)。
base test的build_phase()創(chuàng)建了ubus_example_env。任何從ubus_example_base_test派生的Testcase都會(huì)繼承ubus_example_base_test中的所有定義,這意味著如果派生的Testcase調(diào) 用 super.build_phase() , 也會(huì)將構(gòu)建top-levelenvironment。
從Base Test基類創(chuàng)建測(cè)試用例
測(cè)試用例編寫者可以從Base Test派生出使用相同驗(yàn)證環(huán)境的測(cè)試用例。top-level environment是由Base Test的build_phase()創(chuàng)建的,派生測(cè)試用例可 以 對(duì)run_phase()做一些 調(diào) 整 ( 例 如,改變環(huán)境中執(zhí)行的 default sequence ) 。下 面 是一 個(gè)繼 承 自u(píng)bus_example_base_test 的簡單測(cè)試用例。
這個(gè)測(cè) 試 用例改變了由masters[0] agent和slaves[0]agent執(zhí) 行 的default sequence。
通過基類super.build_phase(),將創(chuàng)建驗(yàn)證環(huán)境ubus_example_env0以及它的所有驗(yàn)證子組件。因此,任何會(huì)影響這些驗(yàn)證組件構(gòu)建的配置(比如要?jiǎng)?chuàng)建多少個(gè)masters)都必須在調(diào)用super.build_phase()之前設(shè)置好。
對(duì)于這個(gè)例子,由于sequences要到后面的phase才開始獲取,所以可以在調(diào)用super.build_phase()之后再調(diào)用uvm_config_db::set。
選擇測(cè)試用例
在定義了擴(kuò)展測(cè)試用例后,需要調(diào)用uvm_pkg::run_test()任務(wù)來選擇一個(gè)要執(zhí)行仿真的測(cè)試用例。它的原型是:
task run_test(string test_name="");
UVM支持通過兩種不同的機(jī)制指明要運(yùn)行的測(cè)試用例。
測(cè)試用例(即已經(jīng)向factory注冊(cè)的測(cè)試用例名稱)可以直接傳遞給run_test()任務(wù),也可以通過+UVM_TESTNAME在命令行中聲明。
如果兩種機(jī)制都使用,命令行優(yōu)先。一旦選擇了一個(gè)測(cè)試用例名稱,run_test()任務(wù)就會(huì)調(diào)用factory機(jī)制來創(chuàng)建一個(gè)測(cè)試用例的實(shí)例,實(shí)例名稱為uvm_test_top。最后,run_test()通過執(zhí)行各個(gè)phase來啟動(dòng)測(cè)試。
下面的例子顯示了如何通過仿真器的命令行參數(shù)向run_test()任務(wù)提供類型名為test_read_modify_write的測(cè)試。使用命令行參數(shù)可以避免在調(diào)用run_test()的任務(wù)中hardcode指定testcase名稱。在一個(gè)initial語句中,調(diào)用run_test()如下:
// DUT, interfaces, and all non-UVM code initial uvm_pkg::run_test();
使用仿真器命令行選項(xiàng)選擇一個(gè)test_read_modify_write類型的測(cè)試用例,使用以下命令:
% simulator-command other-options +UVM_TESTNAME=test_read_modify_write
如果提供給run_test()的測(cè)試用例名稱不存在,仿真器將立即調(diào)用$fatal報(bào)錯(cuò)退出。如果發(fā)生這種情況,很可能是名字打錯(cuò)了或者是`uvm_component_utils宏沒有被使用注冊(cè)這個(gè)testcase。
通過使用這種方法,只改變+UVM_TESTNAME參數(shù),可以運(yùn)行多個(gè)測(cè)試,而不必重新編譯測(cè)試平臺(tái)。
??
審核編輯:劉清
-
仿真器
+關(guān)注
關(guān)注
14文章
1019瀏覽量
83956 -
UVM
+關(guān)注
關(guān)注
0文章
182瀏覽量
19234
原文標(biāo)題:創(chuàng)建UVM Testcase
文章出處:【微信號(hào):芯片驗(yàn)證工程師,微信公眾號(hào):芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
數(shù)字IC驗(yàn)證之“構(gòu)成uvm測(cè)試平臺(tái)的主要組件”(4)連載中...
什么是uvm?uvm的特點(diǎn)有哪些呢
談?wù)?b class='flag-5'>UVM中的uvm_info打印
我的第一個(gè)UVM代碼——Hello world
Modelsim uvm庫編譯及執(zhí)行
![Modelsim <b class='flag-5'>uvm</b>庫編譯及執(zhí)行](https://file.elecfans.com/web1/M00/C8/58/pIYBAF9uAqOAAaeDAABeljwgTYE221.png)
allegro與PADS的區(qū)別及創(chuàng)建PCB封裝的步驟
![allegro與PADS的區(qū)別及<b class='flag-5'>創(chuàng)建</b>PCB封裝的<b class='flag-5'>步驟</b>](https://file.elecfans.com/web1/M00/E7/8D/pIYBAGBeoX2ABWwaAAK-IvNdC8M504.png)
典型的UVM Testbench架構(gòu)
![典型的<b class='flag-5'>UVM</b> Testbench架構(gòu)](https://file1.elecfans.com/web2/M00/88/7F/wKgaomRq0gaAMHrGAAA5QCvxGv8490.png)
創(chuàng)建UVM Driver的步驟
![<b class='flag-5'>創(chuàng)建</b><b class='flag-5'>UVM</b> Driver的<b class='flag-5'>步驟</b>](https://file1.elecfans.com/web2/M00/88/D7/wKgaomR1UDaAcFYDAAAzXbKUSO4738.png)
創(chuàng)建UVM Driver
![<b class='flag-5'>創(chuàng)建</b><b class='flag-5'>UVM</b> Driver](https://file1.elecfans.com/web2/M00/88/E0/wKgaomR1sPuALJTcAAGJv-_jZtc643.jpg)
我的第三個(gè)UVM代碼—把testcase與driver分開
![我的第三個(gè)<b class='flag-5'>UVM</b>代碼—把<b class='flag-5'>testcase</b>與driver分開](https://file1.elecfans.com/web2/M00/89/BD/wKgZomSKfUmAO_fuAAAxKg5hZ98008.jpg)
評(píng)論