Was a separate, untracked directory (DataSheet/) outside the repo. Renamed to lowercase and moved in as hardware/v2/docs/datasheet/, with its own .gitignore for LaTeX build byproducts (compiled PDFs stay tracked, .aux/.log/.toc/etc do not). Now versioned and shares this repo's own remote instead of living untracked on disk. Content: IT+EN LaTeX chapter sources, reference manufacturer PDFs, and compiled datasheet PDFs including the 2026-09-07 SDRAM upgrade addendum (AS4C32M16SB-7BIN part/pinout/timing) in the v2-en chapters. Note: hardware/v2/docs/DatasheetLatex/ (and the v1 sibling) is a separate, already-tracked, differently-structured LaTeX document that predates this move -- left untouched, not merged, since its chapter set and content differ and merging was not requested. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013xXuuRUWZScuo1DeYJxs3v
66 lines
3.4 KiB
TeX
66 lines
3.4 KiB
TeX
\chapter{Host / graph-loader interface}
|
|
\label{ch:host}
|
|
|
|
\begin{fnwarn}[Scope of this chapter]
|
|
V1's own host interface is a real, placed, physically-verified SPI Mode~0
|
|
slave (ch.~7 of the V1 datasheet). V2's equivalent --- a node-registration
|
|
bus into \code{neural\_multiprocessor.v} --- has, in this revision, been
|
|
exercised exclusively from Verilator testbenches and unconstrained
|
|
synthesis top-levels. This chapter describes the \textbf{logical}
|
|
protocol only; no real host-side driver (SPI or otherwise) has been
|
|
built or placed yet. See ch.~\ref{ch:roadmap}.
|
|
\end{fnwarn}
|
|
|
|
\section{Node registration protocol}
|
|
A simple valid/ready producer interface, backpressure-safe: the loader
|
|
holds \code{reg\_valid} and the node's own fields until \code{reg\_ready}
|
|
is observed high on the same cycle, exactly like registering into any
|
|
FIFO. \code{reg\_ready} for a given \code{reg\_node\_id} is asserted
|
|
whenever that node's own table slot is \code{EMPTY} (\S\ref{ch:sched}).
|
|
|
|
\begin{tabularx}{\textwidth}{L{3.2cm} C{1.6cm} Y}
|
|
\toprule
|
|
\rowh \thd{Field} & \thd{Width} & \thd{Meaning} \\
|
|
\midrule
|
|
\code{reg\_node\_id} & $\lceil\log_2\text{N\_NODES}\rceil$ & This node's own id --- doubles as its table slot index. \\
|
|
\rowa \code{reg\_required} & $\lceil\log_2(\text{MAX\_DEPS}{+}1)\rceil$ & How many of \code{reg\_producer\_ids} are meaningful (0 $\Rightarrow$ immediately \code{READY}). \\
|
|
\code{reg\_producer\_ids} & \code{MAX\_DEPS}$\times\lceil\log_2\text{N\_NODES}\rceil$ & Packed array of producer node ids this node depends on. \\
|
|
\rowa \code{reg\_x\_base} & \code{ADDR\_WIDTH} & Base byte address of this node's activation vector. \\
|
|
\code{reg\_w\_base} & \code{ADDR\_WIDTH} & Base byte address of this node's weight vector. \\
|
|
\rowa \code{reg\_n\_tiles} & 16 & Number of P\_IN-wide tiles to accumulate. \\
|
|
\code{reg\_result\_addr} & \code{ADDR\_WIDTH} & Byte address the computed INT8 result is written to. \\
|
|
\bottomrule
|
|
\end{tabularx}
|
|
|
|
\begin{fnnote}[A node id is a real, finite resource]
|
|
Because dispatched node table slots are never reclaimed
|
|
(\S\ref{ch:sched}), a loader driving many independent jobs over a long
|
|
session must use a fresh \code{reg\_node\_id} for each one, within
|
|
\code{N\_NODES}. Reusing a value before the system has been reset will
|
|
simply be refused (\code{reg\_ready} stays low for an occupied,
|
|
non-\code{EMPTY} node id) --- it will not corrupt anything, but it will
|
|
also not register.
|
|
\end{fnnote}
|
|
|
|
\section{Result readback}
|
|
The computed INT8 result is written to \code{reg\_result\_addr} through
|
|
the same real PSRAM chain every other memory access uses --- there is no
|
|
separate result-readback port; the host/loader reads the result byte
|
|
back from PSRAM directly, the same convention every V2 testbench in this
|
|
project uses for verification.
|
|
|
|
\section{What a real host driver would still need to add}
|
|
\begin{itemize}
|
|
\item A physical transport (SPI, parallel bus, or otherwise) carrying
|
|
the fields of \S\ref{ch:host}'s own table across a real pin
|
|
interface --- not designed in this revision.
|
|
\item A completion-notification path back to the host (V1's own
|
|
\code{data\_ready\_n}/\code{STATUS.done} has no V2 analogue yet);
|
|
today, completion is only observable internally
|
|
(\code{dir\_job\_out\_done}) or by polling the expected result
|
|
address.
|
|
\item Per-job \code{bias}/\code{activation} selection, currently
|
|
hardcoded to \code{bias=0}/\code{ACT\_RELU} for every job
|
|
(\S\ref{ch:datapath}).
|
|
\end{itemize}
|