2017-12-14 01:42:49 +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, for
|
|
|
|
|
// SPDX-FileCopyrightText: 2017
|
2020-03-21 16:24:24 +01:00
|
|
|
// SPDX-License-Identifier: CC0-1.0
|
2017-12-14 01:42:49 +01:00
|
|
|
|
|
|
|
|
interface if1;
|
2026-03-08 23:26:40 +01:00
|
|
|
integer var1;
|
2017-12-14 01:42:49 +01:00
|
|
|
endinterface
|
|
|
|
|
|
|
|
|
|
interface if2;
|
2026-03-08 23:26:40 +01:00
|
|
|
if1 i1 ();
|
|
|
|
|
integer var2;
|
2017-12-14 01:42:49 +01:00
|
|
|
endinterface
|
|
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
module mod1 (
|
|
|
|
|
input clk,
|
|
|
|
|
input integer modnum, // Don't use parameter, want same module twice for better checking
|
|
|
|
|
if2 foo
|
|
|
|
|
);
|
2017-12-14 01:42:49 +01:00
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
logic l1, l2;
|
2017-12-14 01:42:49 +01:00
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
always_ff @(posedge clk) begin
|
|
|
|
|
if (modnum == 1) begin
|
|
|
|
|
if (foo.i1.var1 != 1) $stop;
|
|
|
|
|
if (foo.var2 != 2) $stop;
|
|
|
|
|
end
|
|
|
|
|
if (modnum == 2) begin
|
|
|
|
|
if (foo.i1.var1 != 1) $stop;
|
|
|
|
|
if (foo.var2 != 2) $stop;
|
|
|
|
|
end
|
|
|
|
|
end
|
2017-12-14 01:42:49 +01:00
|
|
|
|
|
|
|
|
endmodule
|
|
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
module t ( /*AUTOARG*/
|
|
|
|
|
// Inputs
|
|
|
|
|
clk
|
|
|
|
|
);
|
|
|
|
|
input clk;
|
2017-12-14 01:42:49 +01:00
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
if2 i2a ();
|
|
|
|
|
if2 i2b ();
|
2017-12-14 01:42:49 +01:00
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
assign i2a.i1.var1 = 1;
|
|
|
|
|
assign i2a.var2 = 2;
|
|
|
|
|
assign i2b.i1.var1 = 3;
|
|
|
|
|
assign i2b.var2 = 4;
|
2017-12-14 01:42:49 +01:00
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
mod1 mod1a (
|
|
|
|
|
.modnum(1),
|
|
|
|
|
.clk(clk),
|
|
|
|
|
.foo(i2a)
|
|
|
|
|
);
|
2017-12-14 01:42:49 +01:00
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
mod1 mod1b (
|
|
|
|
|
.modnum(2),
|
|
|
|
|
.clk(clk),
|
|
|
|
|
.foo(i2a)
|
|
|
|
|
);
|
2017-12-14 01:42:49 +01:00
|
|
|
|
2026-03-08 23:26:40 +01:00
|
|
|
integer cyc = 0;
|
|
|
|
|
always_ff @(posedge clk) begin
|
|
|
|
|
cyc <= cyc + 1;
|
|
|
|
|
if (cyc == 2) begin
|
|
|
|
|
$write("*-* All Finished *-*\n");
|
|
|
|
|
$finish;
|
|
|
|
|
end
|
|
|
|
|
end
|
2017-12-14 01:42:49 +01:00
|
|
|
|
|
|
|
|
endmodule
|