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
🏃 操作步骤
make compile— 先编译,可能有编译错误 (Bug #1)- 修复编译错误后
make sim— 运行仿真 - 分析仿真日志,根据错误信息定位 Bug
- 逐一修复,每次修复后重新运行
- 直到仿真输出 "TEST PASSED"
🔍 调试策略
- 编译错误: 先解决编译问题
- 仿真超时/hang: 检查 fork-join 和 while 循环
- UVM_ERROR: 看错误信息定位组件
- Compare FAILED: 检查数据路径 (driver→monitor→model→scoreboard)
- config_db 错误: 检查层次路径
📝 考核方式
| 考核项 | 分值 | 说明 |
|---|---|---|
| 找到 Bug 1-2 | 15 分 | 编译级 Bug |
| 找到 Bug 3-5 | 30 分 | 组件级 Bug |
| 找到 Bug 6-8 | 35 分 | 系统级 Bug |
| 调试过程说明 | 20 分 | 描述每步调试方法 |
| 合计 | 100 分 |
通过标准:≥ 60 分