1、reg blk编写
class cam extends uvm_reg;
`uvm_object_utils(cam)
virtual function void build();
endfunction
function new(input string name = "cam");
super.new(name,8, UVM_NO_COVERAGE);
endfunction
endclass
//----------------blk-----------------
class uart_reg_blk extends uvm_reg_block;
`uvm_object_utils(uart_reg_blk)
rand cam cam_reg;
//rand by_regfile file;
virtual function void build();
`uvm_info(get_name(),"build function is called",UVM_LOW);
default_map = create_map("default_map",0,1,UVM_BIG_ENDIAN,0);//每个寄存器占1字节
//file = by_regfile::type_id::create("file", ,get_full_name());
//file.configure(this,null,"reg11");
cam_reg = cam::type_id::create("cam_reg", ,get_full_name());
cam_reg.configure(this,null,"reg13");
cam_reg.build();
default_map.add_reg(cam_reg,8'd13,"RW");
endfunct
2、加入reg model
class reg_model extends uvm_reg_block;
`uvm_object_utils(reg_model)
rand uart_reg_blk uart_blk;
virtual function void build();
`uvm_info(get_name(),"build function is called",UVM_LOW)
default_map = create_map("default_map",0,1,UVM_BIG_ENDIAN,0);
uart_blk = uart_reg_blk::type_id::create("uart_blk");
uart_blk.configure(this, "top_e.regs");
uart_blk.build();
uart_blk.lock_model();
default_map.add_submap(uart_blk.default_map, 8'h00);
endfunction
endclass
3、adapter (前门)
4、base test
reg_model rg_m;
uart_adapter reg_sqr_adapter;
build phase
rg_m = reg_model::type_id::create("rg_m", this);
rg_m.configure(null, "");
rg_m.build();
rg_m.lock_model();
rg_m.set_hdl_path_root("tb_top.dut_wrapper_e");
env.p_rm = this.rg_m;//指针赋值
sys_cfg = sys_config::type_id::create("sys_cfg");
reg_sqr_adapter = new("reg_sqr_adapter");
connect phase
env.uart_master_env.i_agt.sqr.p_rm = this.rg_m;
rg_m.default_map.set_sequencer(env.uart_master_env.i_agt.sqr, reg_sqr_adapter);
rg_m.default_map.set_auto_predict(1);
5、env
声明:reg_model p_rm;
build phase里指针赋值
rm.p_rm = this.p_rm;
6、参考模型
声明:reg_model p_rm;
7、sqr
声明:reg_model p_rm;
1689

被折叠的 条评论
为什么被折叠?



