UVM学习笔记--phase机制

1.UVM phase 概览

UVM采用phase机制来自动化运行testbench各个仿真过程。UVM phase支持显示或隐式的同步方案,运行过程中的线程控制和跳转。用户只要把代码填入对应的phase,这些代码就会自动在正确的时间执行。各个phase执行顺序如下图所示:

See the source image

相较于OVM,UVM新增了12个小的task phase,如下图:

其中run_phase和uvm新增加的12个小phase是并行执行的。 

2 按是否消耗仿真时间,所有phase可以分成两大类

    <1>  function phase:不消耗仿真时间,而其也可分成两大类:
          a. 继承自uvm_bottomup_phase, 在UVM component树中,自下而上的执行, 如connect_phase
          b. 继承自uvm_topdown_phase, 在UVM component树中,自上而下执行, 如build_phase
    <2>  task phase:消耗仿真时间的,也称动态运行(run-time)phase. 

下图是各个phase的继承关系,从中可以看出

UVM Phase Classes

 

自上而下(top-down) function phase:build和final phase。

自下而上(bottom-up)f unction phase:  connect, end_of_elaboration,start_of_simulation, extract, check, report。

task phase: run_phase以及其他12个小phase: pre_reset, reset_phase, post_reset, pre_configure, configure, post_configure, 
pre_main, main, post_main, pre_shutdown, shutdown, post_shutdown, 如下图:

UVM run time phases

 

3 task phase的同步

一个UVM验证平台有许多component组成,每个component都有自己的run_phase,以及从pre_reset 到post_shuddown的12个小phase。只有所有component的一个小task phase 完成,整个仿真平台才开始下一个小task phase的执行。 各个component的run_phase之间,以及run_phase于最后一个小phase--post_shutdown_phase之间,都有这样的同步。

See the source image

4. super.xxx_phase

除了super.build_phase,其他super.xxx_phase几乎没做任何事情,因此,除了build_phase,其他phase可不必加super.xxx_phase.

在super.build_phase中,主要完成自动获取config_db中参数的功能,如果自定义的component无需获取任何参数,也可省略。

5. phase的跳转

默认情况下各phase是从上到下按时间顺序执行,但可以自定义做必要的跳转,如在main_phase执行过程中,突然遇到reset信号被置起,可以用jump()实现从mian_phase到reset_phase的跳转:

phase.jump(uvm_reset_phase::get())

task my_driver::main_phase(uvm_phase phase);
  `uvm_info("driver", "main phase", UVM_LOW)
  fork
    while(1) begin
      seq_item_port.get_next_item(req);
      drive_one_pkt(req);
      seq_item_port.item_done();
    end
    begin
      @(negedge vif.rst_n);
      phase.jump(uvm_reset_phase::get());
    end
  join
endtask

跳转的限制

不能跳转到build到start_of_function的function phase, 也不能跳转到run_phase. 从pre_reset_phase后的所有phase都可以作为jump()的参数。 除了向前跳转,也可向后跳转。除了向run-time phase跳转,甚至可以向final_phase等function phase跳转。

phase的调试

  • 在命令行加UVM_PHASE_TRACE,可以将进入和退出个phase的信息打印到log中。

        <sim command> +UVM_PHASE_TRACE

  • 在指定phase设置verbosity:

       <sim command> +uvm_set_verbosity=<comp>,<id>,<verbosity>,<phase> 

      例如:simv   +uvm_set_verbosity=uvm_test_top.env.mdl,my_model,UVM_NONE,main  +UVM_TESTNAME=my_case0 +UVM_PHASE_TRACE  -l tmp.log

       注意,其中参数<phase> 不需要phase后缀,如上面例子将uvm_test_top.env.mdl的main_phase中打印的信息屏蔽掉,命令行里用的是+uvm_set_verbosity=uvm_test_top.env.mdl,my_model,UVM_NONE,main 。

  • 设置timeout时间

      1. 通过命令行:<sim command> +UVM_TIMEOUT=<timeout>,<overridable>
             如<sim command> +UVM_TIMEOUT="300ns, YES" 

      2.通过在base test中使用set_timeout(): uvm_top.set_timeout(500ns,0);

          必要时需要修改宏定义:`define UVM_DEFAULT_TIMEOUT 9200s

   


参考
UVM实战(卷1) (张强 著)

UVM基础之------uvm phases机制

UVM Phases

UVM Phasing page from www.learnuvmverification.com

UVM Tutorial for Candy Lovers – 22. Phasing

UVM_Presentation_DAC2011_Final

版权声明:本文为wonder_coole原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wonder_coole/article/details/90443373

智能推荐

嵌入式Linux——应用调试:用户态打印段错误信息

