(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)...
每一个由uvm_reg_block派生的类也要定义一个build函数,一般在此函数中实现所有寄存器的实例化 一个uvm_reg_block中一定要对应一个uvm_reg_map,系统已经有一个声明好的default_map,只需要在build中通过调用uvm_reg_block的create_map来将其实例化,create_map有众多的参数,其中第一个参数是名字,第二个参数是基地...
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_field:寄存器模型中的最小单位。 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:每个...
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...
uvm_reg_block: 由uvm_reg_block派生的类就是用户使用的寄存器模型块了,它可包含多个寄存器reg,且必须包含一个寄存器地址map。 首先声明继承自uvm_reg_block:reg_model extends uvm_reg_block; 声明uvm_reg:rand reg_invert invert; 在build()里需要创建uvm_reg和uvm_reg_map: ...
寄存器模型中的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。
uvm_reg_map:每个寄存器在加入寄存器模型时都有其地址,uvm_reg_map 就是存储这些地址,并将其转换成可以访问的物理地址(因为加入寄存器模型中的寄存器地址一般都是偏移地址,而不是绝对地址)。当寄存器模型使用前门访问方式来实现读或写操作时,uvm_reg_map 就会将地址转换成绝对地址,启动一个读或写的 sequence,并将...
寄存器访问译码表,或者叫memory map,是寄存器接口从访问地址到使能对应寄存器所需要的查找表。这张表中指定了每个寄存器的偏移地址(offset)、访问属性、大小端、对应的总线等配置。对memory map的建模,UVM提供的类型叫uvm_reg_map。 多个寄存器及其访问译码表最终构成寄存器组。在同个数字系统的不同总线视角下,寄存器组...
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"); ...