【DV】验证环境集成

模块级环境需要集成到系统级的环境中(主要复用checker(scoreboard & reference model)),需要做哪些改动呢?

  1.  dut 的hierarchy和激励来源发生变化,涉及到的改动如下:   
  • 通过uvm_config_db set interface的部分发生变化,需要修改hierarchy;
  • 激励由agnet变为上层module,故需要额外drive DUT 相关的interface(reference model 和scoreboard需要得到上层module的输出) 

基于以上改动,在block level ENV中推荐的做法:

  • 声明DUT相关的interface 采用harness(把interface 例化在DUT下面)的方式;

    

//======================================================================================
//top_harness.sv
//======================================================================================interface test_harness();aa_if  aa_vif(.clk  (irq_top.clk),.rst_n(irq_top.rst_n),.data (irq_top.data),.valid(irq_top.valid),.rdy  (irq_top.rdy));bb_if bb0_vif[2](.clk(irq_top.clk),.rst_n(irq_top.rst_n))//System Verilog does not allow you to loop over static constructs//SV does allow you to loop over virtual interfacesvirtual bb_if bb0_vif_tmp[2];initial beginbb0_vif_tmp = bb0_vif[0:1];endfunction void set_vifs(string path);uvm_config_db#(virtual aa_if)::set(null,{path,"aa_agent*"},"mst_vif",aa_vif);for(int ii=0;ii<2;ii++)uvm_config_db#(virtual aa_if)::set(null, {path,$sformatf("bb_agent[%0d]*",ii)},"mst_vif",bb0_vif_tmp[ii]);endfunctionendinterface//======================================================================================
//top.sv
//======================================================================================`include if_conn.svirq_top u_irq_top();bind irq_top test_harness harness();initial begintop.u_irq_top.harness.set_vifs("uvm_test_top.top_env");
end//harness的方式要求interface中不能使用modport !!!
  • 把dut instance 和set interface 分别放在两个不同的文件,比如(if_conn.sv和dut_inst.sv);
  • reference model 只用interface来拿资源;
  • if_conn.sv 中 provided agent  PASSIVE or ACTIVE control ;

    

//if_conn.sv
function set_active_mode(string path = "",uvm_active_passive_enum is_active=UVM_ACTIVE);uvm_config_db#(uvm_bitstream_t)::set(uvm_root::get(),{path,$sformatf(".aa_agent[%0d]*",0)},"is_active",is_active);
endfunction
  • interface先set 到test_base或env,再通过env set下去;
  • define的时候先undef 再define;   
`undef AGNET_NUM
`define AGENT_NUM (1)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部