Skip to content

iterate dbNets rather than sta nets when fetching parasitics - #4397

Open
AcKoucher wants to merge 2 commits into
The-OpenROAD-Project:masterfrom
AcKoucher:write-rc-hier-nets
Open

iterate dbNets rather than sta nets when fetching parasitics#4397
AcKoucher wants to merge 2 commits into
The-OpenROAD-Project:masterfrom
AcKoucher:write-rc-hier-nets

Conversation

@AcKoucher

@AcKoucher AcKoucher commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Requires #4405.

The script currently iterate sta nets and uses sta_to_db_net which will return nullptr for module net. That caused the script to crash when trying to retrieve the type of that net.

With the changes here we should be properly considering the parasitics of all dbNets when fetching and preventing the crash.

Signed-off-by: Arthur Koucher <arthurkoucher@precisioninno.com>

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a helper function find_flat_db_net in flow/util/write_rc_helper.tcl to resolve flat database nets and refactors several functions to use it. It also adds deduplication logic to prevent processing the same flat net multiple times. The feedback highlights a potential runtime error in find_flat_db_net if sta::sta_to_db_mod_net returns "NULL", and suggests adding a check before calling findRelatedNet.

Comment thread flow/util/write_rc_helper.tcl Outdated
@AcKoucher
AcKoucher requested a review from maliberty August 5, 2026 16:37
@openroad-ci

openroad-ci commented Aug 5, 2026

Copy link
Copy Markdown
Member

🔍 QoR check

Metrics reflect the PR merge build — i.e. what will land on the target branch. Advisory — results are log-only and do not affect build status. The authoritative QoR gate remains the local rules-file check.

Commit 2c83c50 · Jenkins build #3 · Baseline: build

