Tests: Rename `inf` to avoid VAMS errors

This commit is contained in:
Wilson Snyder 2026-08-13 18:50:20 -04:00
parent 63478f2946
commit edf43ae76f
51 changed files with 451 additions and 330 deletions

View File

@ -4,11 +4,9 @@
// SPDX-FileCopyrightText: 2021 Wilson Snyder // SPDX-FileCopyrightText: 2021 Wilson Snyder
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
module t (/*AUTOARG*/ module t (
// Inputs input real r
r );
);
input real r;
initial begin initial begin
$display("%g", $cos($cos($cos($cos($cos($cos($cos($cos(r + 0.1))))))))); $display("%g", $cos($cos($cos($cos($cos($cos($cos($cos(r + 0.1)))))))));

View File

@ -5,8 +5,8 @@
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
module t ( module t (
input clk input clk
); );
integer cyc; initial cyc=1; integer cyc; initial cyc=1;

View File

@ -5,17 +5,16 @@
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
module t ( module t (
input clk input clk
); );
logic rst = 1'b1; // reset logic rst = 1'b1; // reset
integer rst_cnt = 0; integer rst_cnt = 0;
// reset is removed after a delay // reset is removed after a delay
always @ (posedge clk) always @(posedge clk) begin
begin
rst_cnt <= rst_cnt + 1; rst_cnt <= rst_cnt + 1;
rst <= rst_cnt <= 3; rst <= rst_cnt <= 3;
end end
// counters // counters
@ -24,41 +23,41 @@ module t (
int cnt_drn; int cnt_drn;
// add all counters // add all counters
assign cnt = cnt_src + cnt_drn + inf.cnt; assign cnt = cnt_src + cnt_drn + ifc.cnt;
// finish report // finish report
always @ (posedge clk) always @(posedge clk)
if (cnt == 3*16) begin if (cnt == 3 * 16) begin
$write("*-* All Finished *-*\n"); $write("*-* All Finished *-*\n");
$finish; $finish;
end end
// interface instance // interface instance
handshake inf ( handshake ifc (
.clk (clk), .clk(clk),
.rst (rst) .rst(rst)
); );
// source instance // source instance
source #( source #(
.RW (8), .RW(8),
.RP (8'b11100001) .RP(8'b11100001)
) source ( ) source (
.clk (clk), .clk(clk),
.rst (rst), .rst(rst),
.inf (inf), .ifc(ifc),
.cnt (cnt_src) .cnt(cnt_src)
); );
// drain instance // drain instance
drain #( drain #(
.RW (8), .RW(8),
.RP (8'b11010100) .RP(8'b11010100)
) drain ( ) drain (
.clk (clk), .clk(clk),
.rst (rst), .rst(rst),
.inf (inf), .ifc(ifc),
.cnt (cnt_drn) .cnt(cnt_drn)
); );
endmodule : t endmodule : t
@ -66,10 +65,10 @@ endmodule : t
// interface definition // interface definition
interface handshake #( interface handshake #(
parameter int unsigned WC = 32 parameter int unsigned WC = 32
)( ) (
input logic clk, input logic clk,
input logic rst input logic rst
); );
// modport signals // modport signals
@ -81,87 +80,81 @@ interface handshake #(
integer cnt; // counter integer cnt; // counter
// source // source
modport src ( modport src(output req, input grt);
output req,
input grt
);
// drain // drain
modport drn ( modport drn(input req, output grt);
input req,
output grt
);
// incremet condition // incremet condition
assign inc = req & grt; assign inc = req & grt;
// local logic (counter) // local logic (counter)
always @ (posedge clk, posedge rst) always @(posedge clk, posedge rst)
if (rst) cnt <= '0; if (rst) cnt <= '0;
else cnt <= cnt + {31'h0, inc}; else cnt <= cnt + {31'h0, inc};
endinterface : handshake endinterface : handshake
// source module // source module
module source #( module source #(
// random generator parameters // random generator parameters
parameter int unsigned RW=1, // LFSR width parameter int unsigned RW = 1, // LFSR width
parameter bit [RW-1:0] RP='0, // LFSR polinom parameter bit [RW-1:0] RP = '0, // LFSR polinom
parameter bit [RW-1:0] RR='1 // LFSR reset state parameter bit [RW-1:0] RR = '1 // LFSR reset state
)( ) (
input logic clk, input logic clk,
input logic rst, input logic rst,
handshake.src inf, handshake.src ifc,
output integer cnt output integer cnt
); );
// LFSR // LFSR
logic [RW-1:0] rnd; logic [RW-1:0] rnd;
// LFSR in Galois form // LFSR in Galois form
always @ (posedge clk, posedge rst) always @(posedge clk, posedge rst)
if (rst) rnd <= RR; if (rst) rnd <= RR;
else rnd <= {rnd[0], rnd[RW-1:1]} ^ ({RW{rnd[0]}} & RP); else rnd <= {rnd[0], rnd[RW-1:1]} ^ ({RW{rnd[0]}} & RP);
// counter // counter
always @ (posedge clk, posedge rst) always @(posedge clk, posedge rst)
if (rst) cnt <= 32'd0; if (rst) cnt <= 32'd0;
else cnt <= cnt + {31'd0, (inf.req & inf.grt)}; else cnt <= cnt + {31'd0, (ifc.req & ifc.grt)};
// request signal // request signal
assign inf.req = rnd[0]; assign ifc.req = rnd[0];
endmodule : source endmodule : source
// drain module // drain module
module drain #( module drain #(
// random generator parameters // random generator parameters
parameter int unsigned RW=1, // LFSR width parameter int unsigned RW = 1, // LFSR width
parameter bit [RW-1:0] RP='0, // LFSR polinom parameter bit [RW-1:0] RP = '0, // LFSR polinom
parameter bit [RW-1:0] RR='1 // LFSR reset state parameter bit [RW-1:0] RR = '1 // LFSR reset state
)( ) (
input logic clk, input logic clk,
input logic rst, input logic rst,
handshake.drn inf, handshake.drn ifc,
output integer cnt output integer cnt
); );
// LFSR // LFSR
logic [RW-1:0] rnd; logic [RW-1:0] rnd;
// LFSR in Galois form // LFSR in Galois form
always @ (posedge clk, posedge rst) always @(posedge clk, posedge rst)
if (rst) rnd <= RR; if (rst) rnd <= RR;
else rnd <= {rnd[0], rnd[RW-1:1]} ^ ({RW{rnd[0]}} & RP); else rnd <= {rnd[0], rnd[RW-1:1]} ^ ({RW{rnd[0]}} & RP);
// counter // counter
always @ (posedge clk, posedge rst) always @(posedge clk, posedge rst)
if (rst) cnt <= 32'd0; if (rst) cnt <= 32'd0;
else cnt <= cnt + {31'd0, (inf.req & inf.grt)}; else cnt <= cnt + {31'd0, (ifc.req & ifc.grt)};
// grant signal // grant signal
assign inf.grt = rnd[0]; assign ifc.grt = rnd[0];
endmodule : drain endmodule : drain

