(七)phase机制

一、phase机制

1、简述

UVM中phase分两类,一类是function phase,不耗费仿真时间;另一类是task phase,消耗仿真时间。见下图,灰色是task phase,其他为function phase

说明:

  • run-time phase指run_phase包含的12个小的phase,称动态运行(run-time)的phase。
  • run_phase和pre_reset_phase等12个小的phase并行运行。上图中的不同的phase之间在时间上是自上而下执行。
  • reset_phase对DUT进行复位、初始化等操作
  • 在configure_phase进行DUT的配置
  • DUT的运行主要在main_phase完成
  • shutdown_phase则是做一些与DUT断电相关的操作
  • 常用的phase主要是build_phase,connect_phase,main_phase。
  • build_phase作用主要是例化子组件、例化寄存器模型,get_config_db为组件设置一些值。
  • connect_phase作用主要是建立连接,比如寄存器模型和组件,TLM通信中的port、export,和组件之间的连接等。

2、phase的执行顺序

  • 从UVM树结构来看,除了build_phase、final_phase之外,所有不耗费仿真时间的phase(即function phase)都是自下而上执行的。对于uvm树中同一层次的组件(兄弟关系),是按例化时的那个名字字典顺序执行的。
  • 对于task phase,所有组件的run_phase时自上而下顺序启动,但它们是同时运行的,并不要等待上个组件的run_phase执行完成才执行下一个组件的run_phase。
  • 对于12个小phase,run-time phase,对不同组件的同一phase,是同时启动执行的,但不一定同时结束,但必须等所有组件的上一个phase执行结束后,才能同时执行下一个小phase。同一个component的run_phase与其post_shutdown_phase全部完成才会进入下一个phase(extract_phase)
  • UVM采用深度优先的原则,比如scordboard和driver的build_phase,先吧driver支路执行完再执行,再执行scordboard的build_phase,如图所示,常用UVM树结构图

  • 对于build_phase来说,uvm_component自动获取通过config_db::set设置的参数,如果要关掉这个功能,可以在自己的build_phase中不调用super.build_phase除build_phase外,在写其他phase时,完全可以不必加上super.xxxx_phase语句,这个结论只适用于直接扩展自uvm_component的类。

3、objection机制

1、用raise_objection和drop_objection来提起、撤销,控制验证平台各个phase的运行,解决何时结束仿真的问题主要控制task phase,消耗时间的phase。

  • 如果phase没有提起任何objection,那么将会直接跳转到下一个phase中,里面消耗时间的语句也不会运行。
  • 如果想执行一些耗费时间的代码,那么要在此phase下任意一个component中至少提起一次objection
  • 在任意一个A组件中的phase中提起objection,其他组件中的相同phase也会被相应的提起,但其他组件的执行时间受到提起phase的A组件控制,即A撤销phase,其他组件也会强制结束该phase。
  • 对于run_phase,第一是其他动态运行的phase中有objection被提起,run_phase也会被相应提起反之不成立。在这种情况下,运行时间受其他动态运行phase中objection控制,run_phase只能被动地接受。第二是在run_phase中raise_objection,这种情况下运行时间完全受run_phase控制。
  • 为什么要在类似task main_phase(uvm_phase phase)任务中加入phase?
  • 在UVM中,测试的不同阶段被表示为不同的uvm_phase对象,这些阶段被组织成一个阶段(phase)序列,并通过UVM中的uvm_phase类来管理,每个测试都需要通过不同的阶段。在测试执行期间,系统会定期将当前阶段传递给每个组件,以便组件可以针对不同的阶段执行特定的行为,便于控制所有组件相同的phase的raise_objection和drop_objection,即参数phase就表示当前运行阶段的phase。

 说明:

  1. 在命令行可以使用+UVM_PHASE_TRACE来调试phase
  2. 可以在命令行使用+UVM_OBJECTION_TRACE来调试objection

2、在sequence中,通过starting_phase来raise_objection和drop_objection,用于控制仿真平台的运行,主要可以控制sequence中激励的产生与发送,这些要消耗仿真时间。starting_phase的值可以通过set default_sequence(uvm1.1允许)来自动设置或者手动设置;还可以在base_test及其继承类里raise_objection和drop_objection,以便控制多个sequence的运行。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UVM(Universal Verification Methodology)是一种基于SystemVerilog的验证方法学,它提供了一种灵活的机制来开发可重用的验证环境。UVM中定义了一系列的phase,用于控制验证环境中的各个组件的执行顺序和时序。 UVM中的phase机制主要由以下几个部分组成: 1. UVM Manager:负责管理phase的全局状态和控制phase的执行顺序。 2. UVM Phasing Mechanism:包括各个组件的phase方法和phase queue,用于在不同的phase中执行相应的任务。 3. UVM Phasing Callbacks:用于在phase开始和结束时执行相应的回调方法。 4. UVM Factory:用于创建和配置UVM组件。它提供了一种机制来动态创建和配置组件,使得验证环境更加灵活和可重用。 在UVM中,整个验证环境被分为多个阶段,每个阶段执行不同的任务。这些阶段包括: 1. Build Phase:在这个阶段中,各个组件被创建和配置。 2. Connect Phase:在这个阶段中,各个组件被连接起来,形成完整的验证环境。 3. Run Phase:在这个阶段中,进行实际的测试,包括生成测试向量、模拟等。 4. Shutdown Phase:在这个阶段中,关闭测试环境,释放资源。 在每个阶段中,UVM Manager都会调用相应的phase方法来执行各个组件的任务。各个组件可以通过实现相应的任务方法来完成各自的任务。同时,UVM还提供了一些回调方法,用于在phase开始和结束时执行一些额外的操作,例如打印日志、统计分析等。 通过使用UVM的phase机制,可以使验证环境更加灵活、可重用和可维护。同时,由于UVM是基于SystemVerilog的,所以也可以很好地与设计进行集成,提高验证的效率和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值