0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

创建UVM Testcase的步骤

芯片验证工程师 来源:芯片验证工程师 2023-06-15 09:41 次阅读

在UVM中,Testcase是一个类,它封装了测试用例开发者编写的特定激励序列。

创建Base Test

下面首先开发了一个Base Test。这个Base Test是所有基于ubus_example_env开发的测试用例的一个起点。

108a8c2e-0ace-11ee-962d-dac502259ad0.png

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 的简单测试用例。

10b0acc4-0ace-11ee-962d-dac502259ad0.png

这个测 试 用例改变了由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

    文章

    1011

    浏览量

    83580
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    19119

原文标题:创建UVM Testcase

文章出处:【微信号:芯片验证工程师,微信公众号:芯片验证工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    数字IC验证之“构成uvm测试平台的主要组件”(4)连载中...

    扩展于uvm component。下面的类都是以它为基类扩展而来的。  uvm test,对应着testcase测试案例,验证工程师的测试案例都是从这个基类扩展而来。  uvm env
    发表于 01-22 15:33

    UVM代码如何把testcase与driver分开

    UVM代码如何把testcase与driver分开
    发表于 03-11 07:58

    什么是uvmuvm的特点有哪些呢

    大家好,我是一哥,上章内容我们介绍什么是uvmuvm的特点以及uvm为用户提供了哪些资源?本章内容我们来看一看一个典型的uvm验证平台应该是什么样子的,来看一个典型的
    发表于 02-14 06:46

    谈谈UVM中的uvm_info打印

    , this);  endfunction  m_rh是uvm_report_handler class类型的。在1个基于uvm_report_object继承过来的class在new的时候,会自动创建出m_rh
    发表于 03-17 16:41

    我的第一个UVM代码——Hello world

    run_test调用了uvm_test派生出来的testcase(hello_world)。 为什么run_test能够通过字符串\"hello_world\"找到testcase?与宏定义
    发表于 11-03 10:18

    Modelsim uvm库编译及执行

    第一句话是设置uvm环境变量,指定uvm的dpi位置。 第二句话是创建work工作目录。 第三句话是编译源文件,并且通过-L指定几个编译库。 第三句是执行仿真,调用uvm
    的头像 发表于 12-01 11:25 3795次阅读
    Modelsim <b class='flag-5'>uvm</b>库编译及执行

    allegro与PADS的区别及创建PCB封装的步骤

    allegro与PADS的区别及创建PCB封装的步骤
    发表于 03-27 10:56 66次下载
    allegro与PADS的区别及<b class='flag-5'>创建</b>PCB封装的<b class='flag-5'>步骤</b>

    多负载电源解决方案的创建步骤

    多负载电源解决方案的创建步骤
    发表于 05-28 10:03 14次下载

    典型的UVM Testbench架构

    UVM类库提供了通用的代码功能,如component hierarchy、transaction level model(TLM),configuration database等等,使用户能够创建任何类型的Testbench架构。
    的头像 发表于 05-22 10:14 2007次阅读
    典型的<b class='flag-5'>UVM</b> Testbench架构

    UVM学习笔记(一)

    driver应该派生自uvm_driver,而uvm_driver派生自uvm_component。
    的头像 发表于 05-26 14:38 1307次阅读
    <b class='flag-5'>UVM</b>学习笔记(一)

    创建UVM Driver的步骤

    Driver的作用是从sequencer中获得数据项,按照接口协议将数据项驱动到总线上。
    的头像 发表于 05-30 09:22 962次阅读
    <b class='flag-5'>创建</b><b class='flag-5'>UVM</b> Driver的<b class='flag-5'>步骤</b>

    创建UVM Driver

    Driver的作用是从sequencer中获得数据项,按照接口协议将数据项驱动到总线上。UVM类库提供了uvm_driver基类,所有的Driver类都应该直接或间接地从该类中扩展出来。Driver有一个TLM port,通过它与sequencer进行通信。
    的头像 发表于 05-30 16:17 755次阅读
    <b class='flag-5'>创建</b><b class='flag-5'>UVM</b> Driver

    UVM中的uvm_do宏简析

    uvm_do宏及其变体提供了创建、随机化和发送transaction items或者sequence的方法。
    的头像 发表于 06-09 09:36 4731次阅读
    <b class='flag-5'>UVM</b>中的<b class='flag-5'>uvm</b>_do宏简析

    我的第三个UVM代码—把testcase与driver分开

    testcase里驱动interface,当代码越来越多,需要考虑把环境拆分成多个小的环境,便于修改和维护。
    的头像 发表于 06-15 10:54 618次阅读
    我的第三个<b class='flag-5'>UVM</b>代码—把<b class='flag-5'>testcase</b>与driver分开

    Testcase在芯片验证中的作用

    随着半导体技术的快速发展,集成电路芯片的复杂度日益增加,芯片设计中的验证工作变得越来越重要。验证的目的是确保芯片在各种工况下的功能正确性和性能稳定性。在这个过程中,testcase(测试用例)扮演着关键角色。本文将简要介绍 testcase 的基本概念、设计方法和在芯片验
    的头像 发表于 09-09 09:32 1151次阅读