(
d
i
s
p
l
a
y
)
自
动
地
在
输
出
后
进
行
换
行
。
(
display)自动地在输出后进行换行。 (
display)自动地在输出后进行换行。(write)则在输出后不换行。如果想在一行里输出多个信息,可以使用(
w
r
i
t
e
)
。
在
(
write)。 在(
write)。在(display)和($write)中,其输出格式控制是用双引号括起来的字符串,包括以下信息:
- 格式说明,有(%)和格式字符组成。它的作用是将输出的数据转换成指定的格式输出。格式说明总是有(%)字符开始的。
2.普通字符,即需要原样输出的字符。其中一些特殊的字符可以通过表中的转换序列输出。表中的字符形式用于格式字符串参数中,用来显示特殊的字符。

例子:
module disp;
initial begin
$display("\\\t%%\n\"\123");
end
endmodule
//输出结果为
\ %
"S
从这个例子可以看出一些特殊字符的输出形式(八进制数123就是字符S)。
例子:
module disp;
reg[31:0] rval;
pulldown(pd);
initial begin
rval=101;
$display("rval=%h hex %d decimal", rval, rval);
$display("rval=%o otal %d binary", rval, rval);
$display("rval has %c ascii character value", rval);
$display("pd strength value is %v", pd);
$display("current scope is %m");
$display("%s is ascii value for 101", 101);
$display("simulation timeis %t", $time);
end
endmodule
//输出结果为
rval=00000065 hex 101 decimal
rval=00000000145 octal 00000000000000000000000001100101 binary
rval has e ascii character value
pd strength value is StX
current scopeis disp
e is ascii value for 101
simulation time is 0
在用十进制数格式输出时,输出结果前面的0值用空格来代替。对于其他进制,输出结果前面的0仍然显示出来。
可以通过在(%)和表示进制的字符中间插入一个0自动调整显示输出数据宽度的方式:
$display("d=%0h a=%0h", data, addr);
这样在显示输出数据时,在经过格式转换以后,总是用最少的位数来显示表达式的当前值。
例子:
module printval;
reg[11:0] r1;
initial begin
r1=10;
$display("Printing with maximum size=%d=%h", r1, r1);
$display("Printing with maximum size=%0d=%0h", r1, r1);
end
endmodule
//输出结果为
Printing with maximum size=10=00a;
Printing with maximum size=10=a;
如果输出列表中表达式的值包含有不确定的值或高阻值,其结果输出遵循以下规则:
1 在输出格式为十进制的情况下:
1.1 如果表达式值的所有位均为不定值,则输出结果为小写的x;
1.2 如果表达式值的所有位均为高阻值,则输出结果为小写的z;
1.3 如果表达式值的部分位均为不定值,则输出结果为大写的X;
1.4 如果表达式值的部分位均为高阻值,则输出结果为大写的Z;
2 在输出格式为十六进制和八进制的情况下:
2.1 每4位二进制数为一组代表一位十六制数,每3位二进制数为一组代表一位八进制数;
2.2 如果表达式值相对应的某进制数的所有位均为不定值,则该位进制数的输出的结果为小写的x;
2.3 如果表达式值相对应的某进制数的所有位均为高阻值,则该位进制数的输出的结果为小写的z;
2.4 如果表达式值相对应的某进制数的部分位为不定值,则该位进制数的输出的结果为大写的X;
2.5 如果表达式值相对应的某进制数的部分位为高阻值,则该位进制数的输出的结果为大写的Z;
3 对于二进制输出格式,表达式值的每一位的输出结果为0, 1, x, z。
$display("%d", 1'bx); //x
$display("%h", 14'bx0_1010); //xxXa
$display("%h %o", 12'b001x_xx10_1x01, 12'b001_xxx_101_x01); //XXX 1x5X
因为(
w
r
i
t
e
)
在
输
出
时
不
换
行
,
要
注
意
图
的
使
用
。
可
以
在
(
write)在输出时不换行,要注意图的使用。可以在(
write)在输出时不换行,要注意图的使用。可以在(write)中加入换行符\n,以确保明确的输出显示格式。