← 验证题集

推荐答案 测试一下

run phase和main phase混用,导致平台运行出错,有一次我将 reset _phase

编程题 中等 笔试真题

参考答案

该问题考察的是UVM phase机制的掌握。UVM中,run_phase是一个独立的时间消耗phase,而reset_phase、main_phase、configure_phase等12个小phase(task phase)是与run_phase并行的不同时间片。关键点在于:在一个组件中不能同时定义run_phase和任意小phase(如main_phase)。这是因为UVM在调度时会根据组件是否实现了小phase来决定执行路径:如果组件实现了任何小phase,则UVM会抑制run_phase的执行(即不会调用run_phase),只执行小phase序列;反之,如果只实现了run_phase,则小phase不会被调用。用户将reset_phase和run_phase混用,导致UVM按照小phase路径执行,而run_phase被忽略,因此无法实现预期的phase跳跃。正确的做法是:要么只使用run_phase(通过phase.raise_objection控制时间流逝),要么只使用一组小phase(如从build_phase开始,到shutdown_phase结束),不要混合使用。若要实现phase跳跃(例如从main_phase跳回reset_phase),应在小phase内部调用phase.jump(uvm_reset_phase::get()),但注意跳跃只能发生在同类型phase之间(task phase跳转到task phase),且不能跨越到run_phase。此外,UVM 1.2版本已废弃小phase,统一使用run_phase,建议新项目采用UVM 1.2以简化设计。

涉及知识点

  • UVM phase执行顺序
  • run_phase与12个小phase的互斥关系
  • phase跳跃的限制与实现
  • 验证环境phase选择策略
← 上一题
登录后反馈错题
下一题 →