当前位置: 首页 > news >正文

UVM Adapter:寄存器模型与总线的“翻译官”

reg_item 到总线 transaction,谁来做转换?

在 UVM RAL 中,对寄存器的读写操作被抽象为uvm_reg_item,其内部包含一个或多个uvm_reg_bus_op结构体,描述了操作的地址、数据、读写方向等信息。但是,总线上的 driver 和 monitor 交互的对象是用户自定义的 transaction(比如ahb_transferaxi_lite_trx等),它们与 RAL 的结构格格不入。

如果把 RAL 比作跨国公司管理层,只会用抽象的标准语言发号施令;而各个总线(AHB、AXI、自定义协议)就是不同语种的车间员工。这时就需要一个翻译官——uvm_reg_adapter。它将管理层下达的uvm_reg_bus_op指令翻译成车间能听懂的transaction,再把车间汇报上来的transaction翻译回管理层的uvm_reg_bus_op,使 RAL 的镜像值同步成为可能。

adapter 的角色与数据流

uvm_reg_bus_op —— 标准化的寄存器操作描述

在理解 adapter 参数来源之前,必须先认清uvm_reg_bus_op这个结构体的各个字段,因为它是 adapter 转换的核心对象。

typedef struct { uvm_reg_addr_t addr; // 总线地址(字节地址) uvm_reg_data_t data; // 读写数据 uvm_reg_byte_en_t byte_en; // 字节使能(可选) uvm_reg_map_path path; // 访问路径(前门/后门) uvm_reg_access_t kind; // UVM_READ 或 UVM_WRITE int n_bits; // 本次操作的有效位宽 uvm_status_e status; // 操作状态(UVM_IS_OK 等) } uvm_reg_bus_op;

这几个参数究竟是如何产生的?我们需要从 RAL 的一次write()read()调用说起。

参数来源链路

  • addruvm_reg::write()被调用时,RAL 会根据目标寄存器在uvm_reg_map中的偏移地址,加上 map 的基地址,自动计算出最终的物理地址。如果你的 map 基地址是0x1000_0000,寄存器偏移是0x04,那么rw.addr就是0x1000_0004结论:addr 由 RAL 根据 map 配置自动计算得到,adapter 只需原样映射到 transaction。

  • data:写入操作时,data 就是你要写入寄存器的值;读取操作时,data 初始值一般为 0,待总线返回后由bus2reg()填充。RAL 在调用reg2bus()时,已经将正确的写入值或占位值放入rw.data

  • kind:指明操作类型,UVM_WRITEUVM_READ。这个值由 RAL 根据你调用的是write()还是read()自动设置。

  • n_bits:表示当前操作的数据有效位宽,单位是 bit。它通常等于 map 的总线宽度(如 32 位),但如果有粒度更细的寄存器访问(例如半字写),

http://www.cnnetsun.cn/news/4026264.html

相关文章:

  • ChatGPT转 word 工具推荐:首选「AI 导出鸭」平板版,专为iPad/安卓平板深度适配ChatGPT等主流AI,一键无损导出Word,完整保留公式、代码与流程图,让大屏导出更高效。
  • 依赖数据迁移工具做增量同步有哪些易错点?调整数据迁移工具策略怎么保证断点续传可靠?
  • 工业物联网设备接入从2天压缩到2分钟:AI原生物联底座实测
  • 不手写推导模型和 Jacobian,如何把 OCP/MPC 模型生成可部署 C++ SDK
  • 浏览器直达服务器串口:百敖基于 openUBMC 的 Web SOL 技术实践
  • 企业微信 iPad 协议 SCRM 开发效果实测
  • RAG的向量数据库:为LLM提供语义搜索能力
  • 【C++】13. 继承
  • Go 语言入门笔记(一):从零搭环境到跑通第一个程序
  • Windows 11 越来越卡?Win11Debloat 一键系统优化与隐私清理终极指南
  • 流放之路价格查询终极助手:这款免费开源工具,5分钟告别手动比价
  • 猫抓资源嗅探扩展使用路线图:3个成长阶段,把网页视频音频图片全拿下
  • 不用模拟器也能在 Windows 上装安卓应用:APK Installer 三步入门指南
  • 动态规划专练:力扣第1035、392题
  • 十大最佳 AI 编码工具
  • 混合办公两难:视频会议私有化部署频频失守的真相
  • 第一次让 AI 帮你写代码:用 JavaScript 完成一个待办事项清单
  • C语言基础:操作符详解(一)
  • 中级开发者用 AI,最容易掉进的 5 个坑
  • 从Cursor到多智能体:2026年AI全栈开发工具到底该怎么选?
  • 误删、格式化、硬盘罢工之后:TestDisk与PhotoRec免费数据恢复工具完整自救手册
  • 微信投票活动全攻略:从选工具到落地执行
  • maxGraph图表库实战:几分钟上手,从零构建可交互的流程图应用
  • WebPShop 插件完整使用指南:Photoshop 导出 WebP 与制作动画的免费教程
  • 从技术骨干到管理者,最大的转变不是能力,是角色和逻辑
  • 技术解析|音频分割在哪里切才不爆音?过零点与淡入淡出的四个关键细节
  • Windows 10/11 窗口毛玻璃特效实操指南:效果怎么选、怎么落地一次讲透
  • G-Helper完整上手指南:10分钟掌握华硕笔记本的功耗、风扇与显卡控制
  • 算法(23):heapsort-8.3一种先构建再排序的排序方法
  • 测试开发学习中。。。。