|
发表于 2018-8-17 13:15:33
|
显示全部楼层
可以在任何地方使用config_db,只要你保证set在get之前。uvm是有一个叫resource_pool(资源池)的结构,你写的所有config_db::set都会存到这个结构里面,get实际就是在这个结构里面找想要的东西。
查找的依据就是前三个参数,前两个参数会构成一个叫做scope的属性,第三个参数是name属性,scope和name这两个属性就是用来表示这个资源的,只要这两个属性能对上号,就能从资源池中get到。
另外,前两个参数实际也没有UVM_tree的要求,scope这个属性其实也是string类型。
config_db#(int)::set(component_handle,"string","name",4);
上面资源池送了一个int类型值为4的资源,它的scope其实是:
scope={"component_handle.get_full_name()"."string"};
所以其实第二个参数并没有要求要按照UVM_tree来填。
另外第一个子所以要求是uvm_component句柄类型,这是因为资源的优先级是根据这个来定的,第一个参数所处层次越高,其优先级越高。
书上要求按层次其实是coding style,因为按层次的话,get的时候第一个参数填this,那么第二各参数就不用填了,很方便。 |
|