uvm寄存器模型梳理

本文详细梳理了UVM寄存器模型的构建过程,包括uvm_reg、uvm_reg_field、uvm_mem、uvm_reg_block和uvm_reg_map等组件的使用。在构建寄存器模型时,首先定义单个寄存器及其功能域,接着在uvm_reg_block中创建寄存器实例并配置,再创建映射实例添加偏移地址。adapter在数据转换中起到关键作用,reg2bus和bus2reg函数负责总线操作与寄存器操作之间的信息映射。最后,通过predictor将总线事务与寄存器操作关联,并在环境中建立相应连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
上图是寄存器模型中主要组成和数据流通的示意图。

构建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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值