View File

@ -4,7 +4,7 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
endinterface endinterface
@ -12,7 +12,10 @@ interface inf2;
int k; int k;
endinterface endinterface
module GenericModule (interface a, interface b); module GenericModule (
interface a,
interface b
);
initial begin initial begin
#1; #1;
if (a.v != 7) $stop; if (a.v != 7) $stop;
@ -21,9 +24,12 @@ module GenericModule (interface a, interface b);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
inf2 inf_inst2(); inf2 inf_inst2 ();
GenericModule genericModule (inf_inst, inf_inst2); GenericModule genericModule (
inf_inst,
inf_inst2
);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;
#2; #2;

View File

@ -4,7 +4,7 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
endinterface endinterface
@ -12,7 +12,12 @@ interface inf2;
int k; int k;
endinterface endinterface
module GenericModule (logic[31:0] l1, interface a, logic[31:0] l2, interface b); module GenericModule (
logic [31:0] l1,
interface a,
logic [31:0] l2,
interface b
);
initial begin initial begin
#1; #1;
if (l1 != 87) $stop; if (l1 != 87) $stop;
@ -23,9 +28,14 @@ module GenericModule (logic[31:0] l1, interface a, logic[31:0] l2, interface b);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
inf2 inf_inst2(); inf2 inf_inst2 ();
GenericModule genericModule (87, inf_inst, 73, inf_inst2); GenericModule genericModule (
87,
inf_inst,
73,
inf_inst2
);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;
inf_inst2.k = 9; inf_inst2.k = 9;

View File

@ -4,11 +4,13 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
endinterface endinterface
module GenericModule (interface a); module GenericModule (
interface a
);
initial begin initial begin
#1; #1;
if (a.v != 7) $stop; if (a.v != 7) $stop;
@ -17,7 +19,7 @@ module GenericModule (interface a);
endmodule endmodule
module t; module t;
inf inf_inst[3](); ifc inf_inst[3] ();
GenericModule genericModule (inf_inst[2]); GenericModule genericModule (inf_inst[2]);
initial begin initial begin
inf_inst[2].v = 7; inf_inst[2].v = 7;

View File

@ -4,11 +4,13 @@
// SPDX-FileCopyrightText: 2026 Antmicro // SPDX-FileCopyrightText: 2026 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
endinterface endinterface
module GenericModule1D (interface a[4]); module GenericModule1D (
interface a[4]
);
initial begin initial begin
#1; #1;
if (a[0].v != 'hdead) $stop; if (a[0].v != 'hdead) $stop;
@ -18,7 +20,9 @@ module GenericModule1D (interface a[4]);
end end
endmodule endmodule
module GenericModule2D (interface a[2][2]); module GenericModule2D (
interface a[2][2]
);
initial begin initial begin
#3; #3;
if (a[0][0].v != 'hdead) $stop; if (a[0][0].v != 'hdead) $stop;
@ -28,7 +32,9 @@ module GenericModule2D (interface a[2][2]);
end end
endmodule endmodule
module GenericModuleRng (interface a[5:3]); module GenericModuleRng (
interface a[5:3]
);
initial begin initial begin
#5; #5;
if (a[3].v != 'hdead) $stop; if (a[3].v != 'hdead) $stop;
@ -38,12 +44,12 @@ module GenericModuleRng (interface a[5:3]);
endmodule endmodule
module t; module t;
inf inf1d[4](); ifc inf1d[4] ();
inf inf2d[2][2](); ifc inf2d[2][2] ();
inf infrng[5:3](); ifc infrng[5:3] ();
GenericModule1D mod1d(inf1d); GenericModule1D mod1d (inf1d);
GenericModule2D mod2d(inf2d); GenericModule2D mod2d (inf2d);
GenericModuleRng modrng(infrng); GenericModuleRng modrng (infrng);
initial begin initial begin
inf1d[0].v = 'hdead; inf1d[0].v = 'hdead;
inf1d[1].v = 'hbeef; inf1d[1].v = 'hbeef;

