Golf scores on ASAP7, a predictive 7 nm library: never fabricated, and like sky130's score it counts no wires. sky130, a real 130 nm process, is the default. How ASAP7 is scored, and its quirks.

Tasks / _example / record

Record 341bdd371efb

reference: not an entryreference: not an entry scored at N = 16

Recorded by the maintainers from the proved reference band_lp: its design and its proof band_lp.lean (161 code lines). The same circuit, with local parameters in the header (the port widths) and in the body. The record shows that reference passing the whole checker. It is shown with parshown with par, not a player's entry, and it is not ranked among the submissions (proved references).

Area

100.10µm²

100.0960 µm² exactly

vs par
±0% equalband · 100.10 µm²
on this page
1st of 2 designs (tied with 1)
cells
16
flops
0
repair
0 buffers, 0 tie cells
GE
21.328 extra
A1′
100.10 µm² research

Performance · time

280ps

the delay: the latest output arrival, y[0] falling

vs par
±0% equalband · 280 ps
on this page
1st of 2 designs (tied with 1)
Fmax-eq.
3571.4 MHz derived
critical path
1 cell
unit depth
1 extra
A1′
194 ps research

Score · area × time

28.03µm²·ns

100.0960 µm² × 280 ps

vs par
±0% equalband · 28.03 µm²·ns
on this page
1st of 2 designs (tied with 1)
board
a proved reference, shown with par: never ranked
Pareto
on the front

No other player has a ranked record on _example yet: the beats and matches lines come with the first one.

how these numbers are measured and compared

Area: sky130 A0′, the repaired netlist. Time: NLDM, inputs driven by buf_8, 10 fF per output bit, no wires.

Area, time and score are ranked (the leaderboard orders by the score); a number tagged extra, derived or research is shown, never ranked. Fmax-equivalent = 10⁶ / time in ps, for comparison with sites that quote Fmax.

The field is the ranked records of _example's other players at this revision (0 players, 0 records), never the references, the baselines or a rejected design; advisory, recomputed at every build, never stored in a record and never used by the ranking.

“On this page” and “Pareto” compare with the 2 designs of the area-time plot (2 references): not a ranking.

Area

1.400µm²

1.39968 µm² exactly

vs par
±0% equalband · 1.400 µm²
on this page
1st of 3 designs (tied with 2)
cells
16
flops
0
repair
0 buffers, 0 tie cells
GE
21.328 extra

Performance · time

56ps

the delay: the latest output arrival

vs par
±0% equalband · 56 ps
on this page
1st of 3 designs (tied with 2)
Fmax-eq.
17857.1 MHz derived
unit depth
1 extra

Score · area × time

0.0784µm²·ns

1.39968 µm² × 56 ps

vs par
±0% equalband · 0.0784 µm²·ns
on this page
1st of 3 designs (tied with 2)
board
a proved reference, shown with par: never ranked
Pareto
on the front

No other player has a ranked record on _example yet: the beats and matches lines come with the first one.

how these numbers are measured and compared

Area: ASAP7 A0′ (asap7_a0_v1), the same scored netlist, each gate its least-area ASAP7 build, repaired by buffering. Time: NLDM, inputs driven by BUFx8, 2.5 fF per output bit, no wires; a table read below its grid is read at its floor. ASAP7: a predictive 7 nm library, never fabricated; no wires, like sky130's score (how ASAP7 is scored, and its quirks).

Area, time and score order this view's board (by the score); the records' ranked score is sky130's, the default view; a number tagged extra, derived or research is shown, never ranked. Fmax-equivalent = 10⁶ / time in ps, for comparison with sites that quote Fmax.

The field is the ranked records of _example's other players at this revision (0 players, 0 records), never the references, the baselines or a rejected design; advisory, recomputed at every build, never stored in a record and never used by the ranking.

“On this page” and “Pareto” compare with the 3 designs of the area-time plot (3 references): not a ranking.

The sources

