Record 341bdd371efb
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
Performance · time
280ps
the delay: the latest output arrival, y[0] falling
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
Performance · time
56ps
the delay: the latest output arrival
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
// 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.
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:
a[0]_0_and2_1y[0]
| # | net | edge | driven by | cell | arrival (ps) | transition (ps) | stage (ps) |
|---|---|---|---|---|---|---|---|
| 0 | a[0] | fall | input port | – | 108.3 | 18.4 | |
| 1 | y[0] | fall | _13_ | and2_1 | 279.6 | 66.6 | 171.3 |
Cells
at N = 16 · scored
| cell | count | µm² each | µm² in all | share |
|---|---|---|---|---|
and2_1 | 16 | 6.2560 | 100.0960 | 100.0% |
| total | 16 | 100.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)
| cell | count | GE each | GE total |
|---|---|---|---|
AND | 16 | 1.333 | 21.328 |
| total | 16 | 21.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.svsha25666eb3d7b69e6fac93ee63e2b58a1debb3bc7543c877a3b7a382562b8bd463ab5- proof
band_lp.leansha256ddea8152fa537e08f7df21650463bef8730297928dbe9031bf4df69990a90a01: the proof of the referenceband_lp(band_lp.lean, 161 code lines)- canonical text
- sha256
67411e721ce5af8ecfd978034bd55fd4b2c06778fed5d680fd0dccb7355e6e6d - record hash
341bdd371efbb80098f44dd696ae95ededdb85835b7e65f99bf455725cbde9ec- downloads
341bdd371efb.sv341bdd371efb.lean341bdd371efb.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)
| file | sha256 |
|---|---|
check.py | e708084f72f955b0ae1aaabe469dba3eacc5a91484a1ed81bcc073b60f3c0b6d |
check/ | 3145eb578ca71e452eff05a398e8ad04673e6c72ca5343b234cb22e2cefe65a6 |
check/ | fb51d72510b515460866c2798aad3c6f55295536e627b92854c3580af215bb91 |
check/ | 73856a45905724544247ad29042bdc2f1778271ec07b15cdb3a5f214685165c1 |
check/ | 076db01a9791bcc25ee84e9b0033604a4b675f00b212eab0c864078e6a4748b7 |
check/ | 4e1ee2110c63f24e033dd689c929ea686ddf10f4db23b9057c6fb711394c7558 |
lakefile.toml | f35a88404367d22906effc14d644aac9a9cad47dfd3b704ea8fec88acfaf9c4d |
lean-toolchain | 62c2d9c0fc1ec4c67e151c11eff41ca004ef38e179cf9476c230406e6defedef |
score/ | f18c14c23a14d55db63e202f42cc424dc84c1dd1c337f132ad60859dc9d5d33a |
score/ | bbd11227d45dc1365f27597fd45c565fe721ba2648450588fc4fd983d00b367b |
score/ | 95332451ae3754226fb87b46027385b46a91121e7eb9ae25b302bce756d90475 |
score/ | 6a29196a3f4b58241f4c9af650c9141e4632b737214d563a11ba142a725c4bea |
score/ | 54b93ca63888009d0671c8978e8ab7bf4fb8ce303bc78d3b4e1f83d946cc3201 |
score/ | 912031912c3e3f6790725161753e95415df34846bd8c27dde3eb707747ddbcbe |
score/ | 93547b343dbac135737e98516b1004a780e1cf2f579e1bd7fed82c908c6d4125 |
score/ | 4b8688ba3f4d67681658e5944afe878592adf588cd416a8b47597ebe06deb045 |
score/ | d66a6086a37a97f5985266057051979fb6a8a3c557d3ef9c42acc1b5e41502d8 |
score/ | 71d2e3b82f8813ec64a58f0a46909ca23dfab377db44eda6f294b713f45ae781 |
score/ | 11952f61058051c9e8de91a801b672d07e66a29308e978156c04ffd9f0dbef45 |
score/ | ea58219d8ef14c3bad265218ee266ccdb709ac9d4dc5258edc34d51ee83a0445 |
score/ | c3874dbfc85921a87df6eacdfc6b2c9a0e2b34edd5738951e0d8bdb51f4558b2 |
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
- proved reference
- the Pareto front of the entries
- this design
- par's score: area × time = 28.03 µm²·ns
the designs as numbers, by score
| design | kind | area (µm²) | time (ps) | score (µm²·ns) |
|---|---|---|---|---|
band | proved reference · par | 100.10 | 280 | 28.03 |
band_lp · this design | proved reference | 100.10 | 280 | 28.03 |
- proved reference
- the Pareto front of the entries
- this design
- par's score: area × time = 0.0784 µm²·ns
the designs as numbers, by score
| design | kind | area (µm²) | time (ps) | score (µm²·ns) |
|---|---|---|---|---|
band | proved reference · par | 1.400 | 56 | 0.0784 |
band_lp · this design | proved reference | 1.400 | 56 | 0.0784 |
band_tactics | proved reference | 1.400 | 56 | 0.0784 |
Reproduce and verify
From svgolf/, with the pinned tools (reproduce a score lists them):
# 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):
# 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/:
# 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.