Skip to content

pdn: over pad connections balancing - #11213

Open
gadfort wants to merge 3 commits into
The-OpenROAD-Project:masterfrom
gadfort:pad-over-balance
Open

pdn: over pad connections balancing#11213
gadfort wants to merge 3 commits into
The-OpenROAD-Project:masterfrom
gadfort:pad-over-balance

Conversation

@gadfort

@gadfort gadfort commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Summary

Closes #9994
Change over pad power grid connections to build by group so we can attempt to balance the pin connections

There are now 12 VDD connections and 14 VSS connections.
image

Type of Change

  • Bug fix
  • New feature

Impact

Generally more connections for designs needing over pad connections, other design are not impacted by this change.

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).

Related Issues

#9994

Signed-off-by: Peter Gadfort <gadfort@zeroasic.com>
…ce the number of connection to pads

Signed-off-by: Peter Gadfort <gadfort@zeroasic.com>
@gadfort
gadfort requested a review from a team as a code owner August 23, 2026 18:15
@gadfort
gadfort requested a review from maliberty August 23, 2026 18:15
@gadfort gadfort changed the title Pad over balance pdn: over pad connections balancing Aug 23, 2026

@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 refactors the PadDirectConnectionStraps class to build pad connections as a group, ensuring they are balanced across nets and placed with knowledge of each other. It also introduces a new test case to verify this connection balancing behavior. The review feedback highlights a potential issue in PadDirectConnectionStraps::buildOverPad where the preferred offset is unconditionally inserted into the offsets list without verifying if it falls within the valid [lane_min, lane_max] range, which could lead to invalid strap placement outside the pin boundary.

Comment thread src/pdn/src/straps.cpp Outdated
Signed-off-by: Peter Gadfort <gadfort@zeroasic.com>
@maliberty

Copy link
Copy Markdown
Member

@codex review

Comment thread src/pdn/src/grid.cpp
Comment on lines +1329 to +1330
std::shared_ptr<odb::PtrMap<odb::dbNet, int>> net_map
= std::make_shared<odb::PtrMap<odb::dbNet, int>>();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Suggested change
std::shared_ptr<odb::PtrMap<odb::dbNet, int>> net_map
= std::make_shared<odb::PtrMap<odb::dbNet, int>>();
auto net_map = std::make_shared<odb::PtrMap<odb::dbNet, int>>();

@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: cf22bc5748

ℹ️ 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/pdn/src/straps.cpp
Comment on lines +1406 to +1408
const ShapePtr& other = *itr;
if (other->getNet() == iterm_->getNet()) {
return other.get();

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 Reapply target filtering after cutting straps

When an obstruction cuts away the fragment reaching the originally selected ring or stripe, this fallback accepts any intersecting shape on the same net. That bypasses isTargetShape(), which deliberately rejects instance-grid and non-target wire shapes, so a pad-connected fragment that only reaches a same-net macro grid or followpin can be retained and counted as a successful pad-to-core connection. Apply the same target eligibility check here before returning the replacement target.

Useful? React with 👍 / 👎.

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.

-connect_to_pads only adds sporadic connections

2 participants