View File

@ -1,13 +1,13 @@
%Warning-PINMISSING: t/t_interface_generic_bad.v:26:17: Instance has missing pin: 'b' %Warning-PINMISSING: t/t_interface_generic_bad.v:29:17: Instance has missing pin: 'b'
26 | GenericModule genericModule (inf_inst); 29 | GenericModule genericModule (inf_inst);
| ^~~~~~~~~~~~~ | ^~~~~~~~~~~~~
t/t_interface_generic_bad.v:15:46: ... Location of port declaration t/t_interface_generic_bad.v:17:15: ... Location of port declaration
15 | module GenericModule (interface a, interface b); 17 | interface b
| ^ | ^
... For warning description see https://verilator.org/warn/PINMISSING?v=latest ... For warning description see https://verilator.org/warn/PINMISSING?v=latest
... Use "/* verilator lint_off PINMISSING */" and lint_on around source to disable this message. ... Use "/* verilator lint_off PINMISSING */" and lint_on around source to disable this message.
%Error: t/t_interface_generic_bad.v:15:46: Interface port 'b' is not connected to interface/modport pin expression %Error: t/t_interface_generic_bad.v:17:15: Interface port 'b' is not connected to interface/modport pin expression
15 | module GenericModule (interface a, interface b); 17 | interface b
| ^ | ^
... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance. ... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance.
%Error: Exiting due to %Error: Exiting due to

View File

@ -4,7 +4,7 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
endinterface endinterface
@ -12,7 +12,10 @@ interface inf2;
int k; int k;
endinterface endinterface
module GenericModule (interface a, interface b); module GenericModule (
interface a,
interface b
);
initial begin initial begin
#1; #1;
if (a.v != 7) $stop; if (a.v != 7) $stop;
@ -21,8 +24,8 @@ module GenericModule (interface a, interface b);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
inf2 inf_inst2(); inf2 inf_inst2 ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;

View File

@ -1,24 +1,24 @@
%Error: t/t_interface_generic_bad2.v:15:9: Can't find definition of scope/variable: 'b' %Error: t/t_interface_generic_bad2.v:17:9: Can't find definition of scope/variable: 'b'
15 | if (b.k != 9) $stop; 17 | if (b.k != 9) $stop;
| ^ | ^
... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance. ... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance.
%Error: t/t_interface_generic_bad2.v:20:3: Cannot find file containing interface: 'inf' %Error: t/t_interface_generic_bad2.v:22:3: Cannot find file containing interface: 'ifc'
20 | inf inf_inst(); 22 | ifc inf_inst ();
| ^~~ | ^~~
%Error: t/t_interface_generic_bad2.v:21:32: Found definition of 'inf_inst' as a CELL but expected a variable %Error: t/t_interface_generic_bad2.v:23:32: Found definition of 'inf_inst' as a CELL but expected a variable
21 | GenericModule genericModule (inf_inst); 23 | GenericModule genericModule (inf_inst);
| ^~~~~~~~ | ^~~~~~~~
%Error: t/t_interface_generic_bad2.v:21:32: Expected an interface but 'inf_inst' is not an interface %Error: t/t_interface_generic_bad2.v:23:32: Expected an interface but 'inf_inst' is not an interface
21 | GenericModule genericModule (inf_inst); 23 | GenericModule genericModule (inf_inst);
| ^~~~~~~~ | ^~~~~~~~
%Error: t/t_interface_generic_bad2.v:23:5: Dotted reference to instance that refers to missing module/interface: 'inf' %Error: t/t_interface_generic_bad2.v:25:5: Dotted reference to instance that refers to missing module/interface: 'ifc'
23 | inf_inst.v = 7; 25 | inf_inst.v = 7;
| ^~~~~~~~ | ^~~~~~~~
%Error: t/t_interface_generic_bad2.v:23:14: Can't find definition of 'v' in dotted variable/method: 'inf_inst.v' %Error: t/t_interface_generic_bad2.v:25:14: Can't find definition of 'v' in dotted variable/method: 'inf_inst.v'
23 | inf_inst.v = 7; 25 | inf_inst.v = 7;
| ^ | ^
%Error: t/t_interface_generic_bad2.v:24:5: Can't find definition of scope/variable: 'inf_inst2' %Error: t/t_interface_generic_bad2.v:26:5: Can't find definition of scope/variable: 'inf_inst2'
: ... Suggested alternative: 'inf_inst' : ... Suggested alternative: 'inf_inst'
24 | inf_inst2.k = 9; 26 | inf_inst2.k = 9;
| ^~~~~~~~~ | ^~~~~~~~~
%Error: Exiting due to %Error: Exiting due to

View File

@ -4,11 +4,13 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
class inf; class ifc;
int v; int v;
endclass endclass
module GenericModule (interface a); module GenericModule (
interface a
);
initial begin initial begin
#1; #1;
if (a.v != 7) $stop; if (a.v != 7) $stop;
@ -17,7 +19,7 @@ module GenericModule (interface a);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;

View File

