uvm_primer ch19 reporting/打印信息

20 篇文章 10 订阅


最初使用

$display $error $fatal做打印,不能有一些控制;

uvm 打印

`uvm_info(<Message ID string>,<msg string>,<verbosity>)
`uvm_warning(<Message ID string>,<msg string>)
`uvm_error(<Message ID string>,<msg string>)
`uvm_fatal(<Message ID string>,<msg string>)

可以有多种设置UVM_VERBOSITY的方式

vsim top_optim -coverage +UVM_NAME=random_test +UVM_VERBOSITY=UVM_HIGH

  • default 的UVM_VERBOSITY是MEDIUM;
class env extends uvm_env;

   `uvm_component_utils(env);
...
 function void end_of_elaboration_phase(uvm_phase phase);
     scoreboard_h.set_report_severity_action_hier(UVM_ERROR, UVM_NO_ACTION);
 endfunction : end_of_elaboration_phase
...
endclass

_hier 代表这个对象及其内部包含的所有
也可以使用
set_report_severity_action(UVM_HIGH);
在这里插入图片描述

UVM_NO_ACTION 用来控制warning /error/fatal

uvm_report_info

uvm_report_info这个和uvm_info 之间关系??

uvm_report_info(get_type_name(),$psprintf("rq_attr = %0h",rq_attr));
REPORT_TAG = $sformatf("RST_AGENT_DRV[%0s]",cfg.id);

uvm_report_fatal(REPORT_TAG,"Unsupported cmd_type in sequence item");
uvm_report_fatal(REPORT_TAG, {"rst_agent_cfg must be set for: ", get_full_name(), ".cfg"});

if (cfg.use_rst_in) begin
    uvm_report_error(REPORT_TAG,$sformatf(
      "Reset %s is configured to use rst_in as its control, so it should not receive a sequence item, but one was just sent. Ignoring sequence item.\n",cfg.id));

%m

if (TRACE_ON) $display("[TRACE]%t %s:%m", $realtime, this.name);
上句%s,表示打印字符串, %m表示打印层次名字
这句常用于debug
`uvm_info( get_name(), $sformatf("HIERARCHY: %m"), UVM_HIGH);

UVM_INFO my_driver.sv(23) @ 2900000: uvm_test_top.env.i_agt.drv [my_driver] HIERARCHY: top_tb_sv_unit.my_driver.main_phase

打印信息应该让我们可以看出是谁打印的这个信息(代码风格)

psprintf/req.sprint()

`uvm_info( get_name(), $psprintf("Wishbone Transaction: \n%0s", req.sprint()), UVM_HIGH)

  • psprintf返回一个字符串
  • $sformat是SystemVerilog标准中的系统函数

《SystemVerilog验证测试平台编写指南中文 第二版》49页 中提到了 $psprintf 和 $sformat ,看着意思是$psprintf 较好一些。原文如下: “稍加留意便可发现动态字符串的用处有多大。在别的语言如C里,你必须不停地创建临时字符串来接收函数返回的结果。在例2.53中,函数$psprintf()替代了Verilog-2001中的函数$sformat()。这个新函数返回一个格式化的临时字符串,并且可以直接传递给其他子程序。这样你就可以不用定义新的临时字符串并在格式化语句与函数调用过程中传递这个字符串。”$sformat是SystemVerilog标准中的系统函数
$psprintf是由VCS添加的SV扩展(源自Vera),暂未被SystemVerilog标准收录,$psprintf最近也被Questa支持。
总结起来就是:$psprintf 和 $sformat 的功能基本相同,都是返回一个格式化的字符串,并且可以直接传递给其他子程序。其中,$sformat属于SV标准支持的函数,而$psprintf目前被VCS工具和Questa工具支持 。

sformat/sformatf

  • 首先$sformatf()/$sformat()这两个函数是不做打印的事儿的,不要以为这两个函数是做打印的!
  • $sformat()比$sformatf()多了第一个参数,这个第一个参数就是放最终整理好的字符串的容器。
string jerry_string;

string jerry_string_r;

$sformat(jerry_string , “jerry_face_score==%0d, 100);  //

$display(1.%0s”, jerry_string);

jerry_string_r=$sformatf(“jerry_cool_score==%0d, 100);

$display(2.%0s”, jerry_string_r);
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值