配置对象可以通过使用uvm_config_db::set方法中的路径参数来分别控制,更常见的做法是层次化配置对象和配置过程。
这样中间验证组件也可以进行一些配置,即在中间组件中对上层的配置对象进行解析,然后再打包相应的配置对象给下层组件。
下面是一个SPI block level验证环境的一个层次化配置案例,其中每一个agent都有一个单独的配置对象。
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
微信公众号:
推荐阅读
更多IC设计技术干货请关注IC设计技术专栏