UVM的phase机制(Ⅰ)

news/2024/11/29 6:51:05/

uvm存在phase机制,每个phase完成对应的功能。将所有的程序分解在不同的phase中执行,保证了验证环境的验证代码的执行顺序。并且每个phase完成对应的功能,使验证环境运行仿真层次化,让各种组件的例化次序正确,环境的执行顺序正确

关于uvm phase的介绍分为两个部分:

1)phase的运行机制(也就是张强老师书中介绍部分)

2) 整个环境是如何将所有的phase运行起来的(phase 源码分析)

一、phase的运行机制

uvm phase 分为function phase和task phase。function phase不消耗仿真时间,在仿真时间=0时就开始执行。task phase消耗仿真时间,需要一段时间才能执行完成。在所有phase中只有run_phase和动态运行phase是task,其余为function。

这些phase分别为:

环境中的程序执行顺序是由图上的phase自上而下开始执行 从build_phase ---> connect_phase -----> …… ---->run_phase----->final_phase。最终完成整个环境的执行。只有所有component的build-phase执行完毕后才会执行connect_phase。当然这个build_phase是不消耗仿真时间的。所以看上去build_phase,connect_phase都是在0s进行仿真,但其实是有前后顺序的

build_phase: 实例化组件。自上而下执行。这里指的是对于所有component的build_phase,是从env---->in_agent/out_agent/rm/scb(此处按照实例名的字典序)---->driver/monitor。有一个简单记忆的方法,build_phase是用来建立env树的,树的生长都必须从根长到叶子。

connect_phase :连接各组件;从dut获得虚接口。除了build_phase,都是自下而上的执行。

run_phase:是task,仿真开始给出激励,rm转换,monitor采样,scb比较。所有组件的run_phase都是自下而上的启动,并行执行。

不同层次同一层次叔侄关系
build_phase自上而下按照同一层次组件的实例名字典顺序执行深度优先
其余function phase自下而上按照同一层次组件的实例名字典顺序执行深度优先
run_run_phase自下而上启动,并行执行按照同一层次组件的实例名字典顺序执行,并行启动深度优先

表和文字描述通常比较抽象,举个例子,下面环境的执行

可以看到build_phase的组件执行顺序,其他phase则相反。 不同层次采用自顶向上,同一层次采用实例名的字典序,叔侄关系采用深度优先的原则。

 

以上是关于phase运行的粗略介绍,

1.2 下面就run_phase和12个动态运行的phase进行介绍

  • 它们在所有组件中,自上而下启动,所有组建的每种phase并行执行fork-join_none)
  • 两种同步
    1. 动态运行的12个phase,只有所有组件的这个phase执行完毕才可以执行下一个。

 如图,A B在不同的phase中都存在一段空白,但是从系统层面看task phase没有空白。需要等到两个组件对应的phase都执行完成后,完成下一个。

         2. run_phase和post_shutdown_phase的同步

同一个组件的run_phase和post_shutdown_phase全部完成后才会进入下一个phase(exact_phase) 

这两种同步用这张图可以表示:

 二、super.phase的内容

除build_phase外,在写其他phase时,完全可以不加super.xxx_phase (自己定义的类除外)


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

相关文章

Phase机制

目录 一.Phase机制的意义? 二.Phase图表 三.phase的执行顺序 1.UVM中不同phase的执行顺序 2.兄弟关系component的phase执行顺序 3.叔侄关系component的phase执行顺序 4. task phase的执行顺序 四.phase的其他知识 1.super.phase 2.uvm_error 3.phase的跳转 …

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接口 …