UVM 中 Phase Jump 与 Reset 调试思路指南
一次通用的「main_phase → reset_phase」跳转排错流程,不含任何专有项目名称
1 背景与现象复现
在验证项目中,经常需要在 main_phase 中 phase.jump() 直接跳转到 reset_phase,以便快速进入下一轮测试。但不少工程师会遭遇:
- 仿真确实进入了
reset_phase; reset_db.all_clear()(或任何自定义清零函数)也打印了 reset done!;- 日志却依然持续出现 checker / monitor 线程输出——仿佛线程根本没停。
这一现象通常由「子线程未被正确终止」+「VIP 复位打印」叠加造成。下面整理一条与具体 DUT/模块无关的排查思路。
2 典型误区速查
| 序号 | 误区 | 原因简述 |
|---|---|---|
| ① | 认为 phase.jump() 会自动结束 所有 子线程 |
jump() 只结束调用它的 主线程,fork…join_none 分离的子线程继续存在 |
| ② | 在 reset_phase 使用 disable <label> 却找不到标签 |
命名块只在其词法范围可见,跨 task 调用会编译报错 |
| ③ | 把 VIP 打印误认为自家线程在跑 | AXI/SPI/PCIe VIP 默认 |


1338

被折叠的 条评论
为什么被折叠?



