iverilog/ivtest/ivltests/pr2476430.v

311 lines
7.8 KiB
Verilog

`timescale 1ns/10ps
module top;
reg pass;
reg [60*8-1:0] str, cmp;
reg [7:0] bval;
reg [15:0] oval, hval;
integer dval;
time tval;
real rval;
initial begin
pass = 1'b1;
// Check the %b conversion.
bval = 8'b01101001;
cmp = "1101001";
$sformat(str, "%0b", bval);
if (str != cmp) begin
$display("FAILED: %%0b, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "0000000001101001";
$sformat(str, "%016b", bval);
if (str != cmp) begin
$display("FAILED: %%016b, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "1101001 ";
$sformat(str, "%-016b", bval);
if (str != cmp) begin
$display("FAILED: %%-016b, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
// Check the %o conversion.
oval = 16'o01234;
cmp = "1234";
$sformat(str, "%0o", oval);
if (str != cmp) begin
$display("FAILED: %%0o, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "00001234";
$sformat(str, "%08o", oval);
if (str != cmp) begin
$display("FAILED: %%08o, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "1234 ";
$sformat(str, "%-08o", oval);
if (str != cmp) begin
$display("FAILED: %%-08o, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
// Check the %h conversion.
hval = 16'h0abc;
cmp = "abc";
$sformat(str, "%0h", hval);
if (str != cmp) begin
$display("FAILED: %%0h, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "00000abc";
$sformat(str, "%08h", hval);
if (str != cmp) begin
$display("FAILED: %%08h, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "abc ";
$sformat(str, "%-08h", hval);
if (str != cmp) begin
$display("FAILED: %%-08h, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
// Check the %c conversion.
bval = "c";
cmp = "c";
$sformat(str, "%0c", bval);
if (str != cmp) begin
$display("FAILED: %%0c, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "000c";
$sformat(str, "%04c", bval);
if (str != cmp) begin
$display("FAILED: %%04c, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
// Check the %d conversion.
dval = 123;
cmp = "00000123";
$sformat(str, "%08d", dval);
if (str != cmp) begin
$display("FAILED: %%08d, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "+0000123";
$sformat(str, "%+08d", dval);
if (str != cmp) begin
$display("FAILED: %%+08d, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = " 123";
$sformat(str, "%d", dval);
if (str != cmp) begin
$display("FAILED: %%d, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "123 ";
$sformat(str, "%-08d", dval);
if (str != cmp) begin
$display("FAILED: %%-08d, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "123";
$sformat(str, "%0d", dval);
if (str != cmp) begin
$display("FAILED: %%0d, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
dval = -123;
cmp = "-0000123";
$sformat(str, "%08d", dval);
if (str != cmp) begin
$display("FAILED: %%08d, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
$sformat(str, "%+08d", dval);
if (str != cmp) begin
$display("FAILED: %%+08d, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = " -123";
$sformat(str, "%d", dval);
if (str != cmp) begin
$display("FAILED: %%d, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
// Check the %t conversion.
tval = 100_000;
cmp = "0010000000";
$sformat(str, "%010t", tval);
if (str != cmp) begin
$display("FAILED: %%010t, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = " 10000000"; // Default width is 20.
$sformat(str, "%t", tval);
if (str != cmp) begin
$display("FAILED: %%t, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "10000000 ";
$sformat(str, "%-010t", tval);
if (str != cmp) begin
$display("FAILED: %%-010t, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "10000000";
$sformat(str, "%0t", tval);
if (str != cmp) begin
$display("FAILED: %%0t, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
rval=100_000.25;
cmp = "0010000025";
$sformat(str, "%010t", rval);
if (str != cmp) begin
$display("FAILED: %%010t (real), expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = " 10000025"; // Default width is 20.
$sformat(str, "%t", rval);
if (str != cmp) begin
$display("FAILED: %%t (real), expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "10000025 ";
$sformat(str, "%-010t", rval);
if (str != cmp) begin
$display("FAILED: %%-010t (real), expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "10000025";
$sformat(str, "%0t", rval);
if (str != cmp) begin
$display("FAILED: %%0t (real), expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
// Display in ns with 10ps resolution.
$timeformat(-9, 2, " ns", 15);
cmp = "000100000.00 ns";
$sformat(str, "%015t", tval);
if (str != cmp) begin
$display("FAILED: %%015t (w/$tf), expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = " 100000.00 ns";
$sformat(str, "%t", tval);
if (str != cmp) begin
$display("FAILED: %%t (w/$tf), expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "100000.00 ns ";
$sformat(str, "%-015t", tval);
if (str != cmp) begin
$display("FAILED: %%-015t (w/$tf), expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "100000.00 ns";
$sformat(str, "%-0t", tval);
if (str != cmp) begin
$display("FAILED: %%-0t (w/$tf), expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "000100000.25 ns";
$sformat(str, "%015t", rval);
if (str != cmp) begin
$display("FAILED: %%015t (w/$tf, rl), expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = " 100000.25 ns";
$sformat(str, "%t", rval);
if (str != cmp) begin
$display("FAILED: %%t (w/$tf, rl), expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "100000.25 ns ";
$sformat(str, "%-015t", rval);
if (str != cmp) begin
$display("FAILED: %%-015t (w/$tf, rl), expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "100000.25 ns";
$sformat(str, "%-0t", rval);
if (str != cmp) begin
$display("FAILED: %%-0t (w/$tf, rl), expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
// Check the real conversions (%e, %f, %g). If one works they all
// they all work (uses system conversion).
rval = 1.25;
cmp = "000000001.250000";
$sformat(str, "%016.6f", rval);
if (str != cmp) begin
$display("FAILED: %%016.6f, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "+00000001.250000";
$sformat(str, "%+016.6f", rval);
if (str != cmp) begin
$display("FAILED: %%+016.6f, expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
rval = -1.25;
cmp = "-00000001.250000";
$sformat(str, "%016.6f", rval);
if (str != cmp) begin
$display("FAILED: %%016.6f (negative), expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
cmp = "-00000001.250000";
$sformat(str, "%+016.6f", rval);
if (str != cmp) begin
$display("FAILED: %%+016.6f (negative), expected %0s, got %0s", cmp, str);
pass = 1'b0;
end
if (pass) $display("PASSED");
end
endmodule