@ -1,12 +1,12 @@
%Error: t/t_interface_generic_bad3.v:15:9: Can't find definition of scope/variable: 'b' %Error: t/t_interface_generic_bad3.v:17:9: Can't find definition of scope/variable: 'b'
15 | if (b.k != 9) $stop; 17 | if (b.k != 9) $stop;
| ^ | ^
... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance. ... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance.
%Error-PINNOTFOUND: t/t_interface_generic_bad3.v:21:42: Pin not found: '__pinNumber2' %Error-PINNOTFOUND: t/t_interface_generic_bad3.v:25:7: Pin not found: '__pinNumber2'
21 | GenericModule genericModule (inf_inst, inf_inst); 25 | inf_inst
| ^~~~~~~~ | ^~~~~~~~
: ... Location of instance's module declaration : ... Location of instance's module declaration
11 | module GenericModule (interface a); 11 | module GenericModule (
| ^~~~~~~~~~~~~ | ^~~~~~~~~~~~~
... For error description see https://verilator.org/warn/PINNOTFOUND?v=latest ... For error description see https://verilator.org/warn/PINNOTFOUND?v=latest
%Error: Exiting due to %Error: Exiting due to

View File

@ -4,11 +4,13 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
endinterface endinterface
module GenericModule (interface a); module GenericModule (
interface a
);
initial begin initial begin
#1; #1;
if (a.v != 7) $stop; if (a.v != 7) $stop;
@ -17,8 +19,11 @@ module GenericModule (interface a);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst, inf_inst); GenericModule genericModule (
inf_inst,
inf_inst
);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;
$write("*-* All Finished *-*\n"); $write("*-* All Finished *-*\n");

View File

@ -1,5 +1,5 @@
%Error: t/t_interface_generic_bad4.v:26:32: Generic interfaces can only connect to an interface and 'inf_inst' is of type 'int' %Error: t/t_interface_generic_bad4.v:30:7: Generic interfaces can only connect to an interface and 'inf_inst' is of type 'int'
26 | GenericModule genericModule (inf_inst, inf_inst2); 30 | inf_inst,
| ^~~~~~~~ | ^~~~~~~~
... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance. ... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance.
%Error: Exiting due to %Error: Exiting due to

View File

@ -4,7 +4,7 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
endinterface endinterface
@ -12,7 +12,10 @@ interface inf2;
int k; int k;
endinterface endinterface
module GenericModule (interface a, interface b); module GenericModule (
interface a,
interface b
);
initial begin initial begin
#1; #1;
if (a.v != 7) $stop; if (a.v != 7) $stop;
@ -22,8 +25,11 @@ endmodule
module t; module t;
int inf_inst; int inf_inst;
inf2 inf_inst2(); inf2 inf_inst2 ();
GenericModule genericModule (inf_inst, inf_inst2); GenericModule genericModule (
inf_inst,
inf_inst2
);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;
inf_inst2.k = 9; inf_inst2.k = 9;

View File

@ -4,7 +4,7 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
function int get(); function int get();
return v; return v;
@ -15,7 +15,9 @@ interface inf2;
int k; int k;
endinterface endinterface
module GenericModule (interface a); module GenericModule (
interface a
);
initial begin initial begin
#1; #1;
if (a.get() != 4) $stop; if (a.get() != 4) $stop;
@ -23,7 +25,7 @@ module GenericModule (interface a);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 4; inf_inst.v = 4;

View File

@ -1,6 +1,6 @@
%Error: t/t_interface_generic_function_bad.v:14:11: Can't find definition of 'get' in dotted task/function: 'a.get' %Error: t/t_interface_generic_function_bad.v:16:11: Can't find definition of 'get' in dotted task/function: 'a.get'
: ... note: In instance 't.genericModule' : ... note: In instance 't.genericModule'
14 | if (a.get() != 4) $stop; 16 | if (a.get() != 4) $stop;
| ^~~ | ^~~
... Known scopes under 'get': <no instances found> ... Known scopes under 'get': <no instances found>
... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance. ... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance.

View File

@ -4,11 +4,13 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
endinterface endinterface
module GenericModule (interface a); module GenericModule (
interface a
);
initial begin initial begin
#1; #1;
if (a.get() != 4) $stop; if (a.get() != 4) $stop;
@ -16,7 +18,7 @@ module GenericModule (interface a);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 4; inf_inst.v = 4;

View File

@ -9,11 +9,15 @@
`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); `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 // verilog_format: on
interface inf #(parameter int PARAM = 1); interface ifc #(
parameter int PARAM = 1
);
logic [PARAM-1:0] v; logic [PARAM-1:0] v;
endinterface endinterface
module leaf (interface d); module leaf (
interface d
);
initial begin initial begin
#1; #1;
`checkd(d.v, 13); `checkd(d.v, 13);
@ -21,17 +25,21 @@ module leaf (interface d);
end end
endmodule endmodule
module mid2 (interface c); module mid2 (
leaf leaf_i(.d(c)); interface c
);
leaf leaf_i (.d(c));
endmodule endmodule
module mid1 (interface b); module mid1 (
mid2 mid2_i(.c(b)); interface b
);
mid2 mid2_i (.c(b));
endmodule endmodule
module t; module t;
inf #(.PARAM(5)) a(); ifc #(.PARAM(5)) a ();
mid1 mid1_i(.b(a)); mid1 mid1_i (.b(a));
initial begin initial begin
a.v = 13; a.v = 13;
$write("*-* All Finished *-*\n"); $write("*-* All Finished *-*\n");

View File

