Skip to content

sync - #2

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

sync#2
nanocoh wants to merge 2811 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]

shivarammysore and others added 25 commits August 7, 2026 15:53
…ered nodes

The three writers derive their output from a solution and all reached into
currents_/voltages_ with at(), so calling one before analyze_power_grid threw a
bare std::out_of_range with nothing to act on. write_pg_spice threw after it had
already written the resistive network, leaving a syntactically valid spice deck
with no sources and no sinks -- a floating network a simulator solves to nonsense
rather than rejects.

Each writer now calls ensureSolution() before creating its file, which reports
the net and corner and names analyze_power_grid.

writeSpiceFile additionally looked up every ITermNode in the per-node current
map with at(). That map is sparse by construction: generateCurrentMap() inserts
only nodes of instances returned by getInstancePower(), so a filler, tap or decap
has no entry. solve() reads the same map with find() and a zero default, so the
sparse case was already handled twenty lines of context away. The lookup now
matches, and skips a node with no current the way the neighbouring
kSpiceFileMinCurrent guard already skips a negligible one.

Adds report_writers_require_solution, covering write_pg_spice before a solution
exists -- including that no file is left behind -- and all three writers after
one.

Fixes #11098

Signed-off-by: Shivaram Mysore <shivaram.mysore@gmail.com>
The ensureSolution comment ran to 81 columns against the 80-column limit.
Verified with the same clang-format CI uses, Ubuntu 18.1.3, via --dry-run
-Werror on both changed files.

Signed-off-by: Shivaram Mysore <shivaram.mysore@gmail.com>
ord: register Tech for Python global APIs
odb: ensure chip has a name and not a nullptr
Addresses both review comments on #11103.

hasSolution() requires the current map to be non-empty, so a grid solved with
no powered instances -- a DEF-only or floorplanning analysis, where the solve
populates voltages and generateCurrentMap() inserts nothing -- would have been
rejected by the guard immediately after a successful solve. Voltages are still
reportable in that case.

Each writer now tests the map it actually reads: the voltage and EM writers
require node voltages, and the spice writer requires the current map, whose
emptiness is already handled by the find() lookup over ITerm nodes. The helper
is renamed reportNoSolution() since it no longer decides, only reports.

Also registers report_writers_require_solution in src/psm/test/BUILD. It was
added to the CMake list only, so Bazel generated no target for it and Bazel CI
could not run the regression. AGENTS.md asks for dual CMake+Bazel registration.

Signed-off-by: Shivaram Mysore <shivaram.mysore@gmail.com>
Signed-off-by: Peter Gadfort <gadfort@zeroasic.com>
tap: fix overlapping endcap cells at macro boundary jogs
psm: error early when a report writer has no solution, and skip unpowered nodes
Signed-off-by: Peter Gadfort <gadfort@zeroasic.com>
Signed-off-by: Peter Gadfort <gadfort@zeroasic.com>
Signed-off-by: Peter Gadfort <gadfort@zeroasic.com>
…y wire RC by tech"

This reverts commit dcd6b63.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
dpl: ensure site exists for one site gap check
dpl: draw diamond search as a per-instance outline
Revert "est: skip parasitic estimation for timing-irrelevant nets; key wire RC by tech"
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>
Signed-off-by: Peter Gadfort <gadfort@zeroasic.com>
Allow trailing whitespace after the terminating semicolon in LEF58_MINWIDTH
rules so properties like "MINWIDTH 1.0 WRONGDIRECTION ; " parse cleanly.

Add C++ and Tcl regression tests with a multiline LEF58_MINWIDTH property
matching production tech LEF formatting.

Fixes #4252

Signed-off-by: Tyrone Marhguy <tyronemarhguy@gmail.com>
Signed-off-by: Tyrone Marhguy <tyronemarhguy@gmail.com>
Simplify trailing-whitespace handling per review feedback on #11107.

