packages/chip/pd/asap7/README.md
ASAP7 is a predictive academic 7 nm FinFET PDK developed by ASU + ARM (arxiv 1708.02078, source on GitHub). It is the only open PDK that uses FinFET-era device physics, multi-Vt cell families, 7.5T cell heights, and sub-7-nm interconnect parasitics.
ASAP7 is not manufacturable. No foundry accepts ASAP7 GDS. ASAP7's role in
this repo is exactly one thing: produce PPA shapes (timing, power, area,
congestion) on FinFET-class device physics so the rest of the project can
project those shapes to TSMC N2P / A14 / Intel 14A class using
scripts/project_ppa_to_n2p.py with published vendor scaling factors.
pd/n2p-stub/, pd/a14-stub/, pd/intel-14a-stub/).projection_only. Every report emitted by this flow
has evidence_class: predictive_finfet_shape_only_not_signoff.docs/pd/process-node-selection.md and emitting the result through
scripts/project_ppa_to_n2p.py.Two flow modes coexist in this lane:
config.asap7.yaml: tage_table,
npu_tile_rf_leaf, npu_tile, big_core_shell, slc_slice. The runner
invokes scripts/run_asap7_leaf_synth.py, which:
external/pdks/asap7/asap7sc7p5t_27/LIB/NLDM/*.lib.7z into
build/asap7/lib/ (via scripts/extract_asap7_libs.py + the
bundled py7zr),yosys 0.64 + slang with the per-block synth_params
overrides and the per-block rtl_top as the SystemVerilog top,abc -fast and the ORFS-published
DONT_USE_CELLS exclusion set
(*x1p*_ASAP7*, *xp*_ASAP7*, SDF*, ICG*),evidence_class: predictive_finfet_shape_only_not_signoff that the
downstream scripts/project_ppa_to_n2p.py ingests verbatim.config.asap7.yaml entry omits flow_mode: yosys_abc_synth_only. Gated
by an ORFS local checkout or docker image. The operator runs ORFS for the
block and copies the post-route shape JSON into
docs/evidence/process/asap7/<block>_shape.json. No block currently
ships with this mode by default; it is the upgrade path once full PnR
is required for a leaf.make -C pd/asap7 check # preflight: PDK reachable?
make -C pd/asap7 clone-asap7 # one-shot ASAP7 PDK clone
make -C pd/asap7 clone-orfs # one-shot ORFS clone (opt-in PnR)
make -C pd/asap7 leaf-shape MODULE=tage_table # yosys+ABC synth-only leaf shape
make -C pd/asap7 leaf-shape MODULE=npu_tile_rf_leaf # NPU weight-buffer SRAM leaf shape
make -C pd/asap7 leaf-shape MODULE=npu_tile # full e1_npu monolithic tile shape
make -C pd/asap7 leaf-shape MODULE=big_core_shell # CPU subsystem stub leaf shape
make -C pd/asap7 leaf-shape MODULE=slc_slice # SLC bank slice shape (shrunk geom)
make -C pd/asap7 big_core_shell-shape # equivalent per-block target
make ppa-projection # project all shapes to N2P/A14/Intel-14A/SF2P
The block list is defined in config.asap7.yaml and mirrors the OpenLane
top-level RTL set. Each block is run separately because ASAP7 is intended for
per-block shape characterization, not flat top-down closure.
tage_table leaf shapemake -C pd/asap7 clone-asap7 # ~1 min net, ~1.3 GB disk
make -C pd/asap7 leaf-shape MODULE=tage_table # ~10 s yosys+ABC
make ppa-projection # ~3 s per-block Monte Carlo
Outputs:
docs/evidence/process/asap7/tage_table_shape.json — ABC-mapped gate
count, std-cell area, cell histogram. Tagged
evidence_class=predictive_finfet_shape_only_not_signoff.docs/evidence/process/asap7/tage_table_projection_n2p.json — Monte
Carlo p10 / p50 / p90 area bands across N2P, A14, Intel 14A, Samsung SF2P
(1-sigma scaling-factor uncertainty from ppa-projection.yaml).docs/evidence/process/ppa-projection.json — aggregated multi-block
projection report.Wall-clock budget on a single workstation: ~10 s for the synth, ~3 s for
projection (dominated by 4096-sample Monte Carlo × four targets).
The 4096-entry production geometry of tage_table is approximated by the
128-entry leaf-shape (synth_params.ENTRIES=128) so the lookup/update
control path is the same while the flat-flop storage cost stays tractable.
Storage area scales linearly with ENTRIES; consumers projecting the full
production geometry should multiply sequential_cells × area-per-DFF by
(production / leaf) and add it to the (entry-count-invariant) combina-
tional logic area.
Every block currently uses the yosys + ABC synth-only flow. The block list mirrors the per-domain leaf shape needed for advanced-node area projection:
tage_table — BPU TAGE tagged-table primitive (128-entry leaf-shape
proxy of the production 4096-entry geometry).npu_tile_rf_leaf — NPU weight-staging register file
(e1_weight_buffer_sram, 512x32-bit + write-mask, behavioral path). The
hard-macro swap point under E1_HAVE_HARD_SRAM.npu_tile — full e1_npu monolithic NPU tile (16x32-bit scratch RF,
16 opcodes including INT8/INT4/INT2/FP8 dot products, GEMM/vector engines,
AXI-Lite descriptor engine, perf counters) at production geometry.big_core_shell — e1_cpu_subsystem_stub, the self-contained
32x64-bit RV64I subset in-order microcontroller stub (decoder + ALU +
architectural RF + AXI4-Lite master FSM). Substitutes for the
Ascalon / Kunminghu / CVA6 big-core RTL until those land.slc_slice — shrunk e1_slc (2 KiB, 2-way, 2 banks, 64 B line)
covering the cache lookup/install FSM, BDI compression form classifier,
QoS-aware victim selection, and display-RT reservation counter.For every block, the storage cost in the leaf shape is the flat-flop cost.
Production silicon swaps storage for vendor SRAM macros at vendor density
(38.1 Mb/mm² HD at N2 per TSMC) — scripts/project_ppa_to_n2p.py carries
the logic-only band; reviewers must add macro area separately when sizing
real cache or scratch arrays.
Each block runs through scripts/run_asap7_block.sh, which:
external/pdks/asap7 exists, otherwise emits BLOCKED: with the
clone command and exits 1.ORFS_FLOW_HOME local checkout
or a docker image), otherwise emits BLOCKED: and exits 1.config.asap7.yaml.evidence_class: predictive_finfet_shape_only_not_signoff and
pdk: ASAP7; rejects anything that misses the tag.No partial / silent / placeholder evidence is ever emitted.
Every shape report includes:
evidence_class: predictive_finfet_shape_only_not_signoffpdk: ASAP7These shape reports are consumed downstream by:
scripts/project_ppa_to_n2p.py (apply vendor scaling factors to project N2P)docs/architecture-optimization/cpu-npu-2028-readiness-scorecard.yaml
(informational only, never as signoff)