hardware/v1/ was created (dc0b331) as a frozen snapshot of the V1
project that then lived at the repo root (rtl/, sim/, synth/, tools/,
docs/). Root received zero further commits to those files after the
freeze -- confirmed byte-identical to the hardware/v1/ copy for every
file removed here. Root was the "before", hardware/v1/ is the
curated, canonical "after".
Removed (all verified exact-hash duplicates of hardware/v1/ content):
- rtl/ (20 files, 100% covered by hardware/v1/rtl/)
- tools/{netasm,pinout,run_regression.py,flash_catalog,validation,
fpga_benchmark.py} (19 files, 100% covered by hardware/v1/tools/;
tools/neural_sim/ kept -- unique, post-freeze, no counterpart)
- sim/*.v (47 testbenches, 100% covered by hardware/v1/sim/; the
~38 remaining sim/ entries are compiled binaries and .vcd
waveform dumps, left as a separate cleanup decision)
- synth/ecp5/{p2,p4,p8,post_fix_verify} (25 files, exact duplicates
of hardware/v1/synthesis/; the other ~84 synth/ecp5/* experiment
build directories are historical artifacts never carried into the
freeze, left as a separate decision)
- WORKLOG.md (duplicate of hardware/v1/docs/WORKLOG.md)
- docs/{FPGA-Neural-Datapatch-Benchmark,FPGA-Neural-Hardware-Design,
FPGA-NeuralNetwork-Engine}.md, docs/validation/*.md (18 files),
docs/FPGA-Neural-Datasheet-{EN,IT}.pdf -- all exact duplicates of
hardware/v1/docs/ content
- hardware/v1/docs/DatasheetLatex/ (24 files) -- exact duplicate of
hardware/v2/docs/datasheet/files/docs/datasheet/en/ (discovered
during this audit; not the same DatasheetLatex already removed
from hardware/v2/docs/ in an earlier commit)
Moved (genuine, unique, post-freeze V2 content -- not duplicated
anywhere, just living in the wrong/legacy root docs/ location):
- docs/architecture/*.md -> hardware/v2/docs/architecture/
- docs/pinouts.md, docs/FPGA_NEURAL_V2_DATASHEET.md,
docs/FPGA_NEURAL_V2_SCHEMATIC.md,
docs/FPGA-Neural-V2-Datasheet-EN.pdf -> hardware/v2/docs/
Left untouched (separate decisions, not part of this cleanup):
- docs/FPGA-Neural-Flash-Subsystem-Verification.md, docs/
v2-description.md -- orphaned root-only content, no duplicate
found anywhere, but also not part of the reviewed plan
- synth/ecp5/* experiment dirs and sim/*_sim + sim/*.vcd build
artifacts -- not literal duplicates, flagged as candidates for a
future, separate cleanup pass
Verified no functional breakage: grepped all remaining scripts/docs
for references to every removed path -- only prose/comment mentions
found, no executable imports or build-script paths broken.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013xXuuRUWZScuo1DeYJxs3v
9.1 KiB
FPGA-Neural V2 — Datasheet
Status: DRAFT / PRE-RELEASE. This datasheet documents the INTENDED
V2 board architecture as of STEP20. It does not certify a finished,
release-ready design — see §11 Limitations and
hardware/v2/docs/OPEN_ITEMS.md for the current, real blocker list.
Do not read any statement here as "physically validated" unless it
says so explicitly.
1. General
FPGA-Neural V2 is an embedded neural-network accelerator built around a Lattice ECP5 FPGA and a single external SDRAM. It executes small, dependency-graph-structured INT8 neural networks (dense layers, DAGs) using a Neural Multiprocessor of parallel MAC engines, streaming weight/activation tiles from one external SDRAM chip that also holds results.
Architecture stack (top to bottom): SPI host interface → job registration → Dependency Manager / Neural Director → N parallel Neural Processors → Memory Manager / streaming tile delivery → Unified SDRAM Backend → one physical SDRAM.
2. FPGA
| Item | Value | Basis |
|---|---|---|
| Part | Lattice LFE5U-45F | DESIGN DECISION |
| Package | CABGA381 | DESIGN DECISION |
| Speed grade | -8 | DESIGN DECISION |
| Ordering part number | LFE5U-45F-8BG381C | DESIGN DECISION (standard Lattice ordering suffix for this grade/package; not independently cross-checked against a live distributor listing this session) |
| Logic (post-synthesis, N=4, frozen STEP19 compute core) | TRELLIS_FF=6425, TRELLIS_COMB=6023, MULT18X18D=32, DP16KD=0 | VERIFIED (real Yosys synthesis, STEP19) |
| I/O used (frozen STEP19 top, no physical host bus) | 149/245 TRELLIS_IO | VERIFIED (real nextpnr-ecp5 P&R, STEP19) |
| I/O used (this step's new board-level top, SPI + osc + reset + SDRAM) | not yet synthesized this round | OPEN — see §11 |
Operating assumption: single clock domain, no CDC beyond the SPI bridge's own double-flop synchronizers and the reset synchronizer (§5).
3. Neural accelerator
| Parameter | Value |
|---|---|
| N_PROCESSORS | 4 (frozen reference; N=2 also validated; N=8 is a future evolution) |
| P_IN (MAC width) | 8 |
| Data representation | INT8 operands |
| Accumulator | INT32, ReLU + INT8 saturate on output |
| MAC architecture | 8-wide parallel MAC, balanced adder tree (neural_processor.v, unchanged since before this freeze) |
| Processor parallelism | N independent Neural Processors, one dependency-graph node in flight per processor |
| Supported memory traffic | weights (read-only, 64-bit packed fetch, cached), activations (read, byte-maskable), results (write, byte-maskable) — all through the SAME single SDRAM |
RTL capability vs. software/API capability: the RTL executes one pre-compiled dependency graph (nodes with producer/consumer edges, fixed tile counts) registered via 108 bits of per-job configuration (node id, dependency list, activation/weight/result base addresses, tile count). There is no on-chip graph compiler, no floating point, no training — job graphs and addresses are computed off-chip and loaded via the host interface (§9).
4. Unified memory
┌─────────────────────┐
│ FPGA ECP5 │
│ │
│ 4x Neural Engines │
│ │ │
│ v │
│ Unified SDRAM │
│ Backend / Arbiter │
└─────────┬───────────┘
│ 16-bit SDRAM bus
v
┌─────────────────────┐
│ AS4C4M16SA-6TIN │
│ Weights │
│ Activations │
│ Results │
└─────────────────────┘
| Item | Value | Basis |
|---|---|---|
| Device | Alliance Memory AS4C4M16SA-6TIN | DESIGN DECISION (STEP16-19) |
| Capacity | 4M x 16 (8MB) | DATASHEET VALUE |
| Data width | 16-bit (DQ[15:0]) + DQM[1:0] byte mask | DATASHEET VALUE |
| Addressing | BA[1:0] (4 banks) + A[11:0] (row/col, multiplexed) | DATASHEET VALUE |
| Clock | shared with FPGA system clock (§5) | DESIGN DECISION |
| Initialization/refresh | real, RTL-implemented power-up wait + mode-register-set + periodic AUTO REFRESH (sdram_controller.v) |
VERIFIED (real refresh events observed in simulation, STEP16-19) |
| Arbitration | single physical port, 2-way logical split: W (weight, read-only, cached) / AR (activation+result, read/write, byte-maskable), each internally arbitrated across N processors by a generic, reused slot_mem_arbiter |
VERIFIED (STEP19 bit-exact regression, reconfirmed via Verilator this step — see errors.log ERR-0024) |
| Official V2 memory map | weights @0x010000, activations @0x200000, results @0x300000, all within the single 8MB space, 1MB-aligned | DESIGN DECISION |
PSRAM is not part of V2. The V1 PSRAM controller (hardware/v1/rtl/psram_controller.v) is not instantiated anywhere in the V2 physical path.
5. Clock / PLL
16 MHz OSCILLATOR
|
v
ECP5 PLL (EHXPLLL)
CLKI_DIV=1 CLKFB_DIV=4 CLKOP_DIV=9
FEEDBK_PATH=CLKOP VCO=576MHz
|
v
FPGA SYSTEM CLOCK
64 MHz
(real, tool-generated ratio: 16 * 4 / 1, CLKOP_DIV=9 -> 576/9=64)
| Item | Value | Basis |
|---|---|---|
| Oscillator | 16 MHz (board-level, prior project record) | DESIGN DECISION (part number: TBD — not selected this session) |
| PLL primitive | EHXPLLL (ecp5_pll_sys_clk.v) |
VERIFIED design-time via Project Trellis ecppll v1.4 (real tool, real parameters) |
| Generated system clock | 64 MHz | DESIGN DECISION, chosen over 80MHz because STEP19's own multi-seed P&R data showed only 1/8 seeds closing timing at >=80MHz on the compute-only core, and the new board-level top adds more logic still; 64MHz is not yet itself confirmed by P&R on the NEW top (see §11) |
| PLL lock | locked output, feeds reset_sync.v |
DESIGN DECISION; NOT simulatable (Lattice EHXPLLL has no open sim model) — real lock behavior is a real-hardware-only characterization, see §10 |
| Timing constraints | none yet written for the new board-level top | OPEN — see §11 |
6. Interfaces
SPI host interface (spi_host_bridge.v)
Mode 0 (CPOL=0/CPHA=0), MSB-first, one opcode per CS-low period.
Opcodes: 0x10 WRITE_JOB (job registration, 15-byte payload), 0x01
WRITE_MEM / 0x02 READ_MEM (raw, word-addressed SDRAM access via a
second arbitrated port), 0x20 STATUS, 0x0F RESET. Verified in
isolation (18/18, tb_spi_host_bridge.v). Not yet verified
end-to-end under realistic multi-job pacing — see §11/ERR-0025.
The 110-pin reg_* bus used by V2's own internal simulation
testbenches is a testbench-only convenience and is not the
physical interface.
JTAG
Standard ECP5 JTAG (TDI/TDO/TCK/TMS), always available regardless of configuration boot mode, per Lattice's own standard requirement.
Configuration
Standard ECP5 PROGRAMN/INITN/DONE/CCLK. Boot-mode/flash-part decision: OPEN (see §11).
7. Electrical
Rail voltage requirements are DATASHEET VALUEs (from real device
datasheets); no regulator part numbers, current budget, or decoupling
values are finalized this round. Full detail:
hardware/v2/docs/POWER_ARCHITECTURE.md.
8. Pinout
Full table: hardware/v2/docs/PINOUT.md. Summary: 37 real SDRAM
signals + clk/rst are ball-assigned and P&R-verified (STEP19, against
the STEP19 compute-only top). The board-level top added this step
(SPI + oscillator + reset pins) has not had its own ball
assignment or P&R run yet.
9. Mechanical / board assumptions
None assumed beyond the package footprint implied by CABGA381. No PCB
dimensions, connector placement, or stack-up are specified — that is
schematic/PCB-capture work, not yet started (see
hardware/v2/docs/SCHEMATIC_READINESS.md).
10. Programming / first power-on
JTAG programming is standard. A first-power-on procedure exists at
hardware/v2/docs/FIRST_POWER_ON.md (procedure only — not executed
against real hardware, since no board has been fabricated).
11. Limitations (real, current, as of this datasheet's own writing)
- The physical SPI host interface is NOT proven end-to-end correct. A real, disclosed defect (errors.log ERR-0025 Part B) produces wrong results when two jobs are dispatched with realistic SPI pacing, even though registration itself is confirmed correct. This is the single largest open item.
- The board-level top (
fpga_neural_v2_top.v) has not been through synthesis or P&R this round — deliberately, since running the real toolchain against RTL known to compute wrong answers would not be a meaningful result. - No PCB, schematic capture, or fabricated hardware exists. Nothing in this document should be read as "physically validated."
- Regulator, configuration-flash, and connector part numbers are not selected.
- The STEP19 compute+memory core (raw
reg_*interface, no SPI bridge) IS bit-exact verified (N=2 and N=4, 256/256, reconfirmed via Verilator this session) and remains the actual, working reference design underneath this datasheet's own described board architecture.