创建一个字段名字为hard_rest,字段存取方式为W1C,位宽为32bit的寄存器模型的例子
时间: 2024-02-13 15:02:57 浏览: 29
这是一个名为hard_rest的32位寄存器模型的例子,其中该字段使用了W1C存取方式:
```
typedef struct {
uint32_t hard_rest : 1; // 1 bit wide field, using W1C access
uint32_t reserved : 31; // 31 bits wide reserved field
} register_t;
```
在这个例子中,hard_rest字段使用了W1C存取方式,表示写1清零,即当该位被写入1时,它将被清零。如果该位被设置为0或不被访问,则其值将保持不变。该字段的位宽为1,因此它只占据了寄存器的最低位。同时,该寄存器还包含了一个31位保留字段,这些字段未被使用,但可以用于将来扩展该寄存器的功能。
相关问题
创建一个字段名字为hard_rest,字段存取方式为W1C,位宽为32bit的UVM寄存器模型的例子
这是一个名为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函数来设置寄存器字段。
UVM regmodel怎么创建寄存器字段新的存取方式为"SC"的例子
以下是一个UVM regmodel创建寄存器字段新的存取方式为"SC"的例子:
```systemverilog
class my_reg_field extends uvm_reg_field;
// 定义新的寄存器字段类,继承自uvm_reg_field
function new(string name = "my_reg_field");
super.new(name, 32, UVM_LITTLE_ENDIAN);
endfunction
virtual function void read(output uvm_status_e status, input uvm_reg_data_t value,
input uvm_path_e path = UVM_DEFAULT_PATH, input uvm_reg_map map = null);
// 重载read()方法,实现新的读取方式
// ...
endfunction
virtual function void write(output uvm_status_e status, input uvm_reg_data_t value,
input uvm_path_e path = UVM_DEFAULT_PATH, input uvm_reg_map map = null, input uvm_sequence_base parent = null);
// 重载write()方法,实现新的写入方式
// ...
endfunction
endclass
class my_reg extends uvm_reg;
// 定义新的寄存器类,继承自uvm_reg
my_reg_field field;
function new(string name = "my_reg");
super.new(name, 32, UVM_NO_COVERAGE);
field = my_reg_field::type_id::create("field");
field.configure(this, 0, 31, UVM_UNSIGNED, 0, 0);
endfunction
virtual function uvm_object create_item(string prefix = "");
// 重载create_item()方法,将item类型设置为"SC"
return new("uvm_tlm_generic_payload", UVM_TLM_BLOCK);
endfunction
virtual function void do_print(output uvm_printer printer);
// 重载do_print()方法,将item类型打印为"SC"
super.do_print(printer);
printer.print_field_int("Item Type", "SC", this.get_type_name(), UVM_HEX);
endfunction
endclass
class my_reg_block extends uvm_reg_block;
// 定义新的寄存器模型类,继承自uvm_reg_block
my_reg reg;
function new(string name = "my_reg_block", uvm_component parent = null);
super.new(name, parent);
reg = my_reg::type_id::create("reg");
reg.configure(this, null, "0x100", 1, UVM_NO_COVERAGE);
endfunction
virtual function void build();
super.build();
endfunction
endclass
module top;
my_reg_block reg_block;
uvm_tlm_generic_payload trans;
initial begin
reg_block = my_reg_block::type_id::create("reg_block", null);
reg_block.build();
// 实例化新的寄存器模型类,并进行读写操作
trans = reg_block.reg.create_item();
reg_block.reg.field.write(status, 0x12345678, UVM_NO_CHECK);
reg_block.reg.field.read(status, trans, UVM_NO_CHECK);
end
endmodule
```
在这个例子中,我们定义了一个新的寄存器字段类my_reg_field,继承自uvm_reg_field,并重载了read()和write()方法,实现了新的读取和写入方式。然后定义了一个新的寄存器类my_reg,包含一个my_reg_field类型的field字段,并将field添加到该寄存器中。重载了create_item()方法,将item类型设置为"SC",以支持"SC"存取方式。同时重载了do_print()方法,将item类型打印为"SC"。最后定义了一个新的寄存器模型类my_reg_block,包含一个my_reg类型的reg寄存器,并在build()方法中将该寄存器添加到寄存器模型中。在UVM testbench中,实例化my_reg_block类,并使用新的存取方式对寄存器进行读写操作。在读取操作中,我们使用了uvm_tlm_generic_payload类型的trans对象,将item类型设置为"SC"。
相关推荐
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)