0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

有趣的UVM_LOG用法

冬至子 来源:CSDN 作者:谷公子 2023-06-29 10:58 次阅读

前言

在项目中,一个TB通常是很多人一起开发的,大家或多或少都会往log中打印一些信息(message),方便自己debug。但是如果log里信息太多,会造成自己感兴趣的信息被淹没了,只能通过关键字搜索的方式去查找。因此,本文推荐可以使用UVM提供的UVM_LOG功能,只需要增加少量的代码,就可以根据ID或uvm_severity类别,把自己感兴趣的信息单独提取到指定的文件。

UVM_LOG机制

为了使用UVM_LOG功能,需要在打印message之前打开指定的文件,仿真结束时再关闭这个文件,并且需要把打开文件的句柄传递给UVM的message管理系统。可以将打开的文件设置为默认文件指向、或关联到指定的uvm_severity或id,或两者都关联。

在uvm_report_object和uvm_component类里提供了接口函数给用户去配置UVM_LOG功能,注意uvm_report_object是uvm_component的父类,因此大家只需要在uvm_component层次上调用这些接口函数就好了,而且可以控制UVM hierarchy上任何节点的消息打印行为。

具体的接口函数(API)分为两类。

第一类是只适用于当前uvm_component层次的,也就是这些接口函数的配置不会影响到UVM hierarchy的其它任何节点,有这些函数:

set_report_default_file(UVM_FILE file); //设置默认输出定向文件,如果id, severity都没有关联到输出定
                                        //向文件的话,那么就默认采用这里设置的文件。
set_report_id_file(string id, UVM_FILE file); //将id关联到参数指定的输出定向文件。
set_report_severity_file(uvm_severity severity, UVM_FILE file);  //将severity关联到参数指定的输出
                                                                 // 定向文件。
set_report_severity_id_file(uvm_severity severity, string id, UVM_FILE file);  // 将severity
                                                          // 和id一起关联到参数指定的输出定向文件。
get_report_file_handle(uvm_severity severity, string id); // 返回指定severity和id的输出定向文件句柄

这些函数参数中传递的文件句柄必须是multi-channel描述符(mcd)或与$fdisplay兼容的文件id。UVM_FILE类型其实就是int类型。如果上述接口函数对id或severity重复指定输出定向文件句柄,那么它们优先级是set_report_severity_id_file() > set_report_id_file() > set_report_severity_file() > set_report_default_file()。

第二类是除了适用于当前uvm_component层次,它的子uvm_component也都全部适用,有这些函数:

set_report_default_file_hier(UVM_FILE file);
set_report_id_file_hier(string id, UVM_FILE file);
set_report_severity_file_hier(uvm_severity severity, UVM_FILE file);
set_report_severity_id_file_hier(uvm_severity severity, string id, UVM_FILE file);

可以看出,第二类接口函数的命令是在第一类接口函数命名后面加上”_hier”,对应的功能是类似,只是作用的uvm_component范围不一样。

例子

说了这么多,来几个例子。

第一个例子,在uvm_component子类里加入以下代码:

UVM_FILE log_fh = $fopen("cpu.log");  // 打印cpu.log的文件,并把句柄传给log_fh
this.set_report_id_action("cpu", (UVM_DISPLAY | UVM_LOG)); // 将”cpu”的id加上UVM_LOG功能
this.set_report_id_file("cpu", log_fh); // 将“cpu”的id管理到log_fh文件句柄
`uvm_info("cpu", "The message will be logged in log file", UVM_LOW);
`uvm_info("cpu0", "The message will not be logged in log file", UVM_LOW);
$fclose(log_fh);  // 关闭log_fh文件句柄

上述代码执行完之后,将会在仿真目录下生成1个名为cpu.log的文件,里面包含代码里第一个uvm_info打印的消息” The message will be logged in log file”。代码里第二个uvm_info的打印消息不会定向到cpu.log里,因为它的id是”cpu0”。

第二个例子,在uvm_component子类里加入以下代码:

UVM_FILE log_fh = $fopen("cpu.log");
UVM_FILE default_fh = $fopen("default.log");
this.set_report_id_action("cpu" , (UVM_DISPLAY | UVM_LOG));
this.set_report_id_action("cpu0", (UVM_DISPLAY | UVM_LOG));
this.set_report_id_file("cpu", log_fh);
this.set_report_default_file(default_fh);
`uvm_info("cpu", "The message will be logged in cpu.log file", UVM_LOW);
`uvm_info("cpu0", "The message will be logged in default.log file", UVM_LOW);
$fclose(log_fh);
$fclose(default_fh);

上述代码执行完之后,将会在仿真目录下生成cpu.log和default.log两个文件,第一个uvm_info的id为”cpu”,它只会定向到cpu.log,而不会定向到default.log,因为set_report_id_file()设置的文件句柄优先级高于set_report_default_file()设置的。第二个uvm_info的id为”cpu0”,它会定向到defualt.log,因为没有显示关联到它的文件句柄,UVM会使用默认的文件句柄,也就是set_report_default_file()设置的defualt_fh(default.log)。

友情提示:

UVM_LOG功能需要用户自己创建文件句柄并关联到对应的id或severity上,因此用户需要维护文件句柄的打开和关闭,建议可以在report_phase()里去统一关闭它们,如果提前关闭的话。

