BT环境在复用若干个UT环境组件的基础上搭建而成。可在BT env中例化若干个UT的env为sub_env,作为一种BT复用UT的方法。
一、在env和tc之间常通过uvm_config_db机制传递cfg
因为往往在具体到每条用例的时候,cfg中的参数值才能具体确定,所以需要在tc中实例化一个cfg,并将其set给env,在env中get获取。这时env便可以根据特定tc的不同需求完成自身的config.
二、
三、在sub_env的in_agent里,有时driver等组件是不必要的,可在in_agent_cfg中定义uvm_active_passive_enum类型的参数,然后在in_agent中使用,用于控制其是否需要(create)driver等组件,假设参数名为me_is_active,在me_is_active==UVM_PASSIVE类型时便不create 。in_agent中build_phase中的伪代码即:
if(in_agent_cfg.me_is_active!=UVM_PASSIVE){
in_agent_driver= type_id_create(...);}
这里in_agent可以通过uvm_config_db::get获取in_agent_cfg,在sub_env中set;sub_env中的in_agent_cfg来自可bt_env,而bt_env中的bt_env_cfg在tc中做uvm_config_db::set。
四、在需要例化多个同类型的agent时,可使用agent数组.如:
in_agent in_agent_inst[num-1:0];
foreach(in_agent_inst[]){
in_agent_inst[i]=type_id_create(...);
}
五、可定义覆盖率模型组件为UVM_COMPONENT类型,放在env中。组件内由covergroup、coverpoint等coverage组件构成。在需要收集覆盖率模型覆盖率的tc中,直接调用覆盖率模型组件的sample函数:env.cov_model.coverpoint1.sample();