Sommario:

Arduino come FPGA breadboard economico: 5 passaggi (con immagini)
Arduino come FPGA breadboard economico: 5 passaggi (con immagini)

Video: Arduino come FPGA breadboard economico: 5 passaggi (con immagini)

Video: Arduino come FPGA breadboard economico: 5 passaggi (con immagini)
Video: Arduino e Tinkercad - 001 2024, Novembre
Anonim
Arduino come FPGA breadboard economico
Arduino come FPGA breadboard economico

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"

Progetta il circuito che
Progetta il circuito che
Progetta il circuito che
Progetta il circuito che
Progetta il circuito che
Progetta il circuito che

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

Entra nell'FPGA
Entra nell'FPGA
Entra nell'FPGA
Entra nell'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

Da FPGA ad Arduino
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

Da Arduino a DIP Chip su una breadboard
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

Conclusione
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: