Phase机制

news/2024/11/29 6:32:39/

 

目录

 一.Phase机制的意义?

二.Phase图表

三.phase的执行顺序

1.UVM中不同phase的执行顺序

2.兄弟关系component的phase执行顺序

3.叔侄关系component的phase执行顺序

4. task phase的执行顺序

四.phase的其他知识

1.super.phase

2.uvm_error

3.phase的跳转

4.phase的调试

5.超时退出

五.objection机制

1.概述

2.run phase与动态运行的phase

        动态运行的phase中有objection提起,run phase可自动执行(受控)

        run phase主动提起objection,动态运行的phase不会自动执行(主控) 

        其实不用过分纠结phase的提起与落下,objection机制主要针对的是task phase,其他function phase没有必要提起或落下objection(但是不代表不可以,只是没有意义)。

3.set_drain_time

4.objection的调试

六.domain机制

概述


一.Phase机制的意义?

        在不同的时间做不同的事儿,是UVM中phase的设计哲学。phase的自动执行功能极大方便了用户,很大程度上解决了因代码顺序杂乱可能会引发的问题。引入phase机制,清晰地将UVM仿真阶段层次化引入phase机制,清晰地将UVM仿真阶段层次化

二.Phase图表

主要分为9大phase,其中run_phase又与其他12个小phase并行执行。

常用的phase有build_phase,connect_phase,run_phase,report_phase.

除了run_phase,其他都是function,不消耗时间;

除了build_phase和final_phase,其余function phase都是自底向上的执行顺序;

引入12个小phase是为了实现更精细的控制;

reset                        复位、初始化

config                      DUT配置

main                        DUT运行

shutdown                断电 

(背就完事了,多看几遍就记住了)

三.phase的执行顺序

1.UVM中不同phase的执行顺序

        从时间上讲,各个phase严格按照图表中的顺序,自上而下执行;

example:先执行build_phase,再执行connect_phase;

        从空间来看,按照UVM树形结构,一层层往下执行;

example:先执行my_case的build_phase,再执行env的build_phase。

2.兄弟关系component的phase执行顺序

        执行顺序按照字典序;

example:

        agent下的driver与monitor属于同一层次,若monitor在new时指定名字“aaa”,driver指定名字“bbb”,则先执行monitor的build_phase,再执行driver的build_phase。

3.叔侄关系component的phase执行顺序

         执行顺序为深度优先;

example:

         此处结合第2点。env下的agent与scoreboard属于同一层次,若agent在new时指定名字“aaa”,scoreboard指定名字“bbb”,则先执行agent的build_phase,然后执行agent下driver及monitor的build_phase,最后再执行scoreboard的build_phase。

4. task phase的执行顺序

        (1).task phase会消耗时间。对于父子关系的run_phase,启动顺序仍然是自下而上,但是同时以fork_join none的形式在运行;

        (2).对同一个component的12个小phase,虽然是顺序执行,但是以main_phase为例,A的main_phase结束后,不会马上跳转到post_main_phase,而会等整个验证平台的其他component的main_phase都结束之后,才会统一跳转到下一个phase;

四.phase的其他知识

1.super.phase

        对于uvm_component类,除了build_phase,其他phase书写时完全不必加super。

        利用super.build_phase自动获取config_db::set设置的参数。

2.uvm_error

        通常利用uvm_fatal直接退出仿真;

        但在end_of_elaboration_phase及之前的phase中出现uvm_error,仿真也会自动结束。

3.phase的跳转

        只有uvm_pre_reset之后的所有phase才可以跳转。

        向前跳转只能到该phase之前的动态运行的phase,向后跳转可以到final phase。

4.phase的调试

        UVM_PHASE_TRACCE 

5.超时退出

        uvm_root.set_timeout(延迟时间,是否可以被后续的延时覆盖(0/1))

默认时间为9200s,若到时间测试用例未结束,会生成uvm_fatal结束仿真。

五.objection机制

