文章目录
概念
uvm提供了uvm_config_db配置类以及几种方便的变量设置方法来实现仿真时的环境控制;uvm_config_db::set() 通过层次和变量名,将这些配置信息存放在uvm_package唯一的全局变量uvm_package::uvm_resource中。全局变量uvm_resource用来存储和释放配置资源信息。uvm_resource是uvm_resource_pool类的全局唯一实例,该实例有两个resource数组来存放配置信息。一个是由层次作为索引,一个是由类型索引。
常见的使用方式:
- 传递virtual interface到环境中
- 设置单一变量值
- 传递配置对象到环境
uvm_config_db#(T)::set(uvm_component cntxt,string inst_name,string field_name,T value);
uvm_config_db#(T)::get(uvm_component cntxt,string inst_name,string field_name,inout T value);
- T是传递信息的类型
- cntxt 当前组件,cntxt + inst_name 为要寄信的层次路径;
- inst_name 路径索引,set中表示哪个value通过config_db传递;
- field_name 变量名set和get的第三个参数必须一致;
一、config_db的使用
1.传递interface
- 接口的传递(set)应该发生在run_test()之前。这保证了在进入build_phase之前virtual interface已经被传递到uvm_config_db中;
- 应当把 interface 和 virtual interface 的声明区分开,在传递的过程中的类型应该为virtual interface(接口句柄)
interface intf1;
...
endinterface
class comp1 extends uvm_component;//底层组件拿到config
`uvm_component_utils(comp1);
virtual intf1 vif;//注意必须virtual
...
function void build_phase(uvm_phase phase);
//这里的this的绝对路径是root.test.c1.vif
//第二个参数为“ ”,表示要找的就是comp1 里面的vif