sync - #2
Open
nanocoh wants to merge 2780 commits into
Open
Conversation
This reverts commit dd6e7b2. Signed-off-by: Jonas Gava <jfgava@precisioninno.com>
…ROAD into grt-m1-congestion
…m li1 Signed-off-by: Jonas Gava <jfgava@precisioninno.com>
Adds the four display-control overlays of parity table 2.5 to the web viewer — access-point markers, dbRegion boundaries, the manufacturing grid and the GCell grid — plus the Misc toggles that go with them: "Flywires only", "Focused nets guides" and "Highlight selected". Each overlay is a self-painting pseudo layer registered in one table (PseudoLayerDef), which is the single source of truth for the tile dispatch, the pseudo-layer guard and the order saveImage composites them in. That order mirrors the zIndex the client gives each layer, so a saved PNG is the view on screen; compositing in registry order instead put the manufacturing grid over the routing and the pin markers over the tech layers. Two overlays needed a deliberate deviation from Qt. The manufacturing grid is decimated adaptively rather than hidden below the legibility limit: a 10 DBU grid on a 9.3 mm die only clears a 5 px spacing at z=15, so Qt's rule makes the overlay unreachable in practice. Access points are culled by the marker's extent rather than its centre, because the X reaches half a marker past the point and a centre-based cull chopped it along every tile seam. "Flywires only" suppresses the routed wire and guide shapes but keeps the terminal pin boxes and the special (geometric) routing, matching what the GUI draws in that mode — without the SWires a selected supply net came back with no highlight at all. The flywire fan is capped at 4096 lines: the GUI draws straight to the screen, but here the driver x sink product is materialized in the session and copied per overlay tile. Oblique segments convert to pixels in double and are clipped by drawLine rather than going through the clamped integer conversion, whose per-axis saturation rotates a segment instead of shortening it once one axis overflows. Includes the review feedback from PR #10806: highlights are re-derived from the selection they came from so a "Flywires only" flip cannot drop a multi-selection, the per-block overlay caches are invalidated on a design change and hand out shared ownership instead of a reference that outlives its lock, and the supersampled render path is honored throughout. Signed-off-by: Jorge Ferreira <jorge.ferreira@precisioninno.com>
…ebGUI-display-controls-overlays-grids-misc1 web: add display-control overlays from parity table 2.5 (#10619)
Signed-off-by: Jonas Gava <jfgava@precisioninno.com>
clang-format fix typo fix Signed-off-by: Jeff Ng <jeffng@precisioninno.com>
…ge-2 added layer name to min pitch message - take 2
…C by tech Rename isIdealClockPin/isIdealClockNet to isSkipPin/isSkipNet and broaden the skip criterion used during incremental parasitic updates. A net is skipped when its driver pin carries no parasitic-dependent timing: it is an ideal clock, or it is constant or has a disabled timing constraint. The reasons are evaluated per mode and combined, so a pin that is constant in one mode and disabled in another is still skipped, while the ideal-clock reason keeps its cross-mode semantics (a clock in at least one mode and ideal in every mode where it is a clock, ignoring non-clock modes). Skipping avoids both wire RC re-estimation and delaysInvalidFromFanin() for these nets. Convert the estimateWireParasiticSteiner guard to an early return and key wire RC by technology so multi-tech designs resolve per-tech values with a default fallback. Add unit tests exercising the skip logic through the public parasitics API: ideal-clock and scan-clock (via arrival validity), and constant, disabled, and mixed constant/disabled nets (via reduced pi-Elmore presence), plus per-tech wire RC resolution. Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…irrelevant-nets-per-tech-rc est: skip parasitic estimation for timing-irrelevant nets
Extracts DSE optimization function theory, early-stopping strategies, rung management (ladder of estimates), custom signal misconceptions, and framework inversion concepts into a dedicated DesignSpaceExploration.md guide. Also includes a Literature & Prior Art section connecting these EDA DSE methods to Multi-Fidelity Optimization (MFO) and Hyperparameter Optimization (ASHA/Hyperband). DeveloperGuide.md now correctly focuses strictly on the core flow futility policy for developers, with a link out to the new comprehensive guide. Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Signed-off-by: Jonas Gava <jfgava@precisioninno.com>
Signed-off-by: Jonas Gava <jfgava@precisioninno.com>
Signed-off-by: Jonas Gava <jfgava@precisioninno.com>
Address PR comments by clarifying the text is about an advanced use-case and descriptive in nature, rather than an overarching rule to be strictly followed by all OpenROAD users. Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
The pull request lock file check compared MODULE.bazel against itself instead of MODULE.bazel.lock, so it has been blind since it was rewritten in #10690. Compare MODULE.bazel.lock, and emit a GitHub error annotation with the exact regeneration command so the diff is actionable. Regenerate MODULE.bazel.lock, which drifted once the rules_python pip extension was invalidated and re-queried pypi.org/simple, adding dist_hashes facts for markdown-it-py, pygments, rich and setuptools. Drop the lock file update from the master push auto-format job: master is protected, so its push is rejected with GH006 whenever the job produces a diff, which is why every master push has been red since 2026-08-04. Signed-off-by: Joao Luis Sombrio <sombrio@sombrasoft.dev>
…or one site gaps Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: bnmfw <bernardoborgessandoval@gmail.com>
…exists before checking for one site gap Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…ROAD into grt-m1-congestion
design_powergrid__drop__average carried results.avg_voltage, so on a power net it reported the supply voltage rather than the drop. avg_ir_drop was already computed and used in the text report, but never reached the metric. The mistake was invisible on a ground net, where net_voltage is 0 and getSolution() sets avg_ir_drop = avg_voltage, so half of every run looked correct. On a 1.8 V power net the metric read 1.79999 where the average drop was 6.41e-06. Also adds design_powergrid__voltage__average, so the value that metric used to carry is still available and is named for what it is, alongside the existing design_powergrid__voltage__worst. Fixes #11096 Signed-off-by: Shivaram Mysore <shivaram.mysore@gmail.com>
…k-check-fix ci: fix MODULE.bazel.lock gate and regenerate the lock file
Signed-off-by: Peter Gadfort <gadfort@zeroasic.com>
psm: report the average IR drop under the drop__average metric
…ey wire RC by tech" This reverts commit ab4f320. Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Allow users to specify the compression level when writing the database. This helps speed up checkpointing in performance-critical flows by allowing lower compression levels (e.g., level 1 or 2) which are significantly faster while keeping file size increase acceptable. Also migrates compression_level parameters in C++ APIs to std::optional to avoid sentinel values, and updates C++/Python bindings in ord::Design for consistency. Signed-off-by: Debayan Bandyopadhyay <dbandyopadhyay@google.com>
grt/cugr: use stt builder instead of flute by default
The //docs:man_pages action emitted 2.5 MB of stdout, past Bazel's
--experimental_ui_max_stdouterr_bytes, so the whole log was dropped
along with any real diagnostic in it. Silencing it exposed several
problems underneath.
Page selection
- Module READMEs are symlinked into md/man2 so md_roff_compat.py can
read them, and the Makefile excluded them from page generation via a
hard-coded list of 24 module names. Eight newer modules were missing
from it, so their whole READMEs rendered as man pages: an untitled
"()" page with MyST markup leaking through. Derive the list from
src/*/README.md so a new module cannot regress this.
- That exclusion used an unanchored suffix pattern, so %pad.md also
matched place_pad.md and place_bondpad.md, %upf.md matched
read_upf.md and write_upf.md, and %cts.md matched report_cts.md.
Those five command pages were silently dropped; match exact paths.
- cgt, est, exa, ram, syn and web were absent from the tools list, so
their commands never got pages at all. Register them, which adds 12
command pages and 187 message pages.
README parsing
- Headings were matched without regard to code fences, so the Tcl
comments in a synopsis block ("# Either run") read as level-1
headings and misplaced every heading after them.
- Every ```tcl block counted as a command, so a README with a worked
example under "#### Examples" reported more names and synopses than
descriptions and options, and the parity assert aborted the build.
Take the first block in each ### section; a synopsis may follow
"####" prose, as in rsz's Optimizing Arithmetic Modules.
- extract_arguments needed a trailing "##" heading to bound the final
command section and raised IndexError without one; run to EOF.
Reproducibility and noise
- Pages stamped the build date, so every page differed from one day to
the next and the build never hit its cache across a date boundary.
Prefer SOURCE_DATE_EPOCH, then the source document's mtime.
- docs_srcs globbed md/**, which are this rule's own preprocess
outputs. The input set varied with leftover files from previous
builds, and rewriting them tripped --guard_against_concurrent_changes
on every run. Glob only the checked-in md/man1.
- sphinx_build_test swept the same generated directories into its data,
making its cache key depend on whether man pages had been built.
- Silence make's per-recipe echo and the per-README parse report. The
report is the golden output of the readme_msgs_check tests, which
call the translators directly, so it stays on by default and only the
whole-tree drivers pass quiet=True.
Documentation
- cut, est, exa, stt, syn, tst and web READMEs were in no toc.yml
entry, so their module-level prose was rendered nowhere once the
accidental man pages went away. Add them, and nest stt above its own
Flute sub-README rather than leaving Flute parented to grt.
- cgt's "### Clock gating" had no prose between heading and synopsis,
leaving the page description empty.
Command pages go from 230 to 247 and message pages from 3128 to 3315.
Every page common to both builds is byte-identical apart from the date.
Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Review feedback on #11172. extract_arguments embedded header text in regexes unescaped, while extract_description already escaped it. odb's `## C++` reads as a possessive quantifier and captures the wrong span; par's `## How to partition a hypergraph (min-cut partitioning)` reads as a group so the section does not match at all and match[0] raises IndexError. Neither bounds a last command section today, so nothing fails yet, but a README reorder would break the build. Escape in both the level3-to-level3 and the level3-to-level2 patterns. page_date treats a whitespace-only SOURCE_DATE_EPOCH as unset and rejects a non-numeric one instead of crashing in int(); a malformed reproducibility pin should stop the build rather than silently yield a per-machine date. The no-source fallback is now UTC like the other two branches, so the stamp does not depend on the builder's timezone. Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Codex review feedback on #11172. preprocess now removes md/man2 and md/man3 before regenerating them. Rename or delete a command and its stale .md would otherwise linger for the cat/web $(wildcard md/man*/*.md) to pick up, keeping an obsolete page alive; //docs:man_pages runs unsandboxed in a persistent execroot and no longer declares those files as inputs, so nothing else removed them. Verified by injecting a stale page into the execroot: it no longer reaches the output. md/man1 is checked in and is left alone. //src/syn:messages_txt used the macro's default non-recursive src/*.{cc,cpp,h,hh,tcl} glob, but synthesis keeps most logger calls in src/flow (this package) and src/elab and src/ir (their own packages), so the target declared only 29 of 73 messages and edits below src/ would not invalidate the docs action. Add message_srcs filegroups to the two sub-packages, following the odb precedent, and glob src/flow here. Extraction now matches a recursive scan exactly. Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…ression-level ord: Add customizable gzip compression level to write_db
mpl: ensure that macros inside a module are kept out of a std cell group
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>
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>
misc: coverity fixes
…attern_tieh drt: violation access points take precedent when returning from patterns
Signed-off-by: Arthur Koucher <arthurkoucher@precisioninno.com>
web: add rudy heatmap view as save_image -web display option
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
rcx: fix bench_wires segfault on duplicate pattern names
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"
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
[Describe your changes here]
Type of Change
Impact
[How does this change the tool's behavior?]
Verification
./etc/Build.sh).Related Issues
[Link issues here]