Skip to content

Enable Kepler-formal LEC for multiple designs#3985

Open
openroad-ci wants to merge 22 commits intoThe-OpenROAD-Project:masterfrom
The-OpenROAD-Project-staging:secure-enable-kf-lec-check
Open

Enable Kepler-formal LEC for multiple designs#3985
openroad-ci wants to merge 22 commits intoThe-OpenROAD-Project:masterfrom
The-OpenROAD-Project-staging:secure-enable-kf-lec-check

Conversation

@openroad-ci
Copy link
Collaborator

Fixes #3953

  • Bump kepler-formal (inout port issue fix) keplertech/kepler-formal@e8675f3
  • Enable kepler-formal for multiple designs - Previously, KF for those designs were disabled due to KF & OR issues

- Previously, KF for those designs were disabled due to KF & OR issues

Signed-off-by: Jaehyun Kim <[email protected]>
Add LEC_AUX_VERILOG_FILES support to lec_check.tcl so that
auxiliary Verilog files (e.g., blackbox module stubs) are
concatenated into LEC netlists before Kepler Formal runs.

For sky130hd/chameleon, provide clean blackbox stubs for
DFFRAM_4K, DMC_32x16HC, ibex_wrapper, and apb_sys_0 so
KF can resolve these macro modules during CTS LEC.

Signed-off-by: Jaehyun Kim <[email protected]>
Update OpenROAD to 9b0caf1a52 which includes the unified
makeNewNetName fix, resolving wire collision for hierarchical
designs (e.g., microwatt CTS LEC "wire collision for net net").

Signed-off-by: Jaehyun Kim <[email protected]>
@openroad-ci openroad-ci force-pushed the secure-enable-kf-lec-check branch from 69ef0a2 to f6508cc Compare March 17, 2026 08:49
KF crashes with assertion failure in SNLLogicCloud.cpp:349:
"Iso have no drivers and more than one reader, not supported"
Both base and verific variants affected.

Signed-off-by: Jaehyun Kim <[email protected]>
Widen globalroute and finish setup TNS thresholds from -697 to -750
to accommodate timing change from OR 9b0caf1a52 (makeNewNetName).
Actual: -727.5 (4.4% regression).

Signed-off-by: Jaehyun Kim <[email protected]>
Widen area and TNS thresholds for gcd, ibex, ethmac, jpeg
to accommodate changes from OR 9b0caf1a52 (makeNewNetName).

Signed-off-by: Jaehyun Kim <[email protected]>
cva6/verific: widen stdcell count (173997→183000), CTS WS (-0.14→-0.15)
hercules_idecode/verific: widen CTS/GRT/finish TNS thresholds for
timing regression from OR 9b0caf1a52.

Signed-off-by: Jaehyun Kim <[email protected]>
Empty commit to retrigger sync and Jenkins PR-merge build.

Signed-off-by: Jaehyun Kim <[email protected]>
The bumped kepler-formal still has bugs for these designs:
- nangate45/mempool_group: assertion crash in SNLLogicCloud.cpp:349
  "Iso have no drivers and more than one reader, not supported"
- rapidus2hp/cva6: netlist loading failure
  bus net "icache_areq_o" cannot be found in ALU module

Signed-off-by: Jaehyun Kim <[email protected]>
designs/rapidus2hp/cva6/rules-base.json updates:
| Metric                                        | Old      | New      | Type     |
| ------                                        | ---      | ---      | ----     |
| globalroute__timing__setup__tns               |   -452.0 |   -463.0 | Failing  |
| finish__timing__setup__tns                    |   -452.0 |   -463.0 | Failing  |

designs/rapidus2hp/cva6/rules-verific.json updates:
| Metric                                        | Old      | New      | Type     |
| ------                                        | ---      | ---      | ----     |
| placeopt__design__instance__count__stdcell    |   201058 |   200149 | Tighten  |
| cts__timing__setup__ws                        |   -0.136 |   -0.167 | Failing  |
| finish__timing__setup__tns                    |   -550.0 |   -738.0 | Failing  |

Signed-off-by: Jaehyun Kim <[email protected]>
designs/nangate45/swerv_wrapper/rules-base.json updates:
| Metric                                        | Old      | New      | Type     |
| ------                                        | ---      | ---      | ----     |
| cts__timing__setup__ws                        |   -0.197 |   -0.466 | Failing  |
| cts__timing__setup__tns                       |    -84.6 |   -290.0 | Failing  |
| globalroute__timing__setup__tns               |    -86.3 |   -211.0 | Failing  |
| detailedroute__route__wirelength              |  5546498 |  4367567 | Tighten  |
| finish__timing__setup__tns                    |    -88.2 |   -198.0 | Failing  |

