practice_templates/basic_02/uvm_agent/README.md

UVM 基础实践 (2/3): 实现 UVM Agent 结构

📚 知识点

知识点 说明
uvm_agent 封装 Driver/Monitor/Sequencer 的容器组件
is_active 属性 UVM_ACTIVE (驱动+观察) vs UVM_PASSIVE (只观察)
type_id::create UVM Factory 创建组件的标准方法
seq_item_port 连接 Driver 与 Sequencer 之间的 TLM 端口连接
analysis_port 转发 将子组件端口暴露到上层

🎯 任务目标

你需要补全一个文件:

env/my_agent.sv — 补全 build_phaseconnect_phase

build_phase 要求:

  1. 判断 is_active 属性
  2. 如果是 UVM_ACTIVE,用 type_id::create 创建 sqr (sequencer) 和 drv (driver)
  3. 无论哪种模式,都创建 mon (monitor)

connect_phase 要求:

  1. 如果是 UVM_ACTIVE,连接 drv.seq_item_portsqr.seq_item_export
  2. mon.ap 转发给 Agent 的 ap

📁 文件结构

├── rtl/
│   └── dut.sv              ← DUT: 数据取反器 (完整)
├── env/
│   ├── my_if.sv            ← 接口定义 (完整)
│   ├── my_transaction.sv   ← Transaction (完整)
│   ├── my_driver.sv        ← Driver (完整)
│   ├── my_monitor.sv       ← Monitor (完整)
│   ├── my_sequencer.sv     ← Sequencer (完整)
│   ├── my_agent.sv         ← ⭐ 需要补全 build_phase + connect_phase
│   ├── my_model.sv         ← 参考模型 (完整)
│   ├── my_scoreboard.sv    ← 记分牌 (完整)
│   └── my_env.sv           ← 顶层环境 (完整)
├── tests/
│   ├── base_test.sv        ← 测试基类 (完整)
│   └── my_case0.sv         ← 测试用例 (完整)
├── top_tb.sv               ← Testbench 顶层 (完整)
├── Makefile
└── README.md

🏗️ UVM Agent 结构图

          ┌──────────────────────────────┐
          │         my_agent             │
          │                              │
          │   ┌────────────┐             │
          │   │ sequencer  │ ◄── Sequence│
          │   └──────┬─────┘             │
          │          │ seq_item_export    │
          │          │                   │
          │   ┌──────▼─────┐             │
          │   │  driver    │ ──→ DUT     │
          │   └────────────┘             │
          │                              │
          │   ┌────────────┐             │
          │   │  monitor   │ ◄── DUT     │
          │   └──────┬─────┘             │
          │          │ ap                │
          │          ▼                   │
          │   ┌────────────┐             │
          │   │  agent.ap  │ ──→ 外部连接│
          │   └────────────┘             │
          └──────────────────────────────┘

🏃 操作步骤

  1. 阅读代码: 先阅读 env/my_env.sv 了解 Agent 是如何被使用的
  2. 补全 build_phase: 创建子组件 (注意 is_active 判断)
  3. 补全 connect_phase: 连接端口
  4. 编译: make compile
  5. 仿真: make sim

✅ 验收标准

  • VCS + UVM 编译无错误
  • 仿真日志显示 "TEST PASSED"