85 lines
4.4 KiB
Verilog
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
|