Tasks/Systems & Hardware

EDA Standard-Cell Gate Sizing Optimization

Minimize leakage while satisfying timing, slew, and capacitance constraints on unseen netlists

Systems & HardwareEDAstandard-cell sizing
Background

Chip physical design automation has no settled way to close timing and signal-quality limits on a placed netlist without spending excess leakage power. The starting point is a solver that gives every combinational cell the strongest drive of its logic function, clearing violations at uniform cost. The work is to replace that uniform rule with sizing driven by each gate's own timing margin and load. Gates load one another, so each local choice shifts a neighbour's timing, and the result must survive unfamiliar designs.

instruction.mdthis is what the agent is given

Given a placed netlist described by CircuitOps IR tables, assign a library cell to every instance so as to minimize one score charging timing (TNS) and design-rule (slew / capacitance) violations, plus the leakage you spend clearing them. Your submission is re-run on sealed hidden cases; lower is better.

/app/methods/main/ ships a working but crude reference implementation. It is there to define the zero point and to show the plumbing, not to be the starting shape of your answer. You may delete all of it and design your method from scratch. The only fixed parts of a submission are the solve(...) contract and the .size output format below. What your method looks at, what it decides per instance, and how it searches are entirely yours to choose.

Hard Constraints

  • Submit an algorithm (solve), not precomputed answers. Do not key on case names.
  • Keep the exact signature solve(input_dir: str, output_path: str) -> None: read one case from input_dir, write a valid .size file to output_path.
  • Sequential cells and macros keep their original library cell. Only combinational cells may be resized.
  • A combinational cell may only move to a cell with the same func_id (logically equivalent, different drive strength or threshold), read from libcell_properties.csv.bz2.
  • List every instance exactly once, with no unknown instance or library-cell names. An illegal sizing scores nothing.
  • solve must be deterministic and case-name-independent.

What You Have

  • Visible cases at /app/data/<case>/ for each case in /app/data/manifest.json, each with IR_Tables/ (cell_properties, libcell_properties, pin_properties, net_properties and the graph edge tables, all *.csv.bz2) and design/ (compressed .v/.def/.sdc). The shared library is at /app/data/platform/ASAP7. Hidden cases are different designs, same format.
  • /app/methods/main/this directory is what gets graded. The shipped solver.py handles the contract and the .size format and applies a uniform strongest-drive upsize. Its score is the zero point: matching it earns nothing, and scoring worse earns nothing either. Rewrite it, throw it away and start over, or add any helper Python next to it (python3, numpy, pandas, scikit-learn available).
  • Your self-check surface (free, unlimited): python /app/selfcheck.py runs your current solver.py on the visible cases through the same legality gate and the same OpenROAD score the sealed grader uses, and prints the breakdown into 10*|TNS|, 20*slew, 20*cap and leakage. A case name limits it to that case (python /app/selfcheck.py <case>); the scoring pass takes minutes on the large cases.

What You Submit

/app/methods/main/solver.py must expose this exact signature. It and the .size format below are the only parts of a submission that are fixed:

def solve(input_dir: str, output_path: str) -> None:
    ...

The .size output is one line per instance:

<instance name> <library cell name>

There is no submit step and no per-attempt feedback. Work and self-check for as long as your run window allows, then leave your best solver.py in place; it is graded once at the end.

How It Is Judged

The grader copies methods/main/ into a clean sandbox, runs solve(...) on each hidden case, checks legality, then evaluates the sizing with a timing engine. The per-case score is

score = leakage_delta_uW + 10*|TNS_ns| + 20*slew_violation + 20*cap_violation

leakage_delta_uW is your leakage minus the original netlist's, so leaving a cell alone costs nothing. TNS is total negative slack; slew and cap are the summed amounts by which pins exceed their transition-time and load-capacitance limits. Each penalty term switches off entirely once its violation reaches zero, so driving a category to exactly 0 is worth more than driving it low. Scoring is per case against that case's own reference points, then averaged, so a case you ignore cannot be carried by one you optimize. Lower is better. Your solver's wall-clock time is not scored, though it is capped.

