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 09:27:17 +00:00
parent af2771e901
commit 2a0b331ee3
8 changed files with 25906 additions and 19349 deletions

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;
}

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()

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

View File

@ -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