@ -9,11 +9,15 @@
`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); `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 // verilog_format: on
interface inf #(parameter int PARAM = 1); interface ifc #(
parameter int PARAM = 1
);
logic [PARAM-1:0] v; logic [PARAM-1:0] v;
endinterface endinterface
module leaf (inf d); module leaf (
ifc d
);
initial begin initial begin
#1; #1;
`checkd(d.v, 13); `checkd(d.v, 13);
@ -21,17 +25,21 @@ module leaf (inf d);
end end
endmodule endmodule
module mid2 (interface c); module mid2 (
leaf leaf_i(.d(c)); interface c
);
leaf leaf_i (.d(c));
endmodule endmodule
module mid1 (interface b); module mid1 (
mid2 mid2_i(.c(b)); interface b
);
mid2 mid2_i (.c(b));
endmodule endmodule
module t; module t;
inf #(.PARAM(5)) a(); ifc #(.PARAM(5)) a ();
mid1 mid1_i(.b(a)); mid1 mid1_i (.b(a));
initial begin initial begin
a.v = 13; a.v = 13;
$write("*-* All Finished *-*\n"); $write("*-* All Finished *-*\n");

View File

@ -9,11 +9,15 @@
`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); `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 // verilog_format: on
interface inf #(parameter int PARAM = 1); interface ifc #(
parameter int PARAM = 1
);
logic [PARAM-1:0] v; logic [PARAM-1:0] v;
endinterface endinterface
module leaf (inf c); module leaf (
ifc c
);
initial begin initial begin
#1; #1;
`checkd(c.v, 13) `checkd(c.v, 13)
@ -21,13 +25,17 @@ module leaf (inf c);
end end
endmodule endmodule
module mid #(int PARAM = 1) (interface b); module mid #(
leaf leaf_i(.c(b)); int PARAM = 1
initial `checkd(PARAM,7) ) (
interface b
);
leaf leaf_i (.c(b));
initial `checkd(PARAM, 7)
endmodule endmodule
module t; module t;
inf #(.PARAM(5)) a(); ifc #(.PARAM(5)) a ();
mid #(.PARAM(7)) mid_i (.b(a)); mid #(.PARAM(7)) mid_i (.b(a));
initial begin initial begin
a.v = 13; a.v = 13;

View File

@ -4,11 +4,15 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf #(PARAM); interface ifc #(
logic[PARAM-1:0] v; PARAM
);
logic [PARAM-1:0] v;
endinterface endinterface
module GenericModule (interface a); module GenericModule (
interface a
);
initial begin initial begin
#1; #1;
if (a.v != 7) $stop; if (a.v != 7) $stop;
@ -17,7 +21,7 @@ module GenericModule (interface a);
endmodule endmodule
module t; module t;
inf #(.PARAM(13)) inf_inst(); ifc #(.PARAM(13)) inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;

View File

@ -9,22 +9,30 @@
`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); `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 // verilog_format: on
interface inf #(parameter int PARAM = 1); interface ifc #(
parameter int PARAM = 1
);
logic [PARAM-1:0] v; logic [PARAM-1:0] v;
modport mp (input v); modport mp(input v);
endinterface endinterface
module Leaf #(parameter int PARAM = 1) (inf.mp leaf_a); module Leaf #(
parameter int PARAM = 1
) (
ifc.mp leaf_a
);
initial begin initial begin
#1; #1;
`checkd(leaf_a.PARAM, PARAM); `checkd(leaf_a.PARAM, PARAM);
end end
endmodule endmodule
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
localparam LOC_PARAM = a.PARAM; localparam LOC_PARAM = a.PARAM;
// A generic interface's parameter, parameterizing a sibling interface cell // A generic interface's parameter, parameterizing a sibling interface cell
inf #(.PARAM(LOC_PARAM)) nested_inst(); ifc #(.PARAM(LOC_PARAM)) nested_inst ();
Leaf #(.PARAM(LOC_PARAM)) leaf (nested_inst); Leaf #(.PARAM(LOC_PARAM)) leaf (nested_inst);
initial begin initial begin
#1; #1;
@ -35,7 +43,7 @@ module GenericModule (interface.mp a);
endmodule endmodule
module t; module t;
inf #(.PARAM(13)) inf_inst(); ifc #(.PARAM(13)) inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;

View File

@ -14,15 +14,19 @@ interface leaf_if;
logic dummy; logic dummy;
endinterface endinterface
interface inf #(parameter int PARAM = 1); interface ifc #(
parameter int PARAM = 1
);
logic [PARAM-1:0] v; logic [PARAM-1:0] v;
// Makes 'a.nested.LEAF_PARAM' a chained Dot, whose lhsp is itself a Dot // Makes 'a.nested.LEAF_PARAM' a chained Dot, whose lhsp is itself a Dot
leaf_if nested(); leaf_if nested ();
parameter int ARR[2] = '{PARAM, PARAM + 1}; parameter int ARR[2] = '{PARAM, PARAM + 1};
modport mp (input v); modport mp(input v);
endinterface endinterface
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
localparam int LOC_CHAIN = a.nested.LEAF_PARAM; localparam int LOC_CHAIN = a.nested.LEAF_PARAM;
// Makes the Dot's rhsp an indexed select, not a plain identifier // Makes the Dot's rhsp an indexed select, not a plain identifier
localparam int LOC_ARR = a.ARR[0]; localparam int LOC_ARR = a.ARR[0];
@ -35,7 +39,7 @@ module GenericModule (interface.mp a);
endmodule endmodule
module t; module t;
inf #(.PARAM(13)) inf_inst(); ifc #(.PARAM(13)) inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;

