【学习记录丨UVM】2.2UVM的树形结构
UVM树形结构在1.x文章-验证平台组件-的介绍中,已经提过了,本文大概看一下就ok了。
1.uvm_component中的parent参数
之前文章介绍过:【学习记录丨UVM】1.4环境env-CSDN博客
2.UVM树的根
在前边文章,搭建基础UVM验证平台的最后一节【学习记录丨UVM】1.11建造测试用例-CSDN博客,我们能够看到 此时的UVM树结构为:
但是,在这里我们将会进一步了解 UVM树 真正的根! 那就是———uvm_top!
完整的UVM树如下所示:
问:uvm_top是什么呢?
答:uvm_top是一个全局变量,是uvm_root的唯一一个实例。可以通过如下方式得到它的指针:
uvm_root top;
top = uvm_root::get();//因为是全局变量,所以在验证平台中可以这样得到
问:那uvm_root是什么呢?
答:uvm_root是UVM树真正的根,派生自uvm_component。
可以回顾:【学习记录丨UVM】2.1uvm_component 与uvm_object-CSDN博客
好!那咱们就要记住咯:uvm_top才是树根,是uvm_test_top的parent。yeah yeah yeah it is Number1~ yeah it's right~
那么问题来了,
问:为什么 UVM不直接以uvm_test_top为树根呢?
答:前边举例中,如:
env = my_env::type_id::create("env",this);
都是通过实例化时将this指针传递给parent参数。但是如果把“this”换成“null” 会怎样?结果就是这个component的parent将会是系统中唯一的uvm_root的实例uvm_top ,如下图所示:
可见,uvm_root的存在可以保证UVM验证平台中只有一颗树,所有的节点都是uvm_top的子节点。
3.层次结构parent/child相关的函数
这里将介绍一些 用来访问UVM树节点的函数。
get_parent():用来得到当前实例的parent
m_comp.get_parent();
get_child(string name):用来得到当前组件的 实例名为name的 child;因为一个组件的child可能不唯一,所以需要加上child的实例名
m_comp.get_child(i_agt);
get_children():一次得到当前组件的所有child
uvm_component array[$];
comp.get_children(array);//括号里需要是个队列
foreach(array[i])
do_something(array[i]);
get_first_child和get_next_child组合:依次得到当前组件的所有child,用法如下:
string name;
uvm_component child;
if(comp.get_first_child(name))
do begin
child = comp.get_child(name);
child.print();
end while(comp.get_next_child(name));
注意:这里我们不用给name赋任何值。
get_num_children():用来获得当前comp的child数量
uvm源码:
extern function int get_num_children();
ok!祝大家明天也愉快自洽的一天!!
原文地址:https://blog.csdn.net/yanwenyu123/article/details/143691637
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!