uvm基础(3)config机制-重点

virtual interface的传递

主要注意一下几点:
1.接口传递应该放在run_ test之前。保证在build_phase之前,vif已经传到了uvm_config_tb中。
2.用户应该把virtual interface 与interface区分开。传递的类型应该vif。
例如:在顶层set:uvm_config_tb #(virtual intf)::set(uvm_root::get(),“uvm_test_top.c1‘’,“vif”,intf);
在C1中get:uvm_config_tb #(virtual intf)::get(this,”",“vif”,vif);
set的第一个和第二个参数联合起来组成目标路径。第一个参数必须是component实例的指针。第二个参数是相对此实例的路径。第三个参数表示一个记号。第四个参数代表要传递的值。
get的第一个和第二个参数代表的意义与set相同。第三个参数要与set的第三个严格匹配。第四个是要设置的变量。
在top_tb中,一般set第一个参数设置为null 。

变量设置

用法与virtual interface基本相同。

config object传递

如果配置的参数过多,而且属于不同的组件,我们可以整合每个组件中的变量到一个uvm_object中。再对中心化的配置对象传递,这样更有利环境的维护和复用。

通配符的使用

  • 使用config_tb进行传递时,我们还可以使用通配符来表示任意层次。注意区分*.comp与*comp的区别:前者代表当前层次下的所有名称为comp的组件,而后者表示当前层次及当前层次以下的所有名为comp的组件。

跨层次的设置

uvm规定层次越高,优先级越高,例如:test_top的优先级是高于env的。当他们同时向driver set 同一个参数时,以test_top为最终结果。

你可能感兴趣的:(uvm)