61 design(s) checked — 8 with regression(s), 7 without a comparable baseline.
Design Variant Verdict local vs inline passed / failed / missing
asap7/aes base ✅ pass ✅ MATCH 23 / 0 / 0
asap7/aes-block base ✅ pass ✅ MATCH 23 / 0 / 0
asap7/aes-mbff base ✅ pass ✅ MATCH 23 / 0 / 0
asap7/aes_lvt base ✅ pass ✅ MATCH 23 / 0 / 0
asap7/cva6 base ✅ pass ✅ MATCH 12 / 0 / 4
asap7/ethmac base ❌ fail ⚠️ MISMATCH 22 / 1 / 3
asap7/ethmac_lvt base ❌ fail ⚠️ MISMATCH 17 / 6 / 0
asap7/gcd base ✅ pass ✅ MATCH 23 / 0 / 0
asap7/gcd-ccs base ✅ pass ✅ MATCH 23 / 0 / 0
asap7/ibex base ✅ pass ✅ MATCH 23 / 0 / 0
asap7/jpeg base ✅ pass ✅ MATCH 23 / 0 / 1
asap7/jpeg_lvt base ✅ pass ✅ MATCH 23 / 0 / 0
asap7/mock-alu base ❌ fail ⚠️ MISMATCH 22 / 1 / 0
asap7/mock-cpu base ✅ pass ✅ MATCH 23 / 0 / 0
asap7/riscv32i base ✅ pass ✅ MATCH 23 / 0 / 0
asap7/riscv32i-mock-sram base ✅ pass ✅ MATCH 23 / 0 / 0
asap7/swerv_wrapper base ✅ pass ✅ MATCH 23 / 0 / 1
asap7/uart base ✅ pass ✅ MATCH 23 / 0 / 0
gf180/aes base ✅ pass ✅ MATCH 23 / 0 / 0
gf180/aes-hybrid base ✅ pass ✅ MATCH 23 / 0 / 0
gf180/ibex base ❌ fail ⚠️ MISMATCH 22 / 1 / 0
gf180/jpeg base ✅ pass ✅ MATCH 23 / 0 / 0
gf180/riscv32i base ❌ fail ⚠️ MISMATCH 20 / 3 / 20
gf180/uart-blocks base ✅ pass ✅ MATCH 23 / 0 / 0
gt2n/aes base ➖ inconclusive ➖ N/A 0 / 0 / 457
gt2n/gcd base ➖ inconclusive ➖ N/A 0 / 0 / 451
gt2n/jpeg base ➖ inconclusive ➖ N/A 0 / 0 / 456
ihp-sg13g2/aes base ✅ pass ✅ MATCH 23 / 0 / 0
ihp-sg13g2/gcd base ✅ pass ✅ MATCH 23 / 0 / 0
ihp-sg13g2/i2c-gpio-expander base ✅ pass ✅ MATCH 23 / 0 / 0
ihp-sg13g2/ibex base ✅ pass ✅ MATCH 23 / 0 / 0
ihp-sg13g2/jpeg base ❌ fail ⚠️ MISMATCH 22 / 1 / 2
ihp-sg13g2/riscv32i base ✅ pass ✅ MATCH 23 / 0 / 0
ihp-sg13g2/spi base ✅ pass ✅ MATCH 23 / 0 / 0
nangate45/aes base ✅ pass ✅ MATCH 23 / 0 / 0
nangate45/ariane133 base ✅ pass ✅ MATCH 23 / 0 / 0
nangate45/ariane136 base ✅ pass ✅ MATCH 23 / 0 / 0
nangate45/black_parrot ➖ inconclusive ➖ N/A no reports directory — flow produced no output
nangate45/bp_be_top ➖ inconclusive ➖ N/A no reports directory — flow produced no output
nangate45/bp_fe_top ➖ inconclusive ➖ N/A no reports directory — flow produced no output
nangate45/bp_multi_top ➖ inconclusive ➖ N/A no reports directory — flow produced no output
nangate45/dynamic_node base ✅ pass ✅ MATCH 23 / 0 / 0
nangate45/gcd base ✅ pass ✅ MATCH 23 / 0 / 0
nangate45/ibex base ✅ pass ✅ MATCH 23 / 0 / 0
nangate45/jpeg base ✅ pass ✅ MATCH 23 / 0 / 0
nangate45/mempool_group base ❌ fail ⚠️ MISMATCH 9 / 3 / 2
nangate45/swerv base ✅ pass ✅ MATCH 23 / 0 / 0
nangate45/swerv_wrapper base ✅ pass ✅ MATCH 23 / 0 / 0
nangate45/tinyRocket base ✅ pass ✅ MATCH 23 / 0 / 0
sky130hd/aes base ✅ pass ✅ MATCH 23 / 0 / 0
sky130hd/chameleon base ✅ pass ✅ MATCH 23 / 0 / 0
sky130hd/gcd base ✅ pass ✅ MATCH 23 / 0 / 0
sky130hd/ibex base ✅ pass ✅ MATCH 23 / 0 / 0
sky130hd/jpeg base ✅ pass ✅ MATCH 23 / 0 / 0
sky130hd/microwatt base ❌ fail ⚠️ MISMATCH 18 / 5 / 3
sky130hd/riscv32i base ✅ pass ✅ MATCH 23 / 0 / 0
sky130hs/aes base ✅ pass ✅ MATCH 23 / 0 / 0
sky130hs/gcd base ✅ pass ✅ MATCH 23 / 0 / 0
sky130hs/ibex base ✅ pass ✅ MATCH 23 / 0 / 0
sky130hs/jpeg base ✅ pass ✅ MATCH 23 / 0 / 0
sky130hs/riscv32i base ✅ pass ✅ MATCH 23 / 0 / 0
❌ asap7/ethmac base — 1 failing metric(s)
Metric target base delta threshold
globalroute__timing__setup__tns -1824.82 -1738.81 4.9464863901173795% 5.0%
❌ asap7/ethmac_lvt base — 6 failing metric(s)
Metric target base delta threshold
cts__design__instance__count__setup_buffer 5 2 150.0% 5.0%
cts__timing__setup__tns -288.036 -1.99485 14338.980374464245% 5.0%
cts__timing__setup__ws -20.2128 -1.16734 1631.5263762057327% 5.0%
finish__timing__setup__tns -208.398 -69.1169 201.51525893088376% 5.0%
globalroute__timing__setup__tns -477.04 -209.19 128.04149337922462% 5.0%
globalroute__timing__setup__ws -30.6174 -14.3398 113.51343812326532% 5.0%
❌ asap7/mock-alu base — 1 failing metric(s)
Metric target base delta threshold
finish__timing__setup__tns -18446.2 -18257 1.0363148381442735% 5.0%
❌ gf180/ibex base — 1 failing metric(s)
Metric target base delta threshold
globalroute__antenna_diodes_count 8 3 166.66666666666666% 5.0%
❌ gf180/riscv32i base — 3 failing metric(s)
Metric target base delta threshold
cts__design__instance__count__setup_buffer 57 47 21.27659574468085% 5.0%
cts__timing__setup__tns -3.18035 -0.294581 979.6181695357135% 5.0%
detailedroute__antenna_diodes_count 2 0 5.0%
❌ ihp-sg13g2/jpeg base — 1 failing metric(s)
Metric target base delta threshold
globalroute__antenna_diodes_count 22 17 29.41176470588235% 5.0%
❌ nangate45/mempool_group base — 3 failing metric(s)
Metric target base delta threshold
cts__timing__setup__tns -12383.2 -12066.6 2.623771402051945% 20%
finish__timing__setup__tns -12113.6 -11974 1.1658593619508937% 20%
globalroute__timing__setup__tns -12217 -12157.6 0.48858327301441073% 20%
❌ sky130hd/microwatt base — 5 failing metric(s)
Metric target base delta threshold
detailedroute__antenna__violating__nets 6 1 500% 5.0%
detailedroute__antenna_diodes_count 2722 1218 123.48111658456486% 5.0%
finish__timing__setup__tns -224.026 -212.487 5.430449862815137% 5.0%
globalroute__antenna_diodes_count 4310 1455 196.21993127147766% 5.0%
globalroute__timing__setup__tns -265.564 -224.165 18.468092699573976% 5.0%

@AcKoucher AcKoucher closed this Aug 6, 2026
Signed-off-by: Arthur Koucher <arthurkoucher@precisioninno.com>
@AcKoucher AcKoucher reopened this Aug 6, 2026
@AcKoucher AcKoucher changed the title ensure module nets are correctly taken into account when writing RC data iterate dbNets rather than sta nets when fetching parasitics Aug 6, 2026
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.

2 participants