View File

@ -9,10 +9,12 @@
`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); `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 // verilog_format: on
interface inf #(parameter int PARAM = 1); interface ifc #(
parameter int PARAM = 1
);
logic [PARAM-1:0] v; logic [PARAM-1:0] v;
// A non-Var/non-GenBlock item the member gather must skip past // A non-Var/non-GenBlock item the member gather must skip past
modport mp (input v); modport mp(input v);
if (1) begin : blk_decoy if (1) begin : blk_decoy
// Same name as the real parameter below, but not a parameter // Same name as the real parameter below, but not a parameter
logic PARAM_IF; logic PARAM_IF;
@ -25,7 +27,9 @@ interface inf #(parameter int PARAM = 1);
end end
endinterface endinterface
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
// Two references to the same member, so the second reuses the gathered members // Two references to the same member, so the second reuses the gathered members
localparam int LOC_PARAM1 = a.PARAM; localparam int LOC_PARAM1 = a.PARAM;
localparam int LOC_PARAM2 = a.PARAM; localparam int LOC_PARAM2 = a.PARAM;
@ -43,7 +47,7 @@ module GenericModule (interface.mp a);
endmodule endmodule
module t; module t;
inf #(.PARAM(13)) inf_inst(); ifc #(.PARAM(13)) inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;

View File

@ -9,18 +9,22 @@
`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); `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 // verilog_format: on
interface inf #(parameter int PARAM = 1); interface ifc #(
parameter int PARAM = 1
);
logic [PARAM-1:0] v; logic [PARAM-1:0] v;
modport mp (input v); modport mp(input v);
endinterface endinterface
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
// Dotted localparam inside a generate block, feeding a sibling cell in the same block. // Dotted localparam inside a generate block, feeding a sibling cell in the same block.
// The interface-ref gather must recurse in here yet still find port 'a' at module level. // The interface-ref gather must recurse in here yet still find port 'a' at module level.
// Generate blocks on the interface side are covered by t_interface_generic_iface_param_genblock. // Generate blocks on the interface side are covered by t_interface_generic_iface_param_genblock.
if (1) begin : blk if (1) begin : blk
localparam int LOC_PARAM = a.PARAM; localparam int LOC_PARAM = a.PARAM;
inf #(.PARAM(LOC_PARAM)) inner(); ifc #(.PARAM(LOC_PARAM)) inner ();
end end
initial begin initial begin
#1; #1;
@ -31,7 +35,7 @@ module GenericModule (interface.mp a);
endmodule endmodule
module t; module t;
inf #(.PARAM(13)) inf_inst(); ifc #(.PARAM(13)) inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;

View File

@ -9,18 +9,20 @@
`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); `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 // verilog_format: on
interface inf #(int PARAM = 0); interface ifc #(
logic[PARAM-1:0] v; int PARAM = 0
);
logic [PARAM-1:0] v;
modport port_in ( modport port_in(input v);
input v modport port_out(output v);
);
modport port_out (
output v
);
endinterface endinterface
module GenericModule #(PARAM=0) (interface.port_in a); module GenericModule #(
PARAM = 0
) (
interface.port_in a
);
localparam int LOC_PARAM = a.PARAM; localparam int LOC_PARAM = a.PARAM;
initial begin initial begin
#1; #1;
@ -31,7 +33,7 @@ module GenericModule #(PARAM=0) (interface.port_in a);
endmodule endmodule
module t; module t;
inf #(.PARAM(13)) inf_inst(); ifc #(.PARAM(13)) inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;

View File

@ -1,6 +1,6 @@
%Error: t/t_interface_generic_iface_param_ref_bad.v:19:32: Can't find definition of 'NONEXISTENT_PARAM' in dotted variable/method: 'a.NONEXISTENT_PARAM' %Error: t/t_interface_generic_iface_param_ref_bad.v:23:32: Can't find definition of 'NONEXISTENT_PARAM' in dotted variable/method: 'a.NONEXISTENT_PARAM'
: ... note: In instance 't.genericModule' : ... note: In instance 't.genericModule'
19 | localparam int LOC_PARAM = a.NONEXISTENT_PARAM; 23 | localparam int LOC_PARAM = a.NONEXISTENT_PARAM;
| ^~~~~~~~~~~~~~~~~ | ^~~~~~~~~~~~~~~~~
... Known scopes under 'a': <no instances found> ... Known scopes under 'a': <no instances found>
... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance. ... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance.

View File

@ -9,12 +9,16 @@
`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); `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 // verilog_format: on
interface inf #(parameter int PARAM = 1); interface ifc #(
parameter int PARAM = 1
);
logic [PARAM-1:0] v; logic [PARAM-1:0] v;
modport mp (input v); modport mp(input v);
endinterface endinterface
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
// A member that does not exist on the (now concrete) interface // A member that does not exist on the (now concrete) interface
localparam int LOC_PARAM = a.NONEXISTENT_PARAM; localparam int LOC_PARAM = a.NONEXISTENT_PARAM;
initial begin initial begin
@ -24,7 +28,7 @@ module GenericModule (interface.mp a);
endmodule endmodule
module t; module t;
inf #(.PARAM(13)) inf_inst(); ifc #(.PARAM(13)) inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;

View File

