Acelerador de redes neurais inspirado na arquitetura SNNAP (Moreau et al., FPGA'15), reduzido para FPGAs de baixo custo: 2 PUs × 4 PEs, aritmética Q9.7, sigmoide em LUT e interface de host via UART (frames com CRC8). Alvos: Tang Nano 9k (27 MHz) e Cyclone IV EP4CE22 (50 MHz).
src/core/ pe, datapath_chain, sigmoid_unit, sigmoid_lut (gerada), snnap_pkg
src/control/ sequencer (FSM de microcódigo)
src/memory/ dp_bram, sync_fifo
src/pu/ snnap_pu (PU completa)
src/io/ uart_rx, uart_tx, host_link
src/top/ snnap_top
tb/ 7 testbenches (tb_pe ... tb_top, tb_perf)
scripts/ gen_vectors.py (golden model + vetores), run_sim.sh
docs/ plan.md, microcode_isa.md, performance_report.md
python3 scripts/gen_vectors.py # gera LUT da sigmoide + vetores de teste
./scripts/run_sim.sh tb_pe # roda um testbench
./scripts/run_sim.sh tb_pu --wave # ... com waveform (sim/wave/tb_pu.ghw)
gtkwave sim/wave/tb_pu.ghw # visualizarTestbenches: tb_pe, tb_sigmoid, tb_datapath_chain, tb_sequencer,
tb_pu, tb_top (sistema completo via UART) e tb_perf (medição de ciclos).
Desempenho medido: ver docs/performance_report.md.
Treina um MLP pequeno (2→6→1, sigmoide) no dataset sintético "duas luas",
quantiza para Q9.7 e roda a inferência — ponto a ponto, de verdade — na
snnap_pu via GHDL (tb/tb_demo_classifier.vhd), depois compara com o
modelo em float:
python3 -m venv .venv && .venv/bin/pip install numpy matplotlib
.venv/bin/python3 scripts/gen_demo_classifier.py gen
./scripts/run_sim.sh tb_demo_classifier
.venv/bin/python3 scripts/gen_demo_classifier.py plot # gera docs/demo_moons_result.pngRoteiro de apresentação com esse demo passo a passo:
docs/roteiro_apresentacao.md.