\chapter{Roadmap e stato di sviluppo} \label{ch:roadmap} \section{Fasi di sviluppo} \begin{tabularx}{\textwidth}{C{1.2cm} L{4.6cm} C{1.8cm} Y} \toprule \rowh \thd{Fase} & \thd{Titolo} & \thd{Stato} & \thd{Contenuto} \\ \midrule 1 & Layer parametrico & \OK & ingressi/neuroni/parallelismo, accumulo, bias, ReLU; test 32$\times$4/P=8. \\ \rowa 2 & Parameter sweep & \OK & configurazioni multiple incl. non-multiple e degeneri; guard di elaborazione aggiunto. \\ 3 & Architettura di memoria & \OK & \code{neuron\_memory} mono/multi-neurone, PSRAM reale testata; buffer multi-layer $\to$ Fase~5. \\ \rowa 4 & Interfaccia SPI & \OK & \code{spi\_slave}+\code{spi\_engine}, 17 opcode incl. sottosistema flash, Fmax controllata a livello di sistema completo. \\ 5 & Rete multi-layer & \OK$^\dagger$ & \code{layer\_sequencer}, attivazioni configurabili, larghezza runtime; toolchain reale controllata. \\ \rowa 6 & Software host & pianificata & driver Linux ed ESP32 sullo stesso protocollo. \\ 7 & Ottimizzazione & in corso & timing closure fatta (55$\to$75~MHz); page-mode PSRAM fatto (banda gather +42\%); resta block RAM per $x$/$w$. \\ \rowa 8 & Training hardware (opz.) & futura & backprop, gradienti, aggiornamento pesi. \\ 9 & Sottosistema flash (F1-F7) & \OK & SPI master dedicato, copy engine flash$\leftrightarrow$PSRAM, catalogo a 16 slot con CRC32, bus SPI a 4 fili indipendente (F7), 8 opcode (\op{0x40}--\op{0x47}, cap.~\ref{ch:spi} §\ref{sec:flashspi}); sintesi reale 0 errori. \\ \bottomrule \end{tabularx} \begin{center}\footnotesize\itshape\color{fnGrey} $\dagger$ RTL, unit test ed end-to-end su SPI simulato completi; timing closure eseguita: 75.30~MHz (P2) / 60.26~MHz (P8) al tempo della Fase~5, bit-esatta su tutta la regressione; Fmax del sistema completo dopo Fase~9 (incl. sottosistema flash indipendente): \textbf{67.91~MHz} (cap.~\ref{ch:impl}).\end{center} \section{Stato dei componenti} \begin{tabularx}{\textwidth}{Y C{4.2cm}} \toprule \rowh \thd{Componente} & \thd{Stato} \\ \midrule Layer neurale parametrico & \OK{} funzionante \\ \rowa Ingressi/neuroni/parallelismo parametrici & \OK \\ Accumulo, bias, ReLU & \OK \\ \rowa Validazione 32$\times$4 / P=8 & \OK \\ RAM dedicata (interfaccia + controller + accesso INT8) & \OK{} testata su PSRAM reale \\ \rowa Interfaccia SPI (17 opcode incl. RUN\_NETWORK + flash) & \OK{} Fmax a livello di sistema completo \\ Dual SPI & futura \\ \rowa Motore multi-layer & \OK{} timing closure 75.30~MHz (P2) al tempo della Fase~5 \\ Attivazioni configurabili (ACT\_NONE/ACT\_RELU) & \OK \\ \rowa Larghezza rete runtime (un bitstream, ogni topologia) & \OK{} risparmio misurato \\ Rete a grafo Tipo \#2 (act\_buffer, graph\_engine, netasm) & \OK{} RTL + test + sintesi \\ \rowa Pinout CABGA381 (\code{.lpf} reale, 57 segnali incl. flash) & \OK{} place\&route-verified 0 errori \\ Page-mode PSRAM (G7) & \OK{} fatto (37.53 cicli/edge, banda +42\%) \\ \rowa Sottosistema flash (SPI master, copy engine, catalogo CRC32, bus indipendente F7) & \OK{} sintesi reale 0 errori, Fmax 67.91~MHz \\ Bitstream reale (\code{ecppack}, P2/P8) & \OK{} 0 errori, part LFE5U-45F-8CABGA381 \\ \rowa Driver host Linux / ESP32 & pianificato \\ Training hardware & futuro \\ \bottomrule \end{tabularx} \section{Principio architetturale (sintesi)} \begin{fnspec}[Fondamento del progetto] L'FPGA implementa la macchina neurale e possiede la propria RAM; l'host configura e usa la macchina. Una build fissa il \emph{soffitto} (max layer, max larghezza, PARALLEL); l'host configura la rete \emph{reale} --- numero di layer, larghezza per-layer, attivazione per-layer, parametri addestrati --- interamente a runtime, via SPI, nella memoria locale dell'FPGA. Un solo bitstream serve qualunque topologia fino a quel soffitto. \end{fnspec} \section{Visione a lungo termine} L'obiettivo finale è un blocco hardware riusabile integrabile in progetti futuri diversi: la piattaforma host può cambiare (Linux, ESP32, MCU, PC) senza cambiare l'architettura fondamentale dell'engine. L'FPGA diventa una periferica di computazione neurale dedicata, ottimizzata per la topologia richiesta da ciascuna applicazione.