uvm的report机制,主要涉及uvm_report_object,uvm_report_handle,uvm_report_server这三个类:

uvm_report_object主要是提供uvm_report的接口函数,

uvm_report_handle主要根据message的configuration,来将message传输到显示模块,

uvm_report_server主要实现具体的显示功能,文件读写功能,

一个report的组成部分:id string,severity(四种severity,来区分不同的action),verbosity(决定打印log的层次),message,action

log的显示可以直接输出到display或者直接输入到某个指定的文件中,文件的descriptors符合SV的标准。

uvm_report_object中的对象和function:

包含一个report_handle,来与之传递message。

主要的Function:

uvm_report_enabled(verbosity,id);供上层调用;

      子函数:uvm_process_report_message(uvm_report_message),将message传递给相应的handle。

uvm_report(severity,id,message,verbosity,filename,line,context_name,report_enabled_checked);最重要的函数;

      filename是一个宏定义:`__filename__,line是一个宏定义:`__line__

      context_name是一个string,表示comp的路径,可以用%m来sformat产生。

      report_enabled_checkd,表示已经经过判断,不在内部进行verbosity的判断。

四种调用uvm_report的function,只是将相应severity替换

      

verbosity的设置:(根据id和verbosity)

      verbosity按数值计算,predefine的从低到高依次是UVM_NONE,UVM_LOW,UVM_MEDIUM,UVM_HIGH,UVM_FULL

      

uvm_action的设置:包括UVM_NO_ACTION,UVM_DIAPLAY,UVM_LOG,UVM_COUNT,UVM_STOP,UVM_EXIT,UVM_CALL_HOOK

      

输出file的设置:

      

severity的override的设置:

      

自己report_handle的设置:

      

hook操作,只有在uvm_action是UVM_HOOK的时候,才会执行,先调用report_hook,然后根据severity在进行调用,只要有一个function返回

      0,report就不会有后续的操作:

      

report_header:打印一些copyright的信息,在run_test执行时,先于其他component的phase执行,file为0时,输出到display,否则输出到指定文件

      

report_summarize:由report_server里report summarize:file为0时,输出到display,run_test在顶层结束时,调用:

      

die function,在uvm_count计数到一定的值,自动调用die函数,先输出summary再调用$finish:

      

uvm_report_message是UVM中message的类型类,其中包括(int,string,object)container,已经add操作,已经对handle和object的接口操作

重要的方法有:new和message的set:

      

      

report源码分析——report_object和report_message的更多相关文章

  1. report源码分析——宏的执行

    uvm_info,uvm_error其实是对uvm_report_info,uvm_report_error的封装. 其中warning,error,fatal,macros默认都是定义为UVM_NO ...

  2. report源码分析——report_handle和report_server和report_catcher

    report_handle主要实现对message的action,severity,file的设置,然后将message传递给server: 主要的function有两个:initial和proces ...

  3. zookeeper源码分析之四服务端(单机)处理请求流程

    上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...

  4. 最新版ffmpeg源码分析

    最新版ffmpeg源码分析一:框架 (ffmpeg v0.9) 框架 最新版的ffmpeg中发现了一个新的东西:avconv,而且ffmpeg.c与avconv.c一个模样,一研究才发现是libav下 ...

  5. Solr4.8.0源码分析(13)之LuceneCore的索引修复

    Solr4.8.0源码分析(13)之LuceneCore的索引修复 题记:今天在公司研究elasticsearch,突然看到一篇博客说elasticsearch具有索引修复功能,顿感好奇,于是点进去看 ...

  6. Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建

    Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建 由于公司里的Solr调试都是用远程jpda进行的,但是家里只有一台电脑所以不能jpda进行调试,这是因为jpda的端口冲突.所以 ...

  7. goahead webserver源码分析

    1.一个txt文本架构图 main() | |--websOpenServer() |             |-- websOpenListen() |                       ...

  8. HTTP服务器的本质:tinyhttpd源码分析及拓展

    已经有一个月没有更新博客了,一方面是因为平时太忙了,另一方面是想积攒一些干货进行分享.最近主要是做了一些开源项目的源码分析工作,有c项目也有python项目,想提升一下内功,今天分享一下tinyhtt ...

  9. Android7.0 Phone应用源码分析(四) phone挂断流程分析

    电话挂断分为本地挂断和远程挂断,下面我们就针对这两种情况各做分析 先来看下本地挂断电话的时序图: 步骤1:点击通话界面的挂断按钮,会调用到CallCardPresenter的endCallClicke ...

随机推荐

  1. iOS中的静态库与动态库,区别、制作和使用

    如果我们有些功能要给别人用,但是又不想公开代码实现,比如高德地图.第三方登录分享等等,这时候我们就要打包成库了.库分静态库和动态库两种: 静态库:以.a 和 .framework为文件后缀名.动态库: ...

  2. redis分页获取数据

    php代码: 采用哈希类型存储数据,有序集合存储分页数据,进行倒序与正序的排序. $getGoodsInfo = M('goods_test')->select(); for($i=0;$i&l ...

  3. [development][vim] vim显示空白字符

    1. 作为一个严谨的程序员,你必须关心你敲下过的没一个字符.其中包括空白字符. 2. 有时候你需要review别人的代码,对于哪些肆意使用tab,space,enter的人.你怎么发现那些被他们留下的 ...

  4. SQL函数汇总大全

    聚合函数对一组值计算后返回单个值.除了count(统计项数)函数以外,其他的聚合函数在计算式都会忽略空值(null).所有的聚合函数均为确定性函数.即任何时候使用一组相同的输入值调用聚合函数执行后的返 ...

  5. B+树vs. LSM树(转)

    原文:<大型网站技术架构:核心原理与案例分析>,作者:李智慧 本书前面提到,由于传统的机械磁盘具有快速顺序读写.慢速随机读写的访问特性,这个特性对磁盘存储结构和算法的选择影响甚大. 为了改 ...

  6. Java中String类两种实例化的区别(转)

    原文:http://blog.csdn.net/wangdajiao/article/details/52087302 一.String类的第一种方式 1.直接赋值 例:String str = &q ...

  7. FPGA设计中的异步复位、同步释放思想

    1.一个简单的异步复位例子: module test( input clk, input rst_n, input data_in, output reg out ); always@(posedge ...

  8. 报错解决——Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2

    在导入tensorflow后,进行运算时,出现了报错Your CPU supports instructions that this TensorFlow binary was not compile ...

  9. python实现根据当前时间创建目录并输出日志

    举个例子:比如我们要实现根据当前时间的年月日来新建目录来存放每天的日志,当前时间作为日志文件名称:代码如下: #!/usr/bin/env python3 # _*_ coding: utf-8 _* ...

  10. Jmeter原理

    Jmeter结构体系及运行原理   Jmeter结构体系 把Jmeter的结构体系拆分为三维空间,如图: X1~X5:是负载模拟的一个过程,使用这些组件来完成负载的模拟: X1:选择协议,模拟用户请求 ...