層次化UVM驗證環(huán)境中配置
時間:2021-11-05 13:44:31
手機看文章
掃描二維碼
隨時隨地手機看文章
[導讀]配置對象可以通過使用uvm_config_db::set方法中的路徑參數來分別控制,更常見的做法是層次化配置對象和配置過程。這樣中間驗證組件也可以進行一些配置,即在中間組件中對上層的配置對象進行解析,然后再打包相應的配置對象給下層組件。?下面是一個SPIblocklevel驗證環(huán)...
配置對象可以通過使用uvm_config_db::set方法中的路徑參數來分別控制,更常見的做法是層次化配置對象和配置過程。
這樣中間驗證組件也可以進行一些配置,即在中間組件中對上層的配置對象進行解析,然后再打包相應的配置對象給下層組件。?下面是一個SPI block level驗證環(huán)境的一個層次化配置案例,其中每一個agent都有一個單獨的配置對象。?
envs配置對象中針對每一個agent都有一個配置對象的句柄。在test case中構建和配置env配置對象,然后將實際的agent配置對象賦值給env配置對象內的句柄。
在上述的配置中,spi_env的配置對象包含針對SPI?agent和APB?agent配置對象的句柄,這允許使用env配置對象將所有agent配置對象傳遞下去。這種“俄羅斯套娃”式的配置方式非常適合擴展到多個層次,但是如果不考慮驗證環(huán)境的多層次復用就無需這樣做了
這樣中間驗證組件也可以進行一些配置,即在中間組件中對上層的配置對象進行解析,然后再打包相應的配置對象給下層組件。?下面是一個SPI block level驗證環(huán)境的一個層次化配置案例,其中每一個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
整個配置過程對于所有測試用例都是一樣的,所以通常會先創(chuàng)建一個base test,然后基于此基類擴展出其他的測試用例。在上述的配置中,spi_env的配置對象包含針對SPI?agent和APB?agent配置對象的句柄,這允許使用env配置對象將所有agent配置對象傳遞下去。這種“俄羅斯套娃”式的配置方式非常適合擴展到多個層次,但是如果不考慮驗證環(huán)境的多層次復用就無需這樣做了