Rollouts

119 minWall clock
$57.92Spend
102.0MTokens
40Versions, 14 kept

On the visible set

0 300 600 900 1,200 1,500 0 10 20 30 40 Agent step OpenROAD score ↓ v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v14 v16 v21 v22 v31
keptrolled backsubmitted
  1. v2The agent replaced uniform sizing with a per-net load target driven by slack.186.21914 min · $3.77
  2. v3The agent pushed harder on drive and the extra load slowed things down.199.50914 min · $3.82
  3. v4The agent tested the gentle side of the same dial.191.59415 min · $4.23
  4. v5The agent interpolated between the two efforts.188.97816 min · $4.80
  5. v6The agent found hold buffers were being drafted into setup-critical duty.150.42519 min · $5.61
  6. v7The agent stopped choosing fractional-strength inverters on critical paths.147.22520 min · $6.02
  7. v8The agent banned the weakest variants from every critical equivalence class.142.420 min · $6.42
  8. v9The agent banned one more strength tier and upstream load ate the gain.155.55921 min · $6.81
  9. v0The agent started from the shipped uniform min-FO4 baseline.229.16421 min · $7.04
  10. v1The agent tried the fastest fixed-load cell everywhere and every term got worse.1,549.5722 min · $7.10
  11. v16The agent let each design's own criticality choose which policy runs.135.69223 min · $7.65
  12. v10The agent tried protecting nets with unresizable drivers by restoring their sinks.185.31326 min · $8.53
  13. v14The agent read drive strength straight off the library's naming instead of guessing.135.69233 min · $11.26
  14. v11The agent limited sink restoration to loose-timing designs, and weak sinks broke slew.16,793.41 (subset)36 min · $12.87
  15. v12The agent also switched off the fast-cell bans in the loose regime.15,383.5 (subset)38 min · $14.03
  16. v13The agent narrowed the protection down to the genuinely stressed nets.7,168.97 (subset)38 min · $14.11
  17. v15The agent tried the drive-suffix ranking on the loose-timing design too.569.128 (subset)40 min · $14.85
  18. v21The agent dropped one more marginal NAND/NOR strength from critical choices.134.95843 min · $16.49
  19. v17The agent let relaxed designs run their stages weaker to save load.257.852 (subset)44 min · $16.67
  20. v18The agent relaxed the stages further until they were simply too weak.392.288 (subset)44 min · $16.75
  21. v22The agent merged the best policy for each timing regime into one solver.134.95845 min · $17.02
  22. v19The agent eased off critical-path weighting where slack is plentiful.229.832 (subset)47 min · $18.92
  23. v20The agent applied smooth pressure instead of abruptly restoring stressed sinks.221.309 (subset)47 min · $19.00
  24. v23The agent nudged the relaxed-stage effort up a notch.250.387 (subset)52 min · $21.79
  25. v24The agent nudged it down a notch instead.242.288 (subset)54 min · $23.20
  26. v25The agent combined every winning knob at once and they interfered.261.143 (subset)54 min · $23.29
  27. v26The agent nearly switched off critical weighting and lost drive where it mattered.280.001 (subset)56 min · $24.20
  28. v27The agent switched critical weighting off entirely to close out the sweep.272.943 (subset)58 min · $25.29
  29. v28The agent raised the smooth pressure coefficient.247.66 (subset)59 min · $25.95
  30. v29The agent lowered it and confirmed the middle setting was right.359.317 (subset)61 min · $27.07
  31. v31The agent tried favouring late stages by arrival time, and upstream load won again.136.3264 min · $30.02
  32. v30The agent found the sweet spot of critical weighting for loose designs.193.286 (subset)65 min · $30.44
  33. v32The agent stepped the weight up slightly and it was materially worse.226.59 (subset)73 min · $35.55
  34. v33The agent stepped it up again and settled on the stable optimum.238.668 (subset)74 min · $36.76
  35. v34The agent gave macro-heavy designs their own regime and rescued the holdout.10,640.98 (subset)92 min · $47.69
  36. v35The agent weakened the fixed-heavy stages and timing suffered.13,997.42 (subset)92 min · $47.81
  37. v36The agent kept climbing the effort curve to map it.13,212.13 (subset)92 min · $48.08
  38. v37The agent pushed effort to the far end and fell below the baseline.14,625.93 (subset)95 min · $49.44
  39. v39The agent tried anchoring macro-heavy designs on the shipped baseline.15,291.46 (subset)104 min · $52.29
  40. v41The agent widened the hybrid the other way and every major term got worse.17,134.2 (subset)104 min · $52.41

