层次化UVM验证环境中配置
时间:2021-11-05 13:44:31
手机看文章
扫描二维码
随时随地手机看文章
[导读]配置对象可以通过使用uvm_config_db::set方法中的路径参数来分别控制,更常见的做法是层次化配置对象和配置过程。这样中间验证组件也可以进行一些配置,即在中间组件中对上层的配置对象进行解析,然后再打包相应的配置对象给下层组件。 下面是一个SPIblocklevel验证环...
配置对象可以通过使用uvm_config_db::set方法中的路径参数来分别控制,更常见的做法是层次化配置对象和配置过程。
这样中间验证组件也可以进行一些配置,即在中间组件中对上层的配置对象进行解析,然后再打包相应的配置对象给下层组件。 下面是一个SPI block level验证环境的一个层次化配置案例,其中每一个agent都有一个单独的配置对象。
envs配置对象中针对每一个agent都有一个配置对象的句柄。在test case中构建和配置env配置对象,然后将实际的agent配置对象赋值给env配置对象内的句柄。
在上述的配置中,spi_env的配置对象包含针对SPI agent和APB agent配置对象的句柄,这允许使用env配置对象将所有agent配置对象传递下去。这种“俄罗斯套娃”式的配置方式非常适合扩展到多个层次,但是如果不考虑验证环境的多层次复用就无需这样做了
这样中间验证组件也可以进行一些配置,即在中间组件中对上层的配置对象进行解析,然后再打包相应的配置对象给下层组件。 下面是一个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配置对象传递下去。这种“俄罗斯套娃”式的配置方式非常适合扩展到多个层次,但是如果不考虑验证环境的多层次复用就无需这样做了





