
Getting started: Design di un Perceptron in FPGA con Vivado
Sommario In questo articolo per la rivista Elettronica Open Source avevamo già visto sia la teoria sia la pratica su come realizzare un modello con Simulink (Matlab) e System Generator di una semplice rete neurale artificiale (ANN) perceptron e come eseguirne l’addestramento con NNTOOL. Seguendo un procedimento analogo possiamo implementare il nostro perceptron su un FPGA. Tech Stack[1] Vivado 2017.3 PerceptronVogliamo realizzare un semplice perceptron a due ingressi La prima parte della rete calcola il potenziale di attivazione La seconda parte, invece, serve a calcolare il valore del segnale di uscita HardlimLa funzione di trasferimento System Generator include il blocco M-Code che può essere utilizzato per scrivere il codice Matlab per la funzione di trasferimento.
L'immagine seguente mostra com'è il blocco dopo che il modello è stato compilato: - due ingressi (sums, bias) System generatorSimulink è un ambiente grafico per il Model-Based design che supporta la progettazione , la simulazione, la generazione automatica del codice, il testing e la verifica di sistemi embedded. I blocchi di SysGen non convertono automaticamente i numeri a virgola mobile (floating point) di Simulink in virgola fissa (fixed point). Infatti dobbiamo utilizzare i blocchi Gateway In e Gateway Out per convertire da floating point a fixed point e viceversa. I nomi che associamo ai gateways in input e output corrisponderanno a quelli della entity del codice VHDL generato da SysGen. Quindi avremo i due inputs Addestriamo la rete neuraleIn Prontuario filo-logico per un elettronico avevamo già visto come il connettivo OR risulta falso solo se entrambi i valori sono falsi (0+0=0), vera se almeno uno dei due valori è vero (1+0=1;0+1=1;1+1=1).
Ora dobbiamo inizializzare l'oggetto perceptron indicando che abbiamo come valori minimi e massimi di addestramento i due inputs con un range [0 1] e che la nostra rete è composta da un solo neurone.
Ogni ciclo di apprendimento della rete neurale viene detto epoca (epoch) e dobbiamo indicarne un numero sufficiente perché la nostra rete possa apprendere correttamente. Addestriamo il perceptron ad esempio per 10 epoche anche se di solito ne impiega solo 3 essendo una rete molto semplice.
Di default i pesi sinaptici (weights) e bias hanno un valore iniziale di
Non ci resta che inserire i valori ottenuti nei corrispettivi constant blocks di SysGen
System Generator TokenIl token System Generator è un blocco speciale della libreria Xilinx Blockset che
Infine selezioniamo la cartella di destinazione (3) di dove verranno generati i files. Perceptron: IP-CoreUn progetto Vivado è organizzato in blocchi IP (Intellectual Property) di cui quello inserito per primo è il Top Module.
I tools per la descrizione hardware di Xilinx utilizzano due tipi di files diversi per la location dei IO pins: UCF (user contraits files) e XDC (xilinx design contraints). Usati rispettivamente da ISE e Vivado. Creando il file .xdc manualmente
Oppure utilizzando la GUI di Vivado
Bibliografia[1] Donald O. Hebb, L'organizzazione del comportamento: una teoria neuropsicologica, Franco Angeli, 1975 Nexys Vivado JEDEC Standard Model-based design |