system_verilog display format
- 简介
$display 和 $write的区别:
$display系的系统函数:会在输出的末尾自动添加换行符(newline character);
$write系的系统函数:光标会停留在输出的末尾,不会自动换行。
$display 和 w r i t e 相 同 之 处 : 按 照 参 数 列 表 的 顺 序 输 出 参 数 ; 参 数 可 以 是 引 号 内 的 字 符 串 ( q u o t e d s t r i n g l i t e r a l ) , 表 达 式 ( e x p r e s s i o n ) 和 数 值 ( v a l u e ) ; 未 指 定 输 出 格 式 的 s t r i n g 和 未 压 缩 的 b y t e 数 据 类 型 , 将 按 照 字 符 串 类 型 输 出 ; 其 他 未 指 定 输 出 格 式 的 数 据 类 类 型 是 非 法 的 。 未 指 定 转 义 字 符 输 出 特 殊 字 符 和 特 殊 格 式 时 , write相同之处: 按照参数列表的顺序输出参数; 参数可以是引号内的字符串(quoted string literal),表达式(expression) 和数值(value); 未指定输出格式的 string 和未压缩的 byte 数据类型,将按照字符串类型输出; 其他未指定输出格式的数据类类型是非法的。 未指定 转义字符 输出特殊字符和特殊格式时, write相同之处:按照参数列表的顺序输出参数;参数可以是引号内的字符串(quotedstringliteral),表达式(expression)和数值(value);未指定输出格式的string和未压缩的byte数据类型,将按照字符串类型输出;其他未指定输出格式的数据类类型是非法的。未指定转义字符输出特殊字符和特殊格式时,dispaly 和 $write 的输出类型默认为 string。 - 转义字符 (Escape sequences)
转义字符可以分为以下三类:
’ \ ’ 表示其后跟随:文字或者不可打印字符(Literal or Nonprintable Character);
’ % ’ 表示其后跟随:格式规范,为后续参数指定格式(Format Specification);
’ %% ’ 表示其后跟随:%字符 (percent sign character).
2.1 转义字符 ‘\’
Escaped Sequence Character Produced by Escaped Sequence
\n newline character -> 换行符
\t tab character -> 制表符
\ \ character -> 反斜杠
" “ character -> 引号
\v vertical tab -> 纵向制表符
\f form feed -> 换页符
\a Bell -> 响铃
%% % character -> 百分号
\ddd (1)三位八进制指定的字符,0 ≤ d ≤ 7; (2)字符少于3位,输出非八进制数字; (3)大于\377出错;
\xdd 两位十六进制数字指定的字符,0 ≤ d ≤ F
注意: system_verilog中仅包含以上几种类型的转义字符(IEEE Std 1800TM-2017),未出现于上表中的其他类型将输出原来字符。如转义字符’ \b ‘的输出结果为‘ b ’。这与 c 语言中不同, c 语言中的 ‘ \b ’为退格,而SV中为字符’ b '.
转义字符 >> 输出示例:
2.2 格式说明符 ‘%’
2.2.1 整型数据格式
Argument Description
%h or %H hexadecimal -> 十六进制
%d or %D decimal -> 十进制
%o or %O octal -> 八进制
%b or %B binary->二进制
%c or %C ASCII -> ASCII码
%l or %L Library binding information -> 库索引
%t or %T time->时间
%u or %U unformatted 2 value data ->二值类型
%z or %Z unformatted 4 value data ->四值类型
%v or %V net signal strength -> 线网型信号强度
%m or %M hierarchical name -> 层次名
%p or %P assignment pattern ->
%s or %S string -> 字符串
‘%h’ ~ ‘%z’ 将整形数据显示为对应格式,应用比较常见,此处不再赘述;
‘%l’ 可以显示既定module的library信息,如果某module例化自library0,例化名称为module1,那么最终的打印信息格式为“ library0.module1 ” ;
‘%t’ 根据不同module的时间精度(precision)和时间单元(unit)显示的格式可能不同;
‘%u’ ‘%z’ 常用于$fwrite函数,用于向文件写入数据;其中%u不区分’x’和’z’数据,并将其映射为’0’;%z严格区分x和’z’数据,将其分别映射为’x’,‘z’。
2.2.2 实数显示格式
Argument Description
%e or %E exponential -> 指数型
%f or %F decimal ->十进制
%g or %G exponential or decimal (shorter one)
数字类型 >> 输出示例:
2.3 数据显示尺寸
对表达式参数而言,写入输出文件的尺寸是自动调整的。例如:12 bit的数据在以 ‘hex’ 格式输出的时候自动调整为3个字符长度,以 ‘decimal’ 格式输出的时候,自动调整为4个字符长度,因为参数输出的最大值为FFF(hexadecimal)和4095(decimal)。
默认设置:以十进制显示的数据格式,参数首部的 ‘0’(leading zeros)会被自动替换成空格(space);对其他格式而言,leading zeros 正常显示;ps:如上图第一行打印信息。
可以在%和字母之间插入域宽(field width),改写显示的格式。注意:域宽只能是非负十进制整型常亮(non-negative decimal integer constant) ;
field width == 0 : 以最小位宽显示,去除首部的空格和0;
field width == others :以others的值显示位宽,不去除首部的空格和0;
argument width < others: 向左扩展,增加位宽至others;(arguments 值靠在右侧)
argument width > others: 显示完整数据位宽(> others);
decimal & string 向左扩展时,补空格 ’ '(space),其他格式,补充 ‘0’.
数字尺寸 >> 输出示例:
2.4 ‘x’ & ‘z’ 态数据显示
十进制 显示规则 (decimal specification)
全部 bits 为 ‘x’ 态 : 单个小写 ‘x’ (single lowercase x);
全部 bits 为 ‘z’ 态:单个小写 ‘z’ (single lowercase z);
部分 bits 为 ‘x’ 态:单个大写 ‘X’ (single uppercase X);
部分 bits 为 ‘z’ 态:单个大写 ‘Z’ (single uppercase Z);
部分 bits 为 ‘x’ 态 & 部分 bits 为 ‘z’ 态:单个大写 ‘X’ (single uppercase X); (x takes precedence over z)
十六进制/八进制 显示规则 (hexadecimal/octal specification)
每 4 bits 为一组,映射 hex 的一位;每 3 bits 为一组,映射 octal 的一位; (single digit)
某组内全部 bits 为 ‘x’ 态 : 单个小写 ‘x’ (single lowercase x);
某组内全部 bits 为 ‘z’ 态:单个小写 ‘z’ (single lowercase z);
某组内部分 bits 为 ‘x’ 态:单个大写 ‘X’ (single uppercase X);
某组内部分 bits 为 ‘z’ 态:单个大写 ‘Z’ (single uppercase Z);
某组内部分 bits 为 ‘x’ 态 & 部分 bits 为 ‘z’ 态:单个大写 ‘X’ (single uppercase X); (x takes precedence over z)
二进制 显示规则 (binary specification)
each bit 分别显示为 ‘0’ ‘1’ ‘x’ ‘z’;
‘x’ & ‘z’ 态 >> 输出示例:
2.5 强度显示格式
%v or %V 格式定义用于显示 标量线网型数据 的强度。
标量线网型数据显示为三个字符(3-character),前两个表示强度(strength character),第三个代表参数当前的逻辑值(current logic character);
逻辑字符和强度字符的可选范围如表2.5.1 和表2.5.2所示:
Table 2.5.1 Logic value of scalar nets
Arguments Description
0 value 0 -> 逻辑0
1 value 1 -> 逻辑1
X unknown value -> 不定值 ‘x’
Z high-impedance -> 高阻 ‘z’
L 0 or high-impedance -> 0 或 ‘z’
H 1 or high-impedance -> 1 或 ‘z’
Table 2.5.2 Strength of scalar nets
Mnemonics Strength name Strength levels
Su Supply drive 7
St Strong drive 6
Pu Pull drive 5
La Large capacitor 4
We weak drive 3
Me Medium capacitor 2
Sm Small capacitor 1
Hi High-impedance 0
表2.5.2中定义了 4 种驱动强度和 3 种电荷存储强度:驱动强度与 gate output 和 continuous assignment有关;电荷存储强度用于 trireg 类型 net. (see clause 28 gate-level and switch-level modeling)
那么逻辑字符和强度字符如何配合使用呢?
对逻辑 ‘0’ 和 ‘1’ :
信号强度为定值时,使用助记符(mnemonic)表示强度字符;
信号强度为区间时,使用两位10进制数字表示强度字符范围(strength level中的等级,0~7);
对不定值’x’ :
信号强度和逻辑’0’ & '1’相同时,使用助记符(mnemonic)表示强度字符;
信号强度和逻辑’0’ & '1’相同时,使用两位10进制数字分别表示逻辑 ‘0’ 和 ‘1’ 的强度(strength level中的等级);
对于高阻态’z’
只能采用 0 等级的Hi,表示高阻 ‘z’ 态的信号强度;
对于 L 和 H:
只能使用助记符(mnemonic)表示信号强度;
信号强度 >> 输出示例:
2.6 层次名格式 (Hierarchical name)
%m or %M 不接受参数输入。 相反,它使设计元素,子例程,命名块或标记语句的层次结构名称,该语句调用包含格式说明符的系统任务。 当某模块的许多实例调用系统任务时,%m可以指示具体哪个实例调用次任务。
2.7 Assignment pattern format
%p or %P 格式说明符可用于打印聚合表达式,例如解压缩结构,数组和联合(unpacked structure,array,unions).
对于解压缩的数据结构,遍历搜索该结构并打印找到的单值数据类型(single data type),单值类型数据的输出需要遵循以下要求:
枚举类型:显示枚举类型的name (其值在enum类型的有效范围内),否则显示value;
字符串:显示为双引号内的字符串形式(quoted string);
各种句柄:显示默认格式名字,如果为空句柄显示 null;
其他格式:按照未定义的默认格式显示。
%0p 格式说明符使得unpacked structure,array,unions可以以更短的形式显示打印;
%p 和 %0p 也可以用于打印单值表达式,此时显示结果和上述的几种显示格式相同。
Assignment pattern format >> 输出格式:
2.8 字符串格式
%s or %S 格式说明符用于将ASCII代码以字符样式打印。
对于出现在字符串中的每个%s,相应的参数应遵循参数列表中的字符串定义。
相关参数被映射为一个8位十六进制ASCII码序列,每8位代表一个字符。
如果参数是变量,则其值是右对齐的,以便该值的最右边的位是字符串中最后一个字符的LSB。
字符串末尾不需要终止字符或值,并且永远不会打印前导零(leading zeros)。
打印字符串时,一般使用%s即可满足要求,可以打印出全部字符。
IEEE Standard for SystemVerilog - Unified Hardware Design, Specification and Verification Language, 1800TM-2017
clause 21 Input/output system tasks and system functions
转载请注明出处!
————————————————
版权声明:本文为CSDN博主「我不是悍跳狼丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39556143/article/details/84075107