On the hidden set

Original metricNormalised score
Starter20,244.420.00
Frontier-calibrated reference919.260.60
Upper01.00
This run (GPT-5.6-sol)13,882.430.1549
720 minWall clock
$42.32Spend
64.4MTokens
11Versions, 6 kept

On the visible set

125 150 175 200 225 0 2 5 8 10 Agent step OpenROAD score ↓ v0 v1 v3 v4 v5 v7 (measured) v8
keptrolled backsubmitted
  1. v0The agent inherited the uniform strongest-drive baseline sizing229.16426 min · $6.18
  2. v1The agent built an anchored NLDM timer with trust-region greedy sizingBuild a timer calibrated to the case's own IR tables and optimise arc delays instead of ranking cells by drive.166.21$13.60
  3. v1_badThe agent mis-snapshotted the reworked solver as v1_bad and deleted itmis-snapshot, deleted$21.01
  4. v2The agent modelled post-legalisation wire inflation and added DRV safety marginsThe evaluator re-places and re-routes after sizing, so charge every upsize for the wire capacitance it adds.model 130.2, no OpenROAD$28.42
  5. v3The agent replaced flat slack weighting with conserved flow criticalityWeight each cell by the endpoint delay it actually owns, not by how tight its own slack looks.132.39560 min · $35.83
  6. v4The agent rebuilt the missing clock-to-Q arcs and clamped bogus transitions119.41560 min · $35.83
  7. v5The agent fixed macro input-pin capacitance by falling back to IR tables119.41433 min · $29.44
  8. v6The agent recalibrated wire inflation and selected under a pessimistic slew limitmodel 110.0, c3 pending494 min · $32.33
  9. v7The agent added a quadrature sink-slew floor to the timing modelworse: 122.1 vs 119.4$37.32
  10. v7 (measured)The agent measured the quadrature slew model and lost on both cases122.11$37.32
  11. v8The agent reverted to the v5 configuration and added robustness fallbacks119.408$37.32

On the hidden set

Original metricNormalised score
Starter20,244.420.00
Frontier-calibrated reference919.260.60
Upper01.00
This run (Opus 5)743.6890.5498
388 minWall clock
$3.97Spend
19.0MTokens
2Versions, 1 kept

On the visible set

2.663B 2.670B 2.678B 2.685B 0 0 0 1 1 Agent step OpenROAD score ↓ v0 v1
keptrolled backsubmitted
  1. v0The agent inherited the uniform strongest-drive upsize baseline2,688,654,395.93
  2. v1The agent curated input capacitance on AOI/NOR/OAI cells and balanced buffer driveCut the load the heaviest gate families present to their drivers instead of driving every cell hardest.2,662,112,822.62

On the hidden set

Original metricNormalised score
Starter20,244.420.00
Frontier-calibrated reference919.260.60
Upper01.00
This run (Gemini 3.7 Flash)2,425,081,510.290.0000
720 minWall clock
$40.26Spend
111.2MTokens
20Versions, 14 kept

On the visible set