band_lp.svdownload
// svGolf task `_example` -- a second reference solution, with localparams:
// the header localparam `W` sizes the ports, and the body localparam `MSB` is
// constant arithmetic (allowed under the task's arithmetic banlist). The
// checker compares only the overridable parameters (`N`) with the task.
module band #(parameter int N = 4, localparam int W = N) (
  input  logic [W-1:0] a,
  input  logic [W-1:0] b,
  output logic [W-1:0] y
);
  localparam int MSB = W - 1;
  assign y = a & b;
endmodule
band_lp.lean (161 code lines)
import Submission.Design
import SvGolf.Comb
import LeanModels.Sv.Gen2
import LeanModels.Sv.Hier2Gen

/-!
# Reference solution for task `_example`, LOCALPARAM variant: the proof

This is a submission file like any player's `Solution.lean`. The checker
generates the module `Submission.Design`, which loads the player's envelope as
`Submission.design` and names the statement to prove `Submission.Goal`
(`SvGolf.Tasks.Example.Statement Submission.design.sem`). This file proves

    theorem Submission.solution : Submission.Goal

for EVERY `N` of the task's range (`1 ≤ N < 2^31`), for `reference/band_lp.sv`: the design of `band.lean`
(`assign y = a & b;`) with a header localparam `W = N` that sizes the ports
and a body localparam `MSB = W - 1`. The only difference from `band.lean` is
the parameter environment (`bandScope`): the localparams are bound after `N`,
each to its value at symbolic `N`, and the port widths read `W`. It is a
regression for the checker (localparams are not task parameters).

Route (the `Examples/system-verilog/ripple_add` recipe, copied here because
svGolf does not import `Examples`):

1. **The design at symbolic `N`** (`band_sem_processes`, `band_sem_decls`):
   `instantiate2` split into its stages by `PDesign.instantiate2_of_ok`, the
   one-driver guard of `name.sem` discharged by `driversOk` on the (closed)
   process list.
2. **The comb profile and acyclicity** (`band_comb`, `band_acyclic`): one
   whole-signal assign; it reads `a`, `b`, which no process writes.
3. **The settled state** (`band_settled`): in a solution of the equations,
   known `a b : BitVec N` give `y = a &&& b` (`CombEqs.lookup_ident` and the
   `Known2` calculus).
4. **The statement** (`solution`): `CombTask.satisfiedAt_of_comb`
   (`SvGolf/Comb.lean`) reduces it to the interface and step 3.
-/

namespace Submission

open LeanModels.Sv SvGolf

/-! ## 1. The design at symbolic `N` -/

/-- The one process: `assign y = a & b;`. -/
def andProc : Process2 := .assign (.ident "y") (.binary .and (.ident "a") (.ident "b"))

/-- The instantiated declarations at raw port width `w` (`|N - 1| + 1`). -/
def bandDecls (w : Nat) : List Decl :=
  [{ name := "a", width := w, isInput := true },
   { name := "b", width := w, isInput := true },
   { name := "y", width := w, isOutput := true }]

/-- Every declaration is 1-D: element width 1. -/
def bandElems : List (String × Nat) := [("a", 1), ("b", 1), ("y", 1)]

/-- The declaration scope: `N`, then the localparams `W = N` and
`MSB = W - 1` (each binding is consed on), all declared `int` (32 bits). -/
def bandScope (N : Int) : IEnv :=
  { vals := [("MSB", N - 1), ("W", N), ("N", N)],
    pwidths := [("N", 32), ("W", 32), ("MSB", 32)] }

/-- The parameter environment (scope plus packed geometry). -/
def bandEnv (N : Int) : IEnv :=
  { bandScope N with dims := dimTable (bandScope N) design.pdesign.decls }

theorem band_paramEnv (N : Int) : design.pdesign.paramEnv2 [N] = .ok (bandEnv N) := rfl

