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 事务 + 分发给 Driver | seq_item_export(收)+ seq_item_port(发) |
信号驱动层 | Driver | 事务→DUT 物理信号(APB 时序) | seq_item_port(从 Sequencer 取事务) |
信号监测层 | Monitor | 采样 DUT 输出→apb_transaction | uvm_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_port | Sequence | Sequencer | 点对点(单向) | Sequence 发送事务给 Sequencer |
uvm_seq_item_port | Driver | Sequencer | 点对点(双向) | Driver 向 Sequencer 请求 / 确认事务 |
uvm_seq_item_export | Sequencer | - | 被动接收 | 暴露 Sequencer 的事务接收能力 |
uvm_analysis_port | Monitor | Scoreboard | 一对多(广播) | Monitor 上报 DUT 响应事务 |