How tayari-baha-eddine/eyetrack-fpga works
EyeTrack-FPGA is a pupil-localization research prototype: it prepares Swirski eye images as 16×16 inputs, trains and evaluates a Python MLP, quantizes it for fixed-point inference, and exports parameters to a sequential VHDL implementation. The README documents bit-exact comparison with a Python integer reference. The main Python evaluation and quantization calls are visible in excerpts; dataset preparation and RTL wiring are represented only where the README documents them, so some edges are omitted.
Main entry points: evaluate.py Model evaluation · eye_mlp_top.vhd MLP top-level · quantized_reference.py Integer reference · train.py MLP training
Components 19
Data preparation
- ROI preprocessing
src/data/prepare_dataset_swirski.py - 16×16 dataset
Python modeling
- MLP training
src/models/train.py - EyeMLP
src/models/mlp.py - Error metrics
src/evaluation/metrics.py - Threshold baseline
src/evaluation/baseline.py - Model evaluation
src/evaluation/evaluate.py
Fixed-point deployment
- INT8 quantization
src/quantization/quantize.py - Quantized parameters
artifacts/qparams.npz - Integer reference
src/quantization/quantized_reference.py - VHDL parameter export
src/quantization/export_vhdl_params.py - Test vectors
src/quantization/gen_vectors.py
VHDL inference
- VHDL parameters
rtl/top/eye_mlp_params.vhd - MLP top-level
rtl/top/eye_mlp_top.vhd - Dense layer
rtl/layers/dense_layer.vhd - MLP arithmetic package
rtl/units/mlp_pkg.vhd - Inference testbench
rtl/tb/tb_eye_mlp.vhd
Other components
- Researcher
- Swirski images
Connections 23
- Researcher → ROI preprocessing: prepares data
README.md - Swirski images → ROI preprocessing: provides images
README.md - ROI preprocessing → 16×16 dataset: produces inputs
README.md - 16×16 dataset → MLP training: trains on
README.md - MLP training → EyeMLP: instantiates
src/models/train.py - MLP training → Error metrics: evaluates epochs
src/models/train.py - 16×16 dataset → Model evaluation: provides split
src/evaluation/evaluate.py - Model evaluation → EyeMLP: runs inference
src/evaluation/evaluate.py - Model evaluation → Threshold baseline: fits and predicts
src/evaluation/evaluate.py - Model evaluation → Integer reference: runs integer inference
src/evaluation/evaluate.py - Model evaluation → Error metrics: computes errors
src/evaluation/evaluate.py - EyeMLP → INT8 quantization: provides weights
src/quantization/quantize.py - 16×16 dataset → INT8 quantization: calibrates on train
src/quantization/quantize.py - INT8 quantization → Quantized parameters: writes parameters
src/quantization/quantize.py - Quantized parameters → Integer reference: loads parameters
src/quantization/quantized_reference.py - Quantized parameters → VHDL parameter export: loads parameters
src/quantization/export_vhdl_params.py - VHDL parameter export → VHDL parameters: writes constants
src/quantization/export_vhdl_params.py - VHDL parameters → MLP top-level: supplies weights
README.md - MLP top-level → Dense layer: computes layers
README.md - MLP top-level → MLP arithmetic package: uses arithmetic
- Test vectors → Integer reference: generates reference outputs
src/quantization/gen_vectors.py - Integer reference → Inference testbench: compared bit-for-bit
README.md - Inference testbench → MLP top-level: simulates inference
README.md