theorem band_buildDecls (N : Int) :
    buildDecls (bandEnv N) design.pdesign.decls = .ok (bandDecls ((N - 1).natAbs + 1)) := by
  simp [design.pdesign, buildDecls, instDecl, PType.width_packed_cons, PDim.width, evalInt,
    bandEnv, bandScope, List.lookup, bandDecls, Gen2.except_ok_bind]

theorem band_buildElems (N : Int) :
    buildElems (bandEnv N) design.pdesign.decls = .ok bandElems := by
  simp [design.pdesign, buildElems, PType.width_packed_cons, PDim.width, evalInt, bandEnv,
    bandScope, List.lookup, bandElems, Gen2.except_ok_bind]

theorem band_static (N : Nat) (w : Nat) :
    design.pdesign.processes.map
        (instProcess2 ((bandEnv N).withDecls (bandDecls w)) bandElems) = [andProc] := by
  sv2_inst_simp [design.pdesign, bandEnv, bandScope, bandDecls, bandElems, andProc, dimTable,
    dimTableStep, PType.width_packed_cons, PDim.width]

theorem band_instantiate2 (N : Nat) :
    design.pdesign.instantiate2 [(N : Int)] (PDesign.surfaceFuel [(N : Int)]) =
      .ok (design.pdesign.assemble2 (bandEnv N) (bandDecls (((N : Int) - 1).natAbs + 1))
        bandElems []) :=
  PDesign.instantiate2_of_ok rfl (band_paramEnv N) (band_buildDecls N) (band_buildElems N)
    (by rw [show design.pdesign.generates = [] from rfl, expandList2_nil])

theorem band_processes (N : Nat) :
    (design.pdesign.instantiateD2 [(N : Int)]).processes.toList = [andProc] := by
  rw [PDesign.instantiateD2_of_ok (band_instantiate2 N), PDesign.assemble2_processes, band_static]
  rfl

/-- The one-driver rule: closed data, decided. -/
theorem band_driversOk :
    driversOk design.pdesign.declNames design.pdesign.inputNames [andProc] = true := by
  decide

/-- `design.sem N` is the instantiated design (its one-driver guard passes). -/
theorem band_sem_eq (N : Nat) : design.sem N = design.pdesign.instantiateD2 [(N : Int)] := by
  show design.pdesign.instantiateGD2 [(N : Int)] = _
  apply PDesign.instantiateGD2_of_driversOk
  rw [band_processes]
  exact band_driversOk

theorem band_sem_processes (N : Nat) : (design.sem N).processes.toList = [andProc] := by
  rw [band_sem_eq]
  exact band_processes N

theorem band_sem_decls (N : Nat) (hN : 1 ≤ N) : (design.sem N).decls.toList = bandDecls N := by
  rw [band_sem_eq, PDesign.instantiateD2_of_ok (band_instantiate2 N), PDesign.assemble2_decls]
  have hw : ((N : Int) - 1).natAbs + 1 = N := by omega
  rw [hw]

/-! ## 2. Comb profile and acyclicity -/

theorem band_proc {N j : Nat} {p : Process2} :
    (design.sem N).processes[j]? = some p ↔ j = 0 ∧ p = andProc := by
  rw [← Array.getElem?_toList, band_sem_processes]
  match j with
  | 0 => simp [eq_comm]
  | _ + 1 => simp

theorem band_declWidth_y {N : Nat} (hN : 1 ≤ N) : (design.sem N).declWidth "y" = some N := by
  simp [Design2.declWidth, band_sem_decls N hN, bandDecls]

theorem band_writes {N : Nat} (hN : 1 ≤ N) {j : Nat} {wn : Win} :
    (design.sem N).Writes j wn ↔ j = 0 ∧ wn = ("y", 0, N) := by
  constructor
  · rintro ⟨t, e, hp, hw⟩
    obtain ⟨rfl, h⟩ := band_proc.mp hp
    simp only [andProc, Process2.assign.injEq] at h
    obtain ⟨rfl, rfl⟩ := h
    simp [Lhs2.wins, Lhs2.windows?, Lhs2.window?, band_declWidth_y hN] at hw
    exact ⟨rfl, hw⟩
  · rintro ⟨rfl, rfl⟩
    exact ⟨_, _, band_proc.mpr ⟨rfl, rfl⟩,
      by simp [Lhs2.wins, Lhs2.windows?, Lhs2.window?, band_declWidth_y hN]⟩

