docs: update LaTeX docs for N16 real timing closure + honest ESP32-S3 projection (EXP-0097)
architecture.tex: document the real MAC-pipeline fix (Stage 1a/1b split) and its real result on both N8 (WNS 0.000ns -> +0.108ns) and N16 (now closed, WNS=+0.269ns) -- N16 is a real, verified candidate for a future board revision, N8 remains the configuration in current physical fabrication. tests_timing.tex: extended P&R history table, real N8/N16 signoff tables (post-fix), the new N16 critical path (Director queue logic, still route-dominated) and the negative result of a second directive attempt (confirms current result is the best found). Added a new, clearly-labeled PROJECTION (not a measurement) for N16 vs ESP32-S3 -- 30-68x range, built from real measured scaling factors (same core count as the original ECP5 comparison, real clock ratio, real 2x INT8 packing factor) -- more grounded than the old, superseded ~55-85x figure, with the same DDR3-bandwidth-bound honest caveat carried forward. datasheet.tex: N8/N16 side-by-side timing/utilization/performance tables, open items and revision history updated to reflect physical fabrication status and the N16 candidate decision. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MUG92aM9m68TRc4rG55BcC
This commit is contained in:
+72
-19
@@ -6,12 +6,19 @@
|
||||
Il design realizzato in FPGA \`e un acceleratore per reti neurali
|
||||
quantizzate INT8, organizzato come un insieme di \textbf{elementi di
|
||||
elaborazione} (Processing Element, PE) paralleli che condividono un
|
||||
unico canale DDR3 reale. La configurazione attualmente definitiva
|
||||
(Capitolo~\ref{chap:tests}) \`e \textbf{N=8}: 8 PE reali, organizzati
|
||||
in \textbf{2 gruppi da 4 PE ciascuno}, secondo un'architettura
|
||||
sistolica a \emph{broadcast dei pesi condiviso} (\emph{shared-weight
|
||||
broadcast}). Il modulo top-level reale \`e
|
||||
\texttt{hardware/v3/rtl/n8\_system\_ddr3\_top.v}.
|
||||
unico canale DDR3 reale, secondo un'architettura sistolica a
|
||||
\emph{broadcast dei pesi condiviso} (\emph{shared-weight broadcast}).
|
||||
|
||||
\textbf{Stato reale a due configurazioni (Capitolo~\ref{chap:tests})}:
|
||||
\textbf{N=8} (\texttt{n8\_system\_ddr3\_top.v}, 2 gruppi da 4 PE) \`e
|
||||
la configurazione attualmente in fabbricazione fisica sulla scheda
|
||||
reale. \textbf{N=16} (\texttt{n16\_system\_ddr3\_top.v}, 4 gruppi da 4
|
||||
PE) \`e ora, a seguito di una correzione reale del datapath MAC
|
||||
(\S\ref{sec:mac-pipeline}), \textbf{funzionalmente verificata E con
|
||||
timing reale chiuso} su un branch di sviluppo dedicato
|
||||
(\texttt{n16-timing-closure}), non ancora promossa alla scheda fisica
|
||||
in produzione --- una decisione hardware reale, non RTL, ancora da
|
||||
prendere.
|
||||
|
||||
L'intero design gira in un unico dominio di clock reale a
|
||||
\textbf{155.039\,MHz} (\texttt{ui\_clk}, derivato dal MIG DDR3,
|
||||
@@ -38,9 +45,45 @@ Al clock reale di 155.039\,MHz, il picco teorico per singolo PE \`e:
|
||||
|
||||
Questo nucleo \`e rimasto \emph{invariato} (stesso numero di DSP,
|
||||
stessa struttura) dalla primissima sintesi reale del progetto fino
|
||||
alla configurazione N=8 attuale: \`e la parte pi\`u stabile ed efficiente
|
||||
del design, e non \`e mai stato il collo di bottiglia delle prestazioni
|
||||
(si veda \S\ref{sec:bottleneck}).
|
||||
alla configurazione N=8: \`e la parte pi\`u stabile ed efficiente
|
||||
del design. A N=16 (\S\ref{sec:mac-pipeline}) \`e per\`o diventato,
|
||||
per la prima volta, il vero collo di bottiglia di temporizzazione ---
|
||||
non del throughput di calcolo (\S\ref{sec:bottleneck}), ma della
|
||||
temporizzazione fisica del place-and-route.
|
||||
|
||||
\subsection{Correzione reale: pipeline aggiuntiva nel datapath MAC (per N=16)}
|
||||
\label{sec:mac-pipeline}
|
||||
|
||||
A N=16, il margine di temporizzazione reale --- gi\`a estremamente
|
||||
sottile a N=2 (+0.0999962\,ns) --- \`e stato eroso oltre lo zero dalla
|
||||
maggiore congestione fisica complessiva del die (WNS reale misurato:
|
||||
$-0.338$\,ns, dopo un arbitro gerarchico e un tuning delle direttive
|
||||
di place-and-route, Capitolo~\ref{chap:tests}). Il percorso critico
|
||||
reale, tracciato (non ipotizzato) fino al livello del singolo
|
||||
registro, va dall'uscita del moltiplicatore DSP48E1 (gi\`a
|
||||
ri-temporizzata automaticamente da Vivado) attraverso la logica di
|
||||
``spacchettamento'' dei due prodotti INT8 impacchettati (uno shift e
|
||||
una somma di riporto condizionale, dominata da primitive CARRY4) fino
|
||||
al registro che cattura il risultato --- tutto in un solo ciclo di
|
||||
clock.
|
||||
|
||||
\textbf{Correzione reale applicata}: lo stadio originale \`e stato
|
||||
spezzato in due stadi di pipeline reali distinti --- il primo registra
|
||||
il prodotto grezzo del DSP48E1 senza alcuna logica intermedia; il
|
||||
secondo esegue lo spacchettamento (matematica identica, invariata bit
|
||||
per bit) a partire dal valore gi\`a registrato. Il costo reale: un solo
|
||||
ciclo di clock aggiuntivo di latenza per operazione, senza alcun
|
||||
impatto sul throughput (l'interfaccia a maniglia valid/ready non
|
||||
assume mai una latenza fissa). Verificato bit-esatto in isolamento
|
||||
(18/18 PASS contro 2 core reali di riferimento) e funzionalmente
|
||||
sull'intero sistema N=16 su DDR3 reale (32/32 PASS).
|
||||
|
||||
\textbf{Risultato reale}: con questa sola correzione, il timing di
|
||||
N=16 \textbf{chiude realmente} (WNS $=+0.269$\,ns, WHS $=+0.026$\,ns,
|
||||
0 endpoint falliti) --- si veda il Capitolo~\ref{chap:tests} per i
|
||||
numeri completi. La stessa correzione, applicata anche a N=8, migliora
|
||||
pure il suo margine (da 0.000\,ns esatto a +0.108\,ns) senza alcuna
|
||||
regressione funzionale in nessuna delle due configurazioni.
|
||||
|
||||
\section{L'architettura sistolica a gruppi (N=8)}
|
||||
|
||||
@@ -180,20 +223,30 @@ margine di scalabilit\`a residuo del chip \`e ampio sul lato
|
||||
computazionale, ma \`e vincolato dal canale di memoria condiviso, non
|
||||
dalla logica di calcolo.
|
||||
|
||||
\section{Configurazioni alternative esplorate}
|
||||
\section{Configurazioni esplorate e stato reale attuale}
|
||||
|
||||
Lo stesso RTL sistolico, tramite il parametro reale \texttt{N\_GROUPS},
|
||||
\`e stato realmente sintetizzato e verificato anche a:
|
||||
\`e stato realmente sintetizzato e verificato a pi\`u configurazioni:
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{N=4} (1 gruppo, 4 PE, 32 DSP48E1) --- funzionante,
|
||||
margine di timing quasi nullo.
|
||||
\item \textbf{N=16} (4 gruppi, 16 PE, 128 DSP48E1) --- funzionalmente
|
||||
verificato su DDR3 reale, ma con temporizzazione non ancora chiusa
|
||||
(si veda \S~\ref{sec:pnr-history}) --- mantenuto come lavoro futuro
|
||||
documentato, non abbandonato.
|
||||
margine di timing quasi nullo (non ancora rifinito con la
|
||||
correzione di \S\ref{sec:mac-pipeline}).
|
||||
\item \textbf{N=8} (\texttt{n8\_system\_ddr3\_top.v}) --- \textbf{la
|
||||
configurazione fisicamente in fabbricazione sulla scheda reale
|
||||
attuale.} Timing chiuso, WNS $=+0.108$\,ns con la correzione MAC.
|
||||
\item \textbf{N=16} (\texttt{n16\_system\_ddr3\_top.v}) --- dopo la
|
||||
correzione di \S\ref{sec:mac-pipeline}, \textbf{funzionalmente
|
||||
verificato E con timing reale chiuso} (WNS $=+0.269$\,ns), su un
|
||||
branch di sviluppo reale (\texttt{n16-timing-closure}) separato
|
||||
dalla scheda in produzione. \`E ora un candidato reale, verificato,
|
||||
per una futura revisione della scheda --- non ancora promosso alla
|
||||
produzione fisica corrente, una decisione hardware reale ancora da
|
||||
prendere con l'utente.
|
||||
\end{itemize}
|
||||
|
||||
N=8 \`e stata scelta come configurazione reale definitiva perch\'e
|
||||
\`e la pi\`u grande che chiude realmente il timing con margine
|
||||
positivo (Capitolo~\ref{chap:tests}).
|
||||
N=8 resta, ad oggi, la configurazione realmente fabbricata. N=16 non
|
||||
\`e pi\`u un limite architetturale reale (come inizialmente sembrava),
|
||||
ma una reale, verificata alternativa a parallelismo doppio, la cui
|
||||
adozione fisica dipende ora da una scelta dell'utente, non da un
|
||||
vincolo tecnico residuo.
|
||||
|
||||
Reference in New Issue
Block a user