全部教程

UVM 高阶用法

多 Agent 协同、Virtual Sequence 与寄存器抽象层(RAL)。

  1. 01认识 AXI4-Lite 与 axil_regfileUVM 高阶用法系列的第一章:认识新的 DUT——AXI4-Lite 协议的五个通道与 VALID/READY 握手规则、一个带中断输出的简化寄存器外设,以及一个完整的手动驱动 testbench,证明这一切都能跑通。
  2. 02AXI4-Lite Driver、Monitor 与 Agent把 axil_regfile 包进真正的 UVM:一个 axi_txn sequence item、一个终于要等 READY 而不是组合驱动的 driver、一个从两个独立通道重建事务的 monitor,两者一起打包成 axi_agent——直接复用 UVM 基础系列的 seq_item_port/analysis_port 机制,因为这里真正新的东西只有握手本身。
  3. 03第二个接口:irq Monitor 与多 Agent 环境给 axil_regfile 的 irq 输出配一个最小化的独立接口,搭一个纯被动的 irq_agent 去观察它(完全没有 driver——这个信号上根本没有 testbench 能驱动的东西),再把它和 axi_agent 一起装进一个 uvm_env:这正是 uvm 第 10 章留下的“协调不止一个 agent”这个缺口的直接兑现。
  4. 04Virtual Sequencer 与 Virtual Sequence一个什么都不驱动的 uvm_sequencer,从一个地方协调 axi_agent 和 irq_agent——uvm_event/uvm_event_pool 作为跨 agent 的同步原语,以及 BVALID 和 irq 之间一个真实存在的同一时钟边沿竞争,靠实测仿真时间戳抓出来,而不只是纸面推理。
  5. 05UVM RAL:寄存器抽象层给 axil_regfile 的四个寄存器搭一套真正的 uvm_reg 模型,一个把 front door 访问桥接到 axi_txn 的 uvm_reg_adapter,以及具体的收获:RAL 的镜像值只会因为访问自己寄存器地址而更新,所以四次 DATA 写下来 COUNT 的镜像一直停在 0——只有一次 front door 读才能补上这个真实存在的缺口。
  6. 06综合实战:搭建高阶验证环境把五章积累下来的类整理进一个 package,加一个从来不清中断的第二场景——证明 COUNT 越过阈值之后还能继续计数,同时 irq 保持电平、monitor 不会重复上报,再用 uvm 第 10 章那套 factory override 的手法,不碰 run_phase,就能在命令行里切换它和第 5 章的场景。