Skip to content

Commit 1cce1c4

Browse files
committed
synth: blackbox SYNTH_BLACKBOXES modules before hierarchy check
Adds a checkpoint-based code path for SYNTH_BLACKBOXES to synth.tcl, distinct from the existing source-based path in synth_preamble.tcl in two intentional ways: it runs before `hierarchy -check -top` (the design is already elaborated when read from RTLIL, so blackbox operates on resolved modules), and it wraps `blackbox` in `catch` (unknown names are silently skipped because the same SYNTH_BLACKBOXES list is shared across partitions). The synth_preamble.tcl path keeps its existing strict behaviour: `hierarchy -check -top` first to elaborate the deferred verilog top, and `blackbox` errors loudly so a typo in a single-design SYNTH_BLACKBOXES list surfaces immediately. Why this is needed: parallel partition synthesis with slang. When `--keep-hierarchy` is used (required for partition flows that preserve internal hierarchy), the slang frontend mangles module names by their elaboration path so different parameterizations get distinct names — `Foo` instantiated at `top.unit.foo` becomes `Foo$top.unit.foo` in the elaborated RTLIL. The parent design references those mangled names. A "per-partition canonicalize from RTL" approach therefore can't just elaborate `Foo` as a fresh top — that would emit a module named `Foo`, but the parent design instantiates `Foo$top.unit.foo`, and the link fails. The driver has to canonicalize the full design once (so all parameterized instances get their elaborated names), and each partition then loads that shared checkpoint and blackboxes the modules outside its scope. That's the orchestrator pattern: every partition reads the same canonical RTLIL checkpoint and blackboxes the modules that belong to other partitions, so it only synthesises its own subhierarchy. SYNTH_BLACKBOXES is already documented in variables.yaml. No behaviour change when the env var is unset. Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
1 parent 523bbbb commit 1cce1c4

1 file changed

Lines changed: 12 additions & 0 deletions

File tree

flow/scripts/synth.tcl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,18 @@ if { [env_var_exists_and_non_empty SYNTH_CHECKPOINT] } {
3838
read_checkpoint $::env(RESULTS_DIR)/1_1_yosys_canonicalize.rtlil
3939
}
4040

41+
# When this synthesis run is one partition of a parallel split (driven by
42+
# an external orchestrator), `SYNTH_BLACKBOXES` lists modules outside this
43+
# partition. Blackboxing them before the hierarchy check lets each
44+
# partition load the same canonical RTLIL checkpoint while only synthesising
45+
# its own subhierarchy. Names not present in the loaded design are skipped
46+
# silently so the same list can be passed to every partition.
47+
if { [env_var_exists_and_non_empty SYNTH_BLACKBOXES] } {
48+
foreach m $::env(SYNTH_BLACKBOXES) {
49+
catch { blackbox $m }
50+
}
51+
}
52+
4153
hierarchy -check -top $::env(DESIGN_NAME)
4254

4355
if { $::env(SYNTH_GUT) } {

0 commit comments

Comments
 (0)