165 180 195 210 225 0 4 8 12 16 Agent step OpenROAD score ↓ v0 v1 v2 v4 v5 v6 v7 v7orig v8d v9 v10 v13 v15
keptrolled backsubmitted
  1. v0The agent inherited the uniform strongest-drive baseline sizing229.164$0.41
  2. v1The agent built a liberty-parsed NLDM timer with blame-weighted greedy sizingCharge each cell for the share of the critical-path delay it causes, then move the worst offenders first.185.551$4.72
  3. v2The agent switched to exact single-critical-edge blame instead of duplicated blame171.653$5.52
  4. v3The agent added a leakage phase and restarts from the strongest initc2 1042.7, c3 9641.5$8.30
  5. v4The agent started the search from the original sizing instead205.289$11.07
  6. v5The agent modelled flop and macro output slew as load-dependent169.456$13.85
  7. v6The agent fixed the transition-init bug and dropped the correction factorFlop and macro outputs are not fixed-transition sources; their slew grows with load, so the DRV gap was modelled away.160.32$16.63
  8. v7The agent added a load-aware wire-degradation term to the slew cost160.32$17.90
  9. v7origThe agent re-ran the wire-degradation solver from the original sizing169.744$19.16
  10. v8cThe agent switched the transition correction factor back onno number logged$20.43
  11. v8dThe agent discounted the first-order upstream benefit by 0.6158.389$21.69
  12. v8fThe agent froze transitions, which left the model blindno number logged$22.95
  13. v9The agent widened the search with bigger batches and five restarts164.31$24.22
  14. v9origThe agent re-ran the deep search from the original sizingno number logged$25.48
  15. v10The agent froze the deep-search config and added checkpoint writes164.314$26.75
  16. v13The agent added a broad-then-grind two-phase search scheduleSearch wide first, then grind with tiny batches; case3 fell 5793 to 4593 with no change to the model.164.568$31.07
  17. v14The agent added a slew guard rejecting slew-for-TNS trades in phase twocase2 36.18, c3 4592$35.23
  18. v15The agent combined the two-phase schedule with the slew guard164.6$39.40
  19. v16The agent lowered the wire slew derate to 0.04no number logged$39.83
  20. v17The agent forbade downsizing the drivers of long netsno number logged$39.83

On the hidden set

Original metricNormalised score
Starter20,244.420.00
Frontier-calibrated reference919.260.60
Upper01.00
This run (Kimi K3)10,384.030.2314
244 minWall clock
$21.94Spend
38.8MTokens
22Versions, 16 kept

On the visible set

250 500 750 1,000 1,250 0 5 10 15 20 Agent step OpenROAD score ↓ v0 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v13 v14 v15 v16 v17 v17/v18 v18 v20
keptrolled backsubmitted
  1. v0The agent inherited the uniform min-FO4 baseline sizing229.164
  2. v1The agent sized by slack and electrical effort, and legalization hunglegalization hung >7min
  3. v2The agent picked NLDM minimum-delay cells, keeping originals above 80ps slack1,259.95
  4. v3The agent added an NLDM boost on top of a min-FO4 floor727.664
  5. v4The agent made the boost driver-aware and never weaker than min-FO4Grow a cell only when its NLDM delay win beats the extra delay it adds to its own driver.181.995
  6. v5The agent added STA slack updates and a wider area cap187.092
  7. v6The agent recovered leakage on cells with comfortable slack180.959
  8. v7The agent added a slew-repair growth pass180.959
  9. v8The agent tightened the recovery threshold and added a load margin181.109
  10. v9The agent force-grew the original slew violators more aggressively181.224
  11. v10The agent dropped leakage recovery, which had blown case2 capacitance180.748
  12. v11The agent started from original sizes and upsized only on demand180.748
  13. v12The agent added a post-sizing capacitance legalization passno number logged
  14. v13The agent downsized the sinks of capacitance-overloaded driversCase2's cap violations sit on flop outputs; the driver is frozen, so shrink its load instead.180.414
  15. v14The agent looped the slew and capacitance repair passes to convergence180.414
  16. v15The agent restricted sink downsizing to flop sinks only180.414
  17. v16The agent removed the load margin from the capacitance legalize checks180.414
  18. v17The agent gated sink shrinking behind a per-design flop-overload testLet the design choose: shrink flop sinks only where many frozen drivers are badly overloaded.180.414
  19. v17/v18The agent kept the adaptive flop-cap rule and re-snapshotted it180.414
  20. v18The agent cleaned unused constants and refreshed the solver docstring180.414
  21. v19The agent narrowed the shrink so case3 matched the v10 sizingno number logged
  22. v20The agent dropped combo upsizing from the capacitance pass180.748