theorem band_comb {N : Nat} (hN : 1 ≤ N) : CombDesign (design.sem N) where
  nodup := by
    rw [band_sem_decls N hN]
    simp [bandDecls]
  assign := by
    intro j p hp
    obtain ⟨rfl, rfl⟩ := band_proc.mp hp
    exact ⟨_, _, [("y", 0, N)], rfl, by
      simp [Lhs2.windows?, Lhs2.window?, band_declWidth_y hN]⟩
  inWidth := by
    intro j n lo w h
    obtain ⟨-, h⟩ := (band_writes hN).mp h
    simp only [Prod.mk.injEq] at h
    obtain ⟨rfl, rfl, rfl⟩ := h
    exact ⟨_, band_declWidth_y hN, by omega⟩
  notInput := by
    rintro n ⟨j, lo, w, h⟩
    obtain ⟨-, h⟩ := (band_writes hN).mp h
    simp only [Prod.mk.injEq] at h
    obtain ⟨rfl, -, -⟩ := h
    simp [Design2.inputNames, band_sem_decls N hN, bandDecls]
  disjoint := by
    intro i j wi wj hij hi hj
    obtain ⟨rfl, -⟩ := (band_writes hN).mp hi
    obtain ⟨rfl, -⟩ := (band_writes hN).mp hj
    exact absurd rfl hij
  selfDisjoint := by
    intro j t e hp
    obtain ⟨-, h⟩ := band_proc.mp hp
    simp only [andProc, Process2.assign.injEq] at h
    obtain ⟨rfl, -⟩ := h
    exact Lhs2.wins_pairwise_of_leaf (fun _ h => by cases h) _
  rhsFree := by
    intro j t e hp
    obtain ⟨-, h⟩ := band_proc.mp hp
    simp only [andProc, Process2.assign.injEq] at h
    obtain ⟨-, rfl⟩ := h
    rfl
  rhsDeclared := by
    intro j t e hp
    obtain ⟨-, h⟩ := band_proc.mp hp
    simp only [andProc, Process2.assign.injEq] at h
    obtain ⟨-, rfl⟩ := h
    simp [Expr2.idents, band_sem_decls N hN, bandDecls]
  initWidth := by
    intro n _ dc hdc _ v hv
    rw [band_sem_decls N hN] at hdc
    simp [bandDecls] at hdc
    rcases hdc with rfl | rfl | rfl <;> cases hv
  inFourState := by
    intro dc hdc _
    rw [band_sem_decls N hN] at hdc
    simp [bandDecls] at hdc
    rcases hdc with rfl | rfl | rfl <;> rfl

/-- Rank 0 for the one process: it reads `a` and `b`, which nothing writes. -/
theorem band_acyclic {N : Nat} (hN : 1 ≤ N) : Acyclic (design.sem N) := by
  refine ⟨fun _ => 0, ?_⟩
  intro i j ti ei tj ej wj hi hj hw hex
  obtain ⟨rfl, h⟩ := band_proc.mp hi
  simp only [andProc, Process2.assign.injEq] at h
  obtain ⟨-, rfl⟩ := h
  obtain ⟨-, rfl⟩ := (band_writes hN).mp ⟨tj, ej, hj, hw⟩
  simp [Expr2.reads, ReadWin.overlaps] at hex

/-! ## 3. The settled state -/