Signed-off-by: Jaehyun Kim <[email protected]>
@jhkim-pii
Copy link
Contributor

jhkim-pii commented Mar 21, 2026

Key changes in this PR

  1. Remove LEC_CHECK=0 for all designs
  2. [sky130hd/chameleon] Add a new .v to specify black-box modules to run KF successfully.
  • There are no verilog module for some modules (e.g., DFFRAM_4K, ...), which causes an error in KF.
  • So I add a new flow/designs/sky130hd/chameleon/lec_blackbox_stubs.v‎ file for KF.
  1. [rapidus2hp/cva6] cva6 RTL has uninitialized signals, which causes KF value. Initialize those signals to 0
  2. Bump OR (CTS bug fix) to resolve the undriven input port issue in [nangate45/mempool_group], which was found by KF.
  3. Bump Kepler-formal (multiple bug fixes).

export CORE_MARGIN = 2

export chameleon_DIR = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)
export LEC_AUX_VERILOG_FILES = $(chameleon_DIR)/lec_blackbox_stubs.v
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a new .v to specify black-box modules to run KF successfully.

  • There are no verilog module (has .lef only) for some modules (e.g., DFFRAM_4K, ...), which causes an error in KF.
  • So I add a new flow/designs/sky130hd/chameleon/lec_blackbox_stubs.v‎ file for KF.

hpdcache_req_o.pma.uncacheable = 1'b0,
hpdcache_req_o.pma.io = 1'b0;
hpdcache_req_o.pma.io = 1'b0,
hpdcache_req_o.pma.wr_policy_hint = HPDCACHE_WR_POLICY_AUTO;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cva6 RTL has uninitialized signals, which causes KF value. Initialized those signals properly.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Undriven input port was found by KF. Handled by CTS bug fixing in OR (bump OR).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bump Kepler-formal (multiple bug fixes).

@jhkim-pii
Copy link
Contributor

jhkim-pii commented Mar 21, 2026

@vvbandeira The secure CI of this PR suffers from the following build fail.

[2026-03-21T09:19:59.139Z] [ 94%] ABC: `` Compiling: /src/aig/ivy/ivyShow.c
[2026-03-21T09:19:59.139Z] [ 94%] ABC: `` Compiling: /src/aig/ivy/ivyTable.c
[2026-03-21T09:19:59.139Z] /usr/bin/ld: /platforms/verific/Dec25/util/util-linux.a(Strings.o): in function `Verific::Strings::atoul(char const*, unsigned int*)':
[2026-03-21T09:19:59.139Z] Strings.cpp:(.text+0x623): undefined reference to `__isoc23_strtoull'
[2026-03-21T09:19:59.139Z] /usr/bin/ld: Strings.cpp:(.text+0x67b): undefined reference to `__isoc23_strtoul'
[2026-03-21T09:19:59.139Z] /usr/bin/ld: /platforms/verific/Dec25/util/util-linux.a(Strings.o): in function `Verific::Strings::atoi(char const*, unsigned int*)':
[2026-03-21T09:19:59.139Z] Strings.cpp:(.text+0xefa): undefined reference to `__isoc23_strtoull'
[2026-03-21T09:19:59.139Z] /usr/bin/ld: Strings.cpp:(.text+0xf84): undefined reference to `__isoc23_strtoul'
[2026-03-21T09:19:59.139Z] /usr/bin/ld: /platforms/verific/Dec25/util/util-linux.a(SaveRestore.o): in function `Verific::SaveRestore::GetDesignName(char const*, unsigned int)':
[2026-03-21T09:19:59.139Z] SaveRestore.cpp:(.text+0xd5a): undefined reference to `__isoc23_sscanf'
[2026-03-21T09:19:59.139Z] [ 94%] ABC: `` Compiling: /src/aig/ivy/ivyUtil.c
[2026-03-21T09:19:59.139Z] [ 94%] ABC: `` Compiling: /src/aig/hop/hopBalance.c

Is it related to /platforms/verific/Dec25 for Secure-Branch? Secure-Run-GCP uses /platforms/verific/Feb26 (newer).

  • Secure-Branch build log: [2026-03-21T09:06:56.093Z] + nice ./build_openroad.sh --local --no_init --clean-force --with-verific /platforms/verific/Dec25 -> Build fail
  • Secure-Run-GCP build log: [2026-03-21T00:59:33.954Z] + nice ./build_openroad.sh --local --no_init --with-verific /platforms/verific/Feb26 -> Build OK

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Kepler-formal: Netlist loading fail in flat flow - gf12/bp_single and gf12/ca53

2 participants