2021-02-21 03:11:20 +00:00
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed into the Public Domain, for any use,
// without warranty, 2021 by Wilson Snyder.
// SPDX-License-Identifier: CC0-1.0
`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)
interface intf ( ) ;
integer index ;
endinterface
module t
(
clk
) ;
input clk ;
intf ifa1_intf [ 2 : 1 ] ( ) ;
intf ifa2_intf [ 2 : 1 ] ( ) ;
intf ifb1_intf [ 1 : 2 ] ( ) ;
intf ifb2_intf [ 1 : 2 ] ( ) ;
int cyc ;
sub sub
(
. clk ,
. cyc ,
. alh ( ifa1_intf ) ,
. ahl ( ifa2_intf ) ,
. blh ( ifb1_intf ) ,
. bhl ( ifb2_intf )
) ;
always @ ( posedge clk ) begin
cyc < = cyc + 1 ;
if ( cyc = = 1 ) begin
2021-03-11 02:42:32 +00:00
ifa1_intf [ 1 ] . index = 'h101 ;
ifa1_intf [ 2 ] . index = 'h102 ;
ifa2_intf [ 1 ] . index = 'h201 ;
ifa2_intf [ 2 ] . index = 'h202 ;
ifb1_intf [ 1 ] . index = 'h301 ;
ifb1_intf [ 2 ] . index = 'h302 ;
ifb2_intf [ 1 ] . index = 'h401 ;
ifb2_intf [ 2 ] . index = 'h402 ;
2021-02-21 03:11:20 +00:00
end
end
endmodule
2021-03-11 02:42:32 +00:00
module sub
(
input logic clk ,
input int cyc ,
intf alh [ 1 : 2 ] ,
intf ahl [ 2 : 1 ] ,
intf blh [ 1 : 2 ] ,
intf bhl [ 2 : 1 ]
) ;
always @ ( posedge clk ) begin
if ( cyc = = 5 ) begin
`checkh ( alh [ 1 ] . index , 'h102 ) ;
`checkh ( alh [ 2 ] . index , 'h101 ) ;
`checkh ( ahl [ 1 ] . index , 'h201 ) ;
`checkh ( ahl [ 2 ] . index , 'h202 ) ;
`checkh ( blh [ 1 ] . index , 'h301 ) ;
`checkh ( blh [ 2 ] . index , 'h302 ) ;
`checkh ( bhl [ 1 ] . index , 'h402 ) ;
`checkh ( bhl [ 2 ] . index , 'h401 ) ;
$write ( " *-* All Finished *-* \n " ) ;
$finish ;
end
end
endmodule