Verilog中$display和$write任务以及格式化输出

( d i s p l a y ) 自 动 地 在 输 出 后 进 行 换 行 。 ( display)自动地在输出后进行换行。 ( display)(write)则在输出后不换行。如果想在一行里输出多个信息,可以使用( w r i t e ) 。 在 ( write)。 在( write)(display)和($write)中,其输出格式控制是用双引号括起来的字符串,包括以下信息:

  1. 格式说明,有(%)和格式字符组成。它的作用是将输出的数据转换成指定的格式输出。格式说明总是有(%)字符开始的。

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,以确保明确的输出显示格式。

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值