123 lines
11 KiB
TeX
123 lines
11 KiB
TeX
\babel@toc {english}{}\relax
|
|
\contentsline {chapter}{\numberline {1}System overview}{1}{chapter.1}%
|
|
\contentsline {section}{\numberline {1.1}Project goal}{1}{section.1.1}%
|
|
\contentsline {section}{\numberline {1.2}Hardware configuration versus network configuration}{1}{section.1.2}%
|
|
\contentsline {section}{\numberline {1.3}Boot and initialization}{2}{section.1.3}%
|
|
\contentsline {section}{\numberline {1.4}Training and inference}{2}{section.1.4}%
|
|
\contentsline {section}{\numberline {1.5}Design philosophy and reuse}{2}{section.1.5}%
|
|
\contentsline {chapter}{\numberline {2}RTL architecture}{3}{chapter.2}%
|
|
\contentsline {section}{\numberline {2.1}Hierarchical organization}{3}{section.2.1}%
|
|
\contentsline {section}{\numberline {2.2}Role of each module}{3}{section.2.2}%
|
|
\contentsline {section}{\numberline {2.3}Two execution paths}{4}{section.2.3}%
|
|
\contentsline {chapter}{\numberline {3}Compute datapath}{6}{chapter.3}%
|
|
\contentsline {section}{\numberline {3.1}INT8/INT32 arithmetic chain}{6}{section.3.1}%
|
|
\contentsline {section}{\numberline {3.2}\texttt {mac\_unit} --- multiply-accumulator}{6}{section.3.2}%
|
|
\contentsline {section}{\numberline {3.3}\texttt {mac8} --- parallel MAC and balanced adder tree}{6}{section.3.3}%
|
|
\contentsline {section}{\numberline {3.4}\texttt {neuron\_parallel} --- neuron FSM}{7}{section.3.4}%
|
|
\contentsline {subsection}{\numberline {3.4.1}Parameter guard (elaboration-time)}{7}{subsection.3.4.1}%
|
|
\contentsline {section}{\numberline {3.5}Activation functions}{8}{section.3.5}%
|
|
\contentsline {section}{\numberline {3.6}INT8 saturation}{8}{section.3.6}%
|
|
\contentsline {section}{\numberline {3.7}\texttt {layer} --- neurons in parallel}{8}{section.3.7}%
|
|
\contentsline {chapter}{\numberline {4}Parameters and configurability}{9}{chapter.4}%
|
|
\contentsline {section}{\numberline {4.1}Build parameters (synthesis-time)}{9}{section.4.1}%
|
|
\contentsline {section}{\numberline {4.2}Runtime network width}{9}{section.4.2}%
|
|
\contentsline {subsection}{\numberline {4.2.1}Measured savings}{10}{subsection.4.2.1}%
|
|
\contentsline {section}{\numberline {4.3}Characterized configurations}{10}{section.4.3}%
|
|
\contentsline {section}{\numberline {4.4}Build versus runtime summary}{10}{section.4.4}%
|
|
\contentsline {chapter}{\numberline {5}Memory subsystem}{11}{chapter.5}%
|
|
\contentsline {section}{\numberline {5.1}Memory chain}{11}{section.5.1}%
|
|
\contentsline {section}{\numberline {5.2}\texttt {int8\_memory\_access} --- byte/word conversion}{11}{section.5.2}%
|
|
\contentsline {section}{\numberline {5.3}\texttt {memory\_interface} --- handshake}{11}{section.5.3}%
|
|
\contentsline {section}{\numberline {5.4}\texttt {psram\_controller} --- physical bus}{11}{section.5.4}%
|
|
\contentsline {subsection}{\numberline {5.4.1}Timing}{12}{subsection.5.4.1}%
|
|
\contentsline {section}{\numberline {5.5}Read page mode}{12}{section.5.5}%
|
|
\contentsline {section}{\numberline {5.6}Address map and conventions}{13}{section.5.6}%
|
|
\contentsline {subsection}{\numberline {5.6.1}PSRAM physical addressing}{13}{subsection.5.6.1}%
|
|
\contentsline {section}{\numberline {5.7}Bandwidth}{13}{section.5.7}%
|
|
\contentsline {chapter}{\numberline {6}Memory, multi-neuron and multi-layer}{15}{chapter.6}%
|
|
\contentsline {section}{\numberline {6.1}\texttt {neuron\_memory} --- memory/neuron bridge}{15}{section.6.1}%
|
|
\contentsline {section}{\numberline {6.2}\texttt {layer\_sequencer} --- multi-layer network}{15}{section.6.2}%
|
|
\contentsline {subsection}{\numberline {6.2.1}Ping-pong buffers}{16}{subsection.6.2.1}%
|
|
\contentsline {subsection}{\numberline {6.2.2}Descriptor table}{16}{subsection.6.2.2}%
|
|
\contentsline {section}{\numberline {6.3}Hierarchy of the \texttt {busy}/\texttt {done} signals}{16}{section.6.3}%
|
|
\contentsline {chapter}{\numberline {7}Graph network (Type \#2)}{17}{chapter.7}%
|
|
\contentsline {section}{\numberline {7.1}Two network types}{17}{section.7.1}%
|
|
\contentsline {section}{\numberline {7.2}Global activation buffer}{17}{section.7.2}%
|
|
\contentsline {section}{\numberline {7.3}Feed-forward DAG and the \texttt {src\_id < out\_id} rule}{17}{section.7.3}%
|
|
\contentsline {section}{\numberline {7.4}Data formats}{17}{section.7.4}%
|
|
\contentsline {subsection}{\numberline {7.4.1}Type \#2 descriptor (graph)}{18}{subsection.7.4.1}%
|
|
\contentsline {subsection}{\numberline {7.4.2}Graph edge (4~bytes, aligned)}{18}{subsection.7.4.2}%
|
|
\contentsline {section}{\numberline {7.5}\texttt {graph\_engine} --- graph engine}{18}{section.7.5}%
|
|
\contentsline {section}{\numberline {7.6}Type \#2 opcodes and registers}{19}{section.7.6}%
|
|
\contentsline {section}{\numberline {7.7}Occupancy (Type \#2 enabled)}{19}{section.7.7}%
|
|
\contentsline {section}{\numberline {7.8}Gather bandwidth (measured)}{20}{section.7.8}%
|
|
\contentsline {section}{\numberline {7.9}\texttt {netasm} host assembler}{20}{section.7.9}%
|
|
\contentsline {chapter}{\numberline {8}SPI host interface}{21}{chapter.8}%
|
|
\contentsline {section}{\numberline {8.1}Physical layer}{21}{section.8.1}%
|
|
\contentsline {section}{\numberline {8.2}Framing and explicit length}{21}{section.8.2}%
|
|
\contentsline {section}{\numberline {8.3}Opcode table}{21}{section.8.3}%
|
|
\contentsline {section}{\numberline {8.4}\texttt {SET\_BASE} selectors}{23}{section.8.4}%
|
|
\contentsline {section}{\numberline {8.5}\texttt {STATUS.done} sticky / clear-on-read}{24}{section.8.5}%
|
|
\contentsline {section}{\numberline {8.6}Host attention pins (\texttt {data\_ready\_n}, \texttt {irq\_n})}{24}{section.8.6}%
|
|
\contentsline {section}{\numberline {8.7}\texttt {READ\_CONFIG}}{25}{section.8.7}%
|
|
\contentsline {section}{\numberline {8.8}Flash subsystem (opcodes 0x40--0x47, completed 2026-09-04)}{25}{section.8.8}%
|
|
\contentsline {section}{\numberline {8.9}Session sequences}{26}{section.8.9}%
|
|
\contentsline {subsection}{\numberline {8.9.1}Single-layer path}{26}{subsection.8.9.1}%
|
|
\contentsline {subsection}{\numberline {8.9.2}Multi-layer path (RUN\_NETWORK)}{26}{subsection.8.9.2}%
|
|
\contentsline {chapter}{\numberline {9}Network programming}{28}{chapter.9}%
|
|
\contentsline {section}{\numberline {9.1}General flow}{28}{section.9.1}%
|
|
\contentsline {section}{\numberline {9.2}Registers and opcodes involved}{28}{section.9.2}%
|
|
\contentsline {section}{\numberline {9.3}Type \#1 --- dense network}{29}{section.9.3}%
|
|
\contentsline {subsection}{\numberline {9.3.1}Memory layout}{29}{subsection.9.3.1}%
|
|
\contentsline {subsection}{\numberline {9.3.2}Worked example: a $4\to 4\to 2$ network}{29}{subsection.9.3.2}%
|
|
\contentsline {subsection}{\numberline {9.3.3}Host pseudocode (dense)}{29}{subsection.9.3.3}%
|
|
\contentsline {section}{\numberline {9.4}Type \#2 --- graph network}{30}{section.9.4}%
|
|
\contentsline {subsection}{\numberline {9.4.1}Memory layout}{30}{subsection.9.4.1}%
|
|
\contentsline {subsection}{\numberline {9.4.2}Worked example}{30}{subsection.9.4.2}%
|
|
\contentsline {subsection}{\numberline {9.4.3}Host pseudocode (graph)}{30}{subsection.9.4.3}%
|
|
\contentsline {subsection}{\numberline {9.4.4}\texttt {netasm} pseudo-assembly}{31}{subsection.9.4.4}%
|
|
\contentsline {chapter}{\numberline {10}Arbitration and top-level}{32}{chapter.10}%
|
|
\contentsline {section}{\numberline {10.1}\texttt {mem\_arbiter} --- three-port arbiter}{32}{section.10.1}%
|
|
\contentsline {section}{\numberline {10.2}\texttt {spi\_neuron\_top} --- full integration}{32}{section.10.2}%
|
|
\contentsline {chapter}{\numberline {11}ECP5 implementation}{34}{chapter.11}%
|
|
\contentsline {section}{\numberline {11.1}Flow and verification}{34}{section.11.1}%
|
|
\contentsline {section}{\numberline {11.2}Datapath benchmark (256$\times $4)}{34}{section.11.2}%
|
|
\contentsline {subsection}{\numberline {11.2.1}Fmax and throughput versus parallelism}{35}{subsection.11.2.1}%
|
|
\contentsline {subsection}{\numberline {11.2.2}Interpretation}{35}{subsection.11.2.2}%
|
|
\contentsline {subsection}{\numberline {11.2.3}Critical path and the 100~MHz limit}{35}{subsection.11.2.3}%
|
|
\contentsline {section}{\numberline {11.3}Full integrated system}{35}{section.11.3}%
|
|
\contentsline {subsection}{\numberline {11.3.1}Cause: the saturation/ReLU carry chain}{35}{subsection.11.3.1}%
|
|
\contentsline {subsection}{\numberline {11.3.2}Timing closure (2026-09-03)}{36}{subsection.11.3.2}%
|
|
\contentsline {chapter}{\numberline {12}Hardware design and pinout}{37}{chapter.12}%
|
|
\contentsline {section}{\numberline {12.1}Target device}{37}{section.12.1}%
|
|
\contentsline {section}{\numberline {12.2}Pin budget}{37}{section.12.2}%
|
|
\contentsline {section}{\numberline {12.3}Signal map (top-level \texttt {spi\_neuron\_top}) --- real balls}{38}{section.12.3}%
|
|
\contentsline {section}{\numberline {12.4}Per-bank allocation (real die geometry)}{40}{section.12.4}%
|
|
\contentsline {section}{\numberline {12.5}PSRAM subsystem}{40}{section.12.5}%
|
|
\contentsline {subsection}{\numberline {12.5.1}PSRAM connection (FPGA-exclusive)}{40}{subsection.12.5.1}%
|
|
\contentsline {section}{\numberline {12.6}Clock}{41}{section.12.6}%
|
|
\contentsline {section}{\numberline {12.7}Power}{41}{section.12.7}%
|
|
\contentsline {section}{\numberline {12.8}Configuration and programming}{41}{section.12.8}%
|
|
\contentsline {subsection}{\numberline {12.8.1}JTAG (development / debug)}{41}{subsection.12.8.1}%
|
|
\contentsline {subsection}{\numberline {12.8.2}Config-SPI to boot flash}{41}{subsection.12.8.2}%
|
|
\contentsline {subsection}{\numberline {12.8.3}Configuration modes (\texttt {CFGMDN})}{42}{subsection.12.8.3}%
|
|
\contentsline {section}{\numberline {12.9}Open tasks before schematic capture}{42}{section.12.9}%
|
|
\contentsline {chapter}{\numberline {13}Quick reference}{44}{chapter.13}%
|
|
\contentsline {section}{\numberline {13.1}SPI opcodes}{44}{section.13.1}%
|
|
\contentsline {section}{\numberline {13.2}STATUS byte}{44}{section.13.2}%
|
|
\contentsline {section}{\numberline {13.3}SET\_BASE selectors}{44}{section.13.3}%
|
|
\contentsline {section}{\numberline {13.4}Descriptor table (11 bytes/layer, MSB-first)}{44}{section.13.4}%
|
|
\contentsline {section}{\numberline {13.5}Build parameters}{44}{section.13.5}%
|
|
\contentsline {chapter}{\numberline {14}Roadmap and development status}{45}{chapter.14}%
|
|
\contentsline {section}{\numberline {14.1}Development phases}{45}{section.14.1}%
|
|
\contentsline {section}{\numberline {14.2}Component status}{45}{section.14.2}%
|
|
\contentsline {section}{\numberline {14.3}Architectural principle (summary)}{46}{section.14.3}%
|
|
\contentsline {section}{\numberline {14.4}Long-term vision}{46}{section.14.4}%
|
|
\contentsline {chapter}{\numberline {A}Modules and toolchain}{47}{appendix.A}%
|
|
\contentsline {section}{\numberline {A.1}List of RTL modules}{47}{section.A.1}%
|
|
\contentsline {section}{\numberline {A.2}Ports of the top-level \texttt {spi\_neuron\_top}}{47}{section.A.2}%
|
|
\contentsline {section}{\numberline {A.3}Toolchain}{47}{section.A.3}%
|
|
\contentsline {subsection}{\numberline {A.3.1}Main nextpnr parameters}{47}{subsection.A.3.1}%
|
|
\contentsline {subsection}{\numberline {A.3.2}Simulation example}{48}{subsection.A.3.2}%
|
|
\contentsline {section}{\numberline {A.4}Main testbenches}{48}{section.A.4}%
|