How vipinkmenon/neuralnetwork works
This repository is a tutorial series for training MNIST neural networks, translating models into fixed-point ZyNet FPGA designs, and running inference from embedded software. The main workflow trains a network and saves parameters; the ZyNet API compiles a layer description into RTL and parameter-memory files; FPGA-side logic accepts inputs and produces a classification that embedded code reads. The tree and excerpts support the training and generation calls; RTL-internal and board-level connections are only partially shown, so those links are marked unverified.
Main entry points: trainNN.py Training script · zynet.v ZyNet top · nnTest.c Inference firmware · mnistZyNet.py MNIST model
Components 22
MNIST training
- Training script
Tut-6/trainNN.py - MNIST loader
Tut-6/mnist_loader.py - Neural network
Tut-6/network2.py - Saved parameters
Tut-5/WeigntsAndBiasesReLuNew.txt
Model generation
- MNIST model
Tut-5/mnistZyNet.py - ZyNet model API
Tut-5/zynet/zynet.py - Parameter reader
Tut-5/zynet/utils.py - RTL generator
Tut-5/zynet/gen_nn.py - Fixed-point converter
Tut-5/zynet/genWegitsAndBias.py - Generated RTL
Tut-5/src/fpga/rtl - Weight memories
Tut-5/src/fpga/rtl
FPGA inference
- ZyNet top
Tut-4/zynet.v - Dense layers
Tut-4/Layer_1.v - Neuron compute
Tut-4/neuron.v - Weight memory
Tut-4/Weight_Memory.v - AXI interface
Tut-4/axi_lite_wrapper.v - Class selector
Tut-4/maxFinder.v
Embedded runtime
- Digit input
Tut-9/dataValues.h - Inference firmware
Tut-9/nnTest.c
Other components
- Model developer
- AXI DMA
- ZyNet accelerator
Connections 20
- Model developer → Training script: runs training
Tut-6/trainNN.py - Training script → MNIST loader: loads data
Tut-6/trainNN.py - Training script → Neural network: trains network
Tut-6/trainNN.py - Training script → Saved parameters: saves parameters
- Model developer → MNIST model: configures model
Tut-5/mnistZyNet.py - MNIST model → ZyNet model API: builds model
Tut-5/mnistZyNet.py - MNIST model → Parameter reader: reads parameters
Tut-5/mnistZyNet.py - ZyNet model API → RTL generator: generates RTL
Tut-5/zynet/zynet.py - ZyNet model API → Fixed-point converter: converts parameters
Tut-5/zynet/zynet.py - RTL generator → Generated RTL: writes design
Tut-5/zynet/gen_nn.py - Fixed-point converter → Weight memories: writes memories
Tut-5/zynet/genWegitsAndBias.py - ZyNet top → Dense layers: instantiates layers
- Dense layers → Neuron compute: uses neurons
- Neuron compute → Weight memory: reads weights
- ZyNet top → AXI interface: exposes interface
- ZyNet top → Class selector: selects output
- Inference firmware → Digit input: transfers input
Tut-9/nnTest.c - Inference firmware → AXI DMA: starts transfer
Tut-9/nnTest.c - AXI DMA → ZyNet accelerator: sends input
- Inference firmware → ZyNet accelerator: reads result
Tut-9/nnTest.c