phase
棕色:function phase 不消耗仿真时间
绿色:task phase 消耗仿真时间
run_phase与右边的phase并行执行,右边的phase(run_time phase)依次执行:
- List itemreset_phase对DUT进行复位,初始化等操作
- configure_phase则进行DUT配置
- main_phase主要完成DUT的运行,模拟各种现实DUT
- shutdown_phase则是做一些与DUT断电相关的操作
phase属于component,sequence属于objection,只有component有phase机制
在命令行可以使用+UVM_PHASE_TRACE来调试phase
build_phase
build_phase功能:
创建UVM树,例化所有组件
config_db:set,get interface
build_phase执行顺序:
除了build和final_phase是自顶向下执行,其它都是自底向上执行
深度优先原则:active_agent里执行完再执行passive_agent
在agent里平级的driver、monitor和sequencer按开头字母先后执行
objection
解决多个组件在同一个phase里面需要不同时间的需求
只有task phase里有objection
命令行使用+UVM_OBJECTION_TRACE来调试objection
使用规则:
若多个组件同时raise objection,此时以最长时间为准
一般sequence中raise and drop,driver中不会raise_objection,通常monitor也不会
当某一个组件的phase raise and drop了,别的组件该phase也会使用该raise and drop
run_phase与run-time phase并行执行,如果12个动态运行的phase有任意一个objection提起,那么run_phase也会自动执行,但如果run_phase里有objection提起,但12个小phase里没有任何objection提起,那么只有run_phase会运行,12个小phase不会运行
必须要有raise and drop才能执行耗时语句
virtual task shutdownn_phase(uvm_phase phase);
super.shutdown_phase(phase);
#1;//无有效时间,phase到该条直接退出,不会打印信息
`uvm_info("case_0","shutdown_phase",UVM_MEDIUM);
endtask