local uvm_reg_addr_t m_parent_maps[uvm_reg_map];//value=offset of this map at parent levellocal uvm_reg_addr_t m_submaps[uvm_reg_map];//value=offset of submap at this levellocalstringm_submap_rights[uvm_reg_map];//value=rights of submap at this levellocal uvm_reg_map_info m_re...
1class uvm_reg_map extends uvm_object;23`uvm_object_utils(uvm_reg_map)45//info that is valid only if top-level map6//表示uvm_reg_map所代表的地址空间的基地址;7local uvm_reg_addr_t m_base_addr;8...9//m_adapter和m_sequencer用于FRONTDOOR操作时,向driver发送item;10local uvm_reg_adapte...
uvm_reg_block:uvm_reg的集合,uvm_reg需要加入到uvm_reg_map中,且属于同一个uvm_reg_block。每个uvm_reg_block至少包含一个uvm_reg_map。uvm_reg_block中也可以再添加子uvm_reg_block,同时子uvm_reg_block的uvm_reg_map也需要添加到父uvm_reg_block的uvm_reg_map中。 uvm_reg_map:包含成员变量m_adapter,...
而这个m_regs_info[]的数组是在reg_map的add_reg时赋值的 包含了该uvm_reg相关的配置信息,我们看看通常我们生成的寄存器模型都是咱们add_reg的 可以看到我们一般都是缺省最后一个frontdoor参数的,所以一般都是null,即用户不会自己定义自己的frontdoor行为,而是使用内置的frontdoor行为,所以uvm_reg里的do_write()任...
UVM 提供了两种用来跟踪寄存器值的方式, 我们将其分为自动预测 (auto prediction)和显式预测 (explicit)。如果读者想使用自动预测的方式,还需要调用函数uvm_reg_map: :set_auto_predict ()。两种预测方式的显著差别在于, 显式预测对寄存器数值预测更为准确, 我们可以通过下面对两种模式的分析得出具体原因。
uvm_reg_map,auto-predict的设置,影响所有的读写操作,自动更新mirror和desired value。 只影响frontdoor,backdoor都是直接调用do_predict函数的。 m_regs_info,所有add到该map中的寄存器的信息,包括access,offset,addr, m_check_read,影响所有的read操作,mirror操作,mirror value和读到的值做比较。
reg uvm_reg_block classmy_regmodelextendsuvm_reg_block;randmy_regversion;functionvoidbuild();default_map=create_map("default_map",0,2,UVM_LITTLE_ENDIAN,0);version=my_reg::type_id::create("version",,get_full_name());version.configure(this,null,"version");version.build();default_map.add...
通过API进行操作,生成uvm_reg_item类型的事务对象,根据操作的类型决定对象中的操作类型,访问的地址根据reg_name自动生成; 寄存器模型将事务对象进一步转换为uvm_reg_bus_op事务对象,传入adapter,再将其转换为sequencer可以接受的事务对象(用户自定义,adapter也需自行编写) sequencer接收到该事务对象后通过driver驱动到dut,...
6.2.1自动预测:uvm_reg_map::set_auto_predict() 6.2.2 显示预测:explicit(更准确) 6.3 uvm_reg的访问方法 6.3.1 uvm_reg_block\uvm_reg\uvm_reg_feild方法 6.3.2 uvm_reg_sequence方法 6.3.3 reset()/get_reset() 6.3.3 mirror() 6.3.4 set()和update()对寄存器做批量修改 6.4 uvm_mem 6.5 内...
uvm_reg_map bus_map; ... virtual function void build(); reg0 = dummy_reg::create("reg0"); reg0.configure(this); reg0.build(); bus_map = create_map("bus_map", 'h0, 1, UVM_LITTLE_ENDIAN); default_map = bus_map; bus_map.add_reg(reg0, 'h0, "RW"); ...