/-- In every shaped solution of the design's equations, known `a`, `b` give
`y = a &&& b`. -/
theorem band_settled {N : Nat} (hN : 1 ≤ N) {st : SvState} (heqs : CombEqs (design.sem N) st)
    (hs : StateShape (design.sem N) st) {x z : BitVec N}
    (ha : SvState.lookup st "a" = some (LVec.ofBitVec x))
    (hb : SvState.lookup st "b" = some (LVec.ofBitVec z)) :
    SvState.lookup st "y" = some (LVec.ofBitVec (x &&& z)) := by
  have hy := CombEqs.lookup_ident (band_comb hN) heqs hs (band_proc.mpr ⟨rfl, rfl⟩)
    (evalPure2_and_ofBitVec (evalPure2_ident_ofBitVec ha) (evalPure2_ident_ofBitVec hb))
    (band_declWidth_y hN)
  rw [LVec.resizeU_ofBitVec, BitVec.setWidth_eq] at hy
  exact hy

/-! ## 4. The statement -/

theorem band_interface (N : Nat) (hN : 1 ≤ N) :
    SvGolf.Tasks.Example.task.Interface N (design.sem N) := by
  simp [CombTask.Interface, inputPorts, outputPorts, band_sem_decls N hN, bandDecls,
    SvGolf.Tasks.Example.task]

/-- **The reference solution**: the `_example` statement, for every `N` in range (`1 ≤ N < 2^31`). -/
theorem solution : Goal := by
  intro N hN
  have hN' : 1 ≤ N := hN.1
  refine CombTask.satisfiedAt_of_comb (band_interface N hN') (band_comb hN') (band_acyclic hN') ?_
  intro st heqs hs v hv
  obtain ⟨x, z, ⟨⟩⟩ := v
  simp only [SvGolf.Tasks.Example.task, HoldAll_cons, HoldAll_nil, and_true] at hv ⊢
  exact band_settled hN' heqs hs hv.1 hv.2

end Submission

The netlist

The netlist card shows the sky130 weighing (its cells, its critical path): the ASAP7 view changes the overview above, not this card.

Schematic

drawn at N = 4

Drawn at N = 4, a display instance; scored at N = 16. Only this drawing and the notes under it are at the smaller size: the critical path, the cells and every other number on this page are the scored netlist's.

_0_ · sky130_fd_sc_hd__and2_1 and2_1 _1_ · sky130_fd_sc_hd__and2_1 and2_1 _2_ · sky130_fd_sc_hd__and2_1 and2_1 _3_ · sky130_fd_sc_hd__and2_1 and2_1 a b y 0 1 2 3 0 1 2 3 0 1 2 3

It is the same design through the same pinned flow at a smaller size (ppa.py --param), so that what it does can be seen: 4 cells here, 16 at the scoring point. The critical path at N = 4 (1 cell, ending at y[0] falling, 280 ps there) is in the accent colour. Drawn by netlistsvg with svGolf's sky130 skin (derived from netlistsvg's default skin, as the drawing is: MIT licence, Copyright (c) 2016 Neil Turley, the notice): one symbol per cell function, the cell above it, the instance on hover; nor2b and nand2b are drawn with the bubble on their inverted input. The cells of the path are listed under Critical path, each a link to the cell here.

The netlist at N = 4: 4 cells, 4 and2_1. There (measured, not ranked): 25.02 µm², 280 ps. Open the drawing on its own (SVG, 5.0 KB) to pan and zoom it with the browser's own controls.

Critical path

at N = 16 · scored

The path the ranked delay ends on, at the scoring point N = 16: 2 nets, 1 cell, to y[0] falling at 280 ps. Each row is a net of the repaired netlist with the arrival and the transition the STA computed there (NLDM tables, the larger transition carried; no wires). The first row is an input: its arrival is the input driver's own delay (buf_8 fed by a 50 ps ramp). From ppa.py --path (critical_path_timing); the instance names are the scored netlist's, not the schematic's (drawn at a smaller size).

In the schematic, drawn at N = 4, the critical path is 1 cell to y[0] falling (280 ps there); each cell is a link to it in the drawing:

  1. a[0]
  2. _0_ and2_1
  3. y[0]
