2024-10-09 11:39:40 +02:00
// DESCRIPTION: Verilator: Test of select from constant
//
2026-01-27 02:24:34 +01:00
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2024 Wilson Snyder
2024-10-09 11:39:40 +02:00
// SPDX-License-Identifier: CC0-1.0
2026-03-10 02:38:29 +01:00
// verilog_format: off
2024-10-09 11:39:40 +02:00
`define stop $stop
`define checkh(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got='h%x exp='h%x\n", `__FILE__,`__LINE__, (gotv), (expv)); `stop; end while(0)
2026-03-10 02:38:29 +01:00
// verilog_format: on
2024-10-09 11:39:40 +02:00
module t ;
2026-03-10 02:38:29 +01:00
reg clk = 0 ;
2024-10-09 11:39:40 +02:00
2026-03-10 02:38:29 +01:00
always # 50 clk = ~ clk ;
2024-10-09 11:39:40 +02:00
2026-03-10 02:38:29 +01:00
initial begin
# 1000 ;
$write ( " *-* All Finished *-* \n " ) ;
$finish ;
end
2024-10-09 11:39:40 +02:00
2026-03-10 02:38:29 +01:00
int cyc = 0 ;
always @ ( posedge clk ) cyc < = cyc + 1 ;
2024-10-09 11:39:40 +02:00
2026-03-10 02:38:29 +01:00
localparam SIZE = 65536 ;
2024-10-09 11:39:40 +02:00
2026-03-10 02:38:29 +01:00
// Case 1: Array NBA inside suspendable
int array1 [ SIZE ] ;
always @ ( posedge clk ) begin
# 1 ;
for ( int i = 0 ; i < SIZE ; i + + ) array1 [ i ] < = cyc + i ;
if ( cyc > 1 ) begin
for ( int i = 0 ; i < SIZE ; i + + ) `checkh ( array1 [ i ] , cyc - 1 + i ) ;
end
# 1 ;
for ( int i = 0 ; i < SIZE ; i + + ) `checkh ( array1 [ i ] , cyc + i ) ;
end
2024-10-09 11:39:40 +02:00
2026-03-10 02:38:29 +01:00
// Case 2: Array NBA to array also assigned in suspendable
int array2 [ SIZE ] ;
always @ ( posedge clk ) begin
for ( int i = 0 ; i < SIZE ; i + + ) array2 [ i ] < = cyc + i ;
end
2024-10-09 11:39:40 +02:00
2026-03-10 02:38:29 +01:00
always @ ( posedge clk ) begin
# 2 array2 [ 1 ] < = 1111 ;
# 2 array2 [ 3 ] < = 3333 ;
# 2 array2 [ 5 ] < = 5555 ;
end
2024-10-09 11:39:40 +02:00
2026-03-10 02:38:29 +01:00
initial begin
@ ( posedge clk ) ;
@ ( posedge clk ) ;
@ ( posedge clk ) ;
# 1 ;
for ( int i = 0 ; i < SIZE ; i + + ) `checkh ( array2 [ i ] , cyc - 1 + i ) ;
# 2 ;
for ( int i = 0 ; i < SIZE ; i + + ) `checkh ( array2 [ i ] , i = = 1 ? 1111 : cyc - 1 + i ) ;
# 2 ;
for ( int i = 0 ; i < SIZE ; i + + ) `checkh ( array2 [ i ] , i = = 1 ? 1111 : i = = 3 ? 3333 : cyc - 1 + i ) ;
# 2 ;
for ( int i = 0 ; i < SIZE ; i + + )
`checkh ( array2 [ i ] , i = = 1 ? 1111 : i = = 3 ? 3333 : i = = 5 ? 5555 : cyc - 1 + i ) ;
end
2024-10-09 11:39:40 +02:00
endmodule