文章目录
UVM configuration机制
什么是uvm configuration机制
- 是一个强大的属性配置工具
1 可以传递值;
2 可以传递对象;
3 可以传递interface(virtual); - 特点
1 作为半个全局变量,避免全局变量带来的风险;
2 高层组件可以通过该机制实现在不改变代码的机制下更改它所含子组件的变量;
3 各个层次都可使用;
4 支持通配符和正则表达式;
5 支持用户自定义的数据类型;
6 可以在仿真运行的过程中进行配置;
基本原理
- 它的实现由两部分构成
1 添加配置资源;
2 获取配置资源;
如何使用configuration机制
添加配置资源函数
uvm_configure_db#(type)::set(
uvm_component cntxt,//配置资源的源组件
string instance_name,//配置资源的目标对象所属组件,可以使用通配符和正则表达式
string field_name,//配置资源的ID
T value//资源值,
);
获取配置资源函数
uvm_configure_db#(type)::set(
uvm_component cntxt,//配置资源的源组件
string instance_name,//配置资源的目标对象所属组件,可以使用通配符和正则表达式
string field_name,//配置资源的ID
T value//目标变量或对象
);
configuration机制的使用就是set函数和get函数的过程
- 配置sequence产生transaction的数量
- 配置interface
- 配置用户自定义的config
如何对单个变量使用configure机制
- 定义控制变量或者控制对象;
- 在使用这些控制变量之前,使用uvm_config_db#(type)::get来从高层获取配置
- 在使用这些控制变量或对象来配置平台或控制行为;
- 在高层使用uvm_config_db#(type)::set来配置这些控制变量或对象
如何对interface使用configure机制
- 首先根据DUT构建interface;
- 为driver添加virtual interface和驱动DUT
将事务信息分解为pin级信号驱动给DUT
- 实例化DUT
新建top.sv文件,将其他平台组件include,建立顶层module,进行各种连接,将实例化interface配置给virtua interface
如何对多个信号的打包使用configure机制
对同一组件的所有配置打包成一个配置对象
- 配置流程图
- 创建agent_config类
- 创建env_config类
- 向my_test添加env_config,并将该配置对象配置给env
- 在env当中添加配置项,从testcase获取配置,再使用该配置项配置agent
- 在agent中添加配置项,从env获取配置,并使用该配置项配置driver
- driver从上层获取配置信息
- 在顶层配置virtual interface
过程总览
- 在top层实例化interface,并将该interface传递给testcase;
- testcase获取,config get 将其放入m_env_cfg中,配置完毕后config set将其传递给env_cfg;
- env会使用config get获取从testcase传递过来的m_env_config,使用完毕之后,使用config set传递给m_agent_cfg;
- agent使用config get获取,使用完毕之后config set传给driver;
- 平台最底层driver使用config get获取这些配置,并使用配置