45 lines
954 B
Coq
45 lines
954 B
Coq
|
|
// Check that the assignment operator is supported for out-of-bounds indices.
|
||
|
|
// The write should be skipped, but side effects of the right-hand side
|
||
|
|
// expression should still get evaluated.
|
||
|
|
|
||
|
|
module test;
|
||
|
|
|
||
|
|
// Check that wider than 32 works
|
||
|
|
logic [39:0] a[1:0];
|
||
|
|
integer i;
|
||
|
|
logic [39:0] j = 0;
|
||
|
|
|
||
|
|
function logic [39:0] f;
|
||
|
|
j++;
|
||
|
|
return j;
|
||
|
|
endfunction
|
||
|
|
|
||
|
|
initial begin
|
||
|
|
a[0] = 23;
|
||
|
|
a[1] = 42;
|
||
|
|
|
||
|
|
// Immediate out-of-bounds indices
|
||
|
|
a[-1] += f();
|
||
|
|
a[2] += f();
|
||
|
|
a['hx] += f();
|
||
|
|
|
||
|
|
// Variable out-of-bounds indices
|
||
|
|
i = -1;
|
||
|
|
a[i] += f();
|
||
|
|
i = 2;
|
||
|
|
a[i] += f();
|
||
|
|
i = 'hx;
|
||
|
|
a[i] += f();
|
||
|
|
|
||
|
|
// Check that the in-bounds elements do not get affected by out-of-bounds
|
||
|
|
// updates. Check that the left-hand side of the operator assignment gets
|
||
|
|
// evaluated.
|
||
|
|
if (a[0] == 23 && a[1] == 42 && j == 6) begin
|
||
|
|
$display("PASSED");
|
||
|
|
end else begin
|
||
|
|
$display("FAILED");
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
endmodule
|