Tests: Rename `inf` to avoid VAMS errors
This commit is contained in:
parent
63478f2946
commit
edf43ae76f
|
|
@ -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)))))))));
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue