iverilog/ivtest/ivltests/string13.v

59 lines
1.5 KiB
Verilog

// Check that null-bytes are handled consistently between string literals,
// number literals and signals of all kinds, especially when formatting as a
// string.
module test;
reg failed = 1'b0;
`define check(val, exp) \
if (val != exp) begin \
$display("FAILED(%0d): Expected '%0s', got '%0s'.", `__LINE__, exp, val); \
failed = 1'b1; \
end
reg [255:0] s;
reg [31:0] x;
reg [31:0] y[1:0];
wire [31:0] z;
wire [31:0] w;
assign z = "\000a\000b";
assign w = 32'h00610062;
initial begin
$sformat(s, ":%x:%0x:%s:%0s:", "\000a\000b", "\000a\000b", "\000a\000b", "\000a\000b");
`check(s, ":00610062:610062: a b:a b:")
$sformat(s, ":%x:%0x:%s:%0s:", 32'h00610062, 32'h00610062, 32'h00610062, 32'h00610062);
`check(s, ":00610062:610062: a b:a b:")
x = "\000a\000b";
$sformat(s, ":%x:%0x:%s:%0s:", x, x, x, x);
`check(s, ":00610062:610062: a b:a b:")
x = 32'h00610062;
$sformat(s, ":%x:%0x:%s:%0s:", x, x, x, x);
`check(s, ":00610062:610062: a b:a b:")
y[0] = "\000a\000b";
$sformat(s, ":%x:%0x:%s:%0s:", y[0], y[0], y[0], y[0]);
`check(s, ":00610062:610062: a b:a b:")
y[1] = 32'h00610062;
$sformat(s, ":%x:%0x:%s:%0s:", y[1], y[1], y[1], y[1]);
`check(s, ":00610062:610062: a b:a b:")
$sformat(s, ":%x:%0x:%s:%0s:", z, z, z, z);
`check(s, ":00610062:610062: a b:a b:")
$sformat(s, ":%x:%0x:%s:%0s:", w, w, w, w);
`check(s, ":00610062:610062: a b:a b:")
if (!failed) begin
$display("PASSED");
end
end
endmodule