21 UVM printer

uvm_printer 类提供了以不同格式打印 uvm_objects 的灵活性。我们已经讨论了使用 `uvm_field_* 宏的 print() 方法,或者如果不使用 utils_begin/ end 宏,则编写 do_print() 方法。

UVM printer提供四种内置printer。

  1. uvm_printer
  2. uvm_table_printer
  3. uvm_tree_printer
  4. uvm_line_printer

1 uvm_printer hierarchy

2 UVM Printer Classes

3 UVM printer knobs

uvm_printer_knobs 类为所有printer类型的printer设置提供了额外的可行性。

uvm_printer_knobs knobs = new

uvm_printer_knobs 类中声明的一些变量。

size:控制是否打印字段的大小。

depth:表示打印对象时的递归深度。

4 UVM printer Methods

 

`include "uvm_macros.svh"
import uvm_pkg::*;typedef enum{RED, GREEN, BLUE} color_type;class temp_class extends uvm_object;rand bit [7:0] tmp_addr;rand bit [7:0] tmp_data;function new(string name = "temp_class");super.new(name);endfunction`uvm_object_utils_begin(temp_class)`uvm_field_int(tmp_addr, UVM_ALL_ON)`uvm_field_int(tmp_data, UVM_ALL_ON)`uvm_object_utils_end
endclassclass my_object extends uvm_object;rand int        value;string     names;rand color_type colors;rand byte       data[4];rand bit [7:0]  addr;rand temp_class tmp;`uvm_object_utils_begin(my_object)`uvm_field_int(value, UVM_ALL_ON)`uvm_field_string(names, UVM_ALL_ON)`uvm_field_enum(color_type, colors, UVM_ALL_ON)`uvm_field_sarray_int(data, UVM_ALL_ON)`uvm_field_int(addr, UVM_ALL_ON)`uvm_field_object(tmp, UVM_ALL_ON)`uvm_object_utils_endfunction new(string name = "my_object");super.new(name);tmp = new();this.names = "UVM";endfunction
endclassclass my_test extends uvm_test;`uvm_component_utils(my_test)my_object obj;bit packed_data_bits[];byte unsigned packed_data_bytes[];int unsigned packed_data_ints[];my_object unpack_obj;function new(string name = "my_test", uvm_component parent = null);super.new(name, parent);endfunctionfunction void build_phase(uvm_phase phase);super.build_phase(phase);obj = my_object::type_id::create("obj", this);assert(obj.randomize());`uvm_info(get_full_name(), "obj print without any argument", UVM_LOW);// Knob setting.uvm_default_printer.knobs.indent = 5;uvm_default_printer.knobs.hex_radix = "0x";obj.print();`uvm_info(get_full_name(), "obj print with uvm_default_table_printer argument", UVM_LOW);obj.print(uvm_default_table_printer);`uvm_info(get_full_name(), "obj print with uvm_default_tree_printer argument", UVM_LOW);obj.print(uvm_default_tree_printer);`uvm_info(get_full_name(), "obj print with uvm_default_line_printer argument", UVM_LOW);obj.print(uvm_default_line_printer);endfunction
endclassmodule tb_top;initial beginrun_test("my_test");end
endmodule

 output:

