35 lines
793 B
Verilog
35 lines
793 B
Verilog
`begin_keywords "1364-2005"
|
|
module test();
|
|
|
|
reg signed [15:0] a;
|
|
reg signed [7:0] b;
|
|
reg signed [31:0] expect;
|
|
wire signed [31:0] actual;
|
|
|
|
reg signed [127:0] long_x;
|
|
real real_x;
|
|
|
|
assign actual = a ** b;
|
|
|
|
initial begin
|
|
for (a = -32768; a < 32767; a = a + 1) begin:outer_loop
|
|
long_x = 1;
|
|
for (b = 0; b < 127; b = b + 1) begin:inner_loop
|
|
real_x = $itor(a) ** $itor(b);
|
|
if (real_x < 0.0) real_x = -real_x;
|
|
if (real_x >= 2.0**128.0) disable outer_loop;
|
|
expect = long_x;
|
|
#0; // wait for net propagation
|
|
if (actual !== expect) begin
|
|
$display("FAILED : %0d ** %0d = %0d not %0d", a, b, expect, actual);
|
|
$finish;
|
|
end
|
|
long_x = long_x * a;
|
|
end
|
|
end
|
|
$display("PASSED");
|
|
end
|
|
|
|
endmodule
|
|
`end_keywords
|