UVM中打印格式及其控制方法

本文介绍了在基于UVM的验证环境中如何使用宏进行调试,包括`uvm_info`、`uvm_warning`、`uvm_error`、`uvm_fatal`四个宏的使用,以及通过`sformatf`函数传递参数。此外,还详细讲解了如何通过命令行控制打印信息的可见度、行为和严重等级,帮助优化调试过程。
摘要由CSDN通过智能技术生成


前言

在基于UVM的验证环境中写代码的时候,经常需要打印一些参数进行调试。本文主要总结一下,在UVM中如何去打印,以及如何去控制打印信息。


一、UVM中提供的打印宏

如下图所示,uvm中提供了`uvm_info、 `uvm_warning、`uvm_error、`uvm_fatal这四个宏,分别用于打印不同严重等级的信息。其中,`uvm_info这个宏还提供五个等级的可见度,分别是UVM_LOW、UVM_MEDIUM、UVM_HIGH、UVM_FULL、UVM_DEBUG。默认的可见度是UVM_MEDIUM,
在这里插入图片描述
举个例子:
在这里插入图片描述
不同严重等级的打印信息对应的行为如下图所示,其中UVM_FATAL打印后会显示打印信息并退出仿真,UVM_ERROR打印后会显示打印信息并计数,UVM_WARNING和UVM_INFO只显示打印信息。
在这里插入图片描述

二、UVM打印宏打印参数

在调用UVM打印宏进行打印的时候,不仅仅只是打印一串固定的字符串,很多时候我们需要将一些参数打印出来进行调试,这时候我们就需要用到$sformatf()这个系统函数,这个系统函数能够传递带参数的字符串。

`uvm_info("ADDR_MAP", $sformatf("R addr = %0h", regmodel.R.get_address()), UVM_HIGH)
`uvm_info(`gfn, $sformatf("rcvd item:\n%0s", req.sprint()), UVM_HIGH)
`uvm_info("TRACE", $sformatf("%m"), UVM_HIGH);

SV中的打印格式输入描述如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、命令行控制打印信息

分别介绍了三中命令行控制打印信息的方法:
1、控制某一个组件在特定的phase或者时间打印信息的可见度;
2、控制打印信息的行为;例如控制UVM_ERROR不进行显示和计数
3、控制打印信息的严重等级;例如将UVM_FATAL替换为UVM_ERROR
在这里插入图片描述


总结

UVM ,我们可以通过设置消息处理器(Message Handler)来控制 UVM 最后打印的消息格式。具体来说,我们可以在构建阶段(`build_phase`)设置消息处理器的格式,例如: ```verilog class my_env extends uvm_env; // ... function void build_phase(uvm_phase phase); super.build_phase(phase); //获取默认消息处理器 uvm_default_handler default_h = uvm_default_factory.get_default_handler(); //设置默认消息处理器的格式 default_h.set_format_string("%m @ %t: %s"); endfunction // ... endclass ``` 在上述例子,我们获取了默认的消息处理器,并设置了其格式为`"%m @ %t: %s"`。其,`%m`表示消息类型,`%t`表示时间戳,`%s`表示消息内容。 除了设置默认消息处理器的格式外,我们还可以创建自定义消息处理器,并根据需要设置其格式。例如: ```verilog class my_msg_handler extends uvm_msg_handler; // ... function void report_phase(uvm_phase phase); super.report_phase(phase); //设置消息处理器的格式 set_format_string("%m @ %t: %s"); endfunction // ... endclass ``` 在上述例子,我们创建了一个自定义消息处理器,并在报告阶段(`report_phase`)设置了其格式为`"%m @ %t: %s"`。 最后,我们需要在测试用例或顶层设置消息处理器,例如: ```verilog class my_test extends uvm_test; // ... function void build_phase(uvm_phase phase); super.build_phase(phase); //设置消息处理器 my_msg_handler msg_h = new(); uvm_report_info.set_msg_handler(msg_h); endfunction // ... endclass ``` 在上述例子,我们创建了一个自定义消息处理器`msg_h`,并将其设置为消息处理器。 通过以上步骤,我们可以控制 UVM 最后打印的消息格式
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值