UVM_INFO testbench.sv(61) @ 0: uvm_test_top [uvm_test_top] obj print without any argument
--------------------------------------------------
Name                Type          Size  Value     
--------------------------------------------------
obj                 my_object     -     @349      value          integral      32    0x1f135537names          string        3     UVM       colors         color_type    32    GREEN     data           sa(integral)  4     -         [0]       integral      8     0x9f      [1]       integral      8     0x33      [2]       integral      8     0x12      [3]       integral      8     0x9c      addr           integral      8     0x2f      tmp            temp_class    -     @350      tmp_addr  integral      8     0x39      tmp_data  integral      8     0xbd      
--------------------------------------------------
UVM_INFO testbench.sv(68) @ 0: uvm_test_top [uvm_test_top] obj print with uvm_default_table_printer argument
--------------------------------------------------
Name                Type          Size  Value     
--------------------------------------------------
obj                 my_object     -     @349      value          integral      32    0x1f135537names          string        3     UVM       colors         color_type    32    GREEN     data           sa(integral)  4     -         [0]       integral      8     0x9f      [1]       integral      8     0x33      [2]       integral      8     0x12      [3]       integral      8     0x9c      addr           integral      8     0x2f      tmp            temp_class    -     @350      tmp_addr  integral      8     0x39      tmp_data  integral      8     0xbd      
--------------------------------------------------
UVM_INFO testbench.sv(70) @ 0: uvm_test_top [uvm_test_top] obj print with uvm_default_tree_printer argument
obj: (my_object@349) {value: 'h1f135537 names: UVM colors: GREEN data: {[0]: 'h9f [1]: 'h33 [2]: 'h12 [3]: 'h9c }addr: 'h2f tmp: (temp_class@350) {tmp_addr: 'h39 tmp_data: 'hbd }
}
UVM_INFO testbench.sv(72) @ 0: uvm_test_top [uvm_test_top] obj print with uvm_default_line_printer argument
obj: (my_object@349) { value: 'h1f135537  names: UVM  colors: GREEN  data: { [0]: 'h9f  [1]: 'h33  [2]: 'h12  [3]: 'h9c  } addr: 'h2f  tmp: (temp_class@350) { tmp_addr: 'h39  tmp_data: 'hbd  } } 

5 The print function defined in the uvm_object class

uvm_object 中的 print 函数实际上采用 uvm_printer 类类型作为参数。

