上图是寄存器模型中主要组成和数据流通的示意图。
构建uvm寄存器,主要包含以下几种类:
uvm_reg:与sv中寄存器相匹配;
uvm_reg_field:代表寄存器中不同的功能域,并对相应的域进行配置;
uvm_mem:匹配硬件的存储类型;
uvm_reg_block:容纳多个reg(uvm_reg)或者mem(uvm_mem),并且包含寄存器列表(uvm_reg_map);
uvm_reg_map:用来配置寄存器块中各个寄存器的偏移地址,属性以及对应的总线。
寄存器块构建顺序
1.定义单个寄存器,分清其中包含的功能域,并通过uvm_reg_field::configure()对相应的域进行配置
2.在uvm_reg_block中创建不同的uvm_reg实例,然后通过uvm_reg::configure()对各个实例进行配置
3.在uvm_reg_block中通过create_map创建map实例,通过uvm_reg_map::add_reg()对各个uvm_reg实例添加偏移地址,访问属性等。
在环境中实例化寄存器模型后,通过调用build()函数来构建寄存器模型中各个寄存器;这些单独的寄存器又会调用自身的configure和build,从而进一步创建和配置各个寄存器自身的域。
对于adapter,它的功能主要是实现了两个函数,对数据类型进行了转换。以如下代码为例:
class reg2mcdf_adapter extends uvm_reg_adapter;
`uvm_object_utils(reg2mcdf_adapter)
function new(string name