2017-09-13 01:34:10 +02:00
|
|
|
// DESCRIPTION: Verilator: Functionally demonstrate an array of interfaces
|
|
|
|
|
//
|
2026-01-27 02:24:34 +01:00
|
|
|
// This file ONLY is placed under the Creative Commons Public Domain.
|
|
|
|
|
// SPDX-FileCopyrightText: 2017 Mike Popoloski
|
2020-03-21 16:24:24 +01:00
|
|
|
// SPDX-License-Identifier: CC0-1.0
|
2017-09-13 01:34:10 +02:00
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
interface foo_intf (
|
|
|
|
|
input x
|
|
|
|
|
);
|
2017-09-13 01:34:10 +02:00
|
|
|
endinterface
|
|
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
module foo_subm (
|
|
|
|
|
input x
|
|
|
|
|
);
|
2017-09-13 01:34:10 +02:00
|
|
|
endmodule
|
|
|
|
|
|
2026-03-03 13:21:24 +01:00
|
|
|
module t;
|
2017-09-13 01:34:10 +02:00
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
localparam N = 3;
|
2017-09-13 01:34:10 +02:00
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
wire [2:0] X = 3'b110;
|
2017-09-13 01:34:10 +02:00
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
// Should not cause ASCRANGE warning, as no harm in array selections.
|
|
|
|
|
// verilator lint_on ASCRANGE
|
|
|
|
|
foo_intf foo1[N] (.x(1'b1));
|
|
|
|
|
foo_subm sub1[N] (.x(1'b1));
|
2017-09-14 01:09:49 +02:00
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
// Will cause ASCRANGE warning?
|
|
|
|
|
// verilator lint_off ASCRANGE
|
|
|
|
|
foo_intf foos[N] (.x(X));
|
|
|
|
|
foo_intf fool[1:3] (.x(X));
|
|
|
|
|
foo_intf foom[3:1] (.x(X));
|
2017-09-13 01:34:10 +02:00
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
foo_subm subs[N] (.x(X));
|
|
|
|
|
foo_subm subl[1:3] (.x(X));
|
|
|
|
|
foo_subm subm[3:1] (.x(X));
|
2017-09-13 01:34:10 +02:00
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
initial begin
|
|
|
|
|
// Check numbering with 0 first
|
|
|
|
|
// NC has a bug here
|
|
|
|
|
if (foos[0].x !== 1'b1) $stop;
|
|
|
|
|
if (foos[1].x !== 1'b1) $stop;
|
|
|
|
|
if (foos[2].x !== 1'b0) $stop;
|
|
|
|
|
//
|
|
|
|
|
if (fool[1].x !== 1'b1) $stop;
|
|
|
|
|
if (fool[2].x !== 1'b1) $stop;
|
|
|
|
|
if (fool[3].x !== 1'b0) $stop;
|
|
|
|
|
//
|
|
|
|
|
if (foom[1].x !== 1'b0) $stop;
|
|
|
|
|
if (foom[2].x !== 1'b1) $stop;
|
|
|
|
|
if (foom[3].x !== 1'b1) $stop;
|
|
|
|
|
//
|
|
|
|
|
if (subs[0].x !== 1'b1) $stop;
|
|
|
|
|
if (subs[1].x !== 1'b1) $stop;
|
|
|
|
|
if (subs[2].x !== 1'b0) $stop;
|
|
|
|
|
//
|
|
|
|
|
if (subl[1].x !== 1'b1) $stop;
|
|
|
|
|
if (subl[2].x !== 1'b1) $stop;
|
|
|
|
|
if (subl[3].x !== 1'b0) $stop;
|
|
|
|
|
//
|
|
|
|
|
if (subm[1].x !== 1'b0) $stop;
|
|
|
|
|
if (subm[2].x !== 1'b1) $stop;
|
|
|
|
|
if (subm[3].x !== 1'b1) $stop;
|
|
|
|
|
//
|
|
|
|
|
$write("*-* All Finished *-*\n");
|
|
|
|
|
$finish;
|
|
|
|
|
end
|
2017-09-13 01:34:10 +02:00
|
|
|
endmodule
|