嵌入式学习小组
直播中

徐歌

7年用户 236经验值
私信 关注

什么是UVM Report机制?

UVM Report机制概述

回帖(1)

刘艳芳

2020-12-21 15:40:02
  UVM Report机制概述
  相信大家对于UVM的report的使用都非常熟悉,`uvm_info, `uvm_warning, `uvm_error, `uvm_fatal等,其实UVM还提供了非常丰富的report用法,这里先介绍一下当我们调用这些宏时,究竟发生了什么?以及我们在一个object里面和component调用uvm_info等report宏时,是否走的同样的流程呢?
  report macros
  首先解析一下这几个宏定义,其原理都非常简单,先调用uvm_report_enabled是否可以被report,然后分别调用相关的report函数:uvm_report_info,uvm_report_warning,uvm_report_error,uvm_report_fatal。也就是说,不管我们在哪里用这些宏,都是直接调用的uvm_report_*这些函数。
  uvm_component中的report
  这些函数在两个地方有定义,首先uvm_component以及其子类,都是继承自uvm_report_object这个类,而这个类中定义了report相关的函数,因此在uvm_component及其子类中调用`uvm_info,实际上是调用了它父类的report函数。而像uvm_object及其子类(这里不包括uvm_component这些,严格意义上讲uvm_component也是uvm_object的子类),在调用`uvm_info的时候,调用的是uvm_globals中定义的一个全局report函数。
  uvm_globals中的report
  在uvm_globals中的report又是怎么来的呢,简单来讲,UVM定义了一个uvm_root类,然后调用report时会去找一个静态的uvm_root类型的对象,我们暂时称之为top,该top在整个UVM仿真过程中存在且唯一,所以在除了component之外的任何地方调用report函数,其实就是调用了这个唯一uvm_root类中的report函数。而这个uvm_root又是从uvm_component继承过来的,因此它自然也继承了相应的report函数。这个概念在后续的一些特别例子中会有区别。
  report classes
  本节先简单介绍一下跟report相关的一些类,及其大致的作用。首先事uvm_report_object,所有调用report函数的入口都是在uvm_report_object中,该类也是uvm_component的父类,即uvm_component不是直接从uvm_object继承过来的,而是从uvm_report_object继承,而uvm_report_object才是直接继承自uvm_object。所以我们调用的report函数其入口都是定义于uvm_report_object中,该类就相当于是给用户提供了一个API,可以直接进行report相关操作。uvm_report_handler,该类定义于uvm_report_object中,且要注意的是每个不同的uvm_report_object,对应的这个handler是不一样的,所以在一些特殊配置操作的时候我们需要区分一下具体是对哪个component及其子类进行了配置。uvm_report_handler是report调用流程里面的中间层,在这里定义了一些特殊信息,例如对于某些特定的ID,在调用同样的report函数时可以采取一些不同的额外操作等等。
  uvm_report_catcher,这个类相当于callback,可供用户定义一些额外的行为,都可以在report过程中被调用。
  uvm_report_server,核心的report类,也是最终整理输出的类。
  基于上述的report机制,用户可以实现各种各样的report功能,例如对某些特定ID的信息记录到一个文件中,某些指定ID的信息不打印,甚至完全修改report信息的格式,或者修改预定义的summary信息等等。这些都将在后续通过例子的形式慢慢介绍。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分