Uh oh!
There was an error while loading. Please reload this page.
sync - #2
Open
nanocoh wants to merge 2887 commits into
Open
Conversation
rcx: create struct for the spef header to avoid duplicated code on 3D pass
Include the sequential register/latch classification in the MBFF compatibility mask. This prevents edge-triggered flops from being packed into level-sensitive latch trays while preserving valid tray matches. Extend the GPL MBFF unit library and regression to cover equivalent register-bank and latch-bank interfaces. Signed-off-by: Jaehyun Kim <jhkim@precisioninno.com>
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
…culateAreas 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>
Replace the lone static_cast in Mask::to_string with the surrounding C-style cast form. This keeps the formatting arguments consistent without changing the bool-to-int conversion. Signed-off-by: Jaehyun Kim <jhkim@precisioninno.com>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
…nst_net update sta ptr to fix const nets
FastRouteCore::routeMonotonic pre-sized every tree edge's route.grids to x_range_ + y_range_ -- the Manhattan diameter of the whole routing grid -- and then shrank it with resize(cnt) once the route was walked. resize() downward keeps the capacity, and route.grids lives in sttrees_ for the whole global route, so every edge held a worst-case buffer for the entire run while the routes themselves are a handful of points. On a large die that is many GPoint3D (6 bytes each) per edge, landing in a large size class: many live blocks, many GB of which essentially all is unused capacity. Size the buffer from the mid point the cost search just picked instead. walkSegment appends exactly |dx| + |dy| points per L-segment whichever branch it takes, plus the trailing end point, so the new size is exact. The trailing resize(cnt) is therefore a no-op and is replaced by assert() checks that the walk doesn't write out-of-bounds and wrote exactly the points the size was computed for. Note the size is not |x2-x1| + |y2-y1| + 1: xmin/xmax and ymin/ymax grow the search window by 'enlarge' (10, +5 per iteration) beyond the edge bounding box, so bestp1 can fall outside it and the route is not always monotonic. Bounding by the bounding box would overflow the buffer. Co-authored-by: Olle Fredriksson <olle@ascenium.com> Signed-off-by: Øyvind Harboe <oyvind@ascenium.com>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
…ROAD into ant_order_independent_merge
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
…ROAD into grt-m1-congestion
grt: size monotonic route buffer to the actual route length
…rting point Signed-off-by: Arthur Koucher <arthurkoucher@precisioninno.com>
…ngestion GRT: Fix FastRoute blocked tracks computation
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
dpl: check edge spacing DRC on opt_mirror
…ff-register-latch-mask gpl: Separate registers and latches in MBFF masks
…compression-level Revert "utl: Use 64KB buffer for gzip compression and decompression"
Signed-off-by: Mike Inouye <mikeinouye@google.com>
…ncurrent-io-e5 gpl: concurrent IO pin + cell placement in global placement
The test reports whether each report writer created its output file, and asserts write_pg_spice creates nothing before a solution exists. Since make_result_file only builds a path, output from an earlier run in the same results/ was still present, so the pre-analysis check read 1 and the test failed on every run after the first. Delete the three output files up front so the checks start from a known absent state. Bazel gives each run a fresh TEST_TMPDIR, so this only affected repeated local ctest runs. Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
The bazel flow tests ran the RTL-to-GDS flow but checked only the exit code: BIG_TESTS get check_log=False, and PASSFAIL_TESTS is just commands_without_load, so check_passfail was False too. The <design>.metrics_limits files were read only by flow_metrics.tcl, which only ./regression sources, so a green bazel run said nothing about QoR. Add a check_metrics attribute to regression_rule_test. When set, regression_test.sh passes -metrics so openroad writes the result json, then compares it against <design>.metrics_limits and fails the test on a violation. Enabled for the 13 BIG_TESTS that have a limits file, derived from a glob so a new design opts in by adding one. The comparison reuses the metric table and margins from flow_metrics.tcl via a new compare_metrics_files, so bazel and ./regression apply the same limits and report the same message. It reads the json with a new read_flat_json rather than tcllib's json package, which the bazel-built openroad does not carry; the metrics files are machine written flat objects of scalars, and nested json is rejected rather than guessed at. read_flat_json returns dicts identical to json::json2dict for all 31 metrics and limits files in the tree. This surfaces four pre-existing QoR violations under bazel: aes_asap7 (also fails ./regression, so its limit is genuinely stale), plus aes_nangate45, aes_sky130hs and jpeg_sky130hs, which pass ./regression and differ only because the bazel binary's QoR differs from cmake's. The limits are unchanged here; these tests stay tagged manual, so default CI is unaffected. Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…eport-writers-test-idempotency psm: clear stale outputs in report_writers_require_solution test
Turning on the bazel metrics check surfaced four designs whose QoR was outside their limits: aes_asap7, aes_nangate45, aes_sky130hs and jpeg_sky130hs. Their limits were last derived from cmake ./regression runs, but CI runs the flow tests under bazel, whose -O3 -flto binary produces different QoR. Regenerate the metrics and limits for those four from bazel runs, using the metrics json the check now writes as an undeclared test output. All 22 gated metrics are still present in each limits file, so the gate is not weakened; the limits move both ways, tightening where bazel is better (aes_nangate45 max_capacitance_slack -33% -> -20%) and loosening where it is worse (aes_asap7 max_slew_slack -11% -> -38%). Deriving limits from bazel means ./regression can now fail these designs where cmake QoR is worse than bazel's: aes_nangate45 on max_capacitance_slack, aes_sky130hs on clock_skew and ANT errors, and jpeg_sky130hs on ANT errors. One set of limits cannot satisfy both binaries for these designs, and bazel is what CI gates on. Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
gcd_sky130hd_fast_slow was registered only in test/BUILD, not in regression_tests.tcl or CMakeLists.txt. CI runs it as its own bazel flow stage, but with check_log and check_passfail both false and no metrics_limits file it asserted nothing beyond openroad exiting 0, leaving it the one flow design with no output checked at all. It had no limits file because the limits tooling could not produce one: save_metric_limits indexes test_langs($test), so save_flow_metrics_limits reported 'test not found'. Add it to record_flow_tests, which lets the tooling generate its limits and makes ./regression able to run it like the other flow designs, then save its metrics and limits from a bazel run. It agrees between the two binaries, passing under both bazel and ./regression. Every BIG_TEST now has a limits file, so drop FLOW_METRIC_TESTS and check metrics for all of them. Selecting on the presence of a limits file would silently leave a new design unchecked, which is how this one went unnoticed; without a limits file the check now fails with 'missing metrics limits file' instead. Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…rite_bytes Signed-off-by: Debayan Bandyopadhyay <dbandyopadhyay@google.com>
odb: Modernize dbOStream and dbIStream with C++20 concepts and 64KB buffering
Signed-off-by: Peter Gadfort <gadfort@zeroasic.com>
grt: persist routing engine choice for cross-session repair_antennas
dpl: remove negotiation standalone padding check
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
…check Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Signed-off-by: Mike Inouye <mikeinouye@google.com>
Signed-off-by: Mike Inouye <mikeinouye@google.com>
…ayer grt/cugr: support pins above the max routing layer
rsz: Fix UB in performEarlySizingRound
pad: reorganize RDLRoute into per net to allow to better route continuity checking
gui: avoid call to sortItems since that triggers from bazel segfault
place_macro validated the core-containment rectangle using the instance's bounding box *before* the requested orientation was applied. The four right-angle orientations (R90, R270, MXR90, MYR90) swap width and height, so whenever the requested orientation differed from the current one in right-angle-ness the check used the wrong footprint: it rejected legal placements of rotated macros with MPL-0034, and symmetrically would accept ones that do not fit. Compute the width and height the macro will actually have once `orientation` is applied, and validate that instead. The comparison is made against the instance's current orientation rather than assuming R0, so a macro that has already been rotated is handled correctly too. The new test places a 100x400um macro at R90 in a 499.89x198.80um core, where the rotated footprint (400x100) fits and the unrotated one (100x400) does not. It also asserts the same origin is still rejected at R0, so the fix cannot silently over-correct. Signed-off-by: sfmth <sfmth0@gmail.com>
The new test was added to COMPULSORY_TESTS but not to the per-test
resource dict. src/mpl/test/BUILD does not glob the testcases/
directory -- the filegroup globs only `test_name + ".*"`, which picks up
the .tcl, .ok and .defok, so each test's LEF and DEF have to be listed
explicitly.
The Bazel target therefore resolved and ran without
testcases/place_macro_rotated.{lef,def}, while the CMake build passed
because it collects test inputs differently.
bazel query deps(//src/mpl/test:place_macro_rotated_resources) now lists
all six required inputs, and
bazel test //src/mpl/test:place_macro_rotated-tcl_test passes.
Signed-off-by: sfmth <sfmth0@gmail.com>Set the orientation before building the containment rectangle instead of computing the post-orientation footprint by hand, per review. getBBox() then already reports the footprint the macro will have, so the explicit width/height swap and its right-angle-ness comparison are unnecessary. setOrient() had to precede setLocation() in any case; it now precedes the core-containment check as well. Rename the test to place_macro_with_right_angle_rotation and reduce it to the single R90 placement. The negative case it also asserted is no longer sound: with setOrient() ahead of the check, a rejected placement leaves the instance rotated, so catching MPL-0034 and then writing the DEF would serialize the macro at the rejected orientation. Signed-off-by: sfmth <sfmth0@gmail.com>
Rename the test and all five of its files to place_macro_right_angle_rotation, so the CMake test name, the Bazel targets, the .tcl/.ok/.defok and the testcases LEF/DEF agree. The half-applied rename currently on the PR branch renamed only the Bazel entries, which fails the package load -- "Error in glob: glob pattern 'place_macro_with_right_angle_rotation.*' didn't match anything" -- and takes all of Jenkins down with it. Reword the comment above setOrient() and cut the test down to its header line, both verbatim as requested in review. Signed-off-by: sfmth <sfmth0@gmail.com>
mpl: check core containment against the post-orientation footprint
…w-metrics-check test: check flow metrics under bazel
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 freeto 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]