iverilog/ivtest/ivltests/pr3582052.v

66 lines
1.8 KiB
Verilog

module bug;
reg [7:0] Data[0:3][0:15];
reg [7:0] Expect0;
reg [7:0] Expect1;
reg [7:0] Expect2;
reg [7:0] Expect3;
reg [7:0] Actual0;
reg [7:0] Actual1;
reg [7:0] Actual2;
reg [7:0] Actual3;
integer i;
integer j;
reg Failed = 0;
initial begin
for (i = 0; i < 4; i = i + 1) begin
for (j = 0; j < 16; j = j + 1) begin
Data[i][j] = (i << 4) + j;
end
end
// this catches the original bug
for (j = 0; j < 16; j = j + 1) begin
Expect0 = 0*16 + j; Actual0 = Data[0][j];
Expect1 = 1*16 + j; Actual1 = Data[1][j];
Expect2 = 2*16 + j; Actual2 = Data[2][j];
Expect3 = 3*16 + j; Actual3 = Data[3][j];
$display("%h %h %h %h", Actual0, Actual1, Actual2, Actual3);
if (Actual0 !== Expect0) Failed = 1;
if (Actual1 !== Expect1) Failed = 1;
if (Actual2 !== Expect2) Failed = 1;
if (Actual3 !== Expect3) Failed = 1;
end
// extended tests to check the bug fix doesn't break anything else
for (i = 0; i < 4; i = i + 1) begin
Expect0 = i*16 + 0; Actual0 = Data[i][0];
Expect1 = i*16 + 3; Actual1 = Data[i][3];
Expect2 = i*16 + 6; Actual2 = Data[i][6];
Expect3 = i*16 + 9; Actual3 = Data[i][9];
$display("%h %h %h %h", Actual0, Actual1, Actual2, Actual3);
if (Actual0 !== Expect0) Failed = 1;
if (Actual1 !== Expect1) Failed = 1;
if (Actual2 !== Expect2) Failed = 1;
if (Actual3 !== Expect3) Failed = 1;
end
Expect0 = 0*16 + 0; Actual0 = Data[0][0];
Expect1 = 0*16 + 9; Actual1 = Data[0][9];
Expect2 = 3*16 + 0; Actual2 = Data[3][0];
Expect3 = 3*16 + 9; Actual3 = Data[3][9];
$display("%h %h %h %h", Actual0, Actual1, Actual2, Actual3);
if (Actual0 !== Expect0) Failed = 1;
if (Actual1 !== Expect1) Failed = 1;
if (Actual2 !== Expect2) Failed = 1;
if (Actual3 !== Expect3) Failed = 1;
if (Failed)
$display("FAILED");
else
$display("PASSED");
end
endmodule