#netedgedriven bycellarrival (ps)transition (ps)stage (ps)
0a[0]fallinput port–108.318.4
1y[0]fall_13_and2_1279.666.6171.3

Cells

at N = 16 · scored

cellcountµm² eachµm² in allshare
and2_1166.2560100.0960100.0%
total16100.0960

Repair (buffer_trees_v1): 0 buffers on 0 nets, 0 tie cells, 1 weighing round; nothing is resized.

Legality: worst load 0.063 × max_capacitance, worst transition 0.074 × max_transition; 0 timing-table reads outside the characterized grid.

the gate mix of the extra GE column (the pinned GE table, score/ge.json)
cellcountGE eachGE total
AND161.33321.328
total1621.328

The record

task
_example
player
svgolf-reference
assisted by
Claude (Anthropic)
submitted
2026-11-07
notes
reference solution
scoring point
N = 16
design
band_lp.sv sha256 66eb3d7b69e6fac93ee63e2b58a1debb3bc7543c877a3b7a382562b8bd463ab5
proof
band_lp.lean sha256 ddea8152fa537e08f7df21650463bef8730297928dbe9031bf4df69990a90a01: the proof of the reference band_lp (band_lp.lean, 161 code lines)
canonical text
sha256 67411e721ce5af8ecfd978034bd55fd4b2c06778fed5d680fd0dccb7355e6e6d
record hash
341bdd371efbb80098f44dd696ae95ededdb85835b7e65f99bf455725cbde9ec
downloads
341bdd371efb.sv 341bdd371efb.lean 341bdd371efb.json

The proof

code lines
161
build time
10.01 s
axioms
Classical.choice, Quot.sound, propext
tactics seen
decide, omega, simp
imports
Submission.Design, SvGolf.Comb, LeanModels.Sv.Gen2, LeanModels.Sv.Hier2Gen

Checker and flow

Checked under the pinned flow of this site's boards.

Yosys
Yosys 0.53 (git sha1 53c22ab7c0ced80861c7536c5dae682c30fb5834, clang++ 17.0.0 -fPIC -O3)
Verilator
Verilator 5.042 2025-11-02 rev UNKNOWN.REV
Lean toolchain
leanprover/lean4:v4.33.0-rc1
svGolf revision
d1f3cae6f01a088007a57b31ff8baa6b839d6f74
lean-surfaces revision
d1f3cae6f01a088007a57b31ff8baa6b839d6f74
canonicalization script
bbd11227d45dc1365f27597fd45c565fe721ba2648450588fc4fd983d00b367b
scoring script
ea58219d8ef14c3bad265218ee266ccdb709ac9d4dc5258edc34d51ee83a0445
GE table
6a29196a3f4b58241f4c9af650c9141e4632b737214d563a11ba142a725c4bea
extractor
4930696021c588c75dc890034c534c95560ad9a28a4955b87d1f8d68b5edbc0c
canonical RTLIL
08912da22756e668b8774aaddd737194b0151352c218ecf464f800b86c1cace7
the checker's files (sha256)
filesha256
check.pye708084f72f955b0ae1aaabe469dba3eacc5a91484a1ed81bcc073b60f3c0b6d
check/Comparator.lean3145eb578ca71e452eff05a398e8ad04673e6c72ca5343b234cb22e2cefe65a6
check/SvEval.leanfb51d72510b515460866c2798aad3c6f55295536e627b92854c3580af215bb91
check/clocked_rules.py73856a45905724544247ad29042bdc2f1778271ec07b15cdb3a5f214685165c1
check/envelope.py076db01a9791bcc25ee84e9b0033604a4b675f00b212eab0c864078e6a4748b7
check/postsynth.py4e1ee2110c63f24e033dd689c929ea686ddf10f4db23b9057c6fb711394c7558
lakefile.tomlf35a88404367d22906effc14d644aac9a9cad47dfd3b704ea8fec88acfaf9c4d
lean-toolchain62c2d9c0fc1ec4c67e151c11eff41ca004ef38e179cf9476c230406e6defedef
score/banlist.pyf18c14c23a14d55db63e202f42cc424dc84c1dd1c337f132ad60859dc9d5d33a
score/canon.ysbbd11227d45dc1365f27597fd45c565fe721ba2648450588fc4fd983d00b367b
score/fourstate.py95332451ae3754226fb87b46027385b46a91121e7eb9ae25b302bce756d90475
score/ge.json6a29196a3f4b58241f4c9af650c9141e4632b737214d563a11ba142a725c4bea
score/ge_seq.json54b93ca63888009d0671c8978e8ab7bf4fb8ce303bc78d3b4e1f83d946cc3201
score/ppa.py912031912c3e3f6790725161753e95415df34846bd8c27dde3eb707747ddbcbe
score/ppa_mapped.ys93547b343dbac135737e98516b1004a780e1cf2f579e1bd7fed82c908c6d4125
score/ppa_mapped_pins.json4b8688ba3f4d67681658e5944afe878592adf588cd416a8b47597ebe06deb045
score/ppa_pins.jsond66a6086a37a97f5985266057051979fb6a8a3c557d3ef9c42acc1b5e41502d8
score/score.py71d2e3b82f8813ec64a58f0a46909ca23dfab377db44eda6f294b713f45ae781
score/srcgate.py11952f61058051c9e8de91a801b672d07e66a29308e978156c04ffd9f0dbef45
score/svgolf.ysea58219d8ef14c3bad265218ee266ccdb709ac9d4dc5258edc34d51ee83a0445
score/svgolf_seq.ysc3874dbfc85921a87df6eacdfc6b2c9a0e2b34edd5738951e0d8bdb51f4558b2