简介:     很多时候我们会遇到段错误:segmentation fault,而段错误有时是由内核引起的,有时是由应用程序引起的。在内核态时,发生段错误时会打印oops信息,但是在用户态时,发生段错误却只会打印segmentation fault而并不会打印其他的信息。所以本文主要介绍在用户态时,通过修改内核设置和添加启动参数来打印引发segmentati...

springboot1.4.1整合logback 遇到的问题

springboot1.4.1整合logback 遇到的问题 项目使用了springboot1.4.1整合logback,然而设置的过期时间15 并没有生效, 2GB达到2G自动删除也没有生效,仅仅实现了按大小分割。 经过查看pom 父工程内的源码发现是默认的logback版本是1.1.7,而过期时间配置是在logback 1.1.8以后才支持的。 不得不说这是springboot1.4.1 的b...

记一次C/S架构的渗透测试

概述 目标站点是http://www.example.com,官网提供了api使用文档,但是对其测试后没有发现漏洞,目录、端口扫描等都未发现可利用的点。后发现官网提供了客户端下载,遂对其进行一番测试。 信息收集 先抓了下客户端的包,使用Fiddler和BurpSuite都抓不到,怀疑走的不是HTTP协议,用WireShark查看其确实用的是HTTP协议,但是数据包不好重放,这里最后使用了WSExp...

Linux:结合Securecrt进行文件上传(lrzsz)P2

1、安装rzsz软件   2、点击Scurecrt的option——X/Y/Z配置上传和下载目录   3、首先在Linux里切换到一个目录,然后用rz命令,文件就会上传到钙Linux的目录下   只要敲rz即可,然后在弹出的对话框里选择需要上传的文件即可 4、下载文件用sz   下载单个文件:在当前目录下有该文件     sz filename   下载...

SQL 提示作为 布局 生存工具指南

下面是一些展示AdventureWorks中表现最好的销售人员并列出他们的经理的结构化查询语言代码。 它产生以下结果。 所以,代码是有效的,但它是丑陋的。 如果我需要理解和改进代码,我首先需要把它变成可读的形式。 我有结构化查询语言提示,所以我可以按下计算机的ctrl按键键 踢你自己),它会应用默认的内置代码样式,并对此进行修复。 不,不是,因为我相信你仍然不喜欢它的格式。 没有两个开发人员能够就...

猜你喜欢

Vue+Springboot解决数据传输时参数格式不匹配问题

前端:使用的是ant design vue ,端口号为8000 后端:使用的是springboot框架开发,端口号为8080 需求:已经解决跨域问题,前端发送登录的信息给后台,后台接收不到 样例: 前端: 后台: 请求的数据格式为json格式,后台参数类型不匹配 解决方案 第一种: 修改后端,参数类型: 第二种方式: 在前端vue框架中加入qs插件,qs 是一个增加了一些安全性的查询字符串解析和序...

Flex布局做出自适应页面--语法和案例

本文发布在: github项目地址:https://github.com/tenadolanter/flex-layout-demo SegmentFault地址:https://segmentfault.com/a/1190000012916949/ CSDN地址:http://blog.csdn.net/qq_34648000/article/details/79115294 博客园地址:ht...

Java - 基于 Apache POI 创建 Excel 文件

基于 Apache POI 创建 Excel 文件 准备 新建 Maven Project,引入依赖: 创建行和列 设置列宽 设置列宽(第 19 行): 注意:其他行的首列的宽度是受第一行、第一列的影响而变宽,并非我们设置的。 设置字体颜色 设置字体颜色(第 25 ~ 31 行): 设置网页超链接 设置网页超链接(第 18、27 ~ 29 行): 参考 java操作excel常用的两种方式...

python基础-质数判断及优化

文章目录 一、问题描述 二、代码 三、问题2优化 四、数学补充 一、问题描述 质数判断条件: 质数是只能被1和它自身整除的数,1不是质数也不是合数。 二、代码 问题1代码 问题2代码 三、问题2优化 优化方案: 模块,通过模块可以对Python进行扩展 引入一个time模块,来统计程序执行的时间 time()函数可以用来获取当前的时间,返回的单位是秒 获取程序开始的时间,以运行时间来衡量优化结果。...

部署jenkins+svn持续集成

部署环境:CentOS7+jdk8 svn版本是windows,jenkins是linux 然后下载jenkins的yum源文件,获取jenkins的下载** 输入本机ip+端口,然后在这个web界面显示的路径里把**复制出来,下一步后选择推荐插件安装,后面需要用的插件可以再安装,等待安装完成后,第一次登陆不需要密码,可以设置登陆用户。 然后配置全局设置 如果你是yum安装得git,按照我得写,如...