UVM树的根
UVM是以树的形式组织在一起的,作为一棵树来说,其树根在哪里?其树叶又是哪些呢?似乎树根应该就是uvm_test,在测试用例里实例化env,在env里实例化scoreboard、reference model、agent、在agent里面实例化sequencer、driver和monitor。scoreboard、reference model、sequencer、driver和monitor都是树的叶子,树到此为止,没有更多的叶子了。
关于叶子的判断是正确的,但是关于树根的推断是错误的。UVM中真正的树根是一个称为uvm_top的东西,完整的UVM树如图所示。
uvm_top
是一个全局变量,它是uvm_root的一个实例(而且也是唯一的一个实例,它的实现方式非常巧妙),而uvm_root派生自uvm_component,所以uvm_top本质上是一个uvm_component,它是树的根。uvm_test_top的parent是uvm_top,而uvm_top的parent则是null。UVM为什么不以uvm_test派生出来的测试用例(即uvm_test_top)作为树根,而是搞了这么一个奇怪的东西作为树根呢?
在之前的例子中,所有的component在实例化时将this指针传递给parent参数,如my_env在base_test中的实例化:
env = my_env::type_id::create("env", this);
但是,假如不按照上面的写法,向parent参数传递一个null会如何呢?
env = my_env::type_id::create("env", null);
如果一个component在实例化时,其parent被设置为null,那么这个component的parent将会被系统设置为系统中唯一的uvm_root的实例uvm_top,如图所示。
可见,uvm_root的存在可以保证整个验证平台中只有一棵树,所有结点都是uvm_top的子结点。
在验证平台中,有时候需要得到uvm_top,由于uvm_top是一个全局变量,可以直接使用uvm_top。除此之外,还可以使用如下的方式得到它的指针:
uvm_root top;
top=uvm_root::get();
酷客网相关文章:
评论前必须登录!
注册