Skip to content

sync - #2

Open
nanocoh wants to merge 2544 commits into
keplertech:masterfrom
The-OpenROAD-Project:master
Open

sync#2
nanocoh wants to merge 2544 commits into
keplertech:masterfrom
The-OpenROAD-Project:master

Conversation

@nanocoh

@nanocoh nanocoh commented May 23, 2026

Copy link
Copy Markdown

Summary

[Describe your changes here]

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Refactoring
  • Documentation update

Impact

[How does this change the tool's behavior?]

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

[Link issues here]

eder-matheus and others added 25 commits July 28, 2026 14:16
…ROAD into grt_cugr_fix_missing_guides

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

# Conflicts:
#	src/grt/src/cugr/src/GridGraph.cpp
#	src/grt/test/pin_access1_cugr.ok
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
…eader

Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
so that we can enable the layering check.

Signed-off-by: Henner Zeller <h.zeller@acm.org>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
Make private headers visible to cts unittest
…rasitics

odb: add support for ground-only inter-chip parasitics
grt/cugr: fix guides missing pins and connection layers
An example FP is #11017

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Signed-off-by: Jonas Gava <jfgava@precisioninno.com>
Signed-off-by: Jonas Gava <jfgava@precisioninno.com>
The GRT-0183 error message is - for normal OpenROAD users - very
cryptic and includes almost no information what's wrong. Update
the error message and include the actual issue to the message.

Signed-off-by: Daniel Schultz <dnltz@aesc-silicon.de>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Signed-off-by: Matt Liberty <matt.liberty@gmail.com>
…-AGENTS.md

Tell agents not the check DCO to avoid false positives.
…odex style review on codes in future

Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
Signed-off-by: Jonas Gava <jfgava@precisioninno.com>
…elper

Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
…acing GRT-0096 on the CUGR path

Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
When GlobalRouter::mergeNetsRouting() fires for the CUGR path, attempt
to stitch the two existing route segments at the former buffer pin
position (connectCUGRRouting) rather than ripping up and rerouting the
survivor from scratch.

Key changes:

  GlobalRouter::connectCUGRRouting(preserved, removed)
    Mirrors connectRouting() but uses cugr_->hasAvailableResources()
    instead of fastroute_->hasAvailableResources() for the capacity
    check.  Reuses the existing geometry helpers findBufferPinPostions,
    findTopLayerOverPosition, and createConnectionForPositions which are
    FastRoute-agnostic.

  GlobalRouter::mergeNetsRouting() -- CUGR branch
    If stitching succeeds, call cugr_->mergeNet() to transfer tree
    ownership and save guides.  On failure, fall back to addDirtyNet so
    the survivor is rerouted incrementally (matching the previous safe
    behaviour).

  CUGR::mergeNet(preserved, removed)
    Attaches the removed net's GRTreeNode subtree as a child of the
    preserved net's routing tree so getRoutes() emits all wire segments.
    Inserts the removed net into merged_nets_ so removeNet() knows not
    to decrement GridGraph demand for it (the wires are still there,
    now owned by the preserved net).

  CUGR::removeNet() -- merged-net guard
    Skips removeTreeUsage() for nets that were transferred via mergeNet,
    preventing double-decrement of GridGraph congestion numbers.

  CUGR::hasAvailableResources(layer, tile_x, tile_y)
    Thin wrapper over GridGraph::getEdge().getResource() >= 1.0,
    equivalent to FastRouteCore::hasAvailableResources.

All 143 GRT regression tests pass.

Signed-off-by: Sparsh Karna <sparsh2005karna@gmail.com>
oharboe and others added 30 commits August 9, 2026 18:16
When buf_dist evaluates to a fractional value strictly between 0.0
and 1.0 (in DBU), integer truncation causes length -= buf_dist
to remain unchanged. Previously, the zero_advance detection only
caught buf_dist <= 0.0. This fix broadens the condition to
buf_dist < 1.0 to correctly detect lack of progress caused by
integer truncation, preventing an infinite loop and subsequent stack
overflow.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Fix integer truncation bug in RepairDesign::repairNetWire
web: fix bbox and add debugPrints
Register the tests from regression_tests_large.tcl (macro01-03,
medium01-06, large01-02) as Bazel regression_test targets tagged
'manual' so they are excluded from the default 'bazel test //...'
wildcard. Add a :large_tests test_suite to run them explicitly and
update their stale golden .ok files to match current GPL log output.

Run with: bazel test //src/gpl/test:large_tests

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Extend the :test_resources exclude list to cover ALL_TESTS + LARGE_TESTS
(not just TESTS) so editing a large or passfail test's .tcl/.py no longer
invalidates the shared filegroup and re-runs every standard test.

.ok golden files are intentionally left in test_resources: they reach
each test only through this filegroup (the regression_test macro sets no
per-test golden_file), so excluding them would break log diffing.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…-large-tests

gpl: add separate Bazel targets for long-running regression tests
This code clearly articulates the intent that fixPointers *must* be run.
If an exception is thrown or we add some early exit on futile runs
(discovered in futility policy experiments), we're not suckerpunched
by unfixed pointers.

To prevent this, we inject a std::shared_ptr RAII guard (scope_exit
at home) scoped around findResizeSlacks to guarantee nbc_->fixPointers()
executes unconditionally upon exiting the scope.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Address review feedback from Matt to use boost scoped_exit
instead of std::shared_ptr.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Added boost.scope_exit bazel dependency.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
…in-height

odb/tap: cut row segments in narrow regions
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
FastRouteCore::getCongestionNets iterated over every overflow position
and for each position, checked intersection with every net in the design.
This created an O(P * N) bottleneck that caused the router to hang for
hours on congested designs where P and N are both large.

Replace the pointer-chasing intersection checks with a boolean grid map.
First, project all overflow positions onto 2D boolean arrays. Then,
iterate over the nets once to check if any segments overlap with a
congested grid cell. This reduces the complexity to O(P + N),
eliminating the bottleneck.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Build the router state synthetically through the public API (addNet,
addTreeEdge, updateEdge2DAnd3DUsage) on a 10x10 grid and pin the
behavior of getCongestionNets: nets crossing overflowed gcells are
selected, horizontal overflow only matches horizontal segments (and
vice versa), clock nets are excluded, the search radius expands only
until new nets are found, capped at 4, and nets already in the set do
not stop the expansion.

The same suite passes against the previous O(positions * nets)
implementation, certifying the boolean-grid rewrite is behavior
preserving without needing the large proprietary design that exposed
the bottleneck.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
findNetsNearPosition lost its last caller when getCongestionNets
switched to the boolean grid lookup. Also return early when there are
no overflow positions (the net scan would otherwise walk every route
against empty grids five times) and const-qualify locals.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Initialize already_added by looking up the nets already in the set in
db_net_id_map_ instead of scanning every net in the design, and use
size_t arithmetic for all flattened grid-map indexing so the products
cannot overflow int on very large grids.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
gpl: ensure global placement pointers are fixed even on exception
Replace the magic number 5 with kMaxSearchRadius and compare
grids.size() <= routeLen instead of < routeLen + 1 so the guard cannot
overflow when routeLen is INT_MAX.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>

# Conflicts:
#	MODULE.bazel.lock
docs: add bazel sphinx_build_test replicating ReadTheDocs CI (salvage #10695)
… pass

Signed-off-by: Arthur Koucher <arthurkoucher@precisioninno.com>
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Signed-off-by: Arthur Koucher <arthurkoucher@precisioninno.com>
…track-a

Cross-chiplet 3DIC static timing analysis
grt: use boolean grid map for fast congestion nets lookup
rcx: create struct for the spef header to avoid duplicated code on 3D pass
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.