1.phase机制
(1)SV中new()无法解决例化的先后关系以及例化后的连接,同时SV也无法再例化前对底层进行配置逻辑。这就引入了phase。
(2)执行机制
9个主要的phase机制,其中只有一个是task。
(3)示例
-
定义9个phase都传入“uvm_phase phase”这个参数,同时调用系统函数‘uvm_info()。
-
在topcomp中重新自定义了build—phase,并利用type_id来创建对象。
(4)示例的运行结果,可以看出三点:
-
9个phase依次执行完毕。
-
顺序:自顶向下或自底向上。
-
从build开始,以final结束。
(5)总结
2.run_phase与12个分支phase
(1)概述
(2)12个分支phase
(3)执行顺序
12个分支是依次执行,与run_phase之间是并行执行关系。
3.UVM编译和运行顺序
(1)示意图
(2)运行顺序
4.uvm仿真开始
(1)概述
run_test方法继承与uvm_test,处于顶层中的方法。利用run_test()来建立验证环境。
(2)uvm世界的“诞生”
(3)uvm_top层
uvm_top是任何例化实例的顶层;uvm_top控制phase;提供索引功能索引到实例;报告配置;全局报告设备。
(4)run_test()
ojection机制:控制仿真退出。
5.uvm仿真结束
(1)概述
(2)挂起与放下方法
(3)示例
this:当前组件在当前run_phase中挂起或放下objection。
(4)至少一个组件在run_phase()中都可以挂起objection。否则可能会直接退出run_phase,导致run_phase中的多个组件不能执行。
(5)挂起晚了的示例
phase.raise_objection前不能有延时。后面三句话来不及执行。