Post-synthesis check

ls-sv's reading of the design and the scored netlist, simulated on the same vectors, agreed on every one. The vectors are a sample of the inputs: a guard against the two tools disagreeing, not a proof.

mode
full
vectors
4130
full set
4130
mismatches
0
point
N=16
seed
4b4d79bfff2efc704be88d35af88434879fb12249c1edb1ca8cff19664cf51f3
salted
no

Area against time

µm² × ps · lower left is better · ASAP7
_example: this design's sky130 area against time, among the task's designs2 designs by sky130 area (µm²) (x) and time (ps) (y), this one ringed; lower left is better. The table under the chart lists the same numbers.2702802909597.5100102.5105sky130 area (µm²)time (ps) · lower is betterpar's score: area × time = 28.03 µm²·nsthe Pareto front of the entries2 designs at this point · band · this design2 designs at this point · band · this designthis design · par's numbers
_example: this design's sky130 area against time, among the task's designs2 designs by sky130 area (µm²) (x) and time (ps) (y), this one ringed; lower left is better. The table under the chart lists the same numbers.27028029095100105sky130 area (µm²)time (ps) · lower is betterpar's score: area × time = 28.03 µm²·nsthe Pareto front of the entries2 designs at this point · band · this design2 designs at this point · band · this designthis design · par's numbers
  • proved reference
  • the Pareto front of the entries
  • this design
  • par's score: area × time = 28.03 µm²·ns
