目录
一、概述
在验证环境的创建过程build_phase中,除了组件的实例化,配置也是必不可少的。
为了验证环境的复用性,通过外部的参数配置,使得环境在创建时可以根据不同参数来选择创建的组件类型、组件实例数目、组件之间的连接以及组件的运行模式等。)即在创建组件之前,先做好配置)
在更细致的环境调节中有更多的变量需要配置,例如for-loop的阈值、字符串名称、随机变量的生成比重等。
比起重新编译来调节变量,如果在仿真中可以通过变量设置来修改环境,那么就更灵活了,而UVM的config机制正提供了这样的便利。
UVM提供了uvm_config_db配置类以及几种方便的变量设置方法来实现仿真时的环境控制,常见的uvm_config_db类的使用方式包括:
- 传递virtual interface到环境中 )SV中通过set interface传递)
- 设置单一变量值,例如int、string、enum等
- 传递配置对象(config object)到环境
传递形式:
uvm_config_db #(T)::set(uvm_component cntxt, string inst_name, string field_name, T value);
uvm_config_db #(T)::get(cntxt, string inst_name, string field_name, in out T value);
//#(T) 参数类 ,第7章 T是参数类型,可能是上面三种类型的任意一种
// set 从顶层环境中做set
// get 从底层环境中做get
//(uvm_component cntxt 实例, string inst_name 实例名称, string field_name 实例的某一变量, T value 值);
//in out T value : get 时要拿出值,所以用in out
二、interface传递
interface传递可以很好地解决了连接硬件世界和软件世界。而在之前SV验证模块中,虽然SV可以通过层次化的interface的索引)set interface)来完成了传递,但是这样不利于软件环境的封装和复用。UVM的uvm_comfig_db使得接口的传递和获取彻底分离开来。