Fix -G and -pvalue with --hierarchical.

Properly strip these from the hier_block builds, but not from the top
level wrapper. Improve existing test to cover.
This commit is contained in:
Geza Lore
2025-10-30 12:04:12 +00:00
parent af2771e901
commit 2a0b331ee3
8 changed files with 25906 additions and 19349 deletions
+37 -11
View File
@@ -580,18 +580,44 @@ string V3Options::filePathCheckOneDir(const string& modname, const string& dirna
// 2: Delete the option and its argument
// 3: Delete the option and its argument if it is a number
int V3Options::stripOptionsForChildRun(const string& opt, bool forTop) {
if (opt == "j") return 3;
if (opt == "Mdir" || opt == "clk" || opt == "lib-create" || opt == "f" || opt == "F"
|| opt == "v" || opt == "l2-name" || opt == "mod-prefix" || opt == "prefix"
|| opt == "protect-lib" || opt == "protect-key" || opt == "threads"
|| opt == "top-module") {
return 2;
}
if (opt == "build"
|| (!forTop && (opt == "cc" || opt == "exe" || opt == "sc" || opt == "binary"))
|| opt == "hierarchical" || (opt.length() > 2 && opt.substr(0, 2) == "G=")) {
return 1;
// Options to strip for both the top wrapper, and hier blocks
static const std::unordered_map<std::string, int> commonOpts{
//
{"j", 3},
//
{"Mdir", 2},
{"clk", 2},
{"lib-create", 2},
{"f", 2},
{"F", 2},
{"v", 2},
{"l2-name", 2},
{"mod-prefix", 2},
{"prefix", 2},
{"protect-lib", 2},
{"protect-key", 2},
{"threads", 2},
{"top-module", 2},
//
{"build", 1},
{"hierarchical", 1},
};
if (commonOpts.count(opt)) return commonOpts.at(opt);
// Options to strip only for hier blocks
if (!forTop) {
static const std::unordered_map<std::string, int> subOpts{
{"cc", 1},
{"exe", 1},
{"sc", 1},
{"binary", 1},
};
if (subOpts.count(opt)) return subOpts.at(opt);
if (VString::startsWith(opt, "G")) return 1;
if (VString::startsWith(opt, "pvalue")) return 1;
}
// Do not strip
return 0;
}
+13 -6
View File
@@ -18,12 +18,19 @@ test.clean_objs()
# %Warning-UNOPTTHREADS: Thread scheduler is unable to provide requested parallelism; consider asking for fewer threads.
# So use 6 threads here though it's not optimal in performance, but ok.
test.compile(v_flags2=['t/t_hier_block.cpp'],
verilator_flags2=[
'--stats', '--hierarchical', '--Wno-TIMESCALEMOD', '--CFLAGS',
'"-pipe -DCPP_MACRO=cplusplus"'
],
threads=(6 if test.vltmt else 1))
test.compile(
v_flags2=['t/t_hier_block.cpp'],
verilator_flags2=[
'--stats',
'--hierarchical',
'--Wno-TIMESCALEMOD', #
'-GPARAM_A=100',
'-pvalue+PARAM_B=200',
'-DPARAM_OVERRIDE', #
'--CFLAGS',
'"-pipe -DCPP_MACRO=cplusplus"'
],
threads=(6 if test.vltmt else 1))
test.execute()
+13 -1
View File
@@ -25,7 +25,10 @@ module secret (
clk
);
`else
module t (/*AUTOARG*/
module t #(
parameter int PARAM_A = 33,
parameter int PARAM_B = 44
) (/*AUTOARG*/
// Inputs
clk
);
@@ -55,6 +58,15 @@ module t (/*AUTOARG*/
always_ff @(posedge clk) begin
if (out3 != out3_2) $stop;
`ifndef AS_PROT_LIB
`ifdef PARAM_OVERRIDE
if (PARAM_A != 100) $stop;
if (PARAM_B != 200) $stop;
`else
if (PARAM_A != 33) $stop;
if (PARAM_B != 44) $stop;
`endif
`endif
$display("%d %m out0:%d %d %d %d %d", count, out0, out1, out2, out3, out5, out6);
$display("%d %m child input ports: %d %d %d", count, i_sub1.in, i_sub2.in, i_sub3.in);
$display("%d %m child output ports: %d %d %d", count, i_sub1.out, i_sub2.out, i_sub3.out);
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -12,6 +12,70 @@
)
(INSTANCE t
(NET
(PARAM_A\[0\] (T0 0) (T1 170) (TZ 0) (TX 0) (TB 0) (TC 1))
(PARAM_A\[1\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[2\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[3\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[4\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[5\] (T0 0) (T1 170) (TZ 0) (TX 0) (TB 0) (TC 1))
(PARAM_A\[6\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[7\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[8\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[9\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[10\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[11\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[12\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[13\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[14\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[15\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[16\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[17\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[18\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[19\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[20\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[21\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[22\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[23\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[24\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[25\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[26\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[27\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[28\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[29\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[30\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_A\[31\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[0\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[1\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[2\] (T0 0) (T1 170) (TZ 0) (TX 0) (TB 0) (TC 1))
(PARAM_B\[3\] (T0 0) (T1 170) (TZ 0) (TX 0) (TB 0) (TC 1))
(PARAM_B\[4\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[5\] (T0 0) (T1 170) (TZ 0) (TX 0) (TB 0) (TC 1))
(PARAM_B\[6\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[7\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[8\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[9\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[10\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[11\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[12\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[13\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[14\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[15\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[16\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[17\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[18\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[19\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[20\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[21\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[22\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[23\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[24\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[25\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[26\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[27\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[28\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[29\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[30\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(PARAM_B\[31\] (T0 170) (T1 0) (TZ 0) (TX 0) (TB 0) (TC 0))
(clk (T0 90) (T1 80) (TZ 0) (TX 0) (TB 0) (TC 33))
(out0\[0\] (T0 100) (T1 70) (TZ 0) (TX 0) (TB 0) (TC 7))
(out0\[1\] (T0 80) (T1 90) (TZ 0) (TX 0) (TB 0) (TC 10))
File diff suppressed because it is too large Load Diff