Files
FPGA-Neural/hardware/v2/docs/DatasheetLatex/chapters/07-benchmarks.tex
T
micheleandClaude Sonnet 5 d6376e8f2a V2 final synthesis/P&R sign-off + LaTeX datasheet port (NOT SILICON READY)
Real synthesis and place-and-route of the actual final board-level
top (fpga_neural_v2_top.v -- SPI bridge, real EHXPLLL, reset_sync,
compute+memory core), against a real, fully ball-assigned LPF. Also
ports the V2 datasheet to LaTeX using V1's own preamble/macros/
typography, and records a real (non-ESP32, honestly labeled) software
reference comparison.

Synthesis (Yosys, real run): 0 CHECK-pass problems, 38 unique warnings
(43 total), all matching this project's own previously-reviewed benign
set (neural_processor.v's known genvar multi-driver artifact, small-
array-to-register unrolling, the real SDRAM DQ tristate bus) -- no new
warnings from the SPI bridge, PLL, or reset synchronizer.
TRELLIS_FF=6322, TRELLIS_COMB=7084, MULT18X18D=32, EHXPLLL=1 (real PLL
confirmed present), DP16KD=0 (all small SRAMs -> distributed RAM).

Place-and-route (nextpnr-ecp5, real runs, 8 seeds, new
v2_board_top.lpf with all 44 top-level signals ball-assigned from the
official Lattice pinout CSV -- no placeholders): 8/8 PASS at 64MHz.
Worst 68.51MHz (seed 4), best 74.17MHz (seed 7), mean 71.16MHz. Zero
unrouted nets, zero placement/routing errors, TRELLIS_IO=44/245 (17%).
Critical path alternates between dependency_manager's own priority
encoder and sdram_unified_backend's own weight-cache hit-index logic,
matching this project's own prior documented timing investigations --
not a new defect.

New: hardware/v2/constraints/v2_board_top.lpf (final LPF, supersedes
v2_unified.lpf for the board-level top), hardware/v2/reports/
step_final_{synthesis,pnr_worst_seed4,timing}.* (raw evidence),
hardware/v2/docs/DatasheetLatex/ (V2 datasheet, real LaTeX build,
16 pages, visually inspected, ported from hardware/v1/docs/
DatasheetLatex/'s own preamble and macros).

Real, honestly-labeled software baseline: the D-Stress arithmetic
(256 neurons x 128 INT8 MACs) compiled and run on THIS development
machine (Apple M4, arm64, NOT an embedded target, NOT ESP32) --
1.28us/inference, included in the datasheet with an explicit
disclosure that no physical ESP32 hardware was available for a real
embedded-target comparison.

Remaining, disclosed, NOT-yet-closed items (this commit does NOT
claim silicon readiness): real KiCad schematic + ERC, PCB layout,
sourced BOM, real power current-budget estimate, SDRAM-datasheet-
parameter cross-check, configuration-flash selection, and (necessarily)
physical fabrication/bring-up. See hardware/v2/docs/DatasheetLatex/
chapters/08-status-roadmap.tex for the complete, itemized checklist.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013xXuuRUWZScuo1DeYJxs3v
2026-09-06 17:50:53 +02:00

68 lines
3.0 KiB
TeX

\chapter{Benchmarks}
\section{Internal benchmark: D-Stress workload}
256 independent neurons, 128 inputs each (16 tiles of \code{P\_IN}=8),
one shared activation vector -- the project's own existing, reused
benchmark, run against the final, frozen RTL via Verilator.
\begin{tabularx}{\textwidth}{L{2cm}L{2.4cm}L{2.4cm}Y}
\toprule
\rowh \thd{Config} & \thd{Cycles} & \thd{Correctness} & \thd{Latency @ 64\,MHz} \\
\midrule
N=2 & 49\,788 & 256/256 \PASS & 777.9\,\textmu s \\
\rowa N=4 & 49\,771 & 256/256 \PASS & 777.7\,\textmu s \\
\bottomrule
\end{tabularx}
Cycle counts are \textbf{simulation-verified} (Verilator, bit-exact)
and unchanged before/after the ERR-0025 read-timing fix. Latency at
64\,MHz is a \textbf{derived} figure (cycles~/~clock), not an
independently re-simulated wall-clock measurement, and is not a
measured-hardware number (no fabricated board exists).
N=4 barely improves over N=2 on this specific workload
($49\,771$ vs.\ $49\,788$ cycles) because the workload is dominated by
shared-SDRAM and shared-activation-fill traffic, not by raw MAC
throughput -- consistent with this project's own prior STEP17/18
memory-bound-vs-compute-bound findings, not a new anomaly.
\section{Host-interface pacing benchmark}
The board-level SPI smoke test (\S\ref{sec:host}) exercises single-job,
back-to-back, and gap-swept (100\,ns/5\,000\,ns/50\,000\,ns/$\sim$85\,\textmu s)
dispatch patterns -- all 11/11 bit-exact -- establishing that realistic
host pacing does not, itself, change correctness (only the STEP19-era
registered-read bug did, and that is fixed).
\section{Software reference comparison}
\textbf{No physical ESP32 (or other embedded MCU) hardware is
available in this environment.} A real ESP32 benchmark was
\emph{not} performed, and no ESP32 number is estimated or invented
here -- this is a disclosed OPEN item, not a claimed result.
As an honest, clearly-labeled illustrative data point only, the
identical D-Stress arithmetic (256 neurons $\times$ 128 INT8 MACs,
ReLU + INT8 saturate) was compiled (\code{cc~-O2}) and run on the
\emph{development machine itself} (Apple M4, arm64 -- \textbf{not}
an embedded target):
\begin{tabularx}{\textwidth}{L{4.4cm}Y}
\toprule
\rowh \thd{Metric} & \thd{Value} \\
\midrule
Platform & Apple M4 (arm64), \code{cc -O2}, single-threaded scalar C \\
\rowa Latency, full 256-neuron batch & 1.28\,\textmu s \\
Throughput & $2.56\times10^{10}$ MAC/s \\
\bottomrule
\end{tabularx}
On this specific, tiny workload, a modern, auto-vectorizing,
multi-GHz superscalar CPU outperforms the current FPGA design's
\emph{simulated} cycle count in raw latency. This is reported
honestly rather than omitted: FPGA-Neural V2's real value proposition
is a deterministic, low-power, standalone SDRAM-attached accelerator
for hosts that do \emph{not} have this class of CPU (e.g.\ an
ESP32-class microcontroller) -- not a claim of outperforming a
desktop-class processor on this workload size. A real, meaningful
software baseline for THAT comparison requires the actual embedded
target hardware, which remains unavailable this revision.