On the hidden set

Original metricNormalised score
Starter20,244.420.00
Frontier-calibrated reference919.260.60
Upper01.00
This run (Grok 4.6)8,083.330.2224
485 minWall clock
$8.23Spend
76.7MTokens
2Versions, 1 kept

Only one comparable self-check score, so no curve — the versions below list what each one changed.

  1. v1The agent inherited the shipped strongest-drive baseline sizing229.16412 min · $0.28
  2. v2The agent built a calibrated delta-anchored NLDM timer with vectorized propagationidentity match exact131 min · $2.52

On the hidden set

Original metricNormalised score
Starter20,244.420.00
Frontier-calibrated reference919.260.60
Upper01.00
This run (DeepSeek V4 Pro)21,878.580.0243
177 minWall clock
$40.37Spend
145.8MTokens
14Versions, 6 kept

On the visible set

0.2B 0.4B 0.6B 0.8B 1.0B 0 3 6 9 12 Agent step OpenROAD score ↓ v0 v1 v4/v5 v5 v7 v8 v12 g25 g55
keptrolled backsubmitted
  1. v0The agent inherited the uniform strongest-drive upsize baseline245,138,650.934 min · $2.10
  2. v1The agent measured identity sizing as a diagnostic reference point264,252,597.734 min · $2.10
  3. v2The agent picked the highest max-capacitance variant per function, and OpenROAD crashedcrashed, STA-155360 min · $6.01
  4. v3The agent restricted swaps to variants with identical timing-arc multisetskilled, 53min legalize$8.87
  5. v4/v5The agent added gain-per-area greedy selection under a row-area budget997,299,672$11.74
  6. v5The agent probed net capacitance and traced the loss to placement spread997,299,672$14.61
  7. v6The agent capped area growth at 40 percent and skipped clock cellsoracle 225.6M, best111 min · $17.48
  8. v7The agent added an eval-world slew term at full weight227,225,291$19.71
  9. v8The agent lowered the slew term weight to 0.35227,306,328$21.94
  10. v9The agent added an in-solve refinement loop verified by the oraclerefine worse, 226.2M$24.16
  11. v10The agent restructured the refine loop into shrinking batches with rejection memory225.36M, -0.11%144 min · $26.39
  12. v12The agent shipped phase0 plus the oracle-verified refinement with safe fallbacks225,347,411155 min · $32.46
  13. g25The agent tried a 25 percent area-growth budget225,734,519$36.41
  14. g55The agent tried a 55 percent area-growth budget243,725,975$36.41

On the hidden set

Original metricNormalised score
Starter20,244.420.00
Frontier-calibrated reference919.260.60
Upper01.00
This run (Qwen3.8 Max)2,355,266,227.360.0000
372 minWall clock
$12.82Spend
44.1MTokens
7Versions, 6 kept

On the visible set

217.5 225.0 232.5 240.0 247.5 0 2 3 4 6 Agent step OpenROAD score ↓ v0 v1 v2 v4 v5 v6
keptrolled backsubmitted
  1. v0The agent inherited the uniform strongest-drive baseline sizing245.14$1.72
  2. v1The agent raised driver max-capacitance limits via a per-row Lagrangian knapsack214.0883 min · $3.43
  3. v2The agent adapted lambda to row fill and fixed macro-polluted row capacity214.81142 min · $6.32
  4. v3The agent capped each cell's growth to its own placement slot217.5M, sweep flat$7.89
  5. v4The agent fixed lambda at 0.5 alongside the slot cap216.9275 min · $9.46
  6. v5The agent split the width price in two and added a macro guard214.54326 min · $11.23
  7. v6The agent tightened the growth slack to four widths for safety216.18370 min · $12.57

