在class uvm_phase extends uvm_object中
1. 类的作用和结构
这个类是uvm_phase,它管理测试平台中阶段的 objection 机制。UVM 使用 objection 机制来控制仿真的执行时间,防止测试提前结束。
核心成员:
systemverilog
uvm_objection phase_done; // 阶段的 objection 对象
2. 核心方法详解
2.1raise_objection方法
systemverilog
function void uvm_phase::raise_objection (uvm_object obj, string description="", int count=1); if (phase_done != null) phase_done.raise_objection(obj, description, count); else m_report_null_objection(obj, description, count, "raise"); endfunction
功能:提起 objection,表示阶段还需要继续执行
参数:
obj:提起 objection 的对象(通常是 uvm_component)description:描述信息(用于调试)count:提起的数量(默认1)
作用:增加 objection 计数器,阻止阶段过早结束
2.2drop_objection方法
systemverilog
function void uvm_phase::drop_objection (uvm_object obj, string description="", int count=1); if (phase_done != null) phase_done.drop_objection(obj, description, count); else m_report_null_objection(obj, description, count, "drop"); endfunction
功能:放下 objection,表示对象不再需要阶段继续执行
参数:同
raise_objection作用:减少 objection 计数器,当所有 objection 都放下时,阶段可以结束
2.3get_objection_count方法
systemverilog
function int uvm_phase::get_objection_count (uvm_object obj=null); if (phase_done != null) return phase_done.get_objection_count(obj); else begin m_report_null_objection(obj, "", 0, "get_objection_count"); return 0; end endfunction
功能:获取 objection 计数
参数:
obj(可选)- 指定对象,如果为 null 则获取总计数返回值:当前阶段活跃的 objection 数量
2.4get_objection方法
systemverilog
function uvm_objection get_objection(); return this.phase_done; endfunction
功能:获取 phase_done objection 对象的句柄
3. 错误处理机制
所有方法都包含空指针检查:
systemverilog
if (phase_done != null) // 正常操作 else m_report_null_objection(...); // 报告错误
当phase_done未初始化时,调用m_report_null_objection报告错误。
4. UVM Phase 执行流程示例
systemverilog
class my_test extends uvm_test; task run_phase(uvm_phase phase); phase.raise_objection(this, "Starting test"); // 执行测试活动 #100; phase.drop_objection(this, "Test completed"); endtask endclass
5. 关键特点
代理模式:
uvm_phase将 objection 操作委托给phase_done(uvm_objection实例)空安全:所有方法都检查
phase_done是否有效灵活性:支持多个对象同时管理 objection
调试支持:通过 description 参数提供调试信息
6. 实际应用场景
这种设计允许:
并行执行:多个组件可以独立控制 objection
精确控制:可以精确控制仿真何时结束
错误检测:及时报告配置错误(如未初始化的 objection)
这个机制是 UVM 仿真控制的核心,确保测试平台只在所有必要活动完成后才结束仿真。