UVM树的根

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树的根

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树的根

可见,uvm_root的存在可以保证整个验证平台中只有一棵树,所有结点都是uvm_top的子结点。

在验证平台中,有时候需要得到uvm_top,由于uvm_top是一个全局变量,可以直接使用uvm_top。除此之外,还可以使用如下的方式得到它的指针:

uvm_root top;
top=uvm_root::get();

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!