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

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

3天内不再提示

管理test case结束机制介绍

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

UVM中每个phase都有一个内置的objection,为components和objects提供了同步方法,指示何时可以安全地结束这个phase,最终结束整个test case。

一般来说,由一个components或sequence在激励开始时raise phase objection,激励处理完毕之后drop objection。一旦所有提起的objections被dropped,该phase就终止了。

仿真中,一个master agent可能需要在runphase停止之前完成所有的读写操作,一个reactive slave agent不会drop objection,因为它只是一直被动地处理事务。对于sequence来说,有三种可能的方式可以处理phase objection。

a)

class test extends ovm_test;
task run_phase(uvm_phase phase);
    phase.raise_objection(this);
    seq.start(seqr);
    phase.drop_objection(this);
  endtask
endclass

b)

class test extends ovm_test;
task run_phase (uvm_phase phase);
    seq.set_starting_phase(phase);
    seq.start(seqr);
  endtask
endclass


class seq extends uvm_sequence #(data_item);
task body();
    uvm_phase p = get_starting_phase();
    if(p) p.raise_objection(this); 
//some critical logic
if(p)p.drop_objection(this);
  endtask
endclass

c)

class test extends ovm_test;
task run_phase (uvm_phase phase);
    seq.set_starting_phase(phase);
    seq.start(seqr);
  endtask
endclass


class seq extends uvm_sequence #(data_item);
function new(string name = "seq");
super.new(name);
    set_automatic_phase_objection(1);
endfunction
  task body();
// Sequence logic with no objection
// as it is already handled in the base class
endtask
endclass

上面的三种方式只需要实现其中一种即可。

当所有objections都被dropped,当前运行的phase就结束了。在仿真过程中,可能需要一些额外的cycle来向scoreboard传输最后一笔transaction。

为了适配这种情况,可以使用phase_ready_to_end()方法在必要时刻重新提出phase objection。

另外,也可以设置一个drain time,在组件所有objections都被dropped之后注入一个延迟。一般是在env或者test级设置drain time。




审核编辑:刘清

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

    关注

    14

    文章

    1017

    浏览量

    83721
  • UVM
    UVM
    +关注

    关注

    0

    文章

    182

    浏览量

    19167

原文标题:管理test case结束机制

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

收藏 人收藏

    评论

    相关推荐

    基于base test如何来构造测试用例

    在设计仿真用例时,有限制条件的激励相比漫无目的的仿真更加有效的找出RTL的bug。因此,同一份测试方案,不同的sequence往往代表着不同的test_case。真正的测试用例都是基于base_test派生的一个类。
    的头像 发表于 09-19 09:16 2364次阅读

    条件(Case)结构的运用细节

    )输入10~99,显示0010~0099; 3)输入100~999,显示0100~0999; 4)输入1000~9999,显示1000~9999。我的作业完成状态如上图。问题点:不会结束Case循环。求助:怎么结束
    发表于 05-13 00:14

    Linux Shell系列教程之(十三)Shell分支语句case … esac教程

    stopped!  $./test.sh begin  I am started!  $/test.sh hello  Other command!  接下来给大家演示一个通过case…esac语句
    发表于 09-07 16:31

    如何解决vhdl代码中的case语句问题?

    如果clk'event和clk ='1'那么情况1读块ram data1在case2和stop中启用第一个条件结束案例1案例2在特殊操作中使用data1在case2中启用第一个条件来读取data2
    发表于 06-26 11:47

    工作流管理系统柔性机制

    随着工作流管理系统在各个领域的应用,系统的柔性机制引起人们的极大关注。该文介绍柔性化工作流管理系统的基本概念及架构,描述从多个方面对工作流管理
    发表于 04-06 08:51 8次下载

    linux内存管理机制浅析

    本内容介绍了arm linux内存管理机制,详细说明了linux内核内存管理,linux虚拟内存管理,arm linux内存管理等方面的知识
    发表于 12-19 14:09 73次下载
    linux内存<b class='flag-5'>管理机制</b>浅析

    最全SPARK内存管理机制

    最全SPARK内存管理机制
    发表于 09-08 14:17 5次下载
    最全SPARK内存<b class='flag-5'>管理机制</b>

    浅析物理内存与虚拟内存的关系及其管理机制

    本文主要介绍内存管理机制:物理内存与虚拟内存的关系,Linux内存管理机制,Python内存管理机制,Nginx内存管理机制,环形缓冲区
    的头像 发表于 04-12 09:55 5434次阅读
    浅析物理内存与虚拟内存的关系及其<b class='flag-5'>管理机制</b>

    如何优雅地结束UVM Test

    分享一下在UVM验证环境中,结束仿真的几种方式,不同结束仿真的方式适合不同的应用场景。
    的头像 发表于 12-17 11:23 2610次阅读
    如何优雅地<b class='flag-5'>结束</b>UVM <b class='flag-5'>Test</b>

    JavaScript定时器与执行机制介绍

    浏览器(或者说JS引擎)执行JS的机制是基于事件循环。 由于JS是单线程,所以同一时间只能执行一个任务,其他任务就得排队,后续任务必须等到前一个任务结束才能开始执行。 为了避免因为某些长时间任务造成的无意义等待,JS引入了异步的概念,用另一个线程来
    的头像 发表于 04-21 14:31 999次阅读

    聊一聊所谓的Objection机制

    Objection是UVM框架中用来同步不同组件的相同phase,以及决定当前测试用例什么时候结束(end-of-test)的机制,这也是用户在拿到UVM之后最直白的使用场景。
    的头像 发表于 06-09 11:16 2056次阅读
    聊一聊所谓的Objection<b class='flag-5'>机制</b>

    CASE:创建多路分支

    CASE:创建多路分支 说明 使用“创建多路分支”指令,可以根据表达式的值执行多个指令序列中的一个。 表达式的值必须为整数或位字符串。执行 CASE 指令时,会将表达式(变量)的值与多个常数的值进行
    的头像 发表于 06-27 11:46 855次阅读
    <b class='flag-5'>CASE</b>:创建多路分支

    Switch case中的case顺序

    Switch case中的case顺序 Switch 可能转化成多种不同算法的代码。其中最常见的是跳转表和比较链/树。当switch用比较链的方式转化时,编译器会产生if-else-if的嵌套代码
    的头像 发表于 11-20 18:16 826次阅读

    java switch case的语法规则

    在Java中,switch case语句是一种用于多分支选择的控制流语句。它允许根据某个表达式的值来执行不同的代码块。下面是关于switch case语法规则的详细解释。 基本语法 switch语句
    的头像 发表于 11-30 14:40 2279次阅读

    oracle case when 语法介绍

    Oracle的CASE WHEN语法是一种在数据库查询中使用的条件语句,它提供了一种在SELECT语句中根据条件对结果进行转换或筛选的方法。在本文中,我们将详细介绍Oracle的CASE WHEN
    的头像 发表于 12-06 10:21 1794次阅读