[UVM源代码研究] 当我们使用寄存器模型里的寄存器调用write/read方法,数据包是如何在寄存器模型、adapter、sequencer中传递的

本文详细探讨了UVM寄存器模型中,通过write和read方法调用时,数据包如何在寄存器模型、adapter和sequencer之间流转。重点分析了reg2bus和bus2reg函数在数据传输中的作用,以及它们在UVM组件间协作中的关键角色。

[UVM源代码研究] 当我们使用寄存器模型里的寄存器调用write/read方法,数据包是如何在寄存器模型、adapter、sequencer中传递的

要想通过一篇文章就把register model的所有概念都讲清楚显然不切实际,咱们这边仅仅从一个小的方面进行切入,主要研究下我们实际的sequence_item在register model、adapter以及sequencer之间是如何调度传播的,这里选择的切入点就是使用寄存器模型里的寄存器调用write/read方法前门访问时数据包是如何在寄存器模型、adapter、sequencer中传递的,我们自然就联想到了adapter内的两个函数reg2bus和bus2reg。

要实现register model与adapter和sequencer的关联我们通常在寄存器模型所在组件的build_phase执行下面这段代码
在这里插入图片描述

也就是说register model中的default_map里的set_sequencer方法实现了将三者的关联,传递的两个参数分别对应着实际的sequencer和adapter。

我们看看这个default_map的声明和类型定义
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

于是寄存器模型的default_map就把对应的sequencer和adapter存放在了default_map中的m_sequencer和m_adapter中。

下面在看看uvm_reg_adapter中reg2bus和bus2reg原型的定义
在这里插入图片描述
在这里插入图片描述

我们实际写的adapter中都会对这两个函数做override,所以里面执行的具体内容其实并不重要,只是给我们自己写的函数提供了个参考的思路,真正对我们有意义的时这两个函数的原型(返回值、参数类型),它约束了我们override的函数必须与之保持一致。

下面我们进入本文讨论的精华部分,reg2bus和bus2reg这两个函数何时何地被uvm源代码调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值