当前位置: 首页 > news >正文

uvm phase

UVM(Universal Verification Methodology)的 Phase(阶段)机制 是验证环境初始化和执行流程的核心控制框架。它通过预定义的阶段(Phase)管理组件的创建、连接、运行和清理,确保验证平台的有序执行。以下是对UVM Phase的详细解析:


Phase 的核心作用

  1. 流程标准化:定义验证环境的初始化、执行和收尾流程。
  2. 执行顺序控制:确保组件按正确顺序创建、连接和运行(如先创建父组件,再创建子组件)。
  3. 同步机制:通过 Objection机制 控制仿真结束时间。
  4. 层次化执行:支持组件按层次结构逐级处理各阶段任务。

Phase 的分类与执行顺序

UVM Phase分为 主要阶段(Major Phases)运行阶段(Run-Time Phases),执行顺序严格固定。

1. 主要阶段(Major Phases)

按执行顺序排列如下:

  1. Build Phase

    • 类型function 阶段(不消耗仿真时间)。
    • 作用:自顶向下(Top-Down)创建组件层次结构。
    • 代码示例
      class my_env extends uvm_env;
        my_agent agent;
        function void build_phase(uvm_phase phase);
          super.build_phase(phase);
          agent = my_agent::type_id::create("agent", this); // 创建子组件
        endfunction
      endclass
      
  2. Connect Phase

    • 类型function 阶段。
    • 作用:自底向上(Bottom-Up)连接组件间的端口(如TLM连接)。
    • 代码示例
      function void connect_phase(uvm_phase phase);
        agent.monitor.analysis_port.connect(scoreboard.analysis_export); // 连接Monitor到Scoreboard
      endfunction
      
  3. End of Elaboration Phase

    • 类型function 阶段。
    • 作用:在环境完全构建后执行最终配置(如打印拓扑结构)。
  4. Start of Simulation Phase

    • 类型function 阶段。
    • 作用:仿真开始前的最后准备(如加载初始配置)。
  5. Run Phase

    • 类型task 阶段(可消耗仿真时间)。
    • 作用:执行主要测试逻辑(如启动Sequence、驱动DUT信号)。
    • 代码示例
      task run_phase(uvm_phase phase);
        my_sequence seq = my_sequence::type_id::create("seq");
        seq.start(sequencer); // 启动Sequence
      endtask
      
  6. Extract/Check/Report Phases

    • 类型function 阶段。
    • 作用:收集数据、检查结果并生成报告。

2. 运行阶段(Run-Time Phases)

run_phase 内部,可进一步细分为 动态运行子阶段,用于更精细的控制:

  1. Pre-Resolve Phase
  2. Reset Phase:DUT复位阶段。
  3. Configure Phase:配置DUT寄存器。
  4. Main Phase:执行主要测试场景。
  5. Shutdown Phase:关闭DUT或清理状态。
  • 执行顺序
    reset_phase → configure_phase → main_phase → shutdown_phase
    
  • 使用场景
    task main_phase(uvm_phase phase);
      phase.raise_objection(this);
      // 执行主测试逻辑
      phase.drop_objection(this);
    endtask
    

Phase 的关键机制

1. Objection 机制
  • 作用:控制仿真何时结束。

  • 规则

    • task Phase(如 run_phase)中,必须通过 raise_objection()drop_objection() 标记任务开始和结束。
    • 当所有Objection被撤销后,仿真自动结束。
  • 代码示例

    task run_phase(uvm_phase phase);
      phase.raise_objection(this);  // 标记开始
      // 执行测试逻辑(如启动Sequence)
      phase.drop_objection(this);   // 标记结束
    endtask
    
2. 同步机制
  • 全局同步:同一Phase在所有组件中完成当前阶段后,才进入下一阶段。
  • 层级同步:父组件的Phase在子组件的同一Phase完成后才会结束。

Phase 的常见问题与解决

  1. 仿真提前结束

    • 原因:未正确使用 raise_objection/drop_objection
    • 解决:在 task Phase中始终成对调用这两个方法。
  2. 端口连接失败

    • 原因:在 build_phase 中访问未创建的组件。
    • 解决:确保在 connect_phase 中连接端口,而非 build_phase
  3. Phase顺序冲突

    • 原因:在 build_phase 中依赖其他组件的子组件。
    • 解决:遵循自顶向下的创建顺序。

自定义 Phase(高级用法)

UVM允许用户添加自定义Phase,但需谨慎使用。
示例步骤

  1. 定义新的Phase类型:
    class my_custom_phase extends uvm_task_phase;
      `uvm_register_task_phase(my_custom_phase)
    endclass
    
  2. 在组件中实现该Phase的回调方法:
    task my_custom_phase(uvm_phase phase);
      // 自定义逻辑
    endtask
    

总结

UVM Phase通过分阶段的执行流程和Objection机制,确保了验证环境的可靠初始化、同步运行和有序退出。合理使用Phase机制可以显著提升验证平台的可维护性和调试效率。以下是关键点速查表:

Phase类型执行方向主要用途
build_phasefunction自上而下创建组件实例
connect_phasefunction自下而上连接端口和接口
run_phasetask并行执行执行测试逻辑(需Objection)
report_phasefunction自下而上生成测试报告

通过理解并正确应用Phase机制,验证工程师可以构建高效、稳定的UVM验证环境。

相关文章:

  • 海康威视摄像头混合目标检测事件数据说明文档
  • 3.1.3 MYSQL连接池
  • 第十一章:Python PIL库-图像处理
  • 智能仪表板DevExpress Dashboard v24.2新版亮点:支持.NET 9
  • 【Java】Springboot整合redis
  • 【go微服务】如何快速掌握grpc开发
  • 王者荣耀服务器突然崩了
  • 基于类型属性的重载
  • 标准库中有uint32_t类型吗?
  • 深入剖析Redis分布式锁:Redlock算法源码解读与实战
  • C++修炼:string类的使用
  • 前端Vue
  • 【HCIA-网工探长】12:生成树笔记
  • Python使用ccplot绘制CALIPSO L1B后向散射
  • C# 异步方法设计指南:何时使用 await 还是直接返回 Task?
  • C++ 字符处理、编码格式
  • 20250328易灵思FPGA的烧录器FT4232_DL的驱动安装
  • postgresql+patroni+etcd高可用安装
  • unity 截图并且展现在UI中
  • turtle的九个使用
  • 靠网站点击就能赚钱的做/网络营销战略
  • 织梦做的网站织梦修改网页/sem竞价托管代运营
  • 网站优化 合同/最新国际新闻
  • 做网站推广的工作内容/百度权重3的网站值多少
  • 企业数字化建设公司/温州最好的seo
  • 免费外贸b2c网站建设/网络营销服务平台