uvm_reg_block——寄存器模型(七)

这是寄存器模型的顶层

 

//------------------------------------------------------------------------
// Class: uvm_reg_block
//
// Block abstraction base class
//
// A block represents a design hierarchy. It can contain registers,
// register files, memories and sub-blocks.
//
// A block has one or more address maps, each corresponding to a physical
// interface on the block.
//
//------------------------------------------------------------------------
virtual class uvm_reg_block extends uvm_object;

   local uvm_reg_block  parent;

   local static bit     m_roots[uvm_reg_block];
   local int unsigned   blks[uvm_reg_block];
   local int unsigned   regs[uvm_reg];
   local int unsigned   vregs[uvm_vreg];
   local int unsigned   mems[uvm_mem];
   local bit            maps[uvm_reg_map];

   // Variable: default_path
   // Default access path for the registers and memories in this block.
   uvm_path_e      default_path = UVM_DEFAULT_PATH;

   local string         default_hdl_path = "RTL";
   local uvm_reg_backdoor backdoor;
   local uvm_object_string_pool #(uvm_queue #(string)) hdl_paths_pool;
   local string         root_hdl_paths[string];

   local bit            locked;

   local int            has_cover;
   local int            cover_on;
   local string         fname;
   local int            lineno;

   local static int id;

 

转载于:https://www.cnblogs.com/dpc525/p/8025251.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于UVM寄存器模型的问题。您需要创建一个包含test_set和reserved字段的寄存器模型,并将其添加到uvm_reg_block中。test_set字段的存取方式为RW,reserved字段的存取方式为RO。然后,您需要使用uvm_reg_map将寄存器模型映射到物理地址,并使用configure()方法配置寄存器模型的默认值和访问权限。 以下是一个示例代码,用于创建一个包含test_set和reserved字段的寄存器模型,并将其添加到uvm_reg_block中: ```systemverilog class my_reg_block extends uvm_reg_block; my_reg_model my_reg; uvm_reg_map reg_map; // Constructor function new(string name = "my_reg_block", uvm_component parent=null); super.new(name, parent); // Create register model my_reg = my_reg_model::type_id::create("my_reg"); // Add fields to register model my_reg.test_set = uvm_reg_field_rw #(.size(4))::type_id::create("test_set", 0, my_reg, null); my_reg.reserved = uvm_reg_field_ro #(.size(28))::type_id::create("reserved", 4, my_reg, null); // Add register model to block add_reg(my_reg, 0); // Create register map reg_map = uvm_reg_map::type_id::create("reg_map", null, UVM_LITTLE_ENDIAN); // Add register to map reg_map.add_reg(my_reg, 0); // Set default value and access policy my_reg.set_access("RW", "test_set"); my_reg.set_access("RO", "reserved"); my_reg.set_default(32'h00000000); // Add map to block add_map(reg_map); endfunction endclass ``` 在上述代码中,my_reg_block类继承自uvm_reg_block类,并包含一个my_reg_model类型的寄存器模型my_reg,以及一个uvm_reg_map类型的寄存器映射reg_map。在构造函数中,首先使用my_reg_model::type_id::create()方法创建my_reg寄存器模型,并使用uvm_reg_field_rw和uvm_reg_field_ro类创建寄存器字段test_set和reserved,并将它们添加到my_reg寄存器模型中。 然后,使用add_reg()方法将my_reg寄存器模型添加到my_reg_block中。接下来,使用uvm_reg_map::type_id::create()方法创建寄存器映射reg_map,并使用reg_map.add_reg()方法将my_reg寄存器模型添加到reg_map中。 接下来,使用my_reg.set_access()方法设置寄存器模型字段的访问权限,使用my_reg.set_default()方法设置寄存器模型的默认值。 最后,使用add_map()方法将reg_map寄存器映射添加到my_reg_block中。这样,就可以将my_reg寄存器模型映射到物理地址,并对它们进行读写操作。 希望这个示例代码可以帮助您创建一个包含test_set和reserved字段的寄存器模型,并将其添加到uvm_reg_block中,并使用uvm_reg_map和configure()方法配置寄存器模型的默认值和访问权限。如果您还有其他问题,可以继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值