Repository navigation
Conversation
…t-private/upload-design-outcomes Report how each design's flow run ended in the metadata upload
What: - LOWEST_VT_ONLY=1 synthesizes, places and repairs timing with the lowest VT only: the cells in NON_LOWEST_VT_CELLS join the dont use cells from synthesis to the global route timing repair. - REPAIR_POWER=1 runs repair_power after the global route timing repair, and REPAIR_POWER_VT_BUDGET is passed as its -vt_budget. With LOWEST_VT_ONLY the power recovery may use every VT. - NON_LOWEST_VT_CELLS is a platform default: asap7 and gt2n derive it from the loaded VTs; a platform with a single VT leaves it empty and LOWEST_VT_ONLY changes nothing there. Why: a lowest-VT-only flow closes timing with the fastest cells and then recovers power with the higher VTs. It took a hand-written dont use list and a Tcl hook that lifts and restores it around the power recovery. How: - util.tcl: dont_use_cells returns DONT_USE_CELLS plus NON_LOWEST_VT_CELLS when LOWEST_VT_ONLY is set; the seven set_dont_use and ABC -dont_use sites use it. repair_power_helper lifts the higher VTs, runs repair_power and restores the list. - global_route.tcl calls repair_power_helper inside an incremental global route when REPAIR_POWER is set. - variables.yaml and FlowVariables.md list the four variables. - repair_power and the VT swap fixes it relies on are OpenROAD changes that are not in tools/OpenROAD yet; the knobs are off by default. Signed-off-by: Jaehyun Kim <jhkim@precisioninno.com>
There was a problem hiding this comment.
Code Review
This pull request introduces support for a lowest-VT-only flow (LOWEST_VT_ONLY) in OpenROAD-flow-scripts, allowing synthesis, placement, and timing repair using only the fastest VT cells, followed by power recovery (REPAIR_POWER) after global routing. It also updates the metadata upload script (uploadMetadata.py) and its tests to parse and report detailed flow outcomes (such as timeouts, crashes, and errors) from stage logs. All provided review comments were filtered out as they suggested one-off encoding cleanups, which is discouraged by the repository's style guide. Consequently, there is no additional feedback to provide.
🔍 QoR checkMetrics reflect the PR merge build — i.e. what will land on the target branch. Commit 62 design(s) checked — 0 with regression(s), 0 without a comparable baseline. |
Summary
LOWEST_VT_ONLY) and for power recovery withrepair_power(REPAIR_POWER,REPAIR_POWER_VT_BUDGET).Why this PR is needed
Problem
repair_poweris not called by the flow.Changes
DONT_USE_CELLSonlydont_use_cellsinutil.tcl:DONT_USE_CELLSplusNON_LOWEST_VT_CELLSwhenLOWEST_VT_ONLY=1; used by the sevenset_dont_useand ABC-dont_usesitesRECOVER_POWER(repair_timing -recover_power)REPAIR_POWER=1:repair_powerinside an incremental global route; withLOWEST_VT_ONLYthe higher VTs are lifted before it and restored afterREPAIR_POWER_VT_BUDGETis passed asrepair_power -vt_budgetNON_LOWEST_VT_CELLS ?=in asap7 (fromASAP7_USE_VT) and gt2n (fromGT2N_USE_VT); empty on single-VT platformsUI Changes
LOWEST_VT_ONLYNON_LOWEST_VT_CELLSto the dont use cells from synthesis to the global route timing repairNON_LOWEST_VT_CELLSREPAIR_POWERrepair_powerafter the global route timing repairREPAIR_POWER_VT_BUDGET-vt_budgetofrepair_power: pairs of cell patterns and a percentImpact
LOWEST_VT_ONLY=1changes nothing, sinceNON_LOWEST_VT_CELLSis empty.repair_powerand the VT swap fixes for dont use changes are OpenROAD changes that are not intools/OpenROADyet. This PR does not bump the submodule, soREPAIR_POWER = 1fails until they land. The default flow is not affected.Details
Flow
dont_use_cells.set_dont_use [dont_use_cells].repair_power_helperrunsreset_dont_use,set_dont_usewithDONT_USE_CELLSonly,repair_power -verbose [-setup_margin] [-vt_budget], then restores the full list.SETUP_SLACK_MARGINis passed when it is not 0.CTS_BUF_LISTis not changed by the knobs.Testing
repair_powerand the VT swap fixes.ASAP7_USE_VT = RVT LVT SLVT,LOWEST_VT_ONLY = 1,REPAIR_POWER = 1(local config, not in this PR): Completes; the synthesized netlist is SLVT only (304 cells, 0 RVT, 0 LVT);repair_powerbrings SLVT from 100% to 4.3% of the logic cells (budget 50%) and total power from 711 to 603 uW; final setup WS +5.4 ps, no slew or capacitance violation.REPAIR_POWER,LOWEST_VT_ONLY+REPAIR_POWER, plus a VT budget) give the same final metrics as the hand-written hook flow.tclfmt,tclint,yamlfixandgenerate-variables-docs.pypass.