Skip to content

est: add set_bump_rc command - #11017

Draft
eder-matheus wants to merge 8 commits into
The-OpenROAD-Project:masterfrom
eder-matheus:est_3d_bump_rc
Draft

est: add set_bump_rc command#11017
eder-matheus wants to merge 8 commits into
The-OpenROAD-Project:masterfrom
eder-matheus:est_3d_bump_rc

Conversation

@eder-matheus

@eder-matheus eder-matheus commented Jul 28, 2026

Copy link
Copy Markdown
Member

Summary

Adds set_bump_rc, the bump half of the 3D parasitics-estimation series: lumped
per-corner resistance/capacitance for chip bumps (dbChipBump). During
placement estimation, a two-pin net connecting a top-level port to a chip bump
is treated as a pad net and gets the lumped bump RC (pi model: C/2 on each
node, R between) instead of length-based wire RC. Bump nets are detected by the
ODB bump association itself — the pin on the bump's recorded net
(dbChipBump::getNet()), with no pad-class LEF master required — so multi-pin
bump cells only classify their actual bump net. Without set_bump_rc, bump
nets keep the legacy small connectivity resistor; at least one of
-resistance/-capacitance is required (EST-0033). 2D designs are unaffected:
with no bump values set the pad path is unchanged.

Type of Change

  • New feature

Impact

New set_bump_rc [-corner corner] [-resistance res] [-capacitance cap]
command (values are absolute per bump, not per unit length). In 3D designs,
estimate_parasitics -placement annotates port-to-bump nets with the lumped
bump RC per corner. No behavior change for designs without chip bumps or when
set_bump_rc is not called.

Verification

  • I have verified that the local build succeeds (./etc/Build.sh).
  • I have run the relevant tests and they pass.
  • My code follows the repository's formatting guidelines.
  • I have included tests to prevent regressions.
  • I have signed my commits (DCO).

New tests: set_bump_rc1 (argument validation), set_bump_rc2 (end-to-end:
port-to-bump net takes the bump RC, non-bump net keeps wire RC), and the
BumpRcOnPadNet unit test (unset -> connectivity resistor, set -> lumped RC),
registered in both CMake and Bazel. Full est suite passes (14 tcl + 4 gtest).

Related Issues

Follow-up to #10931 (est chip binding) and #10941 (per-technology wire RC).
Part of the minimal 3D parasitics-estimation series; the 3D estimation flow
that consumes these values per chip follows in a separate PR.

Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
@eder-matheus

Copy link
Copy Markdown
Member Author

@codex review

@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 the set_bump_rc command to set lumped resistance and capacitance for chip bumps in 3D designs. It updates the parasitics estimation logic to identify chip bump pins and apply these custom RC values to pad nets terminating on chip bumps, along with adding corresponding tests and Tcl interfaces. The feedback points out an issue in makePadParasitic where using std::max(bump.res, res) with a default of 0.001 ohms would silently override any user-specified bump resistance smaller than 0.001 ohms, and suggests checking bump.res > 0.0 instead.

Comment thread src/est/src/EstimateParasitics.cpp

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 60a0fc6ae6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/est/src/EstimateParasitics.cpp Outdated
Comment thread src/est/src/EstimateParasitics.cpp Outdated
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
@eder-matheus

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5096f5196e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines 775 to +779
return pin1 && pin2
&& ((network_->isTopLevelPort(pin1) && isPadPin(pin2))
|| (network_->isTopLevelPort(pin2) && isPadPin(pin1)));
&& ((network_->isTopLevelPort(pin1)
&& (isPadPin(pin2) || isChipBumpPin(pin2)))
|| (network_->isTopLevelPort(pin2)
&& (isPadPin(pin1) || isChipBumpPin(pin1))));

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Reject multi-pin nets before using the two-node bump model

When a recorded bump net contains a top-level port, the bump ITerm, and an additional load, net2Pins() only returns the first two iterator entries and never verifies that the net ends there. If those entries match this new condition, makePadParasitic() replaces the net with a network containing only those two pins, silently omitting the remaining loads from parasitic connectivity and producing incorrect timing. Require exactly two connected pins before selecting this model.

Useful? React with 👍 / 👎.

Comment thread src/est/README.md
@maliberty

Copy link
Copy Markdown
Member

@codex which commit is unsigned?

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create an environment for this repo.

maliberty added a commit that referenced this pull request Jul 29, 2026
An example FP is #11017

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants