[SV]SystemVerilog中指定打印格式

SystemVerilog中指定打印格式

       前言:本文主要总结一下SystemVerilog中的占位符,通过合理的使用占位符,可以再log中按自己指定的格式打印信息,方便case分析及debug。

一、指定输出打印格式

       在指定输出打印格式时,转义字符“%”后跟格式说明字符用于指定输出打印格式,除了(%m, %l, and %%)以外,每个%所指定的输出打印格式在后面都应该有一个对应的表达式参数。

       当存在多个格式说明的时候,格式说明与表达式参数按位置关系形成一一对应。

No.占位符意义
1%d或%D   以十进制的形式输出
2%o或%O   以八进制的形式输出
3%b或%B   以二进制的形式输出
4%h或%H   以十六进制的形式输出,打印的字母小写或者大写
5%x或%X   以十六进制的形式输出
6%c或%C   以ASCII码字符的形式输出
7%s或%S   以字符串的形式输出
8%t或%T   以当前的时间格式的形式输出
9%e或%E   以指数的形式输出实型数
10%f或%F   以十进制的形式输出实型数
11%g或%G   以指数或者十进制的形式输出实型数,无论何种格式都以较短的结果输出
12%u或%U Unformatted 2 value data (binary values)
13%z或%Z Unformatted 4 value data
14%v或%V     Display net signal strength
15%p或%P     Display as an assignment pattern
16%l或%L         Display library binding information,显示库关联关系
17%m或%M     Display hierarchical name,显示当前模块的层次名

注:

  • %m和%l分别可以显示打印语句所在当前模块的模块名,和该模块所在的仿真所构建的运行库路径信息,对于调试跟踪来说非常有用,其效果参见以下代码例。
  • %t用于打印时间信息,通常跟$time配合使用
  • %u和%z常用于$fwrite()函数,用于向文件写入数据;其中%u不区分x和z数据,并将其映射为’0’;而%z严格区分x和z数据,将其分别映射为’x’,‘z’。如果需要保持以及区分x(不确定值)和z(高阻)的话,推荐使用%z。
  • %p用于打印聚合表达式,例如解压缩结构,数组和联合(unpacked structure,array,unions),结构体等等,非常方便,其效果如以下代码例所示
`timescale 1ns/1ps

module hvl_top( );
 
  typedef struct packed {
    logic bit1;
    logic [7:0] byte1;
  } packet_t;
 
  packet_t  my_packet;    
    
  logic     x;
  logic     y = 1'bz;    
  
  initial begin        
    # 100;
    $display("[1]: %m:  Welcome to SystemVerilog");
    $display("[2]: %l:  SystemVerilog is very powerful, @%0t(ps)", $realtime());
       
    # 100;
    my_packet.bit1  = 1;
    my_packet.byte1 = 8'h37;

    $display("my_packet = %p, @%0t(ps)", my_packet, $realtime);
 
    $finish();
  end
 
endmodule

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

元直数字电路验证

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值