[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源代码调用。

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

被折叠的 条评论
为什么被折叠?



