uvm_config_db 在UVM时经常被用到的,但最近在调试同事环境的时候,有一点跟我之前的认知是不一样,所以在这记录一下。
场景如下:
class env extends uvm_env;
...
function void build_phase(uvm_phase phase);
super.build_phase(phase);
agt = agent::type_id::create("agt",this);
uvm_config_db#(sequencer)::set(this,"agt","sqr",agt.seqr);
endfunction
...
endclass
class vseq extends uvm_sequence;
...
task body();
uvm_config_db#(sequencer)::get(null,"uvm_test_top.env.agt","sqr",seqr);
endtask
endclass
就是说,在seqr没有create之前把seqr的handle set 给agent,原本认为等vseq 启动后,seqr已经create,所以seq 可以获取到seqr的handle,但结果是seq中的seqr是null。
可以理解为:利用uvm_config_db set时的handle,和seqr create后的handle不是同一个。
tips:
如果利用uvm_config_db传的是handle,则要保证在set时handle有指向具体空间。