如何浅析UVM概念中的提出/放弃异议,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
UVM中,组件的任务阶段是消耗仿真时间的,各个成分需要在不同层次的任务阶段中同步信息。
UVM中通过异议机制来控制phase的执行,通过提出或放弃异议来决定阶段中事件的开始和停止。
当程序根据阶段执行顺序,进入到某一个阶段中时,它会收集此阶段提起的所有的反对(每个成分都可以raise 反对)
当这个阶段中所有的反对都被撤销(drop)之后,那么这个阶段就执行结束。
成分或顺序将在验证行为的开始提出阶段异议,在验证行为完成后放弃阶段异议。一旦阶段里所有的反对都被掉了,该阶段就结束了。
考虑一个例子,探员完成读写操作。通常可以在顺序或者试验中添加提出/放弃反对意见。
Objection insequence
classwr _ rd _ seqextendsuvm _ sequence #(mem _ seq _ item);
taskpre _ body();
//raiseobjectionifstartedasarootsequence
if(starting_phase!=null)
starting_phase.raise_objection(此);endtasktokbody();
` uvm_do_with(req,wr _ en==1);
` uvm_do_with(req,rd _ en==1);
endtasksopst _ body();
//dropoobjectionifstartedasarootsequence
if(starting_phase!=null)
starting _ phase.drop _ objection(此);
endtaskendclass
在uvm _序列中有一个starting_phase成员,它是uvm _相位类型。如果我们通过设置运行阶段的default sequence来启动一个序列,那么会默认将运行阶段的阶段传递给这个顺序的开始阶段。
Objection in test
如果需要在试验中显式启动序列,即在试验中添加反对。
class wr _ rd _ testextendsuvm _ test;
任务main _ phase(uvm _ phase阶段);
阶段。提出异议();
//rasingbejectionwr _ rd _ seq。start(mem _ agent。定序器);
阶段。drop _ objection();
//dropingbemonedtaskend类
在试验中显式启动顺序时开始阶段的值是零。
关于如何浅析UVM概念中的提出/放弃异议问题的解答就分享到这里了,希望
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/151918.html