Sommario:
- Passaggio 1: progettare il circuito che rappresenterà l'"FPGA"
- Passaggio 2: inserire l'FPGA
- Passaggio 3: da FPGA ad Arduino
- Passaggio 4: da Arduino a DIP Chip su una breadboard
- Passaggio 5: conclusione
Video: Arduino come FPGA breadboard economico: 5 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
La progettazione di circuiti logici hardware può essere divertente. Il modo vecchia scuola per farlo era con porte NAND, su una breadboard, cablate con fili di ponticello. Questo è ancora possibile, ma non ci vuole molto prima che il numero di porte sfugga di mano. Un'opzione più recente consiste nell'utilizzare un FPGA (Field Programmable Gate Array). Questi chip possono ricablarsi per diventare qualsiasi circuito logico digitale che puoi progettare, ma non sono economici e facilmente disponibili. Mostrerò come questo FPGA può essere sostituito con un chip Atmega economico di un Arduino UNO, inserendo efficacemente il circuito digitale in un pacchetto DIP, che è molto adatto alla breadboard.
Passaggio 1: progettare il circuito che rappresenterà l'"FPGA"
Costruirò un sommatore a 2 bit + 2 bit. Richiede due coppie di pin di ingresso logico e genera una tripletta di pin di uscita.
Per fare ciò con le porte NAND, vedere lo schema nell'immagine. Ha bisogno di 14 porte NAND. Ho usato 4 chip TTL quad NAND gate e li ho collegati alla breadboard.
Ho aggiunto alcuni LED (non dimenticare i resistori di limitazione della corrente) per mostrare quando i pin di input e output erano accesi (alti) e quando erano spenti (bassi). Per pilotare i pin di ingresso, li ho collegati al binario di terra o al binario di alimentazione positivo.
Questo circuito funziona, ma occupa già 4 chip TTL ed è un covo di cavi. Se fossero necessari più bit, ci sarebbero più breadboard e più jumper. Molto rapidamente le dimensioni del circuito sarebbero sfuggite di mano.
Una nota a margine, quando si lavora con porte TTL, non emettono esattamente 0 V o 5 V come ci si aspetterebbe. Spesso emettono circa 3 V per "alto", ma la tensione esatta è in un intervallo molto ampio. Lo stesso circuito che utilizza i chip equivalenti CMOS avrebbe oscillazioni da 0V a esattamente 5V.
Passaggio 2: inserire l'FPGA
Un FPGA è un chip fantastico, che può letteralmente diventare qualsiasi combinazione di porte logiche, cablate insieme in qualsiasi combinazione. Si progetta il "circuito" in un linguaggio di progettazione hardware (HDL). Esistono più lingue di questo tipo, una delle quali si chiama Verilog. Il file.v nell'immagine è l'equivalente Verilog del sommatore a due bit. Il file.pch sottostante è anche necessario per assegnare i pin di input e output nominati nel file Verilog ai pin hardware reali sul chip.
In questo caso sto usando una scheda di sviluppo iCEstick di Lattice Semiconductors (https://www.latticesemi.com/icestick). L'attuale chip FPGA è un iCE40HX-1k, con poco più di 1000 porte, ognuna delle quali può diventare qualsiasi porta logica. Ciò significa che ogni porta può essere una porta NAND o una porta OR, NON porta, NOR, XOR, ecc. Inoltre, ogni porta può gestire più di due ingressi. Questo è specifico per ogni produttore, ma sull'iCE40 ogni gate può gestire 4 ingressi. Quindi ogni porta è molto più capace delle porte NAND a 2 ingressi.
Ho dovuto assegnare i 4 pin di input e i 3 pin di output ai pin fisici 91, 90, 88, 87, 81, 80 e 79 rispettivamente. Questo è specifico per il chip FPGA e la scheda breakout su cui si trova e come questi pin sono collegati alla porta PMOD. Questo è disponibile nelle schede tecniche di questa scheda FPGA.
Lattice fornisce la propria catena di strumenti per sintetizzare (l'equivalente FPGA della compilazione per CPU) da Verilog, ma ho usato la catena di strumenti open source gratuita icestorm (https://www.clifford.at/icestorm/). Le istruzioni di installazione sono disponibili su quel sito. Con icestorm installato e i file verilog e pcf, i comandi per caricare questo circuito sull'FPGA sono:
yosys -p "synth_ice40 -blif twoBitAdder.v" twoBitAdder.blif
arachne-pnr -d 1k -p iCEstick.pcf twoBitAdder.blif -o twoBitAdder.asc
icepack twoBitAdder.asc twoBitAdder.bin
iceprog twoBitAdder.bin
Funziona alla grande, ma inclusa la spedizione di questo iCEstick costerà circa $ 30. Questo non è il modo più economico per costruire un circuito digitale, ma è potente. Ha oltre 1000 porte e per questo piccolo circuito ne usa solo 3. L'equivalente della porta NAND utilizzava 14 porte. Ciò è dovuto al fatto che ogni porta può diventare qualsiasi tipo di porta, e ogni porta è in realtà una porta a 4 ingressi. Ogni cancello può fare di più. Se hai bisogno di più porte, l'iCEstick ha un fratello maggiore con 8000 porte, che costa circa il doppio. Altri produttori hanno altre offerte, ma il prezzo può diventare piuttosto alto.
Passaggio 3: da FPGA ad Arduino
Gli FPGA sono fantastici, ma possono essere costosi, difficili da trovare e non sono molto adatti al breadboard. Un chip amichevole ed economico per la breadboard è l'Atmega 328 P, che viene fornito in un pacchetto DIP pulito, perfetto per il breadboard. Si può anche avere per circa $4. Questo è il cuore di Arduino UNO. Ovviamente potresti usare l'intero UNO, ma essere economico, possiamo estrarre l'Atmega 328 P dall'ONU e usarlo da solo. Tuttavia, ho usato la scheda UNO come programmatore per l'Atmega.
A questo punto ti servirà
1. Un Arduino UNO, con la CPU Atmega 328P rimovibile.
2. Un altro Atmega 328P con il bootloader Arduino pre-masterizzato, in sostituzione di quello che stiamo per estrarre dall'ONU. (Facoltativo supponendo che tu voglia ancora avere un UNO utilizzabile).
L'obiettivo è convertire il file verilog in un progetto arduino che può essere caricato nel 328P. Arduino è basato su C++. Per comodità c'è un traduttore da Verilog a C++, chiamato Verilator (https://www.veripool.org/wiki/verilator). Verilator è destinato ai progettisti di hardware che hanno bisogno di simulare i loro progetti prima di affidare tali progetti a hardware costoso. Verilator cross compila il verilog in C++, quindi l'utente fornisce un cablaggio di prova per fornire segnali di input simulati e registrare i segnali di output. Lo useremo per inserire il progetto Verilog nell'Atmega 328P utilizzando la catena di strumenti Arduino.
Prima installa Verilator. Segui le istruzioni su
Installa anche l'IDE Arduino e verifica che possa connettersi ad Arduino UNO tramite USB.
Utilizzeremo lo stesso file Verilog dell'FPGA, tranne per il fatto che i nomi dei pin devono essere modificati. Ho aggiunto un carattere di sottolineatura (_) all'inizio di ciascuno. Questo è necessario perché le librerie arduino includono un file di intestazione che traduce cose come B0, B001, ecc., In numeri binari. Gli altri nomi dei pin di input sarebbero andati bene così come sono, ma B0 e B1 avrebbero causato il fallimento della build.
Nella directory contenente twoBitAdder.v e iCEstick.pcf, esegui quanto segue:
verilator -Wall --cc twoBitAdder.v
Questo creerà una sottodirectory chiamata obj_dir contenente diversi nuovi file. Abbiamo solo bisogno dei file header e cpp, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h e VtwoBitAdder_Syms.cpp.
Nell'IDE Arduino, crea un nuovo schizzo chiamato twoBitAdder.ino. Questo creerà il file ino in una nuova directory chiamata anche twoBitAdder, all'interno della directory dello sketchbook di Arduino. Copia i tuoi file VtwoBitAdder.h e VtwoBitAdder.cpp in questa cartella twoBitAdder nella tua cartella Arduino.
Ora copia i file di intestazione dall'installazione del verificatore.
cp /usr/local/share/verilator/include/verilated*.
infine copia nella libreria std c++ in da https://github.com/maniacbug/StandardCplusplus. Secondo le loro istruzioni di installazione "Questo è installato proprio come una normale libreria Arduino. Decomprimi il contenuto della distribuzione nella cartella "librerie" sotto il tuo sketchbook. Ad esempio, il mio sketchbook si trova in /home/maniacbug/Source/Arduino, quindi questa libreria è in /home/maniacbug/Source/Arduino/libraries/StandardCplusplus.
Assicurati di ripristinare il tuo IDE Arduino dopo averlo installato."
Ora sostituisci il contenuto di twoBitAdder.ino con quello fornito in questo passaggio. Questo è un cablaggio di prova che il verificatore si aspetta, che imposta i pin di input/output, quindi nel ciclo, legge i pin di input, li alimenta a VtwoBitAdder (la versione tradotta del nostro circuito), quindi legge gli output da VtwoBitAdder e applica loro ai pin di uscita.
Questo programma dovrebbe essere compilato ed eseguito su Arduino UNO.
Passaggio 4: da Arduino a DIP Chip su una breadboard
Ora che il programma è in esecuzione su Arduino, non abbiamo più bisogno della scheda Arduino stessa. Tutto ciò di cui abbiamo bisogno è la CPU.
Rimuovere con attenzione l'Atmega 328P dalla presa Arduino UNO e, facoltativamente, inserire il suo sostituto.
Metti l'Atmega 328P sulla breadboard. Metti l'estremità con il divot rivolto verso l'alto sul tagliere. Il pin 1 è il pin in alto a sinistra. Il pin 2 è il successivo in basso, e così via fino al pin 14 che è in basso a sinistra. Quindi il pin 15 è in basso a destra e i pin da 16 a 28 contano sul lato destro del chip.
Collegare i pin 8 e 22 a massa.
Collegare il pin 7 a VCC (+5V).
Collegare un cristallo di quarzo da 16 Mhz tra i pin 9 e 10. Anche un piccolo condensatore (22 pF) tra il pin 9 e la massa e tra il pin 10 e la massa. Ciò conferisce all'Atmega 328P la velocità di clock di 16 Mhz. Ci sono istruzioni altrove sull'insegnamento al 328P di utilizzare invece il suo clock interno a 8 Mhz che salverebbe un paio di parti, ma rallenterebbe il processore.
Le porte Arduino GPIO 5, 6, 7 e 8, che abbiamo usato per i pin di input, sono in realtà i pin fisici 11, 12, 13, 14 sull'Atmega 328P. Questi sarebbero i quattro piedini in basso a sinistra.
Le porte Arduino GPIO 11, 10 e 9, che abbiamo usato per i pin di uscita, sono in realtà i pin fisici 17, 16, 15 sull'Atmega 328P. Questi sarebbero i tre pin in basso a destra.
Ho collegato i LED a questi pin come prima.
Passaggio 5: conclusione
I chip TTL funzionano, ma ne servono molti per costruire qualsiasi cosa. Gli FPGA funzionano davvero bene, ma non sono economici. Se riesci a vivere con meno pin IO e una velocità inferiore, un Atmega 328P potrebbe essere il chip che fa per te.
Alcune cose da tenere a mente:
FPGA:
Pro
- Può gestire segnali ad alta velocità. Poiché non c'è CPU per elaborare il collo di bottiglia fino a un'istruzione alla volta, il fattore limitante è il ritardo di propagazione attraverso le porte sul circuito dato. In molti casi questo può essere molto più veloce dell'orologio fornito con il chip. Per il mio progetto, il ritardo calcolato avrebbe consentito a twoBitAdder di rispondere a circa 100 milioni di cambiamenti nei valori di input al secondo (100 Mhz) anche se il clock di bordo è solo un cristallo da 12 Mhz.
- Man mano che il design diventa più complesso, le prestazioni dei circuiti esistenti non si degradano (molto). Poiché l'aggiunta di circuiti al tessuto significa semplicemente inserire qualcosa di nuovo in immobili inutilizzati, non ha alcun impatto sui circuiti esistenti.
- A seconda dell'FPGA, il numero di pin IO disponibili può essere molto elevato e generalmente non sono bloccati per uno scopo particolare.
Con
- Può essere costoso e/o difficile da trovare.
- Di solito viene fornito in un pacchetto BGA che richiede una sorta di breakout board per funzionare con il chip in qualsiasi progetto amatoriale. Se lo stai costruendo in un progetto con un PCB SMT multistrato personalizzato, questo non è un problema.
- La maggior parte dei produttori di FPGA fornisce il proprio software di progettazione closed source, che in alcuni casi può costare denaro o avere una data di scadenza della licenza.
Arduino come FPGA:
Pro
- Economico e facile da ottenere. Basta cercare atmega328p-pu su Amazon. Dovrebbero essere circa $ 4/pezzo. Diversi venditori li vendono in lotti di 3 o 4.
- Questo è un pacchetto DIP, il che significa che si adatta perfettamente a una breadboard con i suoi pin esterni.
- Questo è un dispositivo 5V, che può facilitare l'interfacciamento con altri dispositivi 5V.
Con
- L'ATMEGA328P ha un numero limitato di pin IO (23) e molti di questi sono riservati a compiti specifici.
- All'aumentare della complessità del circuito, aumenta la quantità di codice eseguito nel metodo loop Arduino, il che significa che la durata di ogni ciclo è più lunga.
- Anche se la complessità del circuito è bassa, ogni ciclo richiede molte istruzioni della CPU per recuperare i valori dei pin di input e scrivere i valori dei pin di output e tornare all'inizio del ciclo. Con un cristallo da 16 Mhz, anche a un'istruzione per ciclo di clock, il ciclo non verrà eseguito più di forse 1 milione di volte al secondo (1 Mhz). Per la maggior parte dei progetti di elettronica amatoriale, tuttavia, è molto più veloce del necessario.
Consigliato:
Come costruire il ProtoBot: un robot educativo 100% open source, super economico: 29 passaggi (con immagini)
Come costruire il ProtoBot: un robot educativo 100% open source, super economico: ProtoBot è un robot 100% open source, accessibile, super economico e facile da costruire. Tutto è Open Source: hardware, software, guide e curriculum, il che significa che chiunque può accedere a tutto ciò di cui ha bisogno per costruire e utilizzare il robot. È un g
Come smontare un computer con semplici passaggi e immagini: 13 passaggi (con immagini)
Come smontare un computer con semplici passaggi e immagini: questa è un'istruzione su come smontare un PC. La maggior parte dei componenti di base sono modulari e facilmente smontabili. Tuttavia è importante che tu sia organizzato al riguardo. Questo ti aiuterà a non perdere parti e anche a rendere più facile il rimontaggio
$ 2 Arduino. l'ATMEGA328 come stand-alone. Facile, economico e molto piccolo. una guida completa.: 6 passaggi (con immagini)
$ 2 Arduino. l'ATMEGA328 come stand-alone. Facile, economico e molto piccolo. una guida completa.: In questo tutorial imparerai come utilizzare il chip del microcontrollore Arduino ATMEGA328 come microcontrollore autonomo. Costano solo 2 dollari, possono fare lo stesso del tuo Arduino e rendere i tuoi progetti estremamente piccoli. Copriremo il layout dei pin
Robot da disegno economico e compatibile con Arduino: 15 passaggi (con immagini)
Robot di disegno a basso costo, compatibile con Arduino: Nota: ho una nuova versione di questo robot che utilizza un circuito stampato, è più facile da costruire e ha il rilevamento degli ostacoli IR! Dai un'occhiata a http://bit.ly/OSTurtleHo progettato questo progetto per un workshop di 10 ore per ChickTech.org il cui obiettivo è quello di i
Supporto multimetro economico (come in omaggio [come in birra]): 4 passaggi
Supporto multimetro economico (come in Free [come in Beer]): sono stato infastidito dal dover allungare il collo o bilanciare in modo precario il mio multimetro da $ 4 economico da qualche parte in cui posso effettivamente LEGGERE il display. Quindi ho deciso di prendere in mano la situazione! Questo è anche il mio primo "strutturabile", quindi se qualcuno ha commenti utili