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.hqwc.cn/news/311972.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Redis-08】Redis主从复制的实现原理

在Redis中,可以通过slaveof命令或者设置slaveof选项实现两台Redis服务器的主从复制,比如我们有两个Redis机器,地址分别是 127.0.0.1:6379 和 127.0.0.1:6380,现在我们在前者上面执行: 127.0.0.1:6379 > SLAVEOF 12…

分布式技术之流量控制技术

文章目录 什么是流量控制?分布式系统流量控制策略漏桶策略令牌桶策略两种策略对比Sentinel 流量控制工作原理 什么是流量控制? 流量控制,如果学过计算机网络的话,第一反应肯定是网络传输中的流量控制。网络传输中的流量控制&…

【中南林业科技大学】计算机组成原理复习包括题目讲解(超详细)

来都来了点个赞收藏关注一下再走呗🌹🌹🌹🌹 第1章:绪论 1.冯诺依曼机特点,与现代计算机的区别 冯诺依曼计算机的基本思想是:程序和数据以二进制形式表示,存储程序控制。在计算机中&…

2023 AI开发者生态报告

随着人工智能技术的飞速发展,全球IT市场对AI的投入持续增长,预计到2027年将达到4236亿美元。中国作为AI领域的重要参与者,其投资规模预计将占全球的9%。在这样的背景下,2023年的《AI开发者生态报告》为我们揭示了人工智能时代的技…

数据结构,题目笔记

哈希表 线性探测再散列 【算法数据结构|哈希查找|哈希冲突|除留余数法|线形探测法|例题讲解】https://www.bilibili.com/video/BV1514y1P7BK?vd_source1a684a3a1b9d05485b3d6277aeeb705d 【二次探测再散列法】 【【…

信号与线性系统翻转课堂笔记20——系统函数与信号流图

信号与线性系统翻转课堂笔记20——系统函数与信号流图 The Flipped Classroom20 of Signals and Linear Systems 对应教材:《信号与线性系统分析(第五版)》高等教育出版社,吴大正著 一、要点 (1)了解信…

VS2019+OpenCV4.7.0+OpenCV_contrib4.7.0+CUDA安装+配置视频硬解码保姆级别教程

在算法开发过程中,涉及基于opencv的rtsp流硬解码,这里设计结合当前所有的资料,实现了现有opengl相关的所有跟视频硬解码相关的功能,下面对opencv4.7.0的编译流程进行说明: 一、准备工作 下载opencv :open…

【网络技术】【Kali Linux】Wireshark嗅探(一)ping和ICMP

一、实验目的 本次实验使用wireshark流量分析工具进行网络嗅探,旨在了解ping命令的原理及过程。 二、网络环境设置 本系列实验均使用虚拟机完成,主机操作系统为Windows 11,虚拟化平台选择Oracle VM VirtualBox,组网模式选择“N…

【实用工具】Tmux使用指南

Tmux 三个重要概念 session(会话)、window(窗口)、pane(面板) 一个会话可以有多个窗口,一个窗口可以划分为多个面板 注意在tmux中使用快捷命令的话,需要加上前缀ctrlb 关于session的…

Matplotlib_plt.subplots 遇见中文乱码解决方案

文章目录 一、现象:二、解决方案1.将 **SimHei.ttf** ,下载到当前运行目录中2.绘图中涉及标题、横纵坐标等,加上 **FontProperties font** 即可 环境说明:macOS系统 一、现象: 原先代码是这样的 import numpy as n…

OpenCV实战 -- 维生素药片的检测记数

文章目录 检测记数原图经过操作开始进行消除粘连性--形态学变换总结实现方法1. 读取图片:2. 形态学处理:3. 二值化:4. 提取轮廓:5. 轮廓筛选和计数: 分水岭算法:逐行解释在基于距离变换的分水岭算法中&…

【数据结构】排序之交换排序(冒泡 | 快排)

交换目录 1. 前言2. 交换排序3. 冒泡排序3.1 分析3.2 代码实现 4. 快速排序4.1 hoare版本4.1.1 分析4.1.2 hoare版本代码 4.2 挖坑法4.2.1 分析4.2.2 挖坑法代码实现 4.3 前后指针版本4.3.1 分析4.3.2 前后指针版本代码实现 1. 前言 在之前的博客中介绍了插入排序,…