创建UVM Testcase的步骤

描述

在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参数,可以运行多个测试,而不必重新编译测试平台。

​​


审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分