practice_templates/deep_02/debug_uvm_env/README.md

深度实践 Debug 2-4: UVM 验证环境 Bug 猎人 🐛

📚 背景

一个"初级验证工程师"搭建了一个 UVM 验证环境,但运行时总是失败。
本练习中你需要找到 UVM 验证环境中的 8 个 Bug

这些 Bug 涵盖了 UVM 新手最容易犯的错误!

🎯 任务目标

以下文件中包含 Bug:

文件 Bug 数量 Bug 类型
env/buggy_driver.sv 2 个 Driver 驱动逻辑
env/buggy_monitor.sv 1 个 Monitor 采样逻辑
env/buggy_scoreboard.sv 2 个 Scoreboard 比较逻辑
env/buggy_env.sv 1 个 TLM 连接
tests/buggy_test.sv 2 个 测试配置

Bug 清单

Bug 编号 难度 位置 提示
Bug #1 buggy_test.sv `uvm_component_utils 宏拼写
Bug #2 buggy_test.sv config_db 路径错误
Bug #3 ⭐⭐ buggy_driver.sv Driver 没有 item_done 握手
Bug #4 ⭐⭐ buggy_driver.sv 驱动数据后没有拉低 valid
Bug #5 ⭐⭐ buggy_monitor.sv 采样时机错误 (先采样再等 valid)
Bug #6 ⭐⭐⭐ buggy_scoreboard.sv fork-join 死锁
Bug #7 ⭐⭐⭐ buggy_scoreboard.sv 比较时用了错误的期望值
Bug #8 ⭐⭐⭐ buggy_env.sv TLM FIFO 连接交叉了

📁 文件结构

├── rtl/
│   └── dut.sv                    ← DUT (完整,无 Bug)
├── env/
│   ├── my_if.sv                  ← 接口 (完整)
│   ├── my_transaction.sv         ← Transaction (完整)
│   ├── my_sequencer.sv           ← Sequencer (完整)
│   ├── buggy_driver.sv           ← ⭐ 2 个 Bug
│   ├── buggy_monitor.sv          ← ⭐ 1 个 Bug
│   ├── my_agent.sv               ← Agent (完整)
│   ├── my_model.sv               ← 参考模型 (完整)
│   ├── buggy_scoreboard.sv       ← ⭐ 2 个 Bug
│   └── buggy_env.sv              ← ⭐ 1 个 Bug
├── tests/
│   ├── base_test.sv              ← 测试基类 (完整)
│   └── buggy_test.sv             ← ⭐ 2 个 Bug
├── top_tb.sv                     ← 顶层 (完整)
├── Makefile
└── README.md

🏃 操作步骤

  1. make compile — 先编译,可能有编译错误 (Bug #1)
  2. 修复编译错误后 make sim — 运行仿真
  3. 分析仿真日志,根据错误信息定位 Bug
  4. 逐一修复,每次修复后重新运行
  5. 直到仿真输出 "TEST PASSED"

🔍 调试策略

  1. 编译错误: 先解决编译问题
  2. 仿真超时/hang: 检查 fork-join 和 while 循环
  3. UVM_ERROR: 看错误信息定位组件
  4. Compare FAILED: 检查数据路径 (driver→monitor→model→scoreboard)
  5. config_db 错误: 检查层次路径

📝 考核方式

考核项 分值 说明
找到 Bug 1-2 15 分 编译级 Bug
找到 Bug 3-5 30 分 组件级 Bug
找到 Bug 6-8 35 分 系统级 Bug
调试过程说明 20 分 描述每步调试方法
合计 100 分

通过标准:≥ 60 分