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...
(1) 一个uvm_reg_block一定要对应一个uvm_reg_map; 系统已经有一个声明好的default_map,只需在uvm_reg_block的build中将其实例化; (2) uvm_reg_map的实例化,并不是直接调用其new函数,而是通过调用uvm_reg_block的create_map函数来实现; 1default_map=create_map("default_map",0,2,UVM_BIG_ENDIAN,0)...
寄存器模型中的adapter就是一个适配器,提供了reg2bus和bus2reg的接口,充当uvm_reg_map和uvm_sequencer中的转换器。uvm_reg_map操作uvm_reg_bus_op类型的item,而uvm_sequencer操作uvm_sequence_item类型的item。 adapter 继承uvm_reg_adapter,重写reg2bus和bus2reg这两个pure virtual function。 classmy_adapterexte...
uvm_reg:比uvm_reg_field高一个级别,但仍然是比较小的一个单位; uvm_reg_block:顾名思义,uvm_reg的块,可以拥有许多的uvm_reg,也可以加入其他的uvm_reg_block; uvm_reg_map:每个寄存器在加入寄存器模型时,都必须要有其地址,uvm_reg_map就是储存这些地址并可以转换其真实物理地址的一个成员。每个uvm_reg_blo...
uvm_reg_map:用于存储寄存器模型里寄存器的地址,在每个reg_block里至少有一个uvm_reg_map(通常也只有一个)。 接下来我们来分享如何定义一个最简单的寄存器模型(只有一个寄存器,且寄存器里只有一个寄存器域)。 首先,要先从uvm_reg类里派生一个寄存器类(即先生成一个寄存器的版图),在这个类里会有一个build函数(完...
uvm_reg_field是寄存器模型中的最小单位,可以理解为寄存器的1位;uvm_reg是更高一级别的层次,一个uvm_reg至少应包含一个uvm_reg_field;再往上是uvm_reg_block,在其中可以加入多个uvm_reg,也可以加入其他uvm_reg_block,即它支持嵌套;uvm_reg_map则存放所有被加入寄存器模型的寄存器的地址,并将其转换成可以访问的...
uvm_reg_map:每个寄存器在加入寄存器模型时都有其地址,uvm_reg_map 就是存储这些地址,并将其转换成可以访问的物理地址(因为加入寄存器模型中的寄存器地址一般都是偏移地址,而不是绝对地址)。当寄存器模型使用前门访问方式来实现读或写操作时,uvm_reg_map 就会将地址转换成绝对地址,启动一个读或写的 sequence,并将...
uvm_reg_map:存储寄存器的地址。 7.2 简单的寄存器模型 (1)从uvm_reg派生一个invert类 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"); ...
2.uvm_reg:比uvm_reg_field 高一个级别,但依然是比较小的单位。一个寄存器中至少包含一个uvm_reg_field。 3.uvm_reg_block:比较大的单位,可以加入许多uvm_reg,也可以加入其它的uvm_reg_block。一个寄存器模型中至少包含一个uvm_reg_block。 4.uvm_reg_map:每个寄存器加入模型时都有地址,uvm_reg_map存储这...
1.2.3. uvm_reg_map 关于uvm_reg_map的创建,方法也很多,第一种,在例化uvm_reg_block的compo...