Indholdsfortegnelse:

Arduino som et billigt brødbræt FPGA: 5 trin (med billeder)
Arduino som et billigt brødbræt FPGA: 5 trin (med billeder)

Video: Arduino som et billigt brødbræt FPGA: 5 trin (med billeder)

Video: Arduino som et billigt brødbræt FPGA: 5 trin (med billeder)
Video: Sådan bruges Prototyping Shield til Arduino 2024, November
Anonim
Arduino Som et billigt brødbræt FPGA
Arduino Som et billigt brødbræt FPGA

Det kan være sjovt at designe hardware logikkredsløb. Den gamle skole måde at gøre dette på var med NAND -porte, på et brødbræt, forbundet med jumperwires. Dette er stadig muligt, men der skal ikke meget til, før antallet af porte kommer ud af hånden. En nyere mulighed er at bruge en FPGA (Field Programmable Gate Array). Disse chips kan omkoble sig selv til at blive et hvilket som helst digitalt logisk kredsløb, du kan designe, men er ikke billige og let tilgængelige. Jeg vil vise, hvordan denne FPGA kan erstattes med en billig Atmega -chip fra en Arduino UNO, hvilket effektivt sætter det digitale kredsløb i en DIP -pakke, som er meget brødbrætvenlig.

Trin 1: Design det kredsløb, som "FPGA" vil repræsentere

Design kredsløbet, der
Design kredsløbet, der
Design kredsløbet, der
Design kredsløbet, der
Design kredsløbet, der
Design kredsløbet, der

Jeg vil bygge en 2 bit + 2 bit adder. Det tager to par logiske indgangsstifter og udsender en triplet af udgangsstifter.

For at gøre dette med NAND -porte, se skematikken på billedet. Det har brug for 14 NAND -porte. Jeg brugte 4 quad NAND gate TTL chips, og tilsluttede dem til brødbrættet.

Jeg tilføjede nogle lysdioder (glem ikke de nuværende begrænsningsmodstande) for at vise, hvornår input- og outputstifterne var tændte (høje), og hvornår de var slukkede (lave). For at drive inputstifterne hoppede jeg dem enten til jordskinnen eller den positive power rail.

Dette kredsløb fungerer, men det fylder allerede 4 TTL -chips og er en rotterede af ledninger. Hvis der var brug for flere bits, ville der være flere brødbrætter og flere jumpere. Meget hurtigt ville kredsløbets størrelse gå ud af hånden.

På en sidebemærkning, når de arbejder med TTL -porte, udsender de ikke nøjagtigt 0V eller 5V, som man ville forvente. De udsender ofte omkring 3V for "høj", men den nøjagtige spænding er i et meget bredt område. Det samme kredsløb, der bruger CMOS -ækvivalente chips, ville have bedre nøjagtigt 0V til præcis 5V svingninger.

Trin 2: Indtast FPGA

Indtast FPGA
Indtast FPGA
Indtast FPGA
Indtast FPGA

En FPGA er en fantastisk chip, der bogstaveligt talt kan blive enhver kombination af logiske porte, der er forbundet i enhver kombination. Man designer "kredsløbet" i et hardware design sprog (HDL). Der er flere sådanne sprog, hvoraf det ene kaldes Verilog.. V -filen på billedet er Verilog -ækvivalent med to -bit adder.. Pch -filen nedenfor er også nødvendig for at tildele input- og outputpinnene, der er navngivet i verilog -filen, til rigtige hardware -pins på chippen.