@ -4,11 +4,16 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
endinterface endinterface
module GenericModule#(type T, type Y = int) (interface a); module GenericModule #(
type T,
type Y = int
) (
interface a
);
initial begin initial begin
#1; #1;
if (a.v != 7) $stop; if (a.v != 7) $stop;
@ -16,7 +21,7 @@ module GenericModule#(type T, type Y = int) (interface a);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule #(string) genericModule (inf_inst); GenericModule #(string) genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;

View File

@ -4,14 +4,14 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
modport mp ( modport mp(input v);
input v
);
endinterface endinterface
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
initial begin initial begin
#1; #1;
if (a.v != 7) $stop; if (a.v != 7) $stop;
@ -19,7 +19,7 @@ module GenericModule (interface.mp a);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;

View File

@ -4,21 +4,21 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
modport mp ( modport mp(output v);
output v
);
endinterface endinterface
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
initial begin initial begin
a.v = 7; a.v = 7;
end end
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
#1; #1;

View File

@ -1,5 +1,5 @@
%Error: t/t_interface_generic_modport_bad.v:11:33: Modport not found under interface 'inf': 'mp' %Error: t/t_interface_generic_modport_bad.v:12:15: Modport not found under interface 'ifc': 'mp'
11 | module GenericModule (interface.mp a); 12 | interface.mp a
| ^~ | ^~
... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance. ... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance.
%Error: Exiting due to %Error: Exiting due to

View File

@ -4,11 +4,13 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
endinterface endinterface
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
initial begin initial begin
#1; #1;
if (a.v != 7) $stop; if (a.v != 7) $stop;
@ -16,7 +18,7 @@ module GenericModule (interface.mp a);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;

View File

@ -4,14 +4,14 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
modport mp ( modport mp(input v);
input v
);
endinterface endinterface
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
initial begin initial begin
#1; #1;
a.v = 10; a.v = 10;
@ -19,7 +19,7 @@ module GenericModule (interface.mp a);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;

View File

@ -4,15 +4,15 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
int o; int o;
modport mp ( modport mp(input o);
input o
);
endinterface endinterface
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
initial begin initial begin
#1; #1;
if (a.v != 7) $stop; if (a.v != 7) $stop;
@ -20,7 +20,7 @@ module GenericModule (interface.mp a);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;

View File

@ -4,21 +4,21 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
function int get(); function int get();
return v; return v;
endfunction endfunction
modport mp( modport mp(import get);
import get
);
endinterface endinterface
interface inf2; interface inf2;
int k; int k;
endinterface endinterface
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
initial begin initial begin
#1; #1;
if (a.get() != 4) $stop; if (a.get() != 4) $stop;
@ -26,7 +26,7 @@ module GenericModule (interface.mp a);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 4; inf_inst.v = 4;

View File

@ -4,32 +4,32 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
function int get(); function int get();
return v; return v;
endfunction endfunction
modport mp( modport mp(output v);
output v
);
endinterface endinterface
interface inf2; interface inf2;
int k; int k;
endinterface endinterface
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
initial begin initial begin
a.v = 5; a.v = 5;
end end
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
#1; #1;
if(inf_inst.get() != 5) $stop; if (inf_inst.get() != 5) $stop;
$write("*-* All Finished *-*\n"); $write("*-* All Finished *-*\n");
$finish; $finish;
end end

View File

@ -4,21 +4,21 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
function int get(); function int get();
return v; return v;
endfunction endfunction
modport mp( modport mp(input v);
input v
);
endinterface endinterface
interface inf2; interface inf2;
int k; int k;
endinterface endinterface
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
initial begin initial begin
#1; #1;
if (a.get() != 4) $stop; if (a.get() != 4) $stop;
@ -26,7 +26,7 @@ module GenericModule (interface.mp a);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 4; inf_inst.v = 4;

View File

@ -4,16 +4,16 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
localparam LPARAM = 12; localparam LPARAM = 12;
int v; int v;
modport mp ( modport mp(input v);
input v
);
endinterface endinterface
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
initial begin initial begin
#1; #1;
if (a.LPARAM != 12) $stop; if (a.LPARAM != 12) $stop;
@ -22,7 +22,7 @@ module GenericModule (interface.mp a);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.v = 7; inf_inst.v = 7;

View File

@ -4,25 +4,24 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
task setup(); task setup();
v = 3; v = 3;
endtask endtask
modport mp( modport mp(input v, import setup);
input v,
import setup
);
endinterface endinterface
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
initial begin initial begin
a.setup(); a.setup();
end end
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
#1; #1;

View File

@ -4,17 +4,17 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
task setup(); task setup();
v = 3; v = 3;
endtask endtask
modport mp( modport mp(input v);
input v
);
endinterface endinterface
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
initial begin initial begin
#1; #1;
if (a.v != 3) $stop; if (a.v != 3) $stop;
@ -22,7 +22,7 @@ module GenericModule (interface.mp a);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.setup(); inf_inst.setup();

View File

@ -4,28 +4,28 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
task setup(); task setup();
v = 3; v = 3;
endtask endtask
modport mp( modport mp(input v);
input v
);
endinterface endinterface
interface inf2; interface inf2;
int k; int k;
endinterface endinterface
module GenericModule (interface.mp a); module GenericModule (
interface.mp a
);
initial begin initial begin
a.setup(); a.setup();
end end
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
#1; #1;

View File

@ -4,11 +4,15 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
endinterface endinterface
module GenericModule (interface a, inf b, interface c); module GenericModule (
interface a,
ifc b,
interface c
);
initial begin initial begin
#1; #1;
if (a.v != 7) $stop; if (a.v != 7) $stop;
@ -18,8 +22,12 @@ module GenericModule (interface a, inf b, interface c);
endmodule endmodule
module t; module t;
inf inf_inst[3](); ifc inf_inst[3] ();
GenericModule genericModule (inf_inst[0], inf_inst[1], inf_inst[2]); GenericModule genericModule (
inf_inst[0],
inf_inst[1],
inf_inst[2]
);
initial begin initial begin
inf_inst[0].v = 7; inf_inst[0].v = 7;
inf_inst[1].v = 8; inf_inst[1].v = 8;

View File

@ -4,11 +4,14 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
endinterface endinterface
module GenericModule (interface a, interface b); module GenericModule (
interface a,
interface b
);
initial begin initial begin
#1; #1;
if (a.v != 7) $stop; if (a.v != 7) $stop;
@ -16,8 +19,11 @@ module GenericModule (interface a, interface b);
endmodule endmodule
module t; module t;
inf inf_inst[3](); ifc inf_inst[3] ();
GenericModule genericModule (.a(inf_inst[1]), .b(inf_inst[2])); GenericModule genericModule (
.a(inf_inst[1]),
.b(inf_inst[2])
);
initial begin initial begin
inf_inst[1].v = 7; inf_inst[1].v = 7;
$write("*-* All Finished *-*\n"); $write("*-* All Finished *-*\n");

View File

@ -4,7 +4,9 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
module sub #(parameter P); module sub #(
parameter P
);
endmodule endmodule
package pkg; package pkg;
@ -15,21 +17,23 @@ class B;
int x; int x;
endclass endclass
module Gm (interface a); module Gm (
interface a
);
B b; B b;
sub#(.P(pkg::A + $bits(b.x))) s(); sub #(.P(pkg::A + $bits(b.x))) s ();
initial begin initial begin
a.v = s.P; a.v = s.P;
end end
endmodule endmodule
interface inf; interface ifc;
int v; int v;
endinterface endinterface
module t; module t;
inf i(); ifc i ();
Gm g(.a(i)); Gm g (.a(i));
initial begin initial begin
#1; #1;
if (i.v != 35) $stop; if (i.v != 35) $stop;

View File

@ -4,7 +4,7 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
task setup(); task setup();
v = 3; v = 3;
@ -15,14 +15,16 @@ interface inf2;
int k; int k;
endinterface endinterface
module GenericModule (interface a); module GenericModule (
interface a
);
initial begin initial begin
a.setup(); a.setup();
end end
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
#1; #1;

View File

@ -4,7 +4,7 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
task setup(); task setup();
v = 3; v = 3;
@ -15,7 +15,9 @@ interface inf2;
int k; int k;
endinterface endinterface
module GenericModule (interface a); module GenericModule (
interface a
);
initial begin initial begin
#1; #1;
if (a.v != 3) $stop; if (a.v != 3) $stop;
@ -23,7 +25,7 @@ module GenericModule (interface a);
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
inf_inst.setup(); inf_inst.setup();

View File

@ -1,6 +1,6 @@
%Error: t/t_interface_generic_task_bad.v:17:7: Can't find definition of 'setup' in dotted task/function: 'a.setup' %Error: t/t_interface_generic_task_bad.v:19:7: Can't find definition of 'setup' in dotted task/function: 'a.setup'
: ... note: In instance 't.genericModule' : ... note: In instance 't.genericModule'
17 | a.setup(); 19 | a.setup();
| ^~~~~ | ^~~~~
... Known scopes under 'setup': <no instances found> ... Known scopes under 'setup': <no instances found>
... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance. ... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance.

View File

@ -4,7 +4,7 @@
// SPDX-FileCopyrightText: 2025 Antmicro // SPDX-FileCopyrightText: 2025 Antmicro
// SPDX-License-Identifier: CC0-1.0 // SPDX-License-Identifier: CC0-1.0
interface inf; interface ifc;
int v; int v;
endinterface endinterface
@ -12,14 +12,16 @@ interface inf2;
int k; int k;
endinterface endinterface
module GenericModule (interface a); module GenericModule (
interface a
);
initial begin initial begin
a.setup(); a.setup();
end end
endmodule endmodule
module t; module t;
inf inf_inst(); ifc inf_inst ();
GenericModule genericModule (inf_inst); GenericModule genericModule (inf_inst);
initial begin initial begin
#1; #1;

View File

@ -9,7 +9,7 @@ interface clk_if;
bit clk; bit clk;
endinterface endinterface
interface inf; interface ifc;
bit clk; bit clk;
bit v; bit v;
@ -22,14 +22,15 @@ class Clocker;
virtual clk_if clk; virtual clk_if clk;
task clock(); task clock();
fork forever #1 clk.clk = ~clk.clk; fork
forever #1 clk.clk = ~clk.clk;
join_none join_none
endtask endtask
endclass endclass
module t; module t;
clk_if c(); clk_if c ();
inf i(); ifc i ();
assign i.clk = c.clk; assign i.clk = c.clk;
Clocker clocker; Clocker clocker;
initial begin initial begin
@ -41,8 +42,9 @@ module t;
#5; #5;
$stop; $stop;
end end
initial @(posedge i.cb.v) begin initial
$write("*-* All Finished *-*\n"); @(posedge i.cb.v) begin
$finish; $write("*-* All Finished *-*\n");
end $finish;
end
endmodule endmodule