Signed-off-by: Tyrone Marhguy <tyronemarhguy@gmail.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>
eder-matheus and others added 30 commits August 18, 2026 13:03
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>
docs: fix stale references and broken links
…page-coverage

docs: fix man page generation coverage, noise and reproducibility
Signed-off-by: Bernardo Borges Sandoval <39677852+bnmfw@users.noreply.github.com>
…-est

Reapply "est: skip parasitic estimation for timing-irrelevant nets; k…
…e on 3D pass

Signed-off-by: Arthur Koucher <arthurkoucher@precisioninno.com>
…Net soft-NDR, hot-path lambda

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

drt: violation access points take precedent when returning from patterns
Signed-off-by: Arthur Koucher <arthurkoucher@precisioninno.com>
…ate/OpenROAD into grt_cugr_jumper_insertion

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

# Conflicts:
#	src/grt/test/repair_antennas2_cugr.guideok
#	src/grt/test/repair_antennas4_cugr.guideok
…heck

Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
web: add rudy heatmap view as save_image -web display option
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: Minju Kim <mkim@precisioninno.com>
…_sta_update_0814

Update sta ptr to 08/14
//docs:man_pages produced no man3 pages at all. md_roff_compat.py read
../src/<module>/messages.txt from the source tree, but those files are
generated: CMake writes them in-tree while bazel writes them under
bazel-out, and the unsandboxed action sees only declared inputs. Every
message page was skipped with "doesn't exist. Continuing". cat3 and html3
now hold 3408 pages each, up from 0.

md_roff_compat.py takes the layout root from MESSAGES_ROOT_DIR, defaulting
to the repository root so the CMake paths are unchanged, and man_pages.bzl
points it at the bin dir, whose layout already matches.

Two inputs had nowhere to come from: the ORD messages, which live in src/
itself and had no bazel target, and //src/gui:messages_txt, which existed
but was not visible to //docs.

The generated messages.txt were incomplete as well. The messages_txt glob
was not recursive and omitted .cxx and .i, so modules keeping logger calls
below src/ lost them: 311 in drt, 90 in grt, 74 in dpl, 21 in rsz, 18 in
utl, 15 in gui. The default glob now recurses over the extension set
find_messages.py scans, and sub-packages hand their sources over through a
shared message_srcs macro, new for dft's seven and replacing three
divergent hand-written extension lists in odb and syn.

cut and tst join the documented modules. cut's messages() call was the only
one in a src/<module>/src/CMakeLists.txt without OUTPUT_DIR .., so CMake
wrote src/cut/src/messages.txt where every other module writes
src/<module>/messages.txt; tst had no messages() call. Neither exposes Tcl
commands, so both are excluded from man2. tst's one logger call named
utl::RSZ 0, which is not a resizer message, and is now utl::TST 1.

//:dup_id_test passed unconditionally. It ran find_messages.py -d src from
its runfiles directory, which holds only the script, so it walked a
nonexistent path, found zero messages and exited 0; an injected duplicate
left it green. It now resolves the workspace through its MODULE.bazel
runfiles symlink, the handle the lint tests already use. That single walk
also covers cross-module collisions, which the per-module genrules cannot
see: each module's messages.txt is individually duplicate-free when the two
sites sit in different modules.

The lint and format tests shared the resulting caching hole. They scan the
git worktree rather than declared inputs, so nothing invalidates a cached
result and all five reported "(cached) PASSED" after a source edit. Tagging
them external forces a re-run.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…3-messages

docs: generate man3 pages in the bazel man page build
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
rcx: fix bench_wires segfault on duplicate pattern names
Causes excessive QoR loss.

This reverts commit 8328314, reversing
changes made to c536d9d.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
rcx: create struct for the unit scale factors to avoid duplicated code on 3D pass
Revert "Merge pull request #11066 from oharboe/rsz-futility-limit"
…ve-cg-ndr

CTS: improve NDR for clock nets
…jumper_insertion

grt/cugr: enable jumper insertion on repair_antennas
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.