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.rhkb.cn/news/227584.html

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

相关文章

键盘字符(#键)显示错误

当屏幕上显示的键与键盘上按下的键不同时,尤其是 # 键。大多数情况下,此错误是由于 raspbian 和 NOOBS 软件的默认英国键盘配置所致。 解决方案: 要解决此问题,您需要将配置更改为您自己的键盘或语言的配置。这可以通过转到树莓派…

EasyCVR无人机推流+人数统计AI算法,助力公共场所人群密度管控

一、背景与需求 在公共场所和大型活动的管理中,人数统计和人群密度控制是非常重要的安全问题。传统的方法可能存在效率低下或准确度不足的情况,无法满足现代社会的需求。TSINGSEE青犀可以利用无人机推流AI人流量统计算法,基于计算机视觉技术…

项目实战--Message Queue

一. 概念篇 我们在学习多线程的时候,学习过生产者-消费者模型,为了实现解耦合和削峰填谷,引入了阻塞队列. 在实际的后端开发中,跨主机之间使用生产者消费者模型,也是非常普遍的需求,因此,阻塞队列会被封装成一个独立的服务器程序,实现更丰富的功能.这样的程序称为"消息队列…

Spark编程实验四:Spark Streaming编程

目录 一、目的与要求 二、实验内容 三、实验步骤 1、利用Spark Streaming对三种类型的基本数据源的数据进行处理 2、利用Spark Streaming对Kafka高级数据源的数据进行处理 3、完成DStream的两种有状态转换操作 4、把DStream的数据输出保存到文本文件或MySQL数据库中 四…

MFC - 给系统菜单(About Dialog)发消息

文章目录 MFC - 给系统菜单(About Dialog)发消息概述笔记resource.h菜单的建立菜单项的处理MSDN上关于系统菜单项值的说法END MFC - 给系统菜单(About Dialog)发消息 概述 做了一个对话框程序, 在系统菜单(在程序上面的标题栏右击)中有"关于"的菜单. 这个是程序框架…

【数据结构】八、查找

一、基本概念 静态查找:只查找,不改变集合内数据元素 动态查找:有则输出元素,无则添加元素 二、静态查找表 2.1顺序查找 在线性表、链表、树中依次查找 2.2折半查找(二分查找) 在有序的线性表中&…

基于轻量级GhostNet模型开发构建生活场景下生活垃圾图像识别系统

轻量级识别模型在我们前面的博文中已经有过很多实践了,感兴趣的话可以自行移步阅读: 《移动端轻量级模型开发谁更胜一筹,efficientnet、mobilenetv2、mobilenetv3、ghostnet、mnasnet、shufflenetv2驾驶危险行为识别模型对比开发测试》 《基…

【Java JVM】Java 实例对象的访问定位

Java 程序会通过栈上的 reference 数据来操作堆上的具体对象。 但是 reference 类型在《Java虚拟机规范》里面只规定了它是一个指向对象的引用, 并没有定义这个引用应该通过什么方式去定位, 访问到堆中对象的具体位置, 所以对象访问方式也是由虚拟机实现而定的,主流…

深入探索小红书笔记详情API:解锁内容创新的无尽潜力

一、引言 在当今信息爆炸的时代,内容创新已经成为品牌和个人脱颖而出的关键。小红书,作为全球最大的消费类口碑库之一,每天产生大量的用户生成内容。而小红书笔记详情API,作为一个强大的工具,能够为内容创作者提供深入…

UG装配-添加组件

添加组件命令位置在如下位置:菜单-装配-组件-添加组件 添加组件命令位置在如下位置:菜单-装配-组件-添加组件

Java关键字(1)

Java中的关键字是指被编程语言保留用于特定用途的单词。这些关键字不能用作变量名或标识符。以下是Java中的一些关键字: public:表示公共的,可以被任何类访问。 private:表示私有的,只能被定义该关键字的类访问。 cl…

060:vue中markdown编辑器mavon-editor的应用示例

第060个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

(学习打卡1)重学Java设计模式之设计模式介绍

前言:听说有本很牛的关于Java设计模式的书——重学Java设计模式,然后买了(*^▽^*) 开始跟着小傅哥学Java设计模式吧,本文主要记录笔者的学习笔记和心得。 打卡!打卡! 设计模式介绍 一、设计模式是什么? …

2023年03月17日_微软和谷歌办公AI的感慨

2023年3月17日 最近这个科技圈的消息 有点爆炸的让人应接不暇了 各种大公司简直就是神仙打架 你从来没有见过这么密集的 这么高频的产品发布 昨天微软是发布了Office 365 Copilot 在里边提供了大量的AI的功能 然后谷歌呢也发布了这个Google Workspace AI 也是跟365 Cop…

据报道,微软的下一代 Surface 笔记本电脑将是其首款真正的“人工智能 PC”

明年,微软计划推出 Surface Laptop 6和 Surface Pro 10,这两款设备将提供 Arm 和 Intel 两种处理器选项。不愿意透露姓名的不透露姓名人士透露,这些新设备将引入先进的人工智能功能,包括配备下一代神经处理单元 (NPU)。据悉&#…

uniapp打包Android、Ios、微信小程序

首先我们需要在我们的代码中,把我们所要用到的配置信息配置好,在检查一下我们测试的内容是否有打开(取消注释),在检查一下我们的版本信息是否正确,查看一下接口ip是否是正式线 这里的配置信息一定要配置好…

SpringBoot整合Canal

一 linux docker compose版本 1.第一步:基础环境 (1)第1步:安装jak、maven、git、nodejs、npm yum install maven mvn -v 安装maven时会帮安装jdkyum install git git --version 2.27.0yum in…

【Echarts】使用echarts和echarts-wordcloud生成词云图

一、下载echarts和echarts-wordcloud 地址:https://download.csdn.net/download/qq_25285531/88663006 可直接下载放在项目中使用 二、词云数据 词云数据是对象的格式,可以从后端获取,这里以下面数据为例 $list3 array(array(name >…

【C语言】分支与循环语句

什么是语句? C语句可分为以下五类: 表达式语句函数调用语句控制语句 (本篇重点介绍)复合语句空语句 控制语句用于控制程序的执行流程,以实现程序的各种结构方式。C语言支持三种结构: 顺序结构选择结构循…

【JavaScript】new原理解析

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…