1.概述

        在进入某一phase时,UVM会收集此phase提出的所有objection,当所有objection都被撤销后,就会关闭此phase,进入下一个phase。当所有phase都执行完毕后,会调用$finish来将整个验证平台关闭。

        objection机制就是为了控制仿真结束,一般情况只在sequence中控制objection。

2.run phase与动态运行的phase

        动态运行的phase中有objection提起,run phase可自动执行(受控)

        run phase主动提起objection,动态运行的phase不会自动执行(主控) 

         

        其实不用过分纠结phase的提起与落下,objection机制主要针对的是task phase,其他function phase没有必要提起或落下objection(但是不代表不可以,只是没有意义)。

3.set_drain_time

        phase.phase_done.set_drain_time(this,200)

当检测到没有objection提起时,经过延时再进入下一个phase。

一个phase对应一个drain_time,默认为0。

4.objection的调试

        UVM_OBJECTION_TRACCE (和phase的有点像)

六.domain机制

概述

       domain是UVM中一个用于组织不同组件的概念。

默认情况下,所有的component组件都位于一个common_domain的domain中。

 图左为common_domain,图右为两个不同的domain

        domain把两个时钟域隔开,之后两个domain的各个动态运行的phase 就可以不同步,只能隔离run-time phase,run_phase 和其它function phase 是同步的。(重点!!!)

        domain隔开后,phase的跳转只能在当前的domain中跳转。


http://www.ppmy.cn/news/380583.html

相关文章

mybatis的一级缓存和二级缓存

目录 1、简介 2、Mybatis缓存 3、一级缓存 3.1、初体验测试 3.2、一级缓存失效的四种情况 4、二级缓存 4.1、使用步骤 4.2、结论 5、缓存原理 1、简介 什么是缓存 [ Cache ]? 存在内存中的临时数据。将用户经常查询的数据放在缓存(内存&…

IDEA中类模板注释和方法注释模板

类注释 /* *ClassName ${NAME} *Author --你的别名 *Description //TODO *Date ${DATE} ${TIME} *Version 1.0 **/ 把上面的代码粘贴到settings-editor-file and code templates下的class的“public class”和#parese的中间 2.方法注释 /* *Author --你的别名 *Description …

tmux常用操作

文章目录 功能结构操作 功能 分屏。允许断开Terminal连接后,继续运行进程。 结构 一个tmux可以包含多个session,一个session可以包含多个window,一个window可以包含多个pane。 实例: tmux:session 0:windo…

微服务架构基础--第2章初识SpringBoot

第2章初识SpringBoot 一.预习笔记 1.SpringBoot的定义: SpringBoot是由Pivotal团队提供的一个全新框架,是为了简化Spring应用的初始搭建过程和开发过程。 2.SpringBoot的优点 1)可快速的构建独立Spring应用程序 2)内嵌Servle…

#2023开放原子全球开源峰会之旅

#2023我在开源峰会 2023开放原子全球开源峰会参会指南 嗨咯,大家好! 6月11号,是一年一度的开放原子大会,有幸参加,很开心! 文章目录 1、逛展区(领周边)环节1.1 CSDN展区1.2 阿里云 …

Android 10.0 截屏流程

I. 简介 Android 10.0版本在截屏方面做了一些改进和优化,使得截屏更加方便和高效。在Android 10.0版本中,可以使用多种方式实现截屏,其中包括使用系统快捷键、使用手势操作、调用API等。 Android 10.0版本中,截屏的流程大致如下…

【RV1126】按键中断--使用输入子系统事件方式

文章目录 选择GPIO修改设备树修改驱动源码probe:增加外部中断以及定时器服务函数。命令行测试中断确定按键的输入子系统的event使用hexdump命令测试按键实际效果 测试应用程序完整的驱动代码 我使用的是荣品的pro-rv1126。 选择GPIO 结合原理图 决定使用UART1接口 …

算法leetcode|57. 插入区间(rust重拳出击)

文章目录 57. 插入区间:样例 1:样例 2:样例 3:样例 4:样例 5:提示: 分析:题解:rust:go:c:python:java: 57. 插…