Dinglei_hello · 2021年10月13日

层次化UVM验证环境中配置

配置对象可以通过使用uvm_config_db::set方法中的路径参数来分别控制,更常见的做法是层次化配置对象和配置过程

这样中间验证组件也可以进行一些配置,即在中间组件中对上层的配置对象进行解析,然后再打包相应的配置对象给下层组件。

下面是一个SPI block level验证环境的一个层次化配置案例,其中每一个agent都有一个单独的配置对象。

image.png

envs配置对象中针对每一个agent都有一个配置对象的句柄。在test case中构建和配置env配置对象,然后将实际的agent配置对象赋值给env配置对象内的句柄。

class spi_env_config extends uvm_object;
`uvm_object_utils(spi_env_config)
bit has_functional_coverage = 1;
bit has_reg_scoreboard = 0;
bit has_spi_scoreboard = 1;
// Configurations for the sub_components 
apb_config m_apb_agent_cfg;
spi_agent_config m_spi_agent_cfg;
extern function new(string name = "spi_env_config");
endclass: spi_env_config

function spi_env_config::new(string name = "spi_env_config");
super.new(name);
endfunction

function void spi_test_base::build_phase( uvm_phase phase );
m_env_cfg = spi_env_config::type_id::create("m_env_cfg");
m_apb_cfg = apb_agent_config::type_id::create("m_apb_cfg");
m_env_cfg.m_apb_agent_cfg = m_apb_cfg;
m_spi_cfg = spi_agent_config::type_id::create("m_spi_cfg");
m_env_cfg.m_spi_agent_cfg = m_spi_cfg;
endfunction: build_phase

整个配置过程对于所有测试用例都是一样的,所以通常会先创建一个base test,然后基于此基类扩展出其他的测试用例。

在上述的配置中,spi_env的配置对象包含针对SPI agent和APB agent配置对象的句柄,这允许使用env配置对象将所有agent配置对象传递下去。这种“俄罗斯套娃”式的配置方式非常适合扩展到多个层次,但是如果不考虑验证环境的多层次复用就无需这样做了

作者:验证哥布林
原文链接:https://mp.weixin.qq.com/s/WyMmQJX4wN8WnokacEk0kA
微信公众号:
芯片验证工程师.jpg

推荐阅读

更多IC设计技术干货请关注IC设计技术专栏
推荐阅读
关注数
20192
内容数
1307
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息