On the hidden set

Original metricNormalised score
Starter20,244.420.00
Frontier-calibrated reference919.260.60
Upper01.00
This run (GLM 5.3)2,324,409,394.140.0000
219 minWall clock
$14.60Spend
23.3MTokens
26Versions, 12 kept

On the visible set

217.5 225.0 232.5 240.0 247.5 0 8 15 22 Agent step OpenROAD score ↓ v0 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24
keptrolled backsubmitted
  1. v0The agent inherited the strongest-FO4-drive baseline sizing229.16413 min · $0.66
  2. v1The agent ranked cells by fixed-load delay, and evaluation crawledinterrupted at 9 min24 min · $1.45
  3. v2The agent boosted only cells below -500ps original slack218.88828 min · $2.04
  4. v3The agent loosened the critical-boost threshold to -475ps216.22229 min · $2.30
  5. v4The agent loosened the critical-boost threshold further to -450ps235.35730 min · $2.54
  6. v5The agent tried an intermediate -465ps threshold219.65231 min · $2.74
  7. v6The agent tried a stricter -485ps threshold220.60131 min · $2.94
  8. v7The agent added a fanout and load override picking max input cap221.91341 min · $3.45
  9. v8The agent capped the critical boost to the worst 40 percent of cells216.1567 min · $4.30
  10. v9The agent rolled back low-risk cells with comfortable positive slack221.30994 min · $5.27
  11. v10The agent lowered the rollback slack threshold to +50ps250.984102 min · $5.79
  12. v11The agent raised the rollback slack threshold to +150ps217.089111 min · $6.29
  13. v12The agent tried a +125ps rollback slack threshold222.857112 min · $6.55
  14. v13The agent added a transition-ratio safety check to the rollback216.509121 min · $7.12
  15. v14The agent relaxed the rollback transition safety to 0.6216.509128 min · $7.59
  16. v15The agent relaxed the rollback transition safety to 0.7217.373137 min · $8.18
  17. v16The agent relaxed the transition safety to 0.8 and cap violations returned219.136145 min · $8.65
  18. v17The agent tried a 0.75 transition-safety midpoint216.917153 min · $9.13
  19. v18The agent narrowed the transition safety to 0.72216.63161 min · $9.63
  20. v19The agent extended rollback to low-load cells just above the ratio217.202170 min · $10.29
  21. v20The agent tightened the low-load extension to fanout three217.202179 min · $10.88
  22. v21The agent tightened the low-load extension to fanout two217.202188 min · $11.46
  23. v22The agent widened the guarded low-load rollback range to 0.8216.623197 min · $12.16
  24. v23The agent widened the guarded rollback range to 0.85217.451207 min · $12.94
  25. v24The agent gated positive-slack rollback on the design's percentile slack216.15218 min · $14.17
  26. finalThe agent submitted v24 after checking legality on all three casescase3 never completed$14.39

On the hidden set

Original metricNormalised score
Starter20,244.420.00
Frontier-calibrated reference919.260.60
Upper01.00
This run (GPT-5.5)43,912.870.0000

Leaderboard

Where each run landed on the sealed held-out set, on the same normalised-score scale as the anchors above.

0 0.3 0.6 1.0 1 Opus 5 claude code · max 0.550 2 Kimi K3 kimi cli · max 0.231 3 Grok 4.6 grok · xhigh 0.222 4 GPT-5.6-sol codex · max 0.155 5 DeepSeek V4 Pro claude code · max 0.024 6 Gemini 3.7 Flash antigravity · high 0.000 7 Qwen3.8 Max qwen coder · xhigh 0.000 8 GLM 5.3 claude code · max 0.000 9 GPT-5.5 codex · xhigh 0.000