Il percorso sui dispositivi logici programmabili, che sta portando il canale dritto verso gli FPGA prima di affrontare altre schede più avanti, procede questa settimana con un passo pratico prima ancora che teorico: serve più I/O sulla dev board Xilinx per poter implementare in VHDL le strutture combinatorie e sequenziali viste finora nel corso di elettronica digitale. La scheda di sviluppo, da sola, mette a disposizione pochi pulsanti e pochi LED, non abbastanza per testare con continuità circuiti che devono leggere più ingressi e pilotare più uscite contemporaneamente.
Nasce così una scheda di espansione pensata apposta per questo: switch, pulsanti, una barra di LED e otto LED singoli, più un componente meno scontato, un buffer bidirezionale che permette di interfacciare la logica a 3,3V della dev board con dispositivi a 5V. In questo episodio si vede tutto il percorso, dallo schema alla saldatura fino a un primo collaudo in VHDL che verifica che la scheda risponda come previsto.
A cosa serve questa scheda di espansione
L’idea di fondo è semplice: la dev board Xilinx basta e avanza per capire come si scrive e si sintetizza un progetto VHDL, ma per vedere all’opera le strutture digitali, dai circuiti combinatori più semplici a quelli sequenziali più articolati, servono ingressi e uscite fisiche su cui mettere le mani. Da qui la scelta di realizzare una scheda dedicata con switch e pulsanti come ingressi, LED e barra LED come uscite, così da poter collegare direttamente ai pin della FPGA i segnali che il corso ha trattato finora in astratto o su breadboard.
Lo schema elettrico, disegnato su Easy, non presenta nulla di particolarmente complesso: gli switch commutano tra 3,3V e massa, con l’alimentazione fornita direttamente dalla scheda di sviluppo, e i LED completano il quadro delle uscite visive. L’elemento che merita un discorso a parte è il buffer LVC245.
Il componente chiave: il buffer bidirezionale LVC245
L’LVC245 è un buffer a otto canali, bidirezionale, con una linea dedicata che ne stabilisce il verso di trasmissione o ricezione. La caratteristica che lo rende utile in questo contesto è nella tensione di alimentazione: il datasheet indica un range di VCC che va da 2,0V a 5,5V, ma tutti gli ingressi possono arrivare fino a 5V anche quando il chip è alimentato a una tensione inferiore. In pratica è il componente ideale per interfacciare una logica a 3,3V, come quella della dev board Xilinx, con dispositivi a 5V, un’esigenza già emersa più volte in altri esperimenti del canale. Per questo si è deciso di integrare questa possibilità direttamente sulla scheda di IO, così da averla disponibile ogni volta che serve senza dover improvvisare un adattamento a parte.
Dallo schema al PCB
Il PCB, visibile una volta arrivato, è stato realizzato in nero, come la dev board Xilinx stessa: una scelta puramente estetica, ma che dà comunque soddisfazione. Il disegno è pensato per incastrarsi esattamente sopra la scheda di sviluppo, lasciando comunque visibili i display già presenti su di essa, così da poter usare entrambe le schede insieme senza compromessi.
Il montaggio: dagli SMD ai componenti passivi
I componenti più delicati da saldare sono i due LVC245, scelti in package SMD per restare compatti. La saldatura degli SMD a mano è ormai una tecnica familiare a chi segue il corso, anche se qui si è ancora nella parte introduttiva dell’elettronica digitale prima di affrontare argomenti via via più complessi: si stagna il primo pin, si posiziona il componente allineandolo al riferimento serigrafico, si tiene fermo e si salda quel primo pin, poi si ripete sul pin opposto per bloccare l’allineamento, si applica del flussante e infine si saldano tutti gli altri pin, aiutandosi con il microscopio per verificare che lo stagno in eccesso se ne vada lasciando i contatti puliti.
Fatta la parte più delicata, il montaggio prosegue in ordine di altezza dei componenti. Prima le resistenze da 1 kOhm associate ai pulsanti (R1-R8): sono resistenze di sicurezza, non strettamente necessarie visto che gli ingressi vanno comunque a 3,3V o a massa, ma utili nel caso in cui all’accensione un pin non fosse ancora configurato correttamente e si trovasse temporaneamente in uscita invece che in ingresso. Poi altre quattro resistenze da 10 kOhm, queste dedicate al pull-up dei due canali del buffer bidirezionale. Sul retro della scheda, la serigrafia riporta i nomi dei segnali corrispondenti sulla scheda di sviluppo: switch, barra LED e buffer. Seguono i due condensatori di disaccoppiamento da 100 nF (siglati 104).
I pulsanti, più bassi degli altri componenti, hanno un solo verso di inserimento possibile grazie alla forma leggermente più larga che lunga del package, quindi non richiedono particolare attenzione all’orientamento.
Più delicate sono invece le tre reti resistive: due da 330 ohm per i LED e per la barra LED, una da 1 kOhm per il pull-up dei pulsanti (il classico schema per cui il pulsante non premuto restituisce 3,3V, mentre premuto va a massa). Le reti resistive hanno un terminale comune, indicato da un puntino sul package, e vanno orientate verificando sullo schema a quale nodo è collegato quel terminale comune: in questo caso sempre massa, per cui l’orientamento va controllato caso per caso confrontando la rete con lo schema elettrico prima di saldarla.
Per i LED, otto in totale, metà rossi e metà verdi, l’attenzione va posta sul catodo: si riconosce dal terminale più corto (o, se il piedino è già stato tagliato, dallo smusso sul bordo del package) e sulla serigrafia della scheda è indicato il verso corretto di inserimento. Segue il montaggio della barra LED e degli switch.
Sul lato superiore restano da saldare i connettori dei due canali del buffer bidirezionale e alcuni pin della dev board non altrimenti utilizzati, ma comunque riportati sulla scheda di espansione per un uso futuro. Sul lato inferiore, per fissare la scheda sulla dev board, si utilizzano file di pin piegati e saldati in modo da restare allineati con i connettori della scheda di sviluppo: in un punto la resistenza di una rete resistiva non era stata tagliata a filo e ha toccato leggermente il connettore sottostante, un dettaglio da correggere tagliando meglio i reofori nella prossima saldatura di questo tipo.
Pulizia e primo aggancio sulla dev board
Dopo una pulita con alcol isopropilico, la scheda viene innestata sulla dev board Xilinx. Lo spessore della saldatura sul lato dei connettori crea una leggera curvatura che fa toccare un po’ il cavo di collegamento del programmatore: un aspetto da tenere in considerazione in un’eventuale revisione futura del PCB, anche se i contatti elettrici funzionano correttamente e non impediscono il collaudo. Tolta anche la pellicola protettiva della barra LED, la scheda è pronta per il primo test.
Il collaudo in VHDL
Per il collaudo è stato preparato, come sempre su ISE, un file di constraint UCF che assegna un nome a ciascun segnale della scheda: gli otto pulsanti, gli otto switch, gli otto LED, la barra LED e gli otto canali del buffer bidirezionale, più le linee di direzione e abilitazione che permettono di mettere il buffer in alta impedenza o di impostarne il verso. Sono proprio queste ultime due linee a rendere il buffer utile anche in altri contesti, per esempio nel collegamento a memorie o nell’interfacciamento con un Arduino a 5V, dove poter pilotare senza problemi dispositivi a tensione più alta torna comodo.
Il codice VHDL scritto per la prova è volutamente semplice: definisce come ingressi pulsanti e switch, come uscite i LED e la barra LED, mentre per questo test i canali del buffer sono impostati solo in uscita, senza ancora verificare l’ingresso. La logica interna è un piccolo contatore, ottenuto dividendo il clock della scheda fino a 1 Hz, il cui valore viene inviato sui due canali a 8 bit del buffer. Lo stato dei pulsanti, che sono collegati in pull-up, viene semplicemente riportato sui LED: pulsante non premuto significa un logico 1 e quindi LED acceso, pulsante premuto porta il segnale a massa e il LED corrispondente si spegne.
Per visualizzare il valore del contatore è stato collegato uno dei moduli esadecimali a 8 bit già usati in altre occasioni sul canale, alimentato a 5V proprio grazie al buffer di livello della scheda di espansione. Dopo la generazione del bitstream su ISE, la programmazione via boundary scan e Impact è andata a buon fine, e il test ha confermato il funzionamento atteso: il contatore avanza correttamente sul modulo esadecimale, i LED risultano accesi finché i relativi pulsanti non vengono premuti uno per volta, e attivando gli switch uno per uno si accendono i corrispondenti segmenti della barra LED.
Cosa aspettarsi
Con questa scheda di espansione la dev board Xilinx guadagna gli ingressi e le uscite necessari per proseguire il percorso sul VHDL con esempi via via più complessi, sia sul fronte combinatorio sia su quello sequenziale, probabilmente anche combinando i due aspetti insieme, e con margini di lavoro più ampi di quelli permessi da una breadboard. Prima di arrivare al prossimo grande capitolo del corso di elettronica digitale, quello dedicato ai microprocessori, ci sarà quindi ancora spazio per mettere alla prova questa scheda con nuovi circuiti.
Per vedere lo schema completo su EasyEDA, il montaggio passo passo al microscopio e il collaudo dal vivo sulla dev board, il video di questa settimana è disponibile sul canale.