有趣的功能衍生

读者可以考虑 将id与UVM的uvm_cmdline_processor或SV自带的valueplusargs (user_string, variable)功能联系起来 ,这样通过Command Line可以很方便地控制要将哪些id定向到特定的log文件里, 这个功能很有用,也不需要重复编译就可以去定向提取各式各样的ID ,大家可以自己先去试试,需要源代码的话在微信公众号聊天窗口里输入”id代码”,两种版本的代码都有提供。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    18965
收藏 人收藏

    评论

    相关推荐

    IC验证"为什么要学习UVM呢"

    的产品在验证过程中能最大程度使用前一代产品的代码。同样的一件事情有多种实现方式,这多种方式之间分别都有哪些优点和缺点,在权衡利弊之下哪种是最合理的。一些OVM用法的遗留问题。可以说,UVM特别适合欲
    发表于 12-01 15:09

    IC验证之UVM常用宏汇总分析(四)

    OVM中过时的用法,使用纯净的UVM环境:`define UVM_NO_DEPRECATED除了上述通用的宏外,针对不同的仿真工具需要定义不同的宏:QUESTA、VCS、INCA分别对应Mentor
    发表于 12-02 15:24

    数字IC验证之“什么是UVM”“UVM的特点”“UVM提供哪些资源”(2)连载中...

    原文链接:https://zhuanlan.zhihu.com/p/345775995大家好,我是一哥,上章内容主要讲述两个内容,芯片验证以及验证计划。那本章我们主要讲述的内容有介绍什么是uvm
    发表于 01-21 16:00

    什么是uvmuvm的特点有哪些呢

    大家好,我是一哥,上章内容我们介绍什么是uvmuvm的特点以及uvm为用户提供了哪些资源?本章内容我们来看一看一个典型的uvm验证平台应该是什么样子的,来看一个典型的
    发表于 02-14 06:46

    谈谈UVM中的uvm_info打印

      // UVM_DISPLAY - Sends the report to the standard output  // UVM_LOG - Sends the report to the file
    发表于 03-17 16:41

    UVM中seq.start()和default_sequence执行顺序

      1. 问题  假如用以下两种方式启动sequence,方法1用sequence的start()方法启动seq1,方法2用UVM的default_sequence机制启动seq2。那么seq1
    发表于 04-04 17:15

    LOG101/LOG104偏流调零电路

    LOG101/LOG104偏流调零电路 如图所示为LOG101/LOG104的偏流调零电路。 LOG101/
    发表于 05-13 16:10 1401次阅读
    <b class='flag-5'>LOG</b>101/<b class='flag-5'>LOG</b>104偏流调零电路

    UVM学习笔记(一)

    driver应该派生自uvm_driver,而uvm_driver派生自uvm_component。
    的头像 发表于 05-26 14:38 885次阅读
    <b class='flag-5'>UVM</b>学习笔记(一)

    UVM里的6个常见参数介绍分析

    UVM预先定义了六个详细程度; UVM_NONE到UVM_DEBUG。这些级别只不过是整数枚举值
    的头像 发表于 06-06 12:33 2828次阅读
    <b class='flag-5'>UVM</b>里的6个常见参数介绍分析

    UVM中的uvm_do宏简析

    uvm_do宏及其变体提供了创建、随机化和发送transaction items或者sequence的方法。
    的头像 发表于 06-09 09:36 2916次阅读
    <b class='flag-5'>UVM</b>中的<b class='flag-5'>uvm</b>_do宏简析

    UVMuvm_config_db机制背后的大功臣

    本次讲一下UVM中的uvm_config_db,在UVM中提供了一个内部数据库,可以在其中存储给定名称下的值,之后可以由其它TB组件去检索。
    的头像 发表于 06-20 17:28 798次阅读

    如何用Verdi查看UVM环境中的变量?

    我们常用的debug UVM的方法是通过打印log实现。有没有办法像 debug RTL代码一样将 UVM 中变量拉到波形上看呢?答案是有的,下面让我们看看是怎么做到的。
    的头像 发表于 06-25 16:01 803次阅读
    如何用Verdi查看<b class='flag-5'>UVM</b>环境中的变量?

    有没有办法像debug RTL代码一样将UVM中变量拉到波形上看呢?

    我们常用的debug UVM的方法是通过打印log实现。有没有办法像 debug RTL代码一样将 UVM 中变量拉到波形上看呢?答案是有的,下面让我们看看是怎么做到的。
    的头像 发表于 06-29 15:14 711次阅读
    有没有办法像debug RTL代码一样将<b class='flag-5'>UVM</b>中变量拉到波形上看呢?

    UVMuvm_config_db机制背后的大功臣

    本次讲一下UVM中的uvm_config_db,在UVM中提供了一个内部数据库,可以在其中存储给定名称下的值,之后可以由其它TB组件去检索。
    的头像 发表于 06-29 16:57 616次阅读

    一文详解UVM设计模式

    本篇是对UVM设计模式 ( 二 ) 参数化类、静态变量/方法/类、单例模式、UVM_ROOT、工厂模式、UVM_FACTORY[1]中单例模式的补充,分析静态类的使用,UVM中资源池的
    的头像 发表于 08-06 10:38 903次阅读
    一文详解<b class='flag-5'>UVM</b>设计模式