verilator/test_regress/t/t_cover_per_instance_user.v

66 lines
1.2 KiB
Systemverilog

// DESCRIPTION: Verilator: User coverage per-instance records for the same statement
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2026 Wilson Snyder
// SPDX-License-Identifier: CC0-1.0
module child (
input clk,
input en
);
reg observed = 1'b0;
reg [3:0] count = 0;
same_stmt:
cover property (@(posedge clk) en);
always @(posedge clk) begin
observed <= en;
if (en) begin
count <= count + 1'b1;
end else begin
count <= count;
end
end
endmodule
module wrap (
input clk,
input en
);
child dut_b (
.clk(clk),
.en(en)
);
endmodule
module tb;
reg clk = 0;
reg [3:0] cyc = 0;
// Same user cover statement at two different hierarchy points.
// Expected with per_instance: dut_a count=4, wrap_b.dut_b count=1.
child dut_a (
.clk(clk),
.en(cyc < 4)
);
wrap wrap_b (
.clk(clk),
.en(cyc == 0)
);
always @(posedge clk) begin
cyc <= cyc + 1'b1;
end
always #1 clk = !clk;
always @(posedge clk) begin
if (cyc == 8) begin
$write("*-* All Finished *-*\n");
$finish;
end
end
endmodule