功能类似verilog里的$display函数,在vmm里做了强化,可以在仿真过程中看到整个平台的运行信息,用来调试仿真平台。

函数原型在vmm.sv里(class vmm_log;),其构造函数为extern function new(string name,string inst,vmm_log under=null),name表示包含vmm_log的类的名称,inst是包含vmm_log的类的例化名字,vmm的验证组件(test/generator/driver,etc)都包含vmm_log的隐式例化,在编写验证组件时不需要再次例化,对于transaction则不同,因为在验证期间,transcation往往会被例化很多次,这时的vmm_log往往需要在编写验证组件时单独例化,例化为静态函数,可以让transactions一直使用,比如:

class wb_spi_trans extends vmm_data;
static vmm_log log = new("wb_spi_trans","WB_SPI_TRANS");
...
  function new();
    super.new(this.log);
    'vmm_note(this,log,"Create an object");
  endfunction: new
endclass : wb_spi_trans

这样在例化wb_spi_trans时就会输出信息“Normal[NOTE] on wb_spi_trans(WB_SPI_TRANS) at 0

Create an object”,参数name的作用在于告诉你是哪个组件输出的信息,参数inst的作用在于告诉你这个组件在整个验证环境中的层次(例化名称)。VMM通过参数化的宏定义输出信息,比如上面的'vmm_note,展开后:

do
if(log.start_msg(vmm_log::NOTE_TYP)) begin
'void(log.text("Create an object"));
log.end_msg();
end
while()

log.start_msg函数输出”Normal[NOTE] on wb_spi_trans(WB_SPI_TRANS) at 0",log.test输出"Create an object",log.end_msg结束输出。vmm_log关键的属性有信息种类types_e(枚举类型:FAILURE_TYP/NOTE_TYP/DEBUG_TYP/REPORT_TYP/NOTIFY_TYP...),信息等级(枚举类型:FATAL_SEV/ERROR_SEV/WARNING_SEV/NORMAL_SEV/TRACE_SEV/DEBUG_SEV...),函数根据这两个变量来决定是否将信息输出,start_msg根据这两个变量决定是否输出信息,根据name和inst决定是哪个组件在输出信息。

VMM学习-vmm_log的更多相关文章

  1. HTML5移动开发学习笔记之CSS3基础学习

    CSS回顾 在学CSS3之前首先巩固下CSS的基础知识. 1.CSS框模型 举例子: #box { width: 70px; margin: 10px; padding: 5px; } 这个代码将出现 ...

  2. NewBluePill源码学习

    NewBluePill的源码也看的差不多了,一直说等有时间了再写学习的一些心得,拖来拖去弄到现在了,时间不是等来的,慢慢开始吧. 0x00     初识硬件虚拟化 硬件虚拟化对大数人来讲还是比较陌生. ...

  3. 从决策树学习谈到贝叶斯分类算法、EM、HMM --别人的,拷来看看

    从决策树学习谈到贝叶斯分类算法.EM.HMM     引言 最近在面试中,除了基础 &  算法 & 项目之外,经常被问到或被要求介绍和描述下自己所知道的几种分类或聚类算法(当然,这完全 ...

  4. 从决策树学习谈到贝叶斯分类算法、EM、HMM

    从决策树学习谈到贝叶斯分类算法.EM.HMM                (Machine Learning & Recommend Search交流新群:172114338) 引言 log ...

  5. NewBluePill源码学习 <一>

    NewBluePill的源码也看的差不多了,一直说等有时间了再写学习的一些心得,拖来拖去弄到现在了,时间不是等来的,慢慢开始吧. 0x00     初识硬件虚拟化 硬件虚拟化对大数人来讲还是比较陌生. ...

  6. Python学习(六)模块 —— 标准模块

    Python 标准模块 Python 带有一个标准模块库,并发布有独立的文档(库参考手册).对于程序员而言,标准库与语言本身同样重要,它好比一个百宝箱,能为各种常见的任务提供完美的解决方案. 这边简单 ...

  7. (转)新手学习System Verilog & UVM指南

    从刚接触System Verilog以及后来的VMM,OVM,UVM已经有很多年了,随着电子工业的逐步发展,国内对验证人才的需求也会急剧增加,这从各大招聘网站贴出的职位上也可以看出来,不少朋友可能想尽 ...

  8. CloudSim学习

    CloudSim CloudSim是墨尔本大学云计算和分布式系统实验室推出的云计算模拟软件.它可以使研究者规避实际部署的诸多不便(比如说资金缺乏等因素),在单机上即可实现对大规模云集群的模拟和相应算法 ...

  9. ucore操作系统学习(三) ucore lab3虚拟内存管理分析

    1. ucore lab3介绍 虚拟内存介绍 在目前的硬件体系结构中,程序要想在计算机中运行,必须先加载至物理主存中.在支持多道程序运行的系统上,我们想要让包括操作系统内核在内的各种程序能并发的执行, ...

随机推荐

  1. C puzzles详解【34-37题】

    第三十四题 The following times. But you can notice that, it doesn't work. #include <stdio.h> int ma ...

  2. linu流量监控

    iftophttp://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858923.html 默认是监控第一块网卡的流量iftop 监控eth1iftop ...

  3. css中li、a、span行内强制不换行

    li.a.span行内强制不换行:white-space:nowrap; 没有之前的效果 加上white-space:nowrap;后

  4. vue.js插件使用(02) vue-router

    概述 vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用.vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来.传统的 ...

  5. PHP导出excel文件

    现在教教你如何导入excel文件: 在我的文件储存里面有一个com文件夹的,将其解压放在ThinkPHP/Library/文件夹里面,然后就是写控制器啦!去调用这个插件: <?php names ...

  6. C(++)基于websocket实时通信的实现—GoEasy

    c(++) websocket实时消息推送 在这里我记录一下之前如何实现服务器端与客户端实时通信: 实现步骤如下: 1.        获取GoEasy appkey. 在goeasy官网上注册一个账 ...

  7. 个性化修改Linux登录时的字符界面

    如果采用root账号登录编辑/etc/bashrc内容,那所有其他帐号登录都会提示相同的内容,如果想每个用户进行配置,那就去每个帐号的目录下去配置吧. 这里提供改一个文件所有帐号都能看到的个性显示内容 ...

  8. PHP伪造referer突破防盗链

    php伪造referer实例代码,主要用于一些突破防盗链. 可以从这个例子中发展出很多的应用.比如隐藏真实的URL地址……嘿嘿,具体的就自己分析去吧 这里新建一个文件file.php.后面的参数就是需 ...

  9. C#高级功能(二)LINQ 和Enumerable类

    介绍LINQ之前先介绍一下枚举器 Iterator:枚举器如果你正在创建一个表现和行为都类似于集合的类,允许类的用户使用foreach语句对集合中的成员进行枚举将会是很方便的.我们将以创建一个简单化的 ...

  10. ruby cookbook

    11.2 listing object's method Oject.methods/singleton_methods/instance_methods 指定类名定义的方法在 singleton_m ...