I dette tilfælde bruger jeg et Lattice Semiconductors iCEstick -udviklingsbord (https://www.latticesemi.com/icestick). Den egentlige FPGA-chip er en iCE40HX-1k, med lidt over 1000 porte, som hver kan blive en hvilken som helst logisk gate. Det betyder, at hver gate kan være en NAND -gate eller en OR -gate, NOT gate, NOR, XOR osv. Derudover kan hver gate håndtere mere end to input. Dette er specifikt for hver producent, men på iCE40'erne kan hver port klare 4 indgange. Hver port er således langt mere i stand end de 2 input NAND -porte.

Jeg var nødt til at tildele de 4 input fyr og de 3 output ben til fysiske ben 91, 90, 88, 87, 81, 80 og 79. Dette er specifikt for fpga -chippen og breakout -kortet, den er på, og hvordan disse ben er forbundet til PMOD -porten. Dette er tilgængeligt i databladene for dette FPGA -kort.

Lattice leverer deres egen værktøjskæde til at syntetisere (FPGA svarende til kompilering til CPU'er) kredsløb fra Verilog, men jeg brugte den gratis open source værktøjskæde icestorm (https://www.clifford.at/icestorm/). Installationsvejledningen er tilgængelig på dette websted. Med isstorm installeret og verilog- og pcf -filen er kommandoerne for at indlæse dette kredsløb på FPGA:

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

Dette fungerer godt, men inklusiv forsendelse af denne iCEstick koster omkring $ 30. Dette er ikke den billigste måde at bygge et digitalt kredsløb på, men det er kraftfuldt. Det har over 1000 porte, og til dette lille kredsløb bruger det kun 3 af dem. NAND -portekvivalenten brugte 14 porte. Dette skyldes det faktum, at hver gate kan blive til enhver form for gate, og hver gate er faktisk en 4 input gate. Hver port kan mere. Hvis du har brug for flere porte, har iCEstick en større bror med 8000 porte, der koster cirka det dobbelte. Andre producenter har andre tilbud, men prisen kan blive ret stejl.

Trin 3: Fra FPGA til Arduino

Fra FPGA til Arduino
Fra FPGA til Arduino

FPGA'er er gode, men kan være dyre, svære at få fat i og er ikke særlig brødbrætvenlige. En brødbrædevenlig og billig chip er Atmega 328 P, der kommer i en pæn DIP -pakke, perfekt til breadboarding. Det kan også fås for omkring $ 4. Dette er hjertet i Arduino UNO. Du kan selvfølgelig bruge hele UNO, men vær billig, vi kan trække Atmega 328 P fra UNO og bruge den af sig selv. Jeg brugte dog UNO -kortet som programmerer til Atmega.

På dette tidspunkt får du brug for

1. En Arduino UNO, med den aftagelige Atmega 328P CPU.

2. En anden Atmega 328P med Arduino-bootloaderen forbrændt for at erstatte den, vi er ved at tage ud af UNO. (Valgfrit forudsat at du stadig vil have en brugbar UNO).

Målet er at konvertere verilog -filen til et arduino -projekt, der kan indlæses i 328P. Arduino er baseret på C ++. Praktisk er der en oversætter fra Verilog til C ++, kaldet Verilator (https://www.veripool.org/wiki/verilator). Verilator er beregnet til at blive brugt af hardware designere, der skal simulere deres designs, før de overdrager disse designs til dyr hardware. Verilator cross kompilerer verilog til C ++, derefter giver brugeren en test sele til at levere simulerede indgangssignaler og registrere output signaler. Vi kommer til at bruge det til at proppe verilog -designet ind i Atmega 328P ved hjælp af Arduino værktøjskæden.

Installer først Verilator. Følg instruktionerne på

Installer også Arduino IDE, og test, at den kan oprette forbindelse til Arduino UNO via USB.

Vi bruger den samme verilog -fil som til FPGA, bortset fra at navnene på stifterne skal ændres. Jeg tilføjede en understregning (_) til begyndelsen af hver. Dette er nødvendigt, fordi arduino -bibliotekerne indeholder en header -fil, der oversætter ting som B0, B001 osv. Til binære tal. De andre input-pin navne ville have været fine som de er, men B0 og B1 ville have fået bygningen til at mislykkes.

Kør følgende i biblioteket, der indeholder twoBitAdder.v og iCEstick.pcf:

verilator -Wall --cc twoBitAdder.v

Dette vil oprette en undermappe kaldet obj_dir, der indeholder flere nye filer. Vi har kun brug for header- og cpp -filerne, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h og VtwoBitAdder_Syms.cpp.

Opret i Arduino IDE en ny skitse kaldet twoBitAdder.ino. Dette vil oprette ino -filen i et nyt bibliotek, også kaldet twoBitAdder, inde i dit Arduino -skitsebogskatalog. Kopiér dine VtwoBitAdder.h- og VtwoBitAdder.cpp -filer til denne twoBitAdder -mappe i din Arduino -mappe.

Kopier nu headerfilerne fra verilator -installationen.

cp/usr/local/share/verilator/include/verilated*.

kopier endelig i biblioteket std c ++ fra https://github.com/maniacbug/StandardCplusplus. I henhold til deres installationsinstruktioner "Dette er installeret ligesom et almindeligt Arduino -bibliotek. Pak indholdet af distributionen ud i mappen" biblioteker "under din skitsebog. For eksempel er min skitsebog på/home/maniacbug/Source/Arduino, så dette bibliotek er i/home/galning/Kilde/Arduino/biblioteker/StandardCplusplus.

Sørg for at nulstille din Arduino IDE efter installationen."

Udskift nu indholdet af twoBitAdder.ino med det, der er angivet på dette trin. Dette er en test sele, som verilator forventer, som opsætter input/output benene, derefter i sløjfen, læser input pins, føder dem til VtwoBitAdder (den oversatte version af vores kredsløb), læser derefter output fra VtwoBitAdder og anvender dem til udgangsstifterne.

Dette program skal kompilere og udføre på Arduino UNO.

Trin 4: Fra Arduino til DIP Chip på et brødbræt

Fra Arduino til DIP Chip på et brødbræt
Fra Arduino til DIP Chip på et brødbræt

Nu hvor programmet kører på Arduino, har vi ikke længere brug for selve Arduino -tavlen. Alt vi har brug for er CPU'en.

Fjern Atmega 328P forsigtigt fra Arduino UNO -stikket, og indsæt eventuelt erstatningen.

Læg Atmega 328P på brødbrættet. Sæt enden med divoten pegende op på brødbrættet. Pin 1 er den øverste venstre pin. Pin 2 er den næste ned, og så videre til pin 14, som er nederst til venstre. Derefter er pin 15 nederst til højre, og pins 16 til 28 tæller tilbage op ad højre side af chippen.

Tilslut stifterne 8 og 22 til jorden.

Tilslut stift 7 til VCC (+5V).

Tilslut en 16Mhz kvartskrystal mellem ben 9 og 10. Også en lille kondensator (22pF) mellem ben 9 og jord, og mellem ben 10 og jord. Dette giver Atmega 328P 16Mhz clockhastigheden. Der er instruktioner andre steder om at lære 328P i stedet at bruge sit interne 8Mhz -ur, hvilket ville spare et par dele, men det ville bremse processoren.

Arduino GPIO -portene 5, 6, 7 og 8, som vi brugte til inputstifterne, er faktisk de fysiske ben 11, 12, 13, 14 på Atmega 328P. Det ville være de fire nederste stifter til venstre.

Arduino GPIO -portene 11, 10 og 9, som vi brugte til outputstifterne, er faktisk de fysiske ben 17, 16, 15 på Atmega 328P. Det ville være de tre nederste stifter til højre.

Jeg tilsluttede lysdioderne til disse stifter som før.

Trin 5: Konklusion

Konklusion
Konklusion

TTL -chips fungerer, men det kræver mange af dem at bygge noget. FPGA'er fungerer rigtig godt, men er ikke billige. Hvis du kan leve med færre IO -pins og lavere hastighed, så er en Atmega 328P måske chippen for dig.

Nogle ting at huske på:

FPGA:

Pro

- Kan håndtere højhastigheds signaler. Fordi der ikke er nogen CPU til flaskehalsbehandling ned til en instruktion ad gangen, er den begrænsende faktor forplantningsforsinkelsen gennem portene på det givne kredsløb. I mange tilfælde kan dette være meget hurtigere end det ur, der følger med chippen. For mit design ville den beregnede forsinkelse have givet toBitAdder mulighed for at reagere på omkring 100 millioner ændringer i inputværdier pr. Sekund (100Mhz), selvom det indbyggede ur kun er en 12Mhz krystal.

- Efterhånden som designet bliver mere komplekst, forringes ydelsen af de eksisterende kredsløb ikke (meget). Fordi tilføjelse af kredsløb til stoffet simpelthen er at sætte noget nyt i ubrugt fast ejendom, påvirker det ikke eksisterende kredsløb.

- Afhængigt af FPGA kan antallet af tilgængelige IO -pins være meget højt, og de er generelt ikke låst til et bestemt formål.

Con

- Kan være dyrt og/eller svært at komme forbi.

- Normalt kommer den i en BGA -pakke, der kræver en form for breakout board for at arbejde med chippen i ethvert amatørprojekt. Hvis du bygger det ind i et design med en brugerdefineret flerlags SMT-printkort, er dette ikke et problem.

- De fleste FPGA -producenter leverer deres egen lukkede kildesoftware, som i nogle tilfælde kan koste penge eller have en licensudløbsdato.

Arduino som en FPGA:

Pro

- Billig og let at få. Bare søg efter atmega328p-pu på Amazon. De burde være omkring $ 4/stk. Flere sælgere sælger dem i masser af 3 eller 4.

- Dette er en DIP -pakke, hvilket betyder, at den passer perfekt på et brødbræt med sine eksterne stifter.

- Dette er en 5V -enhed, som kan gøre grænsefladen med andre 5V -enheder let.

Con

- ATMEGA328P har et begrænset antal IO -ben (23), og flere af dem er forbeholdt specifikke opgaver.

- Når kredsløbets kompleksitet øges, øges mængden af kode, der køres i Arduino loop -metoden, hvilket betyder, at hver cyklus er længere.

- Selvom kredsløbets kompleksitet er lav, kræver hver cyklus mange CPU -instruktioner for at hente input -pin -værdierne og skrive output -pin -værdier og vende tilbage til toppen af sløjfen. Med en 16Mhz krystal, selv ved en instruktion pr. Urcyklus, løber sløjfen ikke mere end måske 1 million gange i sekundet (1Mhz). For de fleste amatørelektronikprojekter er det dog hurtigere end nødvendigt.

Anbefalede: