verilator/test_regress/t/t_force_unpacked_bitsel.v

132 lines
3.6 KiB
Systemverilog

// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2026 Nikolai Kumar
// SPDX-License-Identifier: CC0-1.0
`define checkh(g,e) do if ((g) !==(e)) begin $write("%%Error: %s:%0d: got=%b exp=%b\n", `__FILE__,`__LINE__, (g),(e)); $stop; end while(0)
module t (
input clk
);
int cyc = 0;
always @(posedge clk) cyc <= cyc + 1;
logic [4:1] var_arr [2];
/* verilator lint_off ASCRANGE */
logic [1:4] var_arr_a [2];
/* verilator lint_on ASCRANGE */
logic [72:1] wide_arr [2];
always @(posedge clk) begin
var_arr[0] <= 4'b0101;
var_arr[1] <= (cyc <= 3) ? 4'b1111 : (cyc <= 7) ? 4'b0000 : 4'b0001;
var_arr_a[0] <= 4'b1010;
var_arr_a[1] <= 4'b0000;
wide_arr[0] <= '0;
wide_arr[1] <= 72'hAB_CDEF0123_456789AB;
end
always @(posedge clk) begin
if (cyc == 2) force var_arr[1][1] = 1'b0;
if (cyc == 6) force var_arr[1][4] = 1'b1;
if (cyc == 8) release var_arr[1][1];
if (cyc == 10) force var_arr[1] = 4'b1010;
if (cyc == 12) release var_arr[1];
if (cyc == 2) force wide_arr[1][36:5] = 32'hffff_ffff;
if (cyc == 4) release wide_arr[1];
if (cyc == 2) force var_arr_a[1][2:4] = 3'b111;
if (cyc == 4) force var_arr_a[1][3]= 1'b0;
if (cyc == 6) release var_arr_a[1];
if (cyc == 7) force var_arr_a[1][3:4] = 2'b11;
if (cyc == 9) force var_arr_a[1][2:3]= 2'b00;
if (cyc == 11) release var_arr_a[1];
if (cyc == 12) force var_arr_a[1][1:2] = 2'b11;
if (cyc == 14) force var_arr_a[1][2:3]= 2'b00;
if (cyc == 16) release var_arr_a[1];
if (cyc == 17) force var_arr_a[1][2:3] = 2'b11;
if (cyc == 19) force var_arr_a[1][1:3]= 3'b000;
if (cyc == 21) release var_arr_a[1];
if (cyc == 14) force var_arr[1][1] = 1'b0;
if (cyc == 14) force var_arr[0][1] = 1'b0;
if (cyc == 16) release var_arr[1][1];
if (cyc == 16) release var_arr[0][1];
if (cyc == 18) force var_arr[0] = 4'b1010;
if (cyc == 20) force var_arr[0][1] = 1'b1;
if (cyc == 22) release var_arr[0];
end
always @(posedge clk) case (cyc)
1: begin
`checkh(var_arr[0], 4'b0101);
`checkh(var_arr[1], 4'b1111);
end
3: begin
`checkh(var_arr[1], 4'b1110);
`checkh(wide_arr[1][36:5], 32'hffff_ffff);
`checkh(wide_arr[1][4:1], 4'hB);
`checkh(wide_arr[1][72:37], 36'hABCDEF012);
`checkh(var_arr_a[1], 4'b0111);
`checkh(var_arr_a[0], 4'b1010);
end
5: begin
`checkh(var_arr[1], 4'b0000);
`checkh(wide_arr[1], 72'hAB_CDEF0123_456789AB);
`checkh(var_arr_a[1], 4'b0101);
end
7: begin
`checkh(var_arr[1], 4'b1000);
end
8: begin
`checkh(var_arr_a[1], 4'b0011);
end
9: begin
`checkh(var_arr[1], 4'b1001);
end
10: begin
`checkh(var_arr_a[1], 4'b0001);
end
11: begin
`checkh(var_arr[1], 4'b1010);
`checkh(var_arr[0], 4'b0101);
end
13: begin
`checkh(var_arr[1], 4'b0001);
`checkh(var_arr_a[1], 4'b1100);
end
15: begin
`checkh(var_arr_a[1], 4'b1000);
`checkh(var_arr[1], 4'b0000);
`checkh(var_arr[0], 4'b0100);
end
17: begin
`checkh(var_arr[1], 4'b0001);
`checkh(var_arr[0], 4'b0101);
end
18: begin
`checkh(var_arr_a[1], 4'b0110);
end
19: begin
`checkh(var_arr[0], 4'b1010);
end
20: begin
`checkh(var_arr_a[1], 4'b0000);
end
21: begin
`checkh(var_arr[0], 4'b1011);
end
22: begin
`checkh(var_arr_a[1], 4'b0000);
end
23: begin
`checkh(var_arr[0], 4'b0101);
$write("*-* All Finished *-*\n");
$finish;
end
endcase
endmodule