\thispagestyle{plain} \noindent \begin{tikzpicture} \node[fill=fnDark,text=white,rounded corners=2pt,inner sep=6pt, minimum width=\textwidth,anchor=west] {\large\bfseries Pinout summary --- pin-by-pin connection}; \end{tikzpicture} \vspace{6pt} \noindent {\footnotesize Quick-reference table: the \textbf{57 real signals} of the top-level \code{spi\_neuron\_top}, each with its own individual \code{CABGA381} ball (\textbf{not} a bus range) --- real data from Project~Trellis's device database (\code{iodb.json}), \textbf{verified by a complete \code{nextpnr-ecp5} place\&route run at 0 errors} (not a planned pinout). Full description, per-bank placement rationale and the pin-by-pin connection to the ISSI PSRAM: ch.~\ref{ch:hw}. } \vspace{4pt} \noindent \renewcommand{\arraystretch}{1.08} \begin{tabularx}{\textwidth}{L{2.7cm} C{1.0cm} C{1.0cm} C{0.9cm} Y} \toprule \rowh \thd{Signal} & \thd{Ball} & \thd{Bank} & \thd{Dir} & \thd{Corresponding pin / function} \\ \midrule \multicolumn{5}{l}{\textit{\color{fnDark}Clock and reset}}\\ \code{clk} & H5 & 7 & IN & System clock, pad \code{GR\_PCLK7\_0} (dedicated global clock). \\ \rowa \code{rst} & B4 & 7 & IN & Global synchronous reset, active high. \\ \multicolumn{5}{l}{\textit{\color{fnDark}Application SPI (host $\leftrightarrow$ FPGA, Mode~0)}}\\ \code{sclk} & B5 & 7 & IN & SPI clock (CPOL=0, CPHA=0). \\ \rowa \code{mosi} & C5 & 7 & IN & Master-Out Slave-In. \\ \code{miso} & A3 & 7 & OUT & Master-In Slave-Out. \\ \rowa \code{cs\_n} & B3 & 7 & IN & Chip-select, active low. \\ \multicolumn{5}{l}{\textit{\color{fnDark}Host attention (active-low, level)}}\\ \code{data\_ready\_n} & C3 & 7 & OUT & Low while a result is waiting to be read. \\ \rowa \code{irq\_n} & C4 & 7 & OUT & Low while the graph engine's load-time guard has tripped. \\ \multicolumn{5}{l}{\textit{\color{fnDark}Flash subsystem --- SPI toward W25Q128JV (boot/persistence)}}\\ \code{flash\_sclk} & E3 & 7 & OUT & SPI clock toward the flash --- ordinary GPIO, independent (Phase F7, ch.~\ref{ch:hw}). \\ \rowa \code{flash\_mosi} & D3 & 7 & OUT & Master-Out Slave-In toward the onboard flash. \\ \code{flash\_miso} & D5 & 7 & IN & Master-In Slave-Out from the flash. \\ \rowa \code{flash\_cs\_n} & E4 & 7 & OUT & Flash chip-select, active low. \\ \multicolumn{5}{l}{\textit{\color{fnDark}PSRAM address bus \code{psram\_a[21:0]} --- 22 individual balls (bank 2)}}\\ \code{psram\_a[0]} & E16 & 2 & OUT & PSRAM A0 \\ \rowa \code{psram\_a[1]} & F16 & 2 & OUT & PSRAM A1 \\ \code{psram\_a[2]} & D18 & 2 & OUT & PSRAM A2 \\ \rowa \code{psram\_a[3]} & E17 & 2 & OUT & PSRAM A3 \\ \code{psram\_a[4]} & E18 & 2 & OUT & PSRAM A4 \\ \rowa \code{psram\_a[5]} & F18 & 2 & OUT & PSRAM A5 \\ \code{psram\_a[6]} & F17 & 2 & OUT & PSRAM A6 \\ \rowa \code{psram\_a[7]} & G16 & 2 & OUT & PSRAM A7 \\ \code{psram\_a[8]} & G18 & 2 & OUT & PSRAM A8 \\ \rowa \code{psram\_a[9]} & H16 & 2 & OUT & PSRAM A9 \\ \code{psram\_a[10]} & H17 & 2 & OUT & PSRAM A10 \\ \rowa \code{psram\_a[11]} & H18 & 2 & OUT & PSRAM A11 \\ \code{psram\_a[12]} & J16 & 2 & OUT & PSRAM A12 \\ \rowa \code{psram\_a[13]} & J17 & 2 & OUT & PSRAM A13 \\ \code{psram\_a[14]} & C20 & 2 & OUT & PSRAM A14 \\ \rowa \code{psram\_a[15]} & D19 & 2 & OUT & PSRAM A15 \\ \code{psram\_a[16]} & E19 & 2 & OUT & PSRAM A16 \\ \rowa \code{psram\_a[17]} & E20 & 2 & OUT & PSRAM A17 \\ \code{psram\_a[18]} & F19 & 2 & OUT & PSRAM A18 \\ \rowa \code{psram\_a[19]} & F20 & 2 & OUT & PSRAM A19 \\ \code{psram\_a[20]} & G20 & 2 & OUT & PSRAM A20 \\ \rowa \code{psram\_a[21]} & H20 & 2 & OUT & PSRAM A21 \\ \code{psram\_a[22]} & P18 & 3 & OUT & Always 0 (byte$\to$word shift): NC on the board. \\ \multicolumn{5}{l}{\textit{\color{fnDark}PSRAM data bus \code{psram\_dq[15:0]} --- 16 individual balls (banks 2 and 3)}}\\ \rowa \code{psram\_dq[0]} & K18 & 2 & IO & PSRAM DQ0 \\ \code{psram\_dq[1]} & C18 & 2 & IO & PSRAM DQ1 (dual-function ball, used as ordinary GPIO). \\ \rowa \code{psram\_dq[2]} & D17 & 2 & IO & PSRAM DQ2 \\ \code{psram\_dq[3]} & D20 & 2 & IO & PSRAM DQ3 \\ \rowa \code{psram\_dq[4]} & G19 & 2 & IO & PSRAM DQ4 \\ \code{psram\_dq[5]} & J18 & 2 & IO & PSRAM DQ5 \\ \rowa \code{psram\_dq[6]} & J19 & 2 & IO & PSRAM DQ6 \\ \code{psram\_dq[7]} & J20 & 2 & IO & PSRAM DQ7 \\ \rowa \code{psram\_dq[8]} & K19 & 2 & IO & PSRAM DQ8 \\ \code{psram\_dq[9]} & K20 & 2 & IO & PSRAM DQ9 \\ \rowa \code{psram\_dq[10]} & L17 & 3 & IO & PSRAM DQ10 \\ \code{psram\_dq[11]} & M18 & 3 & IO & PSRAM DQ11 \\ \rowa \code{psram\_dq[12]} & M17 & 3 & IO & PSRAM DQ12 \\ \code{psram\_dq[13]} & N16 & 3 & IO & PSRAM DQ13 \\ \rowa \code{psram\_dq[14]} & N18 & 3 & IO & PSRAM DQ14 \\ \code{psram\_dq[15]} & P17 & 3 & IO & PSRAM DQ15 \\ \multicolumn{5}{l}{\textit{\color{fnDark}PSRAM control}}\\ \rowa \code{psram\_ce\_n} & N17 & 3 & OUT & PSRAM CE\# --- chip enable, active low. \\ \code{psram\_oe\_n} & R16 & 3 & OUT & PSRAM OE\# --- output enable (read). \\ \rowa \code{psram\_we\_n} & R17 & 3 & OUT & PSRAM WE\# --- write enable. \\ \code{psram\_lb\_n} & T16 & 3 & OUT & PSRAM LB\# --- lower-byte enable (DQ[7:0]). \\ \rowa \code{psram\_ub\_n} & N19 & 3 & OUT & PSRAM UB\# --- upper-byte enable (DQ[15:8]). \\ \code{psram\_zz\_n} & N20 & 3 & OUT & PSRAM ZZ\# --- sleep/snooze (high during normal operation). \\ \bottomrule \end{tabularx} \renewcommand{\arraystretch}{1.25} \vspace{4pt} \noindent {\footnotesize\color{fnGrey} Standard I/O: LVCMOS33 on all 57 signals. Boot config-SPI and JTAG balls (fixed-function dedicated pins, no RTL port) do not appear in this table --- see ch.~\ref{ch:hw} ยง``Configuration and programming''. Source: \code{synth/ecp5/spi\_neuron\_top.lpf}, generated by \code{tools/pinout/gen\_lpf.py} against Project~Trellis's \code{iodb.json}.\par}