创建一个字段名字为hard_rest,字段存取方式为W1C,位宽为32bit的UVM寄存器模型的例子
时间: 2024-02-13 19:02:57 浏览: 168
这是一个名为hard_rest的32位UVM寄存器模型的例子,其中该字段使用了W1C存取方式:
```
class my_reg_model extends uvm_reg_block;
my_reg my_reg0;
function new(string name = "my_reg_model");
super.new(name, UVM_NO_COVERAGE);
my_reg0 = my_reg::type_id::create("my_reg0");
my_reg0.configure(this);
endfunction
typedef struct {
rand bit hard_rest; // 1 bit wide field, using W1C access
rand bit [31:0] reserved;// 31 bits wide reserved field
} my_reg_data_t;
class my_reg extends uvm_reg;
function new(string name = "my_reg");
super.new(name, 32, UVM_REG_R | UVM_REG_W | UVM_REG_HAS_RESET);
set_fields();
endfunction
function set_fields();
uvm_reg_field hard_rest_f = uvm_reg_field::type_id::create("hard_rest_f");
hard_rest_f.configure(this, 1, 0, "W1C");
hard_rest_f.set_access("RW");
hard_rest_f.set_reset(0);
default_map.add_reg_field(hard_rest_f, 0, 0);
uvm_reg_field reserved_f = uvm_reg_field::type_id::create("reserved_f");
reserved_f.configure(this, 31, 1, "RW");
reserved_f.set_access("RW");
reserved_f.set_reset(0);
default_map.add_reg_field(reserved_f, 31, 1);
endfunction
endclass
endclass
```
在这个例子中,我们创建了一个名为my_reg_model的UVM寄存器模型,并在其中定义了一个名为my_reg0的寄存器。我们使用了一个名为my_reg_data_t的结构体来定义寄存器中的字段,其中hard_rest字段使用了W1C存取方式,位宽为1,同时还定义了一个31位的保留字段reserved。然后,我们定义了一个名为my_reg的UVM寄存器类,并在其中设置了hard_rest和reserved字段,将hard_rest字段的存取方式设置为W1C,并将其加入到my_reg0寄存器的默认映射中。最后,我们将my_reg0寄存器添加到my_reg_model中,并在构造函数中调用set_fields函数来设置寄存器字段。
阅读全文