function void uvm_object::print(uvm_printer printer=null);if (printer==null)printer = uvm_default_printer;if (printer == null)`uvm_error("NULLPRINTER","uvm_default_printer is null")$fwrite(printer.knobs.mcd,sprint(printer)); 
endfunction

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/823611.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Git:远程仓库的使用

查看当前的远程库 要查看当前配置有哪些远程仓库,可以用git remote 命令,它会列出每个远程库的简短名字。在克隆完某个项目后,至少可以看到一个名为origin 的远程库,Git 默认使用这个名字来标识你所克隆的原始仓库: 也…

DM达梦数据库表占用空间大小

问题描述: 项目涉及用户量大且数据量大,为提高查询性能采用分表方式处理数据;根据业务要求总共4张业务表,每张业务表扩展成100张表,系统中总共400张表。部署至测试环境发现测试环境占用的磁盘空间是开发环境的8倍。 问…

从程序员到项目经理

前言 看到这个话题,博主不禁有感而发。那么就简单讲讲,从程序员到项目经理,需要具备哪些必备能力或基本的素养。 一、必备 1、技术能力 程序员首先必须成为一个名合格的coder,有思想有见解有态度。 无论身处什么开发岗位&…

python2.x编码Unicode字符串

1 python2.x编码Unicode字符串 python2.x默认编码方法为ASCII码。字符串赋值时按系统默认编码自动编码,通过decode()方法解码为Unicode,再通过encode()方法编码为指定码。 1.1 编码解码基础知识 1.1.1 位 位(bit)是计算机存储数据的最小单位&#xf…

数据之光:乡镇企业的发展利器——数据可视化

数据可视化是一项强大的工具,它不仅在大型企业中发挥关键作用,而且在乡镇企业中也能作出显著贡献。那么,数据可视化究竟能为乡镇企业做出什么样的贡献呢? 首先,数据可视化为乡镇企业提供了更清晰的业务洞察。通过将庞大…

超简单实用,推荐的深度学习科研必备网站(轻松找论文,代码项目,写论文综述)

一个非常有用的深度学习必备网站 网址推荐 接触新方向需要了解的内容1.在某一个研究方向下,有哪些算法模型可以用?不同算法之间效果对比如何?2.在某一个研究方向下,到底有哪些论文,模型是可以用的?3.在某一…

Python中如何使用_new_实现单例模式

单例模式是一个经典设计模式,简要的说,一个类的单例模式就是它只能被实例化一次,实例变量在第一次实例化时就已经固定。 在Python中常见的单例模式有None,这就是一个很典型的设计,通常使用 if xxx is None或者if xxx …

ESP32S3+HX8347+3线SPI运行LVGL例程

一、clone lv_port_esp32到本地 git clone https://github.com/lvgl/lv_port_esp32.git 二、增加hx8347.c、hx8347.h components\lvgl_esp32_drivers\lvgl_tft下新增2个文件:hx8347.c、hx8347.h。因为lv_port_esp32中没有hx8347的驱动,需要自己写。这两个…

分库分表之Mycat应用学习二

3 Mycat 概念与配置 官网 http://www.mycat.io/ Mycat 概要介绍 https://github.com/MyCATApache/Mycat-Server 入门指南 https://github.com/MyCATApache/Mycat-doc/tree/master/%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%973.1 Mycat 介绍与核心概念 3.1.1 基本介绍 历史&#x…

怎么使用FTP

FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。FTP是File Transfer Protocol的缩写,即文件传输协议,是一种基于TCP的协议,采用客户/服务…

软件测试/测试开发丨Python 数据类 dataclass 学习笔记

dataclass 介绍 dataclass优势 可读性强操作灵活轻量 应用场景 创建对象完美融合平台开发 ORM 框架 案例 场景:如果创建一只猫,信息包括猫的名字、体重、颜色。同时打印这个对象的时候,希望能打印出一个字符串(包含猫的各种信息&…

Python跨年烟花秀

写在前面 今年跨年怎么过呢~博主用python的pygame实现了一场炫酷的烟花秀,一起来看看吧! 环境需求 python3.11.4及以上PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境…

图灵日记之java奇妙历险记--继承和多态

目录 继承概念继承语法父类成员访问子类中访问父类的成员变量子类中访问父类的成员方法 super关键字子类构造方法super和this初始化protected关键字继承方式final 关键字继承与组合 多态条件向上转型重写动态绑定&&静态绑定多态再理解向下转型多态的优缺点好处缺陷 继承…

【Transformer】深入理解Transformer模型2——深入认识理解(下)

前言 Transformer模型出自论文:《Attention is All You Need》 2017年 近年来,在自然语言处理领域和图像处理领域,Transformer模型都受到了极为广泛的关注,很多模型中都用到了Transformer或者是Transformer模型的变体&#xff0…

java springboot宠物医院管理系统

一.项目简介 宠物医院管理系统,java项目,springboot项目。eclipse和idea都能打开运行。 使用技术:springboot,mybatis,jsp,mysql 5.7 共分为三个角色:系统管理员、医生、用户 功能模块&…

9. 进程

9. 进程 1. 进程与程序1.1 main() 函数由谁调用1.2 程序如何结束1.2.1 注册进程终止处理函数 atexit() 1.3 何为进程1.4 进程号 2. 进程的环境变量2.1 应用程序中获取环境变量2.1.1 获取指定环境变量 2.2 添加/删除/修改环境变量2.2.1 putenv()2.2.2 setenv()2.2.3 命令行式添加…

springboot参数校验常用注解及分组校验

一、使用方式添加Validated 二、常见注解 Null 被注解的元素必须为null NotNull 被注解的元素必须不为null NotBlank 只能作用在接收的 String 类型上,注意是只能,不能为 null,而且调用 trim() 后,长度必须大于 0即&#xff…

在 Linux 中使用 cat 命令

cat 命令用于打印文本文件的文件内容。至少,大多数 Linux 用户都是这么做的,而且没有什么问题。 cat 实际上代表 “连接(concatenate)”,创建它是为了 合并文本文件。但只要有一个参数,它就会打印文件内容。因此,它是用…

【数据结构】双向带头循环链表的实现

前言:在前面我们学习了顺序表、单向链表,今天我们在单链表的基础上进一步来模拟实现一个带头双向链表。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:数据结构 👈 💯代码仓库:卫卫周大胖的…

软件测试/测试开发丨Python 内置库 正则表达式re

什么是正则表达式 正则表达式就是记录文本规则的代码可以查找操作符合某些复杂规则的字符串 使用场景 处理字符串处理日志 在 python 中使用正则表达式 把正则表达式作为模式字符串正则表达式可以使用原生字符串来表示原生字符串需要在字符串前方加上 rstring # 匹配字符…