creat a uvm_sched—自定义domain的run_time_phase

前面讲了用户自定义uvm_phase:https://www.jianshu.com/p/90161143bb62
以及多个domain的同步和设置:https://www.jianshu.com/p/0435c400a7c8

那么我现在有这样一个需求:如何实现domain的12个run-time_phase自定义?

如果只是例化一个new_domain并且set_domain(new_domain)的话,只是添加了12个run-time_phase.这个是怎么实现的呢?这就不得不涉及到源码的set_domain的实现。

伪代码

如果在设置uvm_domain的时候并没有实例化name="uvm_sched"的uvm_phase的话,这里就会调用uvm_domain::add_uvm_phase(),也就是标椎的12个run-time_phase。并且会将common_domain的run_phase与12个run-time_phase并行起来。

由此联想到,如果我们将new_domain里面定义一个uvm_sched的uvm_phase(自己定义,而不是12-run_time_phase),那么就走不到if(schedule == null)的分支里面了。

  • C放在了common_domain里面,在pre_reset_phase和reset_phase中间插入了training_phase。
  • A是new_domain,并且手动添加了12-run_time_phase
    • 第一步:例化new_domain和uvm_sched
    • 第二步:add phase并将它add到new_domain上
    • 第三步:将new_domain的sched与common_domain的run_phase并行起来
    • 第四步:set_domain(new_domian)

自定义uvm_sched的run-time_phase

接上一个例子,修改A.sv的代码.

  • 在上述的第三步可以修改成你想要的顺序,当然你也可以用add的.with_phase/.before_phase/.after_phase来指定相对的顺序,可以参考https://www.jianshu.com/p/90161143bb62

推荐这些技术文章:

uvm_common_phase.svh

run_phase extends uvm_task_phase
除了uvm_build_phase和uvm_final_phase的执行顺序是自上而下的(uvm_topdown_phase),剩下的所有不耗费时间的phase都是自下而上的(uvm_bottomup_phase)。
get_name()的返回值是除掉uvm__phase的name.
exec_func(uvm...

uvm_runtime_phase.svh

问题:为什么get_name()返回的是出掉uvm_和_phase的name呢?
答:因为在new的时候的string name就是这样规范的。

扩展自uvm_task_phase

小结:

12个并行的run-time phase都扩展自uvm_task_phase
exec_task(uvm_component,uvm_phase),里面调用了uvm_comp...

user-defined phase 自定义uvm_phase

其实大体看懂了源码的框架的话,这里也就是照猫画虎,phase源码参考:https://www.cnblogs.com/xuqing125/p/15826609.html
https://www.edrawmax.cn/online/share.html?code=83c3b8b8799e11ec8a7585ec8adb0e95
先来回顾一下phase是怎么从上面被调用起来的:

uvm_doma...

UVM跨domain同步

如果不额外添加domain的话,UVM默认就只有common_domain,phase的结构如下:

Q:如果我想对两个domain不同的phase之间有同步的需求要怎么实现呢?比如说我们需要common_domain的reset_phase和new_domain的configure_phase进行同步。比如说两个domain的reset_phase同步。
sync函数便可以解决这个...

1-objection的作用与特点,objection与phase/set_drain_time的联系,objection的控制与调试

参考资料:
(1) UVM——phase objection · 大专栏 (dazhuanlan.com)
(2) 《UVM1.1应用指南及源代码分析》
1. objection的作用及特点
(1) 在验证平台中,通过drop_objection来通知系统可以关闭验证平台,简言之,控制仿真的终止.
(2) 在进入某一phase时, UVM会收集此phase...

从源码角度来看UVM phase

说到UVM phase我们就知道是UVM一个很重要的特性,从用户角度来讲,其实就是一些很简单的应用规则,能够极大地提升编码的效率,简化代码复杂度,提高debug的效率。至于应用可以参看zhangqiang大佬的第五章,这里就不再赘述。
本文就从源码的角度来看,UVM的phase是怎么工作的?
之前学习UVM总是从用户的角度来学习怎么使用,很多东西都只是知道,但是并不明白其中的内涵,读了源码才能...

日常记录(63)UVM事件、序列、寄存器

uvm_callback
可以控制组件产生的回调函数
代码:
建立了数据edata类,cb1的回调类,cb2继承于cb1的回调类,comp1注册cb1回调类,然后进行回调执行。
注意在env中,对comp1中添加了cb1和cb2的回调属性。回调进行的时候,是先父后子了。

点击查看代码
module uvm_callback_sync;
import uvm_pkg::*;
`i...

uvm_task_phase.svh

构造函数new

uvm_phase的类型是UVM_PHASE_IMP

其实跟uvm_bottomup_phase.svh长的差不多。

fork......join_none从上到下的并行进程的挂起。

...

日常记录(40)UVM框架构建要点

顶层连接与通信
顶层,是top_tb.sv,包括了interface、dut、和testbatch,驱动时钟、复位。
并包含uvm的宏文件svh、导入uvm的包。以及包含其它各个模块的文件。
引入uvm

`include "uvm_macros.svh"
import uvm_pkg::*;

interface

my_if input_if(clk, rst_n);
my_if outpu...

日常记录(35)UVM的phase

公说公有理,婆说婆有理。我就直接用。
 
用build phase创建实例,用connect phase建立通信,然后经过两个phase后,进入仿真时间域中。run phase与另外的12个phase 并行。12个phase主要是reset、config、main、shutdown。
处理完以后,退出仿真时间域,过另外4个phase的处理后结束。
 
注意一些内部机制即可,比...

文章标题:creat a uvm_sched—自定义domain的run_time_phase
文章链接:https://www.dianjilingqu.com/51321.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>