Tests: Fix coverage holes from t_dist_docs_options
This commit is contained in:
parent
bd4743f420
commit
68b227065e
|
|
@ -2,4 +2,4 @@
|
||||||
.. code-block::
|
.. code-block::
|
||||||
|
|
||||||
-V{t#,#} 'stl' region trigger index 1 is active: @([hybrid] a)
|
-V{t#,#} 'stl' region trigger index 1 is active: @([hybrid] a)
|
||||||
%Error: t/t_lint_didnotconverge_bad.v:7: Settle region did not converge.
|
%Error: t/t_lint_didnotconverge_bad.v:7: Settle region did not converge after 100 tries
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
.. comment: generated by t_lint_didnotconverge_nodbg_bad
|
.. comment: generated by t_lint_didnotconverge_nodbg_bad
|
||||||
.. code-block::
|
.. code-block::
|
||||||
|
|
||||||
%Error: t/t_lint_didnotconverge_bad.v:7: Settle region did not converge.
|
%Error: t/t_lint_didnotconverge_bad.v:7: Settle region did not converge after 100 tries
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,8 @@ AstNodeStmt* checkIterationLimit(AstNetlist* netlistp, const string& name, AstVa
|
||||||
stmtp->add(callVoidFunc(trigDumpp));
|
stmtp->add(callVoidFunc(trigDumpp));
|
||||||
stmtp->add("#endif\n");
|
stmtp->add("#endif\n");
|
||||||
stmtp->add("VL_FATAL_MT(\"" + V3OutFormatter::quoteNameControls(file) + "\", " + line
|
stmtp->add("VL_FATAL_MT(\"" + V3OutFormatter::quoteNameControls(file) + "\", " + line
|
||||||
+ ", \"\", \"" + name + " region did not converge.\");");
|
+ ", \"\", \"" + name + " region did not converge after " + std::to_string(limit)
|
||||||
|
+ " tries\");");
|
||||||
return ifp;
|
return ifp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('simulator_st')
|
||||||
|
test.top_filename = 't/t_case_huge.v'
|
||||||
|
|
||||||
|
test.compile(verilator_flags2=["--stats -fno-combine"])
|
||||||
|
|
||||||
|
test.file_grep_not(test.stats, r'Optimizations, Combined CFuncs\s+(\d+)')
|
||||||
|
|
||||||
|
test.execute()
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -27,6 +27,8 @@
|
||||||
|
|
||||||
%000001 reg toggle; initial toggle='0;
|
%000001 reg toggle; initial toggle='0;
|
||||||
|
|
||||||
|
logic _under_toggle = toggle; // For --coverage-underscore
|
||||||
|
|
||||||
%000001 str_t stoggle; initial stoggle='0;
|
%000001 str_t stoggle; initial stoggle='0;
|
||||||
|
|
||||||
~000010 str_logic strl; initial strl='0;
|
~000010 str_logic strl; initial strl='0;
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,8 @@ test.run(cmd=[
|
||||||
|
|
||||||
test.files_identical(test.obj_dir + "/annotated/" + test.name + ".v", test.golden_filename)
|
test.files_identical(test.obj_dir + "/annotated/" + test.name + ".v", test.golden_filename)
|
||||||
|
|
||||||
|
test.file_grep_not(test.obj_dir + "/coverage.dat", "_under_toggle")
|
||||||
|
|
||||||
test.run(cmd=[
|
test.run(cmd=[
|
||||||
os.environ["VERILATOR_ROOT"] + "/bin/verilator_coverage",
|
os.environ["VERILATOR_ROOT"] + "/bin/verilator_coverage",
|
||||||
"--annotate-points",
|
"--annotate-points",
|
||||||
|
|
@ -45,4 +47,17 @@ test.run(cmd=[
|
||||||
test.files_identical(test.obj_dir + "/annotated-points/" + test.name + ".v",
|
test.files_identical(test.obj_dir + "/annotated-points/" + test.name + ".v",
|
||||||
"t/" + test.name + "__points.out")
|
"t/" + test.name + "__points.out")
|
||||||
|
|
||||||
|
test.run(cmd=[
|
||||||
|
os.environ["VERILATOR_ROOT"] + "/bin/verilator_coverage",
|
||||||
|
"--annotate-all",
|
||||||
|
"--annotate-min 1",
|
||||||
|
"--annotate",
|
||||||
|
test.obj_dir + "/annotated-all",
|
||||||
|
test.obj_dir + "/coverage.dat",
|
||||||
|
],
|
||||||
|
verilator_run=True)
|
||||||
|
|
||||||
|
test.files_identical(test.obj_dir + "/annotated-all/" + test.name + ".v",
|
||||||
|
"t/" + test.name + "__all.out")
|
||||||
|
|
||||||
test.passes()
|
test.passes()
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,8 @@ module t (/*AUTOARG*/
|
||||||
|
|
||||||
reg toggle; initial toggle='0;
|
reg toggle; initial toggle='0;
|
||||||
|
|
||||||
|
logic _under_toggle = toggle; // For --coverage-underscore
|
||||||
|
|
||||||
str_t stoggle; initial stoggle='0;
|
str_t stoggle; initial stoggle='0;
|
||||||
|
|
||||||
str_logic strl; initial strl='0;
|
str_logic strl; initial strl='0;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,260 @@
|
||||||
|
// // verilator_coverage annotation
|
||||||
|
// DESCRIPTION: Verilator: Verilog Test module
|
||||||
|
//
|
||||||
|
// This file ONLY is placed under the Creative Commons Public Domain, for
|
||||||
|
// any use, without warranty, 2008 by Wilson Snyder.
|
||||||
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
typedef struct packed {logic a;} str_logic;
|
||||||
|
|
||||||
|
module t (/*AUTOARG*/
|
||||||
|
// Inputs
|
||||||
|
clk, check_real, check_array_real, check_string
|
||||||
|
);
|
||||||
|
|
||||||
|
000010 input clk;
|
||||||
|
input real check_real; // Check issue #2741
|
||||||
|
input real check_array_real [1:0];
|
||||||
|
input string check_string; // Check issue #2766
|
||||||
|
|
||||||
|
typedef struct packed {
|
||||||
|
union packed {
|
||||||
|
logic ua;
|
||||||
|
logic ub;
|
||||||
|
} u;
|
||||||
|
logic b;
|
||||||
|
} str_t;
|
||||||
|
|
||||||
|
000001 reg toggle; initial toggle='0;
|
||||||
|
|
||||||
|
logic _under_toggle = toggle; // For --coverage-underscore
|
||||||
|
|
||||||
|
000001 str_t stoggle; initial stoggle='0;
|
||||||
|
|
||||||
|
000010 str_logic strl; initial strl='0;
|
||||||
|
|
||||||
|
union {
|
||||||
|
real val1; // TODO use bit [7:0] here
|
||||||
|
real val2; // TODO use bit [3:0] here
|
||||||
|
} utoggle;
|
||||||
|
|
||||||
|
const reg aconst = '0;
|
||||||
|
|
||||||
|
~000001 reg [1:0][1:0] ptoggle; initial ptoggle=0;
|
||||||
|
|
||||||
|
integer cyc; initial cyc=1;
|
||||||
|
~000006 wire [7:0] cyc_copy = cyc[7:0];
|
||||||
|
000001 wire toggle_up;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int q[$];
|
||||||
|
} str_queue_t;
|
||||||
|
str_queue_t str_queue;
|
||||||
|
|
||||||
|
typedef struct packed {
|
||||||
|
// verilator lint_off ASCRANGE
|
||||||
|
bit [3:5] x;
|
||||||
|
// verilator lint_on ASCRANGE
|
||||||
|
bit [0:0] y;
|
||||||
|
} str_bit_t;
|
||||||
|
~000001 str_bit_t str_bit;
|
||||||
|
~000001 str_bit_t [5:2] str_bit_arr;
|
||||||
|
|
||||||
|
assign strl.a = clk;
|
||||||
|
|
||||||
|
alpha a1 (/*AUTOINST*/
|
||||||
|
// Outputs
|
||||||
|
.toggle_up (toggle_up),
|
||||||
|
// Inputs
|
||||||
|
.clk (clk),
|
||||||
|
.toggle (toggle),
|
||||||
|
.cyc_copy (cyc_copy[7:0]));
|
||||||
|
alpha a2 (/*AUTOINST*/
|
||||||
|
// Outputs
|
||||||
|
.toggle_up (toggle_up),
|
||||||
|
// Inputs
|
||||||
|
.clk (clk),
|
||||||
|
.toggle (toggle),
|
||||||
|
.cyc_copy (cyc_copy[7:0]));
|
||||||
|
|
||||||
|
beta b1 (/*AUTOINST*/
|
||||||
|
// Inputs
|
||||||
|
.clk (clk),
|
||||||
|
.toggle_up (toggle_up));
|
||||||
|
|
||||||
|
off o1 (/*AUTOINST*/
|
||||||
|
// Inputs
|
||||||
|
.clk (clk),
|
||||||
|
.toggle (toggle));
|
||||||
|
|
||||||
|
param#(1) p1 (/*AUTOINST*/
|
||||||
|
// Inputs
|
||||||
|
.clk (clk),
|
||||||
|
.toggle (toggle));
|
||||||
|
|
||||||
|
param#() p2 (/*AUTOINST*/
|
||||||
|
// Inputs
|
||||||
|
.clk (clk),
|
||||||
|
.toggle (toggle));
|
||||||
|
|
||||||
|
mod_struct i_mod_struct (/*AUTOINST*/
|
||||||
|
// Inputs
|
||||||
|
.input_struct (strl));
|
||||||
|
|
||||||
|
|
||||||
|
~000001 reg [1:0] memory[121:110];
|
||||||
|
|
||||||
|
wire [1023:0] largeish = {992'h0, cyc};
|
||||||
|
// CHECK_COVER_MISSING(-1)
|
||||||
|
|
||||||
|
always @ (posedge clk) begin
|
||||||
|
if (cyc != 0) begin
|
||||||
|
cyc <= cyc + 1;
|
||||||
|
memory[cyc + 'd100] <= memory[cyc + 'd100] + 2'b1;
|
||||||
|
toggle <= '0;
|
||||||
|
stoggle.u <= toggle;
|
||||||
|
stoggle.b <= toggle;
|
||||||
|
utoggle.val1 <= real'(cyc[7:0]);
|
||||||
|
ptoggle[0][0] <= toggle;
|
||||||
|
if (cyc == 3) begin
|
||||||
|
str_queue.q.push_back(1);
|
||||||
|
toggle <= '1;
|
||||||
|
str_bit.x <= '1;
|
||||||
|
str_bit.y <= '1;
|
||||||
|
str_bit_arr[4].x <= '1;
|
||||||
|
end
|
||||||
|
if (cyc == 4) begin
|
||||||
|
if (str_queue.q.size() != 1) $stop;
|
||||||
|
toggle <= '0;
|
||||||
|
str_bit.x[3] <= 0;
|
||||||
|
str_bit.y[0] <= 0;
|
||||||
|
str_bit_arr[4].x[3] <= 0;
|
||||||
|
end
|
||||||
|
else if (cyc == 10) begin
|
||||||
|
$write("*-* All Finished *-*\n");
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module alpha (/*AUTOARG*/
|
||||||
|
// Outputs
|
||||||
|
toggle_up,
|
||||||
|
// Inputs
|
||||||
|
clk, toggle, cyc_copy
|
||||||
|
);
|
||||||
|
|
||||||
|
// t.a1 and t.a2 collapse to a count of 2
|
||||||
|
|
||||||
|
000020 input clk;
|
||||||
|
|
||||||
|
000002 input toggle;
|
||||||
|
// CHECK_COVER(-1,"top.t.a*","toggle:0->1",2)
|
||||||
|
// CHECK_COVER(-2,"top.t.a*","toggle:1->0",2)
|
||||||
|
// (t.a1 and t.a2)
|
||||||
|
|
||||||
|
~000012 input [7:0] cyc_copy;
|
||||||
|
// CHECK_COVER(-1,"top.t.a*","cyc_copy[0]:0->1",12)
|
||||||
|
// CHECK_COVER(-2,"top.t.a*","cyc_copy[0]:1->0",10)
|
||||||
|
// CHECK_COVER(-3,"top.t.a*","cyc_copy[1]:0->1",6)
|
||||||
|
// CHECK_COVER(-4,"top.t.a*","cyc_copy[1]:1->0",4)
|
||||||
|
// CHECK_COVER(-5,"top.t.a*","cyc_copy[2]:0->1",2)
|
||||||
|
// CHECK_COVER(-6,"top.t.a*","cyc_copy[2]:1->0",2)
|
||||||
|
// CHECK_COVER(-7,"top.t.a*","cyc_copy[3]:0->1",2)
|
||||||
|
// CHECK_COVER(-8,"top.t.a*","cyc_copy[3]:1->0",0)
|
||||||
|
// CHECK_COVER(-9,"top.t.a*","cyc_copy[4]:0->1",0)
|
||||||
|
// CHECK_COVER(-10,"top.t.a*","cyc_copy[4]:1->0",0)
|
||||||
|
// CHECK_COVER(-11,"top.t.a*","cyc_copy[5]:0->1",0)
|
||||||
|
// CHECK_COVER(-12,"top.t.a*","cyc_copy[5]:1->0",0)
|
||||||
|
// CHECK_COVER(-13,"top.t.a*","cyc_copy[6]:0->1",0)
|
||||||
|
// CHECK_COVER(-14,"top.t.a*","cyc_copy[6]:1->0",0)
|
||||||
|
// CHECK_COVER(-15,"top.t.a*","cyc_copy[7]:0->1",0)
|
||||||
|
// CHECK_COVER(-16,"top.t.a*","cyc_copy[7]:1->0",0)
|
||||||
|
|
||||||
|
000002 reg toggle_internal;
|
||||||
|
// CHECK_COVER(-1,"top.t.a*","toggle_internal:0->1",2)
|
||||||
|
// CHECK_COVER(-2,"top.t.a*","toggle_internal:1->0",2)
|
||||||
|
// (t.a1 and t.a2)
|
||||||
|
|
||||||
|
000002 output reg toggle_up;
|
||||||
|
// CHECK_COVER(-1,"top.t.a*","toggle_up:0->1",2)
|
||||||
|
// CHECK_COVER(-2,"top.t.a*","toggle_up:1->0",2)
|
||||||
|
// (t.a1 and t.a2)
|
||||||
|
|
||||||
|
always @ (posedge clk) begin
|
||||||
|
toggle_internal <= toggle;
|
||||||
|
toggle_up <= toggle;
|
||||||
|
end
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module beta (/*AUTOARG*/
|
||||||
|
// Inputs
|
||||||
|
clk, toggle_up
|
||||||
|
);
|
||||||
|
|
||||||
|
000010 input clk;
|
||||||
|
|
||||||
|
000001 input toggle_up;
|
||||||
|
// CHECK_COVER(-1,"top.t.b1","toggle_up:0->1",1)
|
||||||
|
// CHECK_COVER(-2,"top.t.b1","toggle_up:1->0",1)
|
||||||
|
|
||||||
|
/* verilator public_module */
|
||||||
|
|
||||||
|
always @ (posedge clk) begin
|
||||||
|
if (0 && toggle_up) begin end
|
||||||
|
end
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module off (/*AUTOARG*/
|
||||||
|
// Inputs
|
||||||
|
clk, toggle
|
||||||
|
);
|
||||||
|
|
||||||
|
// verilator coverage_off
|
||||||
|
input clk;
|
||||||
|
// CHECK_COVER_MISSING(-1)
|
||||||
|
|
||||||
|
// verilator coverage_on
|
||||||
|
000001 input toggle;
|
||||||
|
// CHECK_COVER(-1,"top.t.o1","toggle:0->1",1)
|
||||||
|
// CHECK_COVER(-2,"top.t.o1","toggle:1->0",1)
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module param #(parameter P = 2) (/*AUTOARG*/
|
||||||
|
// Inputs
|
||||||
|
clk, toggle
|
||||||
|
);
|
||||||
|
|
||||||
|
000010 input clk;
|
||||||
|
000001 input toggle;
|
||||||
|
|
||||||
|
~000001 logic z;
|
||||||
|
|
||||||
|
for (genvar i = 0; i < P; i++) begin
|
||||||
|
000001 logic x;
|
||||||
|
always @ (posedge clk) begin
|
||||||
|
x <= toggle;
|
||||||
|
end
|
||||||
|
for (genvar j = 0; j < 3; j++) begin
|
||||||
|
~000002 logic [2:0] y;
|
||||||
|
always @ (negedge clk) begin
|
||||||
|
y <= {toggle, ~toggle, 1'b1};
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if (P > 1) begin : gen_1
|
||||||
|
assign z = 1;
|
||||||
|
end
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module mod_struct(/*AUTOARG*/
|
||||||
|
// Inputs
|
||||||
|
input_struct
|
||||||
|
);
|
||||||
|
|
||||||
|
000010 input str_logic input_struct;
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
|
@ -31,6 +31,8 @@
|
||||||
-000001 point: comment=toggle:0->1 hier=top.t
|
-000001 point: comment=toggle:0->1 hier=top.t
|
||||||
-000001 point: comment=toggle:1->0 hier=top.t
|
-000001 point: comment=toggle:1->0 hier=top.t
|
||||||
|
|
||||||
|
logic _under_toggle = toggle; // For --coverage-underscore
|
||||||
|
|
||||||
%000001 str_t stoggle; initial stoggle='0;
|
%000001 str_t stoggle; initial stoggle='0;
|
||||||
-000001 point: comment=stoggle.b:0->1 hier=top.t
|
-000001 point: comment=stoggle.b:0->1 hier=top.t
|
||||||
-000001 point: comment=stoggle.b:1->0 hier=top.t
|
-000001 point: comment=stoggle.b:1->0 hier=top.t
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('simulator')
|
||||||
|
test.top_filename = 't/t_cover_toggle.v'
|
||||||
|
|
||||||
|
test.compile(verilator_flags2=['--cc --coverage-toggle --coverage-underscore'])
|
||||||
|
|
||||||
|
test.execute()
|
||||||
|
|
||||||
|
test.file_grep(test.obj_dir + "/coverage.dat", "_under_toggle")
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -16,7 +16,8 @@ test.lint(
|
||||||
# Likewise XML
|
# Likewise XML
|
||||||
v_flags=[
|
v_flags=[
|
||||||
"--lint-only --timing",
|
"--lint-only --timing",
|
||||||
"--dumpi-tree 9 --dumpi-V3EmitV 9 --debug-emitv" # Dev coverage of the V3EmitV code
|
"--dumpi-tree 9 --dumpi-V3EmitV 9 --debug-emitv", # Dev coverage of the V3EmitV code
|
||||||
|
"--dump-graph --dumpi-tree-json 9 --no-json-ids"
|
||||||
])
|
])
|
||||||
|
|
||||||
output_vs = test.glob_some(test.obj_dir + "/" + test.vm_prefix + "_*_width.tree.v")
|
output_vs = test.glob_some(test.obj_dir + "/" + test.vm_prefix + "_*_width.tree.v")
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('simulator_st')
|
||||||
|
test.top_filename = "t/t_dedupe_clk_gate.v"
|
||||||
|
|
||||||
|
test.compile(verilator_flags2=["--stats", "-fno-dedup"])
|
||||||
|
|
||||||
|
if test.vlt_all:
|
||||||
|
test.file_grep_not(test.stats, r'Optimizations, Gate sigs deduped\s+(\d+)')
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -29,36 +29,14 @@ Test_Waivers = [
|
||||||
'-gdb', # Covered: no way to test, part of --gdbbt
|
'-gdb', # Covered: no way to test, part of --gdbbt
|
||||||
'-rr', # Not testing; not requiring rr installation
|
'-rr', # Not testing; not requiring rr installation
|
||||||
# Need testing:
|
# Need testing:
|
||||||
'-Wno-lint',
|
|
||||||
'-Wno-style',
|
|
||||||
'-Wwarn-lint',
|
|
||||||
'-annotate-all',
|
|
||||||
'-annotate-min',
|
|
||||||
'-converge-limit',
|
|
||||||
'-coverage-underscore',
|
|
||||||
'-default-language',
|
|
||||||
'-dump-graph',
|
|
||||||
'-dumpi-tree-json',
|
|
||||||
'-facyc-simp', # Need test of -fno-...
|
'-facyc-simp', # Need test of -fno-...
|
||||||
'-fassemble', # Need test of -fno-...
|
'-fassemble', # Need test of -fno-...
|
||||||
'-fcase', # Need test of -fno-...
|
'-fcase', # Need test of -fno-...
|
||||||
'-fcombine', # Need test of -fno-...
|
|
||||||
'-fconst', # Need test of -fno-...
|
'-fconst', # Need test of -fno-...
|
||||||
'-fdedup', # Need test of -fno-...
|
|
||||||
'-fdfg-peephole', # Need test of -fno-...
|
'-fdfg-peephole', # Need test of -fno-...
|
||||||
'-fdfg-peephole-', # Need test of -fno-...
|
'-fdfg-peephole-', # Need test of -fno-...
|
||||||
'-ffunc-opt-balance-cat', # Need test of -fno-...
|
|
||||||
'-ffunc-opt-split-cat', # Need test of -fno-...
|
|
||||||
'-flife', # Need test of -fno-...
|
|
||||||
'-flife-post', # Need test of -fno-...
|
|
||||||
'-fmerge-cond', # Need test of -fno-...
|
'-fmerge-cond', # Need test of -fno-...
|
||||||
'-freloop', # Need test of -fno-...
|
|
||||||
'-fsubst', # Need test of -fno-...
|
|
||||||
'-fsubst-const', # Need test of -fno-...
|
'-fsubst-const', # Need test of -fno-...
|
||||||
'-ftable', # Need test of -fno-...
|
|
||||||
'-json-ids', # Need test of -no-json-ids
|
|
||||||
'-private',
|
|
||||||
'-trace-depth',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
Sums = {}
|
Sums = {}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('vlt')
|
||||||
|
test.top_filename = 't/t_flag_language.v'
|
||||||
|
|
||||||
|
test.compile(verilator_flags2=['--default-language 1364-2001'])
|
||||||
|
|
||||||
|
test.execute()
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -2548,7 +2548,7 @@
|
||||||
{"type":"CCALL","name":"","addr":"(BLB)","loc":"a,0:0,0:0","dtypep":"(CB)","funcName":"_dump_triggers__nba","funcp":"(SO)","argsp": []}
|
{"type":"CCALL","name":"","addr":"(BLB)","loc":"a,0:0,0:0","dtypep":"(CB)","funcName":"_dump_triggers__nba","funcp":"(SO)","argsp": []}
|
||||||
]},
|
]},
|
||||||
{"type":"TEXT","name":"","addr":"(CLB)","loc":"a,0:0,0:0","text":"#endif\n"},
|
{"type":"TEXT","name":"","addr":"(CLB)","loc":"a,0:0,0:0","text":"#endif\n"},
|
||||||
{"type":"TEXT","name":"","addr":"(DLB)","loc":"a,0:0,0:0","text":"VL_FATAL_MT(\"t/t_enum_type_methods.v\", 11, \"\", \"NBA region did not converge.\");"}
|
{"type":"TEXT","name":"","addr":"(DLB)","loc":"a,0:0,0:0","text":"VL_FATAL_MT(\"t/t_enum_type_methods.v\", 11, \"\", \"NBA region did not converge after 100 tries\");"}
|
||||||
]}
|
]}
|
||||||
],"elsesp": []},
|
],"elsesp": []},
|
||||||
{"type":"ASSIGN","name":"","addr":"(ELB)","loc":"d,11:8,11:9","dtypep":"(T)",
|
{"type":"ASSIGN","name":"","addr":"(ELB)","loc":"d,11:8,11:9","dtypep":"(T)",
|
||||||
|
|
@ -2613,7 +2613,7 @@
|
||||||
{"type":"CCALL","name":"","addr":"(DMB)","loc":"a,0:0,0:0","dtypep":"(CB)","funcName":"_dump_triggers__act","funcp":"(XN)","argsp": []}
|
{"type":"CCALL","name":"","addr":"(DMB)","loc":"a,0:0,0:0","dtypep":"(CB)","funcName":"_dump_triggers__act","funcp":"(XN)","argsp": []}
|
||||||
]},
|
]},
|
||||||
{"type":"TEXT","name":"","addr":"(EMB)","loc":"a,0:0,0:0","text":"#endif\n"},
|
{"type":"TEXT","name":"","addr":"(EMB)","loc":"a,0:0,0:0","text":"#endif\n"},
|
||||||
{"type":"TEXT","name":"","addr":"(FMB)","loc":"a,0:0,0:0","text":"VL_FATAL_MT(\"t/t_enum_type_methods.v\", 11, \"\", \"Active region did not converge.\");"}
|
{"type":"TEXT","name":"","addr":"(FMB)","loc":"a,0:0,0:0","text":"VL_FATAL_MT(\"t/t_enum_type_methods.v\", 11, \"\", \"Active region did not converge after 100 tries\");"}
|
||||||
]}
|
]}
|
||||||
],"elsesp": []},
|
],"elsesp": []},
|
||||||
{"type":"ASSIGN","name":"","addr":"(GMB)","loc":"d,11:8,11:9","dtypep":"(T)",
|
{"type":"ASSIGN","name":"","addr":"(GMB)","loc":"d,11:8,11:9","dtypep":"(T)",
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
-V{t#,#} 'stl' region trigger index 1 is active: @([hybrid] a)
|
-V{t#,#} 'stl' region trigger index 1 is active: @([hybrid] a)
|
||||||
%Error: t/t_lint_didnotconverge_bad.v:7: Settle region did not converge.
|
%Error: t/t_lint_didnotconverge_bad.v:7: Settle region did not converge after 100 tries
|
||||||
Aborting...
|
Aborting...
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
%Error: t/t_lint_didnotconverge_bad.v:7: Settle region did not converge.
|
%Error: t/t_lint_didnotconverge_bad.v:7: Settle region did not converge after 100 tries
|
||||||
Aborting...
|
Aborting...
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
%Warning-IMPLICIT: t/t_lint_lint_bad.v:9:7: Signal definition not found, creating implicitly: 'implicit_out'
|
||||||
|
9 | not(implicit_out, i);
|
||||||
|
| ^~~~~~~~~~~~
|
||||||
|
... For warning description see https://verilator.org/warn/IMPLICIT?v=latest
|
||||||
|
... Use "/* verilator lint_off IMPLICIT */" and lint_on around source to disable this message.
|
||||||
|
%Error: Exiting due to
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('linter')
|
||||||
|
|
||||||
|
test.lint(verilator_flags2=["--lint-only -Wwarn-lint"],
|
||||||
|
fails=True,
|
||||||
|
expect_filename=test.golden_filename)
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
// DESCRIPTION: Verilator: Verilog Test module
|
||||||
|
//
|
||||||
|
// This file ONLY is placed under the Creative Commons Public Domain, for
|
||||||
|
// any use, without warranty, 2025 by Wilson Snyder.
|
||||||
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
module t;
|
||||||
|
wire i = 0;
|
||||||
|
not(implicit_out, i);
|
||||||
|
endmodule
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('linter')
|
||||||
|
test.top_filename = 't/t_lint_lint_bad.v'
|
||||||
|
|
||||||
|
test.lint(verilator_flags2=["--lint-only -Wwarn-lint -Wno-lint"])
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
%Warning-DECLFILENAME: t/t_lint_style_bad.v:7:8: Filename 't_lint_style_bad' does not match MODULE name: 't'
|
||||||
|
7 | module t;
|
||||||
|
| ^
|
||||||
|
... For warning description see https://verilator.org/warn/DECLFILENAME?v=latest
|
||||||
|
... Use "/* verilator lint_off DECLFILENAME */" and lint_on around source to disable this message.
|
||||||
|
%Warning-VARHIDDEN: t/t_lint_style_bad.v:12:14: Declaration of signal hides declaration in upper scope: 'top'
|
||||||
|
12 | output top;
|
||||||
|
| ^~~
|
||||||
|
t/t_lint_style_bad.v:9:12: ... Location of original declaration
|
||||||
|
9 | integer top;
|
||||||
|
| ^~~
|
||||||
|
... For warning description see https://verilator.org/warn/VARHIDDEN?v=latest
|
||||||
|
... Use "/* verilator lint_off VARHIDDEN */" and lint_on around source to disable this message.
|
||||||
|
%Warning-VARHIDDEN: t/t_lint_style_bad.v:18:18: Declaration of signal hides declaration in upper scope: 'top'
|
||||||
|
18 | integer top;
|
||||||
|
| ^~~
|
||||||
|
t/t_lint_style_bad.v:9:12: ... Location of original declaration
|
||||||
|
9 | integer top;
|
||||||
|
| ^~~
|
||||||
|
%Warning-UNUSEDSIGNAL: t/t_lint_style_bad.v:9:12: Signal is not driven, nor used: 'top'
|
||||||
|
: ... note: In instance 't'
|
||||||
|
9 | integer top;
|
||||||
|
| ^~~
|
||||||
|
... For warning description see https://verilator.org/warn/UNUSEDSIGNAL?v=latest
|
||||||
|
... Use "/* verilator lint_off UNUSEDSIGNAL */" and lint_on around source to disable this message.
|
||||||
|
%Warning-UNDRIVEN: t/t_lint_style_bad.v:12:14: Signal is not driven: 'top'
|
||||||
|
: ... note: In instance 't'
|
||||||
|
12 | output top;
|
||||||
|
| ^~~
|
||||||
|
... For warning description see https://verilator.org/warn/UNDRIVEN?v=latest
|
||||||
|
... Use "/* verilator lint_off UNDRIVEN */" and lint_on around source to disable this message.
|
||||||
|
%Warning-UNUSEDSIGNAL: t/t_lint_style_bad.v:18:18: Signal is not driven, nor used: 'top'
|
||||||
|
: ... note: In instance 't'
|
||||||
|
18 | integer top;
|
||||||
|
| ^~~
|
||||||
|
%Error: Exiting due to
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('linter')
|
||||||
|
|
||||||
|
test.lint(verilator_flags2=["--lint-only -Wwarn-style"],
|
||||||
|
fails=True,
|
||||||
|
expect_filename=test.golden_filename)
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
// DESCRIPTION: Verilator: Verilog Test module
|
||||||
|
//
|
||||||
|
// This file ONLY is placed under the Creative Commons Public Domain, for
|
||||||
|
// any use, without warranty, 2003 by Wilson Snyder.
|
||||||
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
module t;
|
||||||
|
|
||||||
|
integer top;
|
||||||
|
|
||||||
|
task x;
|
||||||
|
output top;
|
||||||
|
begin end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
begin: lower
|
||||||
|
integer top;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('linter')
|
||||||
|
test.top_filename = 't/t_lint_style_bad.v'
|
||||||
|
|
||||||
|
test.lint(verilator_flags2=["--lint-only -Wwarn-style -Wno-style"])
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('simulator')
|
||||||
|
test.top_filename = 't/t_math_real_public.v'
|
||||||
|
|
||||||
|
# Test that --private overrides --public
|
||||||
|
test.compile(verilator_flags2=['--cc --public --private'])
|
||||||
|
|
||||||
|
test.execute()
|
||||||
|
|
||||||
|
test.file_grep_not(test.obj_dir + "/" + test.vm_prefix + "___024root.h", r'REAL_PARAM')
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -15,4 +15,6 @@ test.compile(verilator_flags2=['--cc --public'])
|
||||||
|
|
||||||
test.execute()
|
test.execute()
|
||||||
|
|
||||||
|
test.file_grep(test.obj_dir + "/" + test.vm_prefix + "___024root.h", r'REAL_PARAM')
|
||||||
|
|
||||||
test.passes()
|
test.passes()
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,14 @@
|
||||||
// SPDX-License-Identifier: CC0-1.0
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
module t;
|
module t;
|
||||||
sub #(.REAL(2.0)) sub();
|
sub #(.REAL_PARAM(2.0)) sub();
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
module sub ();
|
module sub ();
|
||||||
parameter REAL = 0.0;
|
parameter REAL_PARAM = 0.0; // Magic name grepped for in .py file
|
||||||
|
|
||||||
initial begin
|
initial begin
|
||||||
$display("REAL %g", REAL);
|
$display("REAL_PARAM=%g", REAL_PARAM);
|
||||||
$write("*-* All Finished *-*\n");
|
$write("*-* All Finished *-*\n");
|
||||||
$finish;
|
$finish;
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('simulator_st')
|
||||||
|
test.top_filename = "t/t_opt_life.v"
|
||||||
|
|
||||||
|
test.compile(verilator_flags2=['--stats', '-fno-life', '-fno-life-post'])
|
||||||
|
|
||||||
|
if test.vlt_all:
|
||||||
|
test.file_grep_not(test.stats, r'Optimizations, Lifetime assign deletions\s+(\d+)')
|
||||||
|
test.file_grep_not(test.stats, r'Optimizations, Lifetime creset deletions\s+(\d+)')
|
||||||
|
test.file_grep_not(test.stats, r'Optimizations, Lifetime constant prop\s+(\d+)')
|
||||||
|
test.file_grep_not(test.stats, r'Optimizations, Lifetime postassign deletions\s+(\d+)')
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('simulator_st')
|
||||||
|
|
||||||
|
test.compile(verilator_flags2=["--stats"])
|
||||||
|
|
||||||
|
if test.vlt_all:
|
||||||
|
test.file_grep(test.stats, r'Optimizations, Substituted temps\s+(\d+)', 42)
|
||||||
|
|
||||||
|
test.execute()
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
// DESCRIPTION: Verilator: Verilog Test module
|
||||||
|
//
|
||||||
|
// Copyright 2025 by Wilson Snyder. This program is free software; you can
|
||||||
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
// Version 2.0.
|
||||||
|
// SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
module t (
|
||||||
|
input clk
|
||||||
|
);
|
||||||
|
|
||||||
|
integer i;
|
||||||
|
reg [94:0] w95;
|
||||||
|
|
||||||
|
integer cyc = 0;
|
||||||
|
|
||||||
|
// Test loop
|
||||||
|
always @(posedge clk) begin
|
||||||
|
`ifdef TEST_VERBOSE
|
||||||
|
$write("[%0t] cyc==%0d\n", $time, cyc);
|
||||||
|
`endif
|
||||||
|
cyc <= cyc + 1;
|
||||||
|
if (cyc == 0) begin
|
||||||
|
// Setup
|
||||||
|
w95 = {95{1'b1}};
|
||||||
|
end
|
||||||
|
else if (cyc == 1) begin
|
||||||
|
if (w95++ != {95{1'b1}}) $stop;
|
||||||
|
if (w95 != {95{1'b0}}) $stop;
|
||||||
|
if (w95-- != {95{1'b0}}) $stop;
|
||||||
|
if (w95 != {95{1'b1}}) $stop;
|
||||||
|
if (++w95 != {95{1'b0}}) $stop;
|
||||||
|
if (w95 != {95{1'b0}}) $stop;
|
||||||
|
if (--w95 != {95{1'b1}}) $stop;
|
||||||
|
if (w95 != {95{1'b1}}) $stop;
|
||||||
|
end
|
||||||
|
else if (cyc == 99) begin
|
||||||
|
$write("*-* All Finished *-*\n");
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endmodule
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('simulator_st')
|
||||||
|
test.top_filename = "t/t_opt_life.v"
|
||||||
|
|
||||||
|
test.compile(verilator_flags2=['--stats', '-fno-subst'])
|
||||||
|
|
||||||
|
if test.vlt_all:
|
||||||
|
test.file_grep_not(test.stats, r'Optimizations, Substituted temps\s+(\d+)')
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('simulator_st')
|
||||||
|
test.top_filename = 't/t_opt_table_real.v'
|
||||||
|
test.golden_filename = 't/t_opt_table_real.out'
|
||||||
|
|
||||||
|
test.compile(verilator_flags2=["--stats -fno-table"])
|
||||||
|
|
||||||
|
if test.vlt_all:
|
||||||
|
test.file_grep_not(test.stats, r'Optimizations, Tables created\s+(\d+)')
|
||||||
|
|
||||||
|
test.execute(expect_filename=test.golden_filename)
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('simulator_st')
|
||||||
|
test.top_filename = "t/t_reloop_cam.v"
|
||||||
|
|
||||||
|
test.compile(verilator_flags2=["--stats", "-fno-reloop"])
|
||||||
|
|
||||||
|
if test.vlt_all:
|
||||||
|
test.file_grep_not(test.stats, r'Optimizations, Reloop iterations\s+(\d+)')
|
||||||
|
test.file_grep_not(test.stats, r'Optimizations, Reloops\s+(\d+)')
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
|
||||||
|
#
|
||||||
|
# Copyright 2024 by Wilson Snyder. This program is free software; you
|
||||||
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
|
# Version 2.0.
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
|
||||||
|
|
||||||
|
import vltest_bootstrap
|
||||||
|
|
||||||
|
test.scenarios('vlt_all')
|
||||||
|
|
||||||
|
test.compile(v_flags2=["--trace-vcd --trace-depth 1"])
|
||||||
|
|
||||||
|
test.execute()
|
||||||
|
|
||||||
|
test.file_grep(test.trace_filename, r'value_at_top')
|
||||||
|
test.file_grep_not(test.trace_filename, r' value_in_sub')
|
||||||
|
|
||||||
|
test.passes()
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
// DESCRIPTION: Verilator: Verilog Test module
|
||||||
|
//
|
||||||
|
// This file ONLY is placed under the Creative Commons Public Domain, for
|
||||||
|
// any use, without warranty, 2025 by Wilson Snyder.
|
||||||
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
module t (
|
||||||
|
input clk
|
||||||
|
);
|
||||||
|
|
||||||
|
int cyc;
|
||||||
|
wire integer value_at_top = cyc; // Magic name checked in .py file
|
||||||
|
|
||||||
|
sub1 sub1a (.*);
|
||||||
|
sub1 sub1b (.*);
|
||||||
|
|
||||||
|
always @(posedge clk) begin
|
||||||
|
cyc <= cyc + 1;
|
||||||
|
if (cyc == 10) begin
|
||||||
|
$write("*-* All Finished *-*\n");
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module sub1 (
|
||||||
|
input int cyc
|
||||||
|
);
|
||||||
|
|
||||||
|
sub2 sub2a (.*);
|
||||||
|
sub2 sub2b (.*);
|
||||||
|
sub2 sub2c (.*);
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module sub2 (
|
||||||
|
input int cyc
|
||||||
|
);
|
||||||
|
|
||||||
|
wire integer value_in_sub = cyc; // Magic name checked in .py file
|
||||||
|
endmodule
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
-V{t#,#} 'stl' region trigger index 1 is active: @([hybrid] x)
|
-V{t#,#} 'stl' region trigger index 1 is active: @([hybrid] x)
|
||||||
%Error: t/t_unopt_converge_initial.v:7: Settle region did not converge.
|
%Error: t/t_unopt_converge_initial.v:7: Settle region did not converge after 100 tries
|
||||||
Aborting...
|
Aborting...
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
%Error: t/t_unopt_converge.v:7: Settle region did not converge.
|
%Error: t/t_unopt_converge.v:7: Settle region did not converge after 100 tries
|
||||||
Aborting...
|
Aborting...
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
-V{t#,#} 'stl' region trigger index 1 is active: @([hybrid] x)
|
-V{t#,#} 'stl' region trigger index 1 is active: @([hybrid] x)
|
||||||
%Error: t/t_unopt_converge.v:7: Settle region did not converge.
|
%Error: t/t_unopt_converge.v:7: Settle region did not converge after 100 tries
|
||||||
Aborting...
|
Aborting...
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
-V{t#,#} 'stl' region trigger index 1 is active: @([hybrid] x)
|
-V{t#,#} 'stl' region trigger index 1 is active: @([hybrid] x)
|
||||||
%Error: t/t_unopt_converge.v:7: Settle region did not converge.
|
%Error: t/t_unopt_converge.v:7: Settle region did not converge after 5 tries
|
||||||
Aborting...
|
Aborting...
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,8 @@ import vltest_bootstrap
|
||||||
test.scenarios('simulator')
|
test.scenarios('simulator')
|
||||||
test.top_filename = "t/t_unopt_converge.v"
|
test.top_filename = "t/t_unopt_converge.v"
|
||||||
|
|
||||||
test.compile(v_flags2=['+define+ALLOW_UNOPT', '--output-split 0', "-fno-dfg"])
|
test.compile(
|
||||||
|
v_flags2=['+define+ALLOW_UNOPT', '--output-split 0', '-fno-dfg', '--converge-limit 5'])
|
||||||
|
|
||||||
if test.vlt_all:
|
if test.vlt_all:
|
||||||
test.execute(fails=True, expect_filename=test.golden_filename)
|
test.execute(fails=True, expect_filename=test.golden_filename)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue