iverilog/ivtest/ivltests/pr2166311.v

80 lines
2.4 KiB
Coq
Raw Normal View History

`ifdef __ICARUS__
`define SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
`endif
module top;
reg pass = 1'b1;
wire [3:0] part_idx_up, part_idx_down, part_sel;
wire [3:0] ps_array [1:0];
// Check the positive indexed part select.
// assign part_idx_up[-1+:2] = 2'b01; // We do not currently support this!
assign part_idx_up[1+:2] = 2'b01;
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
assign part_idx_up[3+:2] = 2'b01;
assign part_idx_up[5+:2] = 2'b01; // This should be skipped
assign part_idx_up[7+:3] = 3'b001; // This should be skipped
`else
assign part_idx_up[3] = 1'b1;
`endif
// Check the negative indexed part select.
// assign part_idx_down[0-:2] = 2'b10; // We do not currently support this!
assign part_idx_down[2-:2] = 2'b10;
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
assign part_idx_down[4-:2] = 2'b10;
assign part_idx_down[6-:2] = 2'b10; // This should be skipped
assign part_idx_down[9-:3] = 3'b100; // This should be skipped
`else
assign part_idx_down[3] = 1'b0;
`endif
// Check a normal constant part select.
// assign part_sel[1:-1] = 2'b01; // We do not currently support this!
assign part_sel[2:1] = 2'b01;
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
assign part_sel[4:3] = 2'b01;
assign part_sel[6:5] = 2'b01; // This should be skipped
assign part_sel[9:7] = 3'b001; // This should be skipped
`else
assign part_sel[3] = 1'b1;
`endif
// Check a normal constant part select on an array.
// assign ps_array[0][1:-1] = 2'b01; // We do not currently support this!
assign ps_array[0][2:1] = 2'b01;
`ifdef SUPPORT_CONST_OUT_OF_RANGE_IN_IVTEST
assign ps_array[0][4:3] = 2'b01;
assign ps_array[0][6:5] = 2'b01; // This should be skipped
assign ps_array[0][9:7] = 3'b001; // This should be skipped
`else
assign ps_array[0][3] = 1'b1;
`endif
initial begin
#1;
if (part_idx_up !== 4'b101z) begin
$display("Failed +: select, expected 4'b101z, got %b", part_idx_up);
pass = 1'b0;
end
if (part_idx_down !== 4'b010z) begin
$display("Failed -: select, expected 4'b010z, got %b", part_idx_down);
pass = 1'b0;
end
if (part_sel !== 4'b101z) begin
$display("Failed const. part select, expected 4'b101z, got %b", part_sel);
pass = 1'b0;
end
if (ps_array[0] !== 4'b101z) begin
$display("Failed array part select, expected 4'b101z, got %b",
ps_array[0]);
pass = 1'b0;
end
if (pass) $display("PASSED");
end
endmodule