概述
前言
本文主要总结一下SystemVerilog
中的占位符,通过合理的使用占位符,在log
中按自己指定的格式打印信息,方便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
最后
以上就是坚定裙子为你收集整理的SystemVerilog中指定打印格式的全部内容,希望文章能够帮你解决SystemVerilog中指定打印格式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复