`ifndef REG_MODEL__SV
`define REG_MODEL__SV
class reg_invert extends uvm_reg;
rand uvm_reg_field reg_data;
virtual function void build();
reg_data = uvm_reg_field::type_id::create("reg_data");
// parameter: parent, size, lsb_pos, access, volatile, reset value, has_reset, is_rand,
// individually accessible
reg_data.configure(this, 1, 0, "RW", 1, 0, 1, 1, 0);
// 此域的父辈,此域的宽度,此域的最低位,此字段的存取方式,是否是易失的,此域上电复位后的默认值,
// 此域是否有复位,这个域是否可以随机化, 这个域是否可以单独存取
endfunction
`uvm_object_utils(reg_invert)
function new(input string name="reg_invert");
//parameter: name, size, has_coverage
super.new(name, 16, UVM_NO_COVERAGE);
//size:此寄存器总共的bit数
endfunction
endclass
class reg_model extends uvm_reg_block;
rand reg_invert invert;
virtual function void build();
default_map = create_map("default_map", 0, 2, UVM_BIG_ENDIAN, 0);
//名字,基地址,系统总线的宽度byte,大小端,是否能按照byte寻址
invert = reg_invert::type_id::create("invert", , get_full_name());
invert.configure(this, null, "");
//configure的主要功能就是指定寄存器后门访问的路径
//此寄存器所在block的指针,reg_file的指针,此寄存器后门访问的路径
invert.build();
default_map.add_reg(invert, 'h9, "RW");
//要加入的寄存器,寄存器的地址,寄存器的存取方式
endfunction
`uvm_object_utils(reg_model)
function new(input string name="reg_model");
super.new(name, UVM_NO_COVERAGE);
endfunction
endclass
`endif