sky130 area (x) against the ranked time (y); lower left is better on both. The step line is the Pareto front of the entries (the proved references and the players' ranked records); a design under par's score curve has a better score than par. Baselines are drawn for scale: scored, never proved. Every design is in view.
the designs as numbers, by score
designkindarea (µm²)time (ps)score (µm²·ns)
band proved reference · par100.1028028.03
band_lp · this designproved reference100.1028028.03
_example: this design's ASAP7 area against time, among the task's designs3 designs by ASAP7 area (µm²) (x) and time (ps) (y), this one ringed; lower left is better. The table under the chart lists the same numbers.5456581.351.41.45ASAP7 area (µm²)time (ps) · lower is betterpar's score: area × time = 0.0784 µm²·nsthe Pareto front of the entries3 designs at this point · band · this design · band_tactics3 designs at this point · band · this design · band_tactics3 designs at this point · band · this design · band_tacticsthis design · par's numbers
_example: this design's ASAP7 area against time, among the task's designs3 designs by ASAP7 area (µm²) (x) and time (ps) (y), this one ringed; lower left is better. The table under the chart lists the same numbers.5456581.351.41.45ASAP7 area (µm²)time (ps) · lower is betterpar's score: area × time = 0.0784 µm²·nsthe Pareto front of the entries3 designs at this point · band · this design · band_tactics3 designs at this point · band · this design · band_tactics3 designs at this point · band · this design · band_tacticsthis design · par's numbers
  • proved reference
  • the Pareto front of the entries
  • this design
  • par's score: area × time = 0.0784 µm²·ns
ASAP7 area (x) against the ASAP7 time (y); lower left is better on both. The step line is the Pareto front of the entries (the proved references and the players' ranked records); a design under par's score curve has a better score than par. Baselines are drawn for scale: scored, never proved. Every design is in view.
the designs as numbers, by score
designkindarea (µm²)time (ps)score (µm²·ns)
band proved reference · par1.400560.0784
band_lp · this designproved reference1.400560.0784
band_tactics proved reference1.400560.0784

Reproduce and verify

From svgolf/, with the pinned tools (reproduce a score lists them):

shell
# the ranked numbers, at the scoring point (from svgolf/, with the pinned Yosys and liberty)
python3.12 score/ppa.py tasks/_example/reference/band_lp.sv --task tasks/_example --path \
    --json out.json --netlist scored.v --repaired-netlist repaired.v

Expect, in out.json:

score.rtlil_sha256
08912da22756e668b8774aaddd737194b0151352c218ecf464f800b86c1cace7
ppa.netlist_sha256
d6499297a145c23b802c40766f239336d8a15ea1462d342d3656dfc82ff0ae52
ppa.repair.netlist_sha256
28a4d30c1807e8485a142102f5681ec21310c41266ebe9feb8aed005d456387d
ppa.area_e4um2_sky130
1000960
ppa.delay_ps_sky130
280

The schematic and the critical-path data are site/schematics/_example/66eb3d7b69e6fac9.json and its .svg, written by site/gen_schematics.py (the display instance is ppa.py ... --param N=4 --repaired-netlist, drawn by netlistsvg 1.0.2; repaired netlist sha256 bbbff5e1613dcf43…).

From svgolf/, with the pinned tools (reproduce a score lists them):

shell
# the ASAP7 view's numbers, at the scoring point (from svgolf/, with the pinned Yosys; once:
# python3.12 score/ppa.py --pdk asap7 --fetch-liberty, the five pinned ASAP7 files into score/lib/asap7/)
python3.12 score/ppa.py tasks/_example/reference/band_lp.sv --task tasks/_example --pdk asap7 --no-mapped \
    --json out.json

Expect, in out.json:

ppa.netlist_sha256
d6499297a145c23b802c40766f239336d8a15ea1462d342d3656dfc82ff0ae52
ppa.repair.netlist_sha256
38596d52847c91d7e7fd70188696e9e46d40313f3f301d368705a0864dcb4902
ppa.area_e5um2_asap7
139968
ppa.delay_ps_asap7
56

leaderboard/asap7/_example.json keeps these numbers; python3.12 leaderboard/leaderboard.py asap7 --rescore --task _example weighs every design of the task again and compares, bit for bit.

Verify the record

Download the three files, then from svgolf/:

shell
# re-run the whole check on this record's files (the cost of the original check)
H=341bdd371efbb80098f44dd696ae95ededdb85835b7e65f99bf455725cbde9ec
mkdir -p rec/_example && cp "$H.json" "$H.sv" "$H.lean" rec/_example/
python3.12 leaderboard/leaderboard.py verify --data-dir rec --task _example --full

verify --offline checks only the hashes and the arithmetic; plain verify also rescores the design (no Lean; seconds for most designs, a minute or more for the largest), on sky130 and on ASAP7.