From 215f408ee80b8db8e30119823e9de9e880403188 Mon Sep 17 00:00:00 2001 From: Matt Liberty Date: Sat, 7 Nov 2026 18:27:36 +0000 Subject: [PATCH 1/2] synth: never map logic onto a hardened block; update OpenROAD A block's timing model can give a constant output a function, and ABC then takes the block for a gate. Pass every BLOCKS entry to ABC as -dont_use. Update OpenROAD to pick up rsz: never swap pins on a cell with an opaque or constant output (OpenROAD #12158), which crashed repair_timing in global route on ihp-sg13g2/i2c-gpio-expander. Signed-off-by: Matt Liberty --- flow/scripts/synth_preamble.tcl | 7 +++++++ tools/OpenROAD | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/flow/scripts/synth_preamble.tcl b/flow/scripts/synth_preamble.tcl index 6550b0f5ae..f024281f80 100644 --- a/flow/scripts/synth_preamble.tcl +++ b/flow/scripts/synth_preamble.tcl @@ -302,6 +302,13 @@ if { [env_var_exists_and_non_empty DONT_USE_CELLS] } { lappend lib_dont_use_args -dont_use $cell } } +# Never map logic onto a hardened block. A block's timing model gives a +# constant output a function, and ABC would take the block for a gate. +if { [env_var_exists_and_non_empty BLOCKS] } { + foreach block $::env(BLOCKS) { + lappend lib_dont_use_args -dont_use $block + } +} # Technology mapping for cells set abc_args [list -script $abc_script \ diff --git a/tools/OpenROAD b/tools/OpenROAD index f131605002..82a809c749 160000 --- a/tools/OpenROAD +++ b/tools/OpenROAD @@ -1 +1 @@ -Subproject commit f131605002c80444f79b18e95e0c7cb657ec024d +Subproject commit 82a809c74985ed61a7778eb48dc895c5335e462f From d2245bf61722d7a3d2b424c7cabf9bd0df4879d5 Mon Sep 17 00:00:00 2001 From: Matt Liberty Date: Sat, 7 Nov 2026 18:41:37 +0000 Subject: [PATCH 2/2] variables: BLOCKS is read by the synth stage synth_preamble.tcl passes BLOCKS to ABC as -dont_use, so its variables.yaml entry declares that stage. Signed-off-by: Matt Liberty --- docs/user/FlowVariables.md | 2 +- flow/scripts/variables.json | 5 ++++- flow/scripts/variables.yaml | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/user/FlowVariables.md b/docs/user/FlowVariables.md index 56616bcd43..0df148d71d 100644 --- a/docs/user/FlowVariables.md +++ b/docs/user/FlowVariables.md @@ -356,6 +356,7 @@ configuration file. - [ADDITIONAL_MEMORIES](#ADDITIONAL_MEMORIES) - [AUTO_MEMORIES_MACRO_PLACE](#AUTO_MEMORIES_MACRO_PLACE) - [AUTO_MEMORIES_REGFILES](#AUTO_MEMORIES_REGFILES) +- [BLOCKS](#BLOCKS) - [CACHED_REPORTS](#CACHED_REPORTS) - [CLKGATE_MAP_FILE](#CLKGATE_MAP_FILE) - [DFF_LIB_FILE](#DFF_LIB_FILE) @@ -669,7 +670,6 @@ configuration file. - [ADDITIONAL_LEFS](#ADDITIONAL_LEFS) - [ADDITIONAL_LIBS](#ADDITIONAL_LIBS) - [AUTO_MEMORIES](#AUTO_MEMORIES) -- [BLOCKS](#BLOCKS) - [CAP_MARGIN](#CAP_MARGIN) - [CDL_FILES](#CDL_FILES) - [CORNER](#CORNER) diff --git a/flow/scripts/variables.json b/flow/scripts/variables.json index 0d5e4dedd5..8bebf70c48 100644 --- a/flow/scripts/variables.json +++ b/flow/scripts/variables.json @@ -94,7 +94,10 @@ ] }, "BLOCKS": { - "description": "Blocks used as hard macros in a hierarchical flow. Do note that you have to specify block-specific inputs file in the directory mentioned by Makefile.\n" + "description": "Blocks used as hard macros in a hierarchical flow. Do note that you have to specify block-specific inputs file in the directory mentioned by Makefile.\n", + "stages": [ + "synth" + ] }, "BUFFER_PORTS_ARGS": { "description": "Specify arguments to the buffer_ports call during placement. Only used if DONT_BUFFER_PORTS=0.\n", diff --git a/flow/scripts/variables.yaml b/flow/scripts/variables.yaml index cd680162d1..ac9d582494 100644 --- a/flow/scripts/variables.yaml +++ b/flow/scripts/variables.yaml @@ -1134,6 +1134,8 @@ BLOCKS: description: > Blocks used as hard macros in a hierarchical flow. Do note that you have to specify block-specific inputs file in the directory mentioned by Makefile. + stages: + - synth CDL_FILES: description: | Insert additional Circuit Description Language (`.cdl`) netlist files.