UVM 平台架构
返回 项目总览。
这个 UVM 环境的核心不是类的数量,而是把三条责任链拆开:激励负责“发什么”,driver 负责“怎么在引脚上发”,monitor 负责“总线上实际发生了什么”。检查器只相信 monitor 观察到的事务。
组件层次
uvm_test_top
└── env
├── agent
│ ├── sequencer
│ ├── driver
│ └── monitor ── analysis_port ──┬── scoreboard
│ └── coverage
├── scoreboard
└── coverage顶层 top_tb 实例化时钟、复位、interface、DUT 和 assertions,再通过 uvm_config_db 把 virtual interface 交给 driver 与 monitor。
transaction:把五通道压成一次操作
axi_lite_item 保存:
- 请求:
cmd/addr/data/wstrb; - 结果:
rdata/resp; - 地址分类方法:aligned、in range、legal 和 address kind。
sequence 不直接操作 AWVALID 等信号,而是产生这种高层对象。一个 write item 最终会经历 AW、W、B 三条通道;一个 read item会经历 AR、R 两条通道。
为什么响应也放在 item 里
driver 在 B/R 握手时把
resp或rdata写回当前 request,便于 sequence 或调试查看;真正的 scoreboard 输入仍来自 monitor 重新构造的独立 transaction。
driver:协议执行器
driver 从 sequencer 获取 item,再用 pin-level 信号完成访问。写任务有三个随机延迟:
aw_delay:何时发写地址;w_delay:何时发写数据;b_delay:何时拉高BREADY。
AW 和 W 在 fork...join 中并发,因此能够自然产生地址先到、数据先到和接近同时到达的情况。每一路都保持 VALID,直到真实握手:
do @(posedge vif.aclk);
while (!(vif.awvalid && vif.awready));读任务同样分别随机延迟 AR 发起和 RREADY,从 master 侧制造响应背压。
monitor:以握手为事实来源
monitor 同时运行 collect_writes() 与 collect_reads()。写 monitor 并发等待 AW 与 W 握手,将可能分开到达的地址、数据合并,然后等待 B 握手;读 monitor 等 AR 握手,再等 R 握手。
monitor 不应复用 driver 的 request
如果 scoreboard 直接接收 driver 认为自己发出的对象,就可能漏掉 driver 时序错误、DUT 接收错误或接口连接错误。monitor 从接口重新采样,才能建立端到端检查。
analysis port:一份观察,多种消费者
monitor 完成一笔 transaction 后调用:
ap.write(tr);environment 将同一个 analysis port 同时连接到 scoreboard 和 coverage。二者不需要相互调用:
- scoreboard 判断结果是否正确;
- coverage 记录场景是否出现。
这是 TLM 广播的价值:以后增加 transaction logger 或性能统计器时,不必修改 monitor 的采样逻辑。
factory 与 config_db 各解决什么
type_id::create()通过 factory 创建组件或 object,为后续 override 保留入口。uvm_config_db把 top 中的实际 interface 句柄传入类世界,也用于覆盖 driver 的max_ready_delay。uvm_component_utils注册有层次生命周期的 component;uvm_object_utils注册 item 和 sequence 这类 object。
当前架构的取舍
agent 固定为 active,没有 is_active 配置;scoreboard 用单个 analysis implementation 接收已完成事务;DUT 每个方向只支持单 outstanding,所以不需要复杂的 request queue 或 ID 匹配。
如果未来验证支持并发 outstanding 或完整 AXI4,需要让 monitor 保存未完成事务、按 ID/顺序关联 response,scoreboard 也要从单一 mirror 回调升级为可处理并发的预测队列。
面试复述要点
sequence 决定事务内容,driver 把事务转换成 AXI 时序,monitor 只根据
VALID && READY重建真实事务,再通过 analysis port 同时广播给 scoreboard 和 coverage。这样 stimulus、observation、checking 和 measurement 相互解耦。
上一篇:项目寄存器与 RW1C。下一篇:激励与 Scoreboard。