iverilog/ivtest/ivltests/itor_rtoi.v

85 lines
4.4 KiB
Verilog

/*
* This does not check that $itor() and $rtoi() can actually be called in
* a constant context (e.g. a parameter assignment). This was done so that
* older version of Icarus Verilog will still run this code to verify that
* the values are converted correctly. Also some of the results are not
* defined in the standard so we use a gold file instead of pass/fail test
* to make it easier to check other simulators.
*/
module top;
integer ival;
real rval;
initial begin
$display("Testing $itor() in a constant context.");
// Check various integer values.
rval = $itor(10); $display(" $itor(10) = %g", rval);
rval = $itor(1'bx); $display(" $itor(1'bx) = %g", rval);
rval = $itor(1'bz); $display(" $itor(1'bx) = %g", rval);
// Check various real values.
rval = $itor(10.4); $display(" $itor(10.4) = %g", rval);
rval = $itor(10.5); $display(" $itor(10.5) = %g", rval);
rval = $itor(-1.4); $display(" $itor(-1.4) = %g", rval);
rval = $itor(-1.5); $display(" $itor(-1.5) = %g", rval);
rval = $itor(0.0/0.0); $display(" $itor(NaN) = %g", rval);
rval = $itor(1.0/0.0); $display(" $itor(+inf) = %g", rval);
rval = $itor(-1.0/0.0); $display(" $itor(-inf) = %g", rval);
$display("");
$display("Testing $itor() in a variable context.");
// Check various integer values.
ival = 10; rval = $itor(ival); $display(" $itor(10) = %g", rval);
ival = 1'bx; rval = $itor(ival); $display(" $itor(1'bx) = %g", rval);
ival = 1'bx; rval = $itor(ival); $display(" $itor(1'bx) = %g", rval);
// Check various real values.
rval = 10.4; rval = $itor(rval); $display(" $itor(10.4) = %g", rval);
rval = 10.5; rval = $itor(rval); $display(" $itor(10.5) = %g", rval);
rval = -1.4; rval = $itor(rval); $display(" $itor(-1.4) = %g", rval);
rval = -1.5; rval = $itor(rval); $display(" $itor(-1.5) = %g", rval);
rval = 0.0/0.0; rval = $itor(rval); $display(" $itor(NaN) = %g", rval);
rval = 1.0/0.0; rval = $itor(rval); $display(" $itor(+inf) = %g", rval);
rval = -1.0/0.0; rval = $itor(rval); $display(" $itor(-inf) = %g", rval);
$display("");
$display("Testing $rtoi() in a constant context.");
// Check for truncation of a positive value.
ival = $rtoi(1.1); $display(" $rtoi(1.1) = %0d", ival);
ival = $rtoi(1.9); $display(" $rtoi(1.9) = %0d", ival);
// Check for truncation of a negative value.
ival = $rtoi(-1.1); $display(" $rtoi(-1.1) = %0d", ival);
ival = $rtoi(-1.9); $display(" $rtoi(-1.9) = %0d", ival);
// Check a value larger than an integer is truncated.
ival = $rtoi((33'b1<<32)+0.0); $display(" Overflow(0) = %0d", ival);
ival = $rtoi((33'b1<<32)+1.0); $display(" Overflow(1) = %0d", ival);
// Check NaN, +/- infinity.
ival = $rtoi(0.0/0.0); $display(" $rtoi(NaN) = %0d", ival);
ival = $rtoi(1.0/0.0); $display(" $rtoi(+inf) = %0d", ival);
ival = $rtoi(-1.0/0.0); $display(" $rtoi(-inf) = %0d", ival);
// Check various integer values.
ival = $rtoi(1); $display(" $rtoi(1) = %0d", ival);
ival = $rtoi(1'bx); $display(" $rtoi(1'bx) = %0d", ival);
ival = $rtoi(1'bz); $display(" $rtoi(1'bz) = %0d", ival);
$display("");
$display("Testing $rtoi() in a variable context.");
// Check for truncation of a positive value.
rval = 1.1; ival = $rtoi(rval); $display(" $rtoi(1.1) = %0d", ival);
rval = 1.9; ival = $rtoi(rval); $display(" $rtoi(1.9) = %0d", ival);
// Check for truncation of a negative value.
rval = -1.1; ival = $rtoi(rval); $display(" $rtoi(-1.1) = %0d", ival);
rval = -1.9; ival = $rtoi(rval); $display(" $rtoi(-1.9) = %0d", ival);
// Check a value larger than an integer is truncated.
rval = (33'b1<<32)+0.0; ival = $rtoi(rval); $display(" Overflow(0) = %0d", ival);
rval = (33'b1<<32)+1.0; ival = $rtoi(rval); $display(" Overflow(1) = %0d", ival);
// Check NaN, +/- infinity.
rval = 0.0/0.0; ival = $rtoi(rval); $display(" $rtoi(NaN) = %0d", ival);
rval = 1.0/0.0; ival = $rtoi(rval); $display(" $rtoi(+inf) = %0d", ival);
rval = -1.0/0.0; ival = $rtoi(rval); $display(" $rtoi(-inf) = %0d", ival);
// Check various integer values.
ival = 1; ival = $rtoi(ival); $display(" $rtoi(1) = %0d", ival);
ival = 1'bx; ival = $rtoi(ival); $display(" $rtoi(1'bx) = %0d", ival);
ival = 1'bz; ival = $rtoi(ival); $display(" $rtoi(1'bz) = %0d", ival);
end
endmodule