谈谈UVM中的uvm_info打印
uvm_info宏的定义如下:
`define uvm_info(ID,MSG,VERBOSITY) \begin \if (uvm_report_enabled(VERBOSITY,UVM_INFO,ID)) \uvm_report_info (ID, MSG, VERBOSITY, `uvm_file, `uvm_line); \end
从这里可以看出uvm_info由两部分组成:uvm_report_enabled(VERBOSITY,UVM_INFO,ID)和uvm_report_info (ID, MSG, VERBOSITY, `uvm_file, `uvm_line)。当uvm_report_enabled(xxx)函数返回为1时,才会执行uvm_report_info(xxx)。
参数和变量分析:
1. 我们先看下uvm_info的三个参数。
- ID是作为message的标记(tag)。
- MSG就是真正要打印的message文本。
- VERBOSITY用于传递uvm_verbosity枚举类型的数字。当VERBOSITY低于相关reporter的配置verbosity时,uvm_report_info(xxx)将会执行。也就是说VERBOSITY的数字越小,被打印的可能性越高。
对于uvm_verbosity枚举变量的定义如下:
// Enum: uvm_verbosity
// Defines standard verbosity levels for reports.
// UVM_NONE - Report is always printed. Verbosity level setting can not disable it.
// UVM_LOW - Report is issued if configured verbosity is set to UVM_LOW or above.
// UVM_MEDIUM - Report is issued if configured verbosity is set to UVM_MEDIUM or above.
// UVM_HIGH - Report is issued if configured verbosity is set to UVM_HIGH or above.
// UVM_FULL - Report is issued if configured verbosity is set to UVM_FULL or above.
typedef enum
{UVM_NONE = 0,UVM_LOW = 100,UVM_MEDIUM = 200,UVM_HIGH = 300,UVM_FULL = 400,UVM_DEBUG = 500
} uvm_verbosity;
2. uvm_report_enabled(xxx)函数上有个UVM_INFO的传参。它是uvm_severity_type枚举值,uvm_severity_type定义如下:
// Enum: uvm_severity
// Defines all possible values for report severity.
// UVM_INFO - Informative messsage.
// UVM_WARNING - Indicates a potential problem.
// UVM_ERROR - Indicates a real problem. Simulation continues subject to the configured message action.
// UVM_FATAL - Indicates a problem from which simulation can not recover. Simulation exits via $finish after a #0 delay.
typedef bit [1:0] uvm_severity;
typedef enum uvm_severity
{UVM_INFO,UVM_WARNING,UVM_ERROR,UVM_FATAL
} uvm_severity_type;
3. uvm_report_info(xxx)函数上有`uvm_file和`uvm_line的传参,它们定义如下:
`define uvm_file `__FILE__
`define uvm_line `__LINE__
`uvm_file和`uvm_line分别用于显示文件和行,这样在打印信息时方便debug。当然,也可以在command line上定义UVM_REPORT_DISABLE_FILE_LINE来关闭打印文件和行的信息。
4. 在uvm_report_enabled(xxx)函数的中用到uvm_action枚举变量,它的定义为:
// Enum: uvm_action
// Defines all possible values for report actions. Each report is configured
// to execute one or more actions, determined by the bitwise OR of any or all
// of the following enumeration constants.
// UVM_NO_ACTION - No action is taken
// UVM_DISPLAY - Sends the report to the standard output
// UVM_LOG - Sends the report to the file(s) for this (severity,id) pair
// UVM_COUNT - Counts the number of reports with the COUNT attribute.
// When this value reaches max_quit_count, the simulation terminates
// UVM_EXIT - Terminates the simulation immediately.
// UVM_CALL_HOOK - Callback the report hook methods
// UVM_STOP - Causes ~$stop~ to be executed, putting the simulation into
// interactive mode.
typedef int uvm_action;
typedef enum
{UVM_NO_ACTION = 'b000000,UVM_DISPLAY = 'b000001,UVM_LOG = 'b000010,UVM_COUNT = 'b000100,UVM_EXIT = 'b001000,UVM_CALL_HOOK = 'b010000,UVM_STOP = 'b100000
} uvm_action_type;
uvm_report_enabled(VERBOSITY,UVM_INFO,ID)
uvm_report_enabled函数的定义如下:
// Function: uvm_report_enabled// Returns 1 if the configured verbosity for this severity/id is greater than // ~verbosity~ and the action associated with the given ~severity~ and ~id~// is not UVM_NO_ACTION, else returns 0.// See also <get_report_verbosity_level> and <get_report_action>, and the// global version of <uvm_report_enabled>.function int uvm_report_enabled(int verbosity, uvm_severity severity=UVM_INFO, string id="");if (get_report_verbosity_level(severity, id) < verbosity ||get_report_action(severity,id) == uvm_action'(UVM_NO_ACTION)) return 0;else return 1;endfunction
在uvm_report_enabled(xxx)中,会分析传过来的severity和id的配置verbosity要大于传过来的verbosity,(get_report_verbosity_level(severity, id) < verbosity)。另外也会看传过来的severity和id的配置不是UVM_NO_ACTION,(get_report_action(severity,id) == uvm_action'(UVM_NO_ACTION))。只有上述两者都满足的情况下,才会返回1,也就是允许打印message。
uvm_report_info(ID, MSG, VERBOSITY, `uvm_file, `uvm_line)
uvm_report_info函数的定义如下:
// Function: uvm_report_infovirtual function void uvm_report_info( string id,string message,int verbosity = UVM_MEDIUM,string filename = "",int line = 0);m_rh.report(UVM_INFO, get_full_name(), id, message, verbosity,filename, line, this);endfunction
m_rh是uvm_report_handler class类型的。在1个基于uvm_report_object继承过来的class在new的时候,会自动创建出m_rh。uvm_report_info(xxx)函数调用当前m_rh的report(xxx)函数来打印message。但在m_rh.report(xxx)内部其实是调用uvm_report_server class来打印消息的。uvm_report_server是一个Singleton的class,专门处理report信息。
相关文章:
谈谈UVM中的uvm_info打印
uvm_info宏的定义如下: define uvm_info(ID,MSG,VERBOSITY) \begin \if (uvm_report_enabled(VERBOSITY,UVM_INFO,ID)) \uvm_report_info (ID, MSG, VERBOSITY, uvm_file, uvm_line); \end 从这里可以看出uvm_info由两部分组成:uvm_report_enabled(VER…...
矩阵理论1 集合上的等价关系(equivalence relations on a set S)
定义 对于一个集合S, 如果集合E⊂SS\mathcal{E} \subset S\times SE⊂SS满足以下条件 自反性: 对于∀s∈S,都有(s,s)∈E\forall s\in S, 都有 (s, s) \in \mathcal{E}∀s∈S,都有(s,s)∈E对称性: (s,t)∈E⇔(t,s)∈E(s,t) \in \mathcal{E} \Leftrightarrow (t,s)\in \mathcal…...
【网络监控】Zabbix详细安装部署(最全)
文章目录Zabbix详细安装部署环境准备安装依赖组件访问初始化配置Zabbix详细安装部署 Zabbix 是一个高度集成的网络监控解决方案,可以提供企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作…...
阿里云轻量服务器--Docker--Nacos安装(使用外部Mysql数据存储)
前言:docker 安装nacos 如果不设置外部的mysql 默认使用内嵌的内嵌derby为数据源,这个时候如果,重新部署nacos 则会造成原有数据丢失情况; 1 默认安装的nacos 启动后使用的是内嵌的存储: 2 使用外部mysql 作为存储&a…...
unity开发知识点小结01
unity对象生命周期函数 Awake():最早调用,所以可以实现单例模式 OnEnable():组件激活后调用,在Awake后调用一次 Stat():在Update()之前,OnEnable…...
软件系统[软件工程]
What’s the link? They all involve outdated (legacy) software technology. All have had huge socio-economical impact. Prompting national lockdowns. Spreadsheet workflow error led to thousands of preventable infections and deaths. Huge losses of citizen dat…...
电力系统稳定性的定义与分类
1电力系统稳定性的定义与分类 IEEE给出电力系统稳定性定义:电力系统稳定性是指电力系统这样的一种能力—对于给定的初始运行状态,经历物理扰动后,系统能够重新获得运行平衡点的状态,同时绝大多数系统变量有界,因此整个…...
基于java的俱乐部会员管理系统
技术:Java、JSP等摘要:随着科学技术的飞速发展,科学技术在人们日常生活中的应用日益广泛,也给各行业带来发展的机遇,促使各个行业给人们提供更加优质的服务,有效提升各行业的管理水平。俱乐部通过使用一定的…...
线程池执行父子任务,导致线程死锁
前言, 一次线程池的不当使用,导致了现场出现了线程死锁,接口一直不返回。而且由于这是一个公共的线程池,其他使用了次线程池的业务也一直阻塞,系统出现了OOM,不过是幸好是线程同事测试出来的,没…...
Ubuntu系统新硬盘挂载
Ubuntu系统新硬盘挂载 服务器通常会面临存储不足的问题,大部分服务器都是ubuntu系统,该篇博客浅浅记载一下在ubuntu系统上挂载新硬盘的步骤。本篇博文仅仅记载简单挂载一块新的硬盘,而没有对硬盘进行分区啥的。如果需要更加完善的教程&#…...
【亲测】Centos7系统非管理(root)权限编译NCNN
前言 由于使用的是集群,自己不具有管理员权限,所以以下所有的情况均在非管理员权限下进行安装,即该安装策略仅适用于普通用户构建自己的环境。 什么是NCNN ncnn是一款非常高效易用的深度学习推理框架,支持各种神经网络模型&#x…...
四种常见的异步请求方式
四种常见的异步请求方式 一、xhr异步老祖 XMLHttpRequest(简称XHR)是一种在JavaScript中创建异步请求的技术。XHR对象可以向服务器发送请求,并获取服务器返回的数据,而不会使页面刷新。 XHR对象的创建方式通常是通过构造…...
Linux操作系统学习(进程间通信)
文章目录进程间通信进程通信的意义进程通信的方式1.基于文件的方式匿名管道命名管道2.基于内存的通信方式共享内存验证内核相关的数据结构了解进程间通信 进程通信的意义 当我们和另一个人打电话时两部手机都是独立的,通过基站传递信号等等复杂的过程就实现了通…...
单目标追踪——【相关滤波】C-COT原理与ECO基于C-COT的改进
目录C-COT:Continuous Convolution Operator Tracker文章侧重点连续卷积算子目标追踪框架初始化过滤器:追踪流程ECO文章侧重点因式卷积因子生成采样空间模型模型更新策略论文链接:C-COT:Beyond Correlation Filters: Learning Con…...
C++中栈是如何实现,以及常用的栈函数都有哪些
什么是栈? 栈 是一种特殊的数据结构,它是一种按照 Last-In-First-Out (LIFO) 访问模式存储和访问数据的特殊结构。 换句话说,栈中的最后一个元素将成为最先出栈的元素,这也意味着新增加的元素在栈的顶部,而出栈的元素…...
我就不信你还不懂HashSet/HashMap的底层原理
💥注💥 💗阅读本博客需备的前置知识如下💗 🌟数据结构常识🌟👉1️⃣八种数据结构快速扫盲🌟Java集合常识🌟👉2️⃣Java单列集合扫盲 ⭐️本博客知识点收录于…...
Qt中调用gtest进行单元测试及生成覆盖率报告
一.环境配置 googletest地址:https://github.com/google/googletest 我下载的是1.12.1,这是最后一个支持C++11的版本。 首先编译gtest,在windows上的编译方式和编译gRPC一模一样,详见Qt中调用gRPC,编译完了会生成几个静态库,如下图所示 本文主要用到了libgtest.a 下载ms…...
ChatGPT vs Bard 背后的技术对比分析和未来发展趋势
ChatGPT vs Bard 背后的技术对比分析和未来发展趋势 目录 ChatGPT vs Bard 背后的技术对比分析和未来发展趋势...
搜索引擎的设计与实现
技术:Java、JSP等摘要:随着互联网的快速发展,网络上的数据也随着爆炸式地增长。如何最快速筛选出对我们有用的信息成了主要问题。搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后&…...
动态规划之买卖股票问题
🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓动态规划之买卖股票问题 ,做好准备了么,那么开始吧。 🌲🌲🐴🐴 动态规划算法本质上就是穷举…...
基于YOLOv11深度学习的车辆碰撞检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)
一、项目介绍 随着城市交通密度的不断增加,交通事故尤其是车辆碰撞事件的频发对公共安全构成了严重威胁。传统的交通监控手段主要依赖人工查看监控视频,存在效率低下、实时性差以及容易因疲劳导致漏报等问题。 为了解决这一痛点,本项目基于…...
颠覆式Alienware设备控制:500KB轻量工具实现10倍性能提升与个性化体验
颠覆式Alienware设备控制:500KB轻量工具实现10倍性能提升与个性化体验 【免费下载链接】alienfx-tools Alienware systems lights, fans, and power control tools and apps 项目地址: https://gitcode.com/gh_mirrors/al/alienfx-tools 当你启动Alienware电…...
小鹅通重磅升级|AI Agent 能力全面护航,私域智能经营新范式
*文中配图及虚拟数据仅作效果展示 随着人工智能越来越贴近经营场景,小鹅通紧扣各位商家的实际需求,在原有产品基础上,以AI Agent为核心,完成了新一轮产品升级——在原有功能基础上,引入场景skills,并通过sk…...
网站 SEO 软件如何提高网站流量
了解网站 SEO 软件的重要性 在当今互联网时代,网站流量的重要性不言而喻。无论你经营的是一个电子商务网站,博客,还是企业官方网站,高流量意味着更多的曝光和潜在客户。如何有效地提高网站流量呢?这里,我们…...
2026年济南本凡科技小程序开发前10大推荐,助您拥抱智能时代新风尚
在当今快速发展的智能时代,企业在市场竞争中需要不断创新以满足客户的需求。济南本凡科技小程序开发服务,凭借其多元化的功能和高效的技术架构,为各类企业提供了灵活的解决方案。本文将深入探讨十家领先的小程序开发公司,包括聚翔…...
AI 学习笔记:LLM 的部署与测试
关于 LLM 的本地部署 正如我之前在《[[关于 AI 的学习路线图]]》一文中所提到的,从学习的角度来说,如果我们要想切实了解 LLM 在计算机软件系统中所处的位置,以及它在生产环境中所扮演的角色,最直接的方式就是尝试将其部署到我们…...
Qwen2.5-14B-Instruct部署案例:高校戏剧系用像素剧本圣殿教学实践
Qwen2.5-14B-Instruct部署案例:高校戏剧系用像素剧本圣殿教学实践 1. 项目背景与价值 在戏剧创作教学中,传统剧本创作方式面临诸多挑战:学生创意受限、格式不规范、修改成本高。某高校戏剧系引入基于Qwen2.5-14B-Instruct深度优化的"像…...
硬件加速方案:OpenClaw调用SecGPT-14B时的vLLM优化配置
硬件加速方案:OpenClaw调用SecGPT-14B时的vLLM优化配置 1. 为什么需要vLLM优化 去年我在本地部署SecGPT-14B时遇到了一个尴尬的问题——我的RTX 3090显卡只有24GB显存,而模型加载后显存直接爆满,连最简单的推理都无法完成。这促使我开始研究…...
QQ音乐加密文件解码终极指南:三分钟快速上手qmcdump工具教程
QQ音乐加密文件解码终极指南:三分钟快速上手qmcdump工具教程 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump …...
如何快速实现免费离线OCR:Umi-OCR完整使用指南
如何快速实现免费离线OCR:Umi-OCR完整使用指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。 …...
