2025-12-11 02:53:19 +01:00
// DESCRIPTION: Verilator: Verilog Test module
//
2026-01-27 02:24:34 +01:00
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2025 Wilson Snyder
2025-12-11 02:53:19 +01:00
// SPDX-License-Identifier: CC0-1.0
2025-12-21 03:46:43 +01:00
// verilog_format: off
2025-12-11 02:53:19 +01:00
`define stop $stop
2025-12-21 03:46:43 +01:00
`define checkd(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got=%0d exp=%0d\n", `__FILE__,`__LINE__, (gotv), (expv)); `stop; end while(0);
// verilog_format: on
2025-12-11 02:53:19 +01:00
2025-12-21 03:46:43 +01:00
interface a_if # (
parameter int a_param = 0
) ( ) ;
logic [ a_param - 1 : 0 ] x ;
2025-12-11 02:53:19 +01:00
2025-12-21 03:46:43 +01:00
function void to_if ( input logic [ a_param - 1 : 0 ] x_in ) ;
2025-12-11 02:53:19 +01:00
x = x_in ;
endfunction
2025-12-21 03:46:43 +01:00
function logic [ a_param - 1 : 0 ] from_if ( ) ;
2025-12-11 02:53:19 +01:00
return x ;
endfunction
endinterface
2025-12-21 03:46:43 +01:00
module tb ( ) ;
2025-12-11 02:53:19 +01:00
genvar a ;
generate
2025-12-21 03:46:43 +01:00
for ( a = 1 ; a < 3 ; a + + ) begin : gen_a
a_if # ( . a_param ( a ) ) a_if_a ( ) ;
2025-12-11 02:53:19 +01:00
initial begin
# 1 ;
a_if_a . to_if ( a ) ;
end
end
endgenerate
initial begin
# 1 ;
# 1 ;
`checkd ( gen_a [ 1 ] . a_if_a . from_if ( ) , 'h1 ) ;
`checkd ( gen_a [ 2 ] . a_if_a . from_if ( ) , 'h2 ) ;
$write ( " *-* All Finished *-* \n " ) ;
$finish ;
end
endmodule