Deliverable: docs/spec/soc_1.md (status: draft) per docs/spec/TEMPLATE.md conventions, via PR with deliverable manifest.
Target (acceptance, verbatim)
sky130 @ 50 MHz; stream stories15M int8 weights from external flash; generate text token-by-token over UART, bit-exact vs PyTorch reference; sustained >= 10 tok/s (conservative, per ADR-0002 bandwidth tables).
Constraints
- Pure open-source flow; Yosys-native SV subset (ADR-0001)
- Area scenario (c) free-form die per ADR-0002 (Tiny Tapeout ruled out there)
- Wishbone B4 pipelined on-chip bus, sync active-low rst_n (CLAUDE.md)
- CPU: PicoRV32 (ADR-0003, merged); NPU: 1x8 weight-streaming GEMV (ADR-0002, accepted)
Inputs (in-repo, cite them)
- workloads/tinystories/profile.md — shapes, SRAM sizing, bandwidth
- explore/npu-dse/results.md + docs/adr/0002 — NPU config + area/bandwidth numbers
- docs/adr/0003 — CPU integration notes
External references (architecture level only; implementation code goes through IP intake later)
- PicoSoC (in the PicoRV32 repo) — CPU + SPI flash XIP + UART arrangement precedent
- Caravel harness conventions (clocking/reset/pad organization)
- Wishbone B4 spec
Every block decision must cite data or precedent — uncited decisions get bounced by the integrator.
Spec must cover
Block list with integrate/adapt/build tag per block; memory map; boot flow (ROM -> firmware load -> NPU dispatch); NPU weight-stream path (dedicated channel vs shared bus — justify with bandwidth numbers from ADR-0002); external flash controller requirements (the tokens/s-critical block); interrupt map; clocking/reset; system-infrastructure blocks (reset sync, pad ring note).
Register strategy
Note SystemRDL/PeakRDL as the intended register source-of-truth (reference: caliptra-rtl workflow) in open questions — do not implement tooling now.
Open questions section: everything needing human ruling before status moves past draft.
Deliverable: docs/spec/soc_1.md (status: draft) per docs/spec/TEMPLATE.md conventions, via PR with deliverable manifest.
Target (acceptance, verbatim)
sky130 @ 50 MHz; stream stories15M int8 weights from external flash; generate text token-by-token over UART, bit-exact vs PyTorch reference; sustained >= 10 tok/s (conservative, per ADR-0002 bandwidth tables).
Constraints
Inputs (in-repo, cite them)
External references (architecture level only; implementation code goes through IP intake later)
Every block decision must cite data or precedent — uncited decisions get bounced by the integrator.
Spec must cover
Block list with integrate/adapt/build tag per block; memory map; boot flow (ROM -> firmware load -> NPU dispatch); NPU weight-stream path (dedicated channel vs shared bus — justify with bandwidth numbers from ADR-0002); external flash controller requirements (the tokens/s-critical block); interrupt map; clocking/reset; system-infrastructure blocks (reset sync, pad ring note).
Register strategy
Note SystemRDL/PeakRDL as the intended register source-of-truth (reference: caliptra-rtl workflow) in open questions — do not implement tooling now.
Open questions section: everything needing human ruling before status moves past draft.