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

UVM APB 验证 VIP Agent 逻辑架构与数据流图

以下是基于您提供的 APB 验证 VIP Agent 组件描述,绘制的 UVM 组件通信与数据传输逻辑图(采用分层结构 + 箭头标注,清晰呈现组件交互、TLM 端口及数据流方向):
UVM APB 验证 VIP Agent 逻辑架构与数据流图
在这里插入图片描述
关键标注说明(对应图中交互关系)

1. 核心组件分层(从左到右 / 上到下)

层级组件核心功能关键 TLM 端口 / 通信方式
激励生成层Sequence生成随机化 apb_transaction 事务隐式 seq_item_port(通过 finish_item 发送)
事务调度层Sequencer接收 Sequence 事务 + 分发给 Driverseq_item_export(收)+ seq_item_port(发)
信号驱动层Driver事务→DUT 物理信号(APB 时序)seq_item_port(从 Sequencer 取事务)
信号监测层Monitor采样 DUT 输出→apb_transactionuvm_analysis_port(广播给 Scoreboard)
验证判断层Scoreboard比对 Monitor 事务与预期结果uvm_analysis_imp(接收 Monitor 数据)
组件容器层Agent集成 Driver/Sequencer/Monitor内部连接 Driver 与 Sequencer 的 TLM 端口

2. 三大核心数据流(箭头方向 = 数据传输方向)

(1)激励生成→DUT 驱动流(主动流)

Sequence → Sequencer → Driver → DUT

① Sequence:create(txn)→randomize(txn)→start_item(txn)→finish_item(txn)(事务发往 Sequencer);

② Sequencer:通过seq_item_export接收事务→存入内部队列→等待 Driver 请求;

③ Driver:run_phase循环中get_next_item(txn)(从 Sequencer 取事务)→drive_apb_signal(txn)(驱动 DUT 引脚)→item_done()(告知 Sequencer 完成);

(2)DUT 输出→验证比对流(被动流)

DUT → Monitor → Scoreboard

① DUT:执行 Driver 驱动的 APB 操作→输出响应信号(如读操作的 PRDATA);

② Monitor:run_phase中采样 DUT 引脚(如vif.psel/vif.prdata)→判断操作类型→create(mon_txn)→填充addr/data/we→ap.write(mon_txn)(广播事务);

③ Scoreboard:通过analysis_imp接收事务→比对 “预期结果”(如根据 addr 查寄存器模型)与 “实际结果”(mon_txn.data)→输出验证结果;

(3)Agent 内部组件连接(控制流)

Agent.connect_phase → 绑定Driver.seq_item_port ↔ Sequencer.seq_item_export

作用:建立 Driver 与 Sequencer 的 TLM 通信通道,确保 Driver 能 “按需拉取” Sequencer 中的事务,是激励流的关键连接点;

代码逻辑:drv.seq_item_port.connect(sqr.seq_item_export);(Agent 内部自动完成,无需用户干预核心通信);

3. TLM 端口核心作用(避免组件直接调用)

TLM 端口类型发起方接收方通信模式核心用途
uvm_seq_item_portSequenceSequencer点对点(单向)Sequence 发送事务给 Sequencer
uvm_seq_item_portDriverSequencer点对点(双向)Driver 向 Sequencer 请求 / 确认事务
uvm_seq_item_exportSequencer-被动接收暴露 Sequencer 的事务接收能力
uvm_analysis_portMonitorScoreboard一对多(广播)Monitor 上报 DUT 响应事务
http://www.dtcms.com/a/359508.html

相关文章:

  • 大话 IOT 技术(1) -- 架构篇
  • Week 14: 深度学习补遗:迁移学习
  • 设计模式在Java中的应用:从单例模式到工厂模式的全面解析!
  • C++11——万能模板及完美转发
  • redis详解 (最开始写博客是写redis 纪念日在写一篇redis)
  • 雪花算法实现分布式环境下的高效动态ID生成
  • 扩展:如何设计与实现一个微服务架构下的跨服务异常处理适配器?
  • redis----zset详解
  • 数值分析——非线性方程与方程组的数值解法之二分法
  • 创意无界:云渲染如何让视觉创作触手可及
  • 责任链模式实践-开放银行数据保护及合规
  • 模型系列(篇三)-Llama
  • 分布式事务相关
  • 【MYSQL】从混乱到清晰:联合查询帮你打通数据孤岛
  • Python 实战:内网渗透中的信息收集自动化脚本(6)
  • React前端开发_Day11
  • Pytest+Selenium4 Web自动化测试框架(三日速通)
  • 数据中心网络实现梳理
  • 变频器实习总结14 电子元件中的内部参考电压 Type-c口对于BMS开发的优点
  • Caffeine TimerWheel时间轮 深度解析:O(1)复杂度增删和触发时间事件
  • 2025.8.31基于UDP的网络聊天室项目
  • 数值分析——非线性方程与方程组的数值解法之迭代法
  • Nginx虚拟主机配置
  • 从RNN到BERT
  • 北斗导航 | GNSS定位模式技术总结:原理、分类与应用实践
  • OpenCV 图像轮廓检测
  • Python爬虫实战:研究Subplots,构建电商平台数据采集和分析系统
  • Spark内存管理
  • C++ 登录状态机项目知识笔记
  • GitHub Spark深度体验:是革命前夜,还是又一个“大厂玩具”?