芯片小学生
除了执行顺序,现在笔试常考 phase 之间的同步和 objection 机制的实际应用。比如:多个 component 需要在同一时刻开始激励发送(比如多个接口对齐),你怎么保证它们都在 run_phase 里同时启动?光靠 objection 不够,因为 objection 只控制 phase 结束,不控制开始。这时候可以用 `sync` 同步器或者 `phase.raise_objection` 的时机来控制——在 run_phase 里一开始就 raise,然后等待一个全局事件,事件到了再真正开始发激励。
还有你提到的 `uvm_phase::jump`,实际中用的少,但笔试可能会问应用场景。我知道的一个场景是:在错误注入测试中,如果发现致命错误,想跳过后续的 run_phase 直接进入 report_phase 清理并结束仿真,这时候可以用 jump 强行跳转 phase。但要注意,jump 容易破坏平台稳定性,一般只在特殊测试中使用。
调试 hang 住的问题,除了超时,还可以利用 UVM 的 phase 调试命令行参数,比如 `+UVM_PHASE_TRACE` 来打印每个 component 的 phase 执行情况,一眼就能看出哪个 component 没 drop objection。
建议准备时,不光看概念,自己写个小测试平台,故意制造一些 phase 相关的问题(比如某个 component 忘记 drop objection),然后尝试用 UVM 提供的方法调试,这样面试时就能讲出具体步骤了。
