Obsah:

Arduino ako lacný Breadboard FPGA: 5 krokov (s obrázkami)
Arduino ako lacný Breadboard FPGA: 5 krokov (s obrázkami)

Video: Arduino ako lacný Breadboard FPGA: 5 krokov (s obrázkami)

Video: Arduino ako lacný Breadboard FPGA: 5 krokov (s obrázkami)
Video: How to use Prototyping Shield with breadboard for Arduino 2024, November
Anonim
Arduino ako lacný Breadboard FPGA
Arduino ako lacný Breadboard FPGA

Navrhovanie hardvérových logických obvodov môže byť zábavné. Starý školský spôsob, ako to dosiahnuť, boli brány NAND na doske na chlieb zapojené prepojovacími drôtmi. Stále je to možné, ale netreba veľa, kým sa počet brán vymkne spod kontroly. Novšou možnosťou je použiť FPGA (Field Programmable Gate Array). Tieto čipy sa môžu prepájať a stať sa akýmkoľvek digitálnym logickým obvodom, ktorý môžete navrhnúť, ale nie sú lacné a ľahko dostupné. Ukážem, ako je možné tento FPGA nahradiť lacným čipom Atmega od spoločnosti Arduino UNO, čím sa digitálny obvod efektívne vloží do balíka DIP, ktorý je veľmi priateľský k doske.

Krok 1: Navrhnite obvod, ktorý bude predstavovať „FPGA“

Navrhnite obvod, ktorý
Navrhnite obvod, ktorý
Navrhnite obvod, ktorý
Navrhnite obvod, ktorý
Navrhnite obvod, ktorý
Navrhnite obvod, ktorý

Postavím 2 bit + 2 bitový sčítač. Trvá to dva páry logických vstupných pinov a na výstup je jeden triplet výstupných pinov.

Ak to chcete urobiť s bránami NAND, pozrite si schému na obrázku. Potrebuje 14 brán NAND. Použil som 4 štvorité čipy NAND gate TTL a zapojil ich na dosku na chlieb.

Pridal som niekoľko LED diód (nezabudnite na odpory obmedzujúce prúd), aby ste ukázali, kedy boli vstupné a výstupné kolíky zapnuté (vysoké) a kedy zhasnuté (nízke). Na pohon vstupných kolíkov som ich buď prepojil s uzemňovacou alebo kladnou výkonovou lištou.

Tento obvod funguje, ale už zaberá 4 čipy TTL a je krysím hniezdom drôtov. Ak by bolo potrebných viac bitov, bolo by viac dosiek na chlieb a viac prepojok. Veľkosť obvodu by sa veľmi rýchlo vymkla z rúk.

Na okraj, pri práci s bránami TTL nevydávajú presne 0V alebo 5V, ako by sa dalo očakávať. Na „vysokú“často produkujú okolo 3V, ale presné napätie je vo veľmi širokom rozsahu. Rovnaký obvod používajúci čipy ekvivalentné CMOS by mal mať lepšie presne 0V až presne 5V výkyvy.

Krok 2: Zadajte FPGA

Zadajte FPGA
Zadajte FPGA
Zadajte FPGA
Zadajte FPGA

FPGA je fantastický čip, ktorý sa môže stať doslova akoukoľvek kombináciou logických brán, prepojených v akejkoľvek kombinácii. Jeden navrhuje „obvod“v hardvérovom dizajnovom jazyku (HDL). Existuje niekoľko takýchto jazykov, z ktorých jeden sa nazýva Verilog. Súbor.v na obrázku je verilogickým ekvivalentom dvojbitovej sčítačky. Nasledujúci súbor.pch je potrebný aj na priradenie vstupných a výstupných pinov pomenovaných v súbore verilog skutočným hardvérovým pinom na čipe.

V tomto prípade používam vývojovú dosku Latice Semiconductors iCEstick (https://www.latticesemi.com/icestick). Skutočný čip FPGA je iCE40HX-1k s niečo viac ako 1 000 bránami, z ktorých sa každý môže stať akoukoľvek logickou bránou. To znamená, že každá brána môže byť brána NAND alebo brána ALEBO, brána NOT, NOR, XOR atď. Navyše každá brána zvládne viac ako dva vstupy. To je špecifické pre každého výrobcu, ale na bráne iCE40 každá brána zvládne 4 vstupy. Každá brána je teda oveľa schopnejšia ako 2 vstupné brány NAND.

Musel som priradiť 4 vstupné borovice a 3 výstupné kolíky k fyzickým kolíkom 91, 90, 88, 87, 81, 80 a 79. Toto je špecifické pre čip fpga a prelamovaciu dosku, na ktorej je, a ako sú tieto kolíky zapojené do portu PMOD. Toto je k dispozícii v produktových listoch tejto dosky FPGA.

Lattice poskytuje vlastný reťazec nástrojov na syntézu (FPGA ekvivalentný kompilácii pre CPU) obvodov od Verilogu, ale použil som bezplatný open source reťazec nástrojov icestorm (https://www.clifford.at/icestorm/). Pokyny na inštaláciu sú k dispozícii na tomto webe. Keď je nainštalovaný icestorm a súbor verilog a pcf, príkazy na načítanie tohto obvodu do FPGA sú:

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

Funguje to skvele, ale zahrnutie dopravy tohto iCEstick bude stáť asi 30 dolárov. Nie je to najlacnejší spôsob budovania digitálneho obvodu, ale je účinný. Má viac ako 1000 brán a pre tento malý okruh používa iba 3 z nich. Ekvivalent brány NAND používal 14 brán. Je to spôsobené tým, že každá brána sa môže stať akýmkoľvek typom brány a každá brána je v skutočnosti bránou so 4 vstupmi. Každá brána dokáže viac. Ak potrebujete viac brán, iCEstick má väčšieho brata s 8 000 bránami, ktorý stojí zhruba dvojnásobok. Iní výrobcovia majú iné ponuky, ale cena môže byť dosť strmá.

Krok 3: Od FPGA po Arduino

Od FPGA po Arduino
Od FPGA po Arduino

FPGA sú skvelé, ale môžu byť drahé, ťažko dostupné a nie sú veľmi vhodné pre chlebové dosky. Lacným čipom vhodným pre chlebovníky je Atmega 328 P, ktorý je dodávaný v úhľadnom balení DIP, ideálnom na grilovanie. Dá sa kúpiť aj za približne 4 doláre. Toto je srdce Arduino UNO. Môžete samozrejme použiť celý UNO, ale byť lacný, môžeme Atmega 328 P vytiahnuť z UNO a použiť ho sám. Dosku UNO som však použil ako programátor pre Atmega.

V tomto bode budete potrebovať

1. Arduino UNO s vymeniteľným procesorom Atmega 328P.

2. Ďalší Atmega 328P s vopred načítaným bootloaderom Arduino, ktorý nahradí ten, ktorý sa chystáme vytiahnuť z UNO. (Voliteľné za predpokladu, že stále chcete mať použiteľné UNO).

Cieľom je previesť súbor verilog na projekt arduino, ktorý je možné načítať do 328P. Arduino je založené na C ++. Pohodlne existuje prekladač z Verilogu do C ++ s názvom Verilator (https://www.veripool.org/wiki/verilator). Verilator majú používať hardvéroví dizajnéri, ktorí potrebujú simulovať svoje návrhy pred tým, ako ich prevedú na drahý hardvér. Verilator cross kompiluje verilog do C ++, potom používateľ poskytne testovací zväzok na poskytnutie simulovaných vstupných signálov a zaznamenanie výstupných signálov. Použijeme to na natlačenie dizajnu verilogu do Atmega 328P pomocou reťazca nástrojov Arduino.

Najprv nainštalujte Verilator. Postupujte podľa pokynov na

Nainštalujte si tiež Arduino IDE a vyskúšajte, či sa dá pripojiť k Arduino UNO cez USB.

Budeme používať rovnaký súbor verilogu ako pre FPGA, okrem toho, že je potrebné zmeniť názvy pinov. Na začiatok každého z nich som pridal podčiarkovník (_). Je to potrebné, pretože arduino knižnice obsahujú hlavičkový súbor, ktorý prekladá veci ako B0, B001 atď., Do binárnych čísel. Ostatné názvy vstupných pinov by boli v poriadku tak, ako sú, ale B0 a B1 by spôsobili zlyhanie zostavy.

V adresári obsahujúcom twoBitAdder.v a iCEstick.pcf spustite nasledovné:

verilator -Stena --cc twoBitAdder.v

Tým sa vytvorí podadresár s názvom obj_dir obsahujúci niekoľko nových súborov. Potrebujeme iba súbory hlavičky a cpp, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h a VtwoBitAdder_Syms.cpp.

V Arduino IDE vytvorte nový náčrt s názvom twoBitAdder.ino. Tým sa vytvorí ino súbor v novom adresári nazývanom tiež twoBitAdder, vo vašom adresári skicárov Arduino. Skopírujte svoje súbory VtwoBitAdder.h a VtwoBitAdder.cpp do tohto priečinka twoBitAdder v priečinku Arduino.

Teraz skopírujte hlavičkové súbory z inštalácie verilátora.

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

nakoniec skopírujte do knižnice std c ++ z https://github.com/maniacbug/StandardCplusplus. Podľa ich inštalačných pokynov "Toto je nainštalované rovnako ako bežná knižnica Arduino. Rozbaľte obsah distribúcie do priečinka" knižnice "pod vašim skicárom. Môj skicár je napríklad na/home/maniacbug/Source/Arduino, takže táto knižnica je v/home/maniacbug/Zdroj/Arduino/knižnice/StandardCplusplus.

Po inštalácii Arduino IDE nezabudnite resetovať. “

Teraz nahraďte obsah twoBitAdder.ino obsahom uvedeným v tomto kroku. Toto je testovací zväzok, ktorý verilátor očakáva, ktorý nastaví vstupné/výstupné piny, potom v slučke prečíta vstupné piny, privedie ich na VtwoBitAdder (preložená verzia nášho obvodu), potom načíta výstupy z VtwoBitAdder a aplikuje ich na výstupné piny.

Tento program by sa mal skompilovať a spustiť na Arduino UNO.

Krok 4: Od Arduina po čip DIP na doske s chlebom

Od Arduina po čip DIP na doske s chlebom
Od Arduina po čip DIP na doske s chlebom

Teraz, keď program beží na Arduine, už nepotrebujeme samotnú dosku Arduino. Všetko, čo potrebujeme, je CPU.

Opatrne vyberte Atmega 328P zo zásuvky Arduino UNO a prípadne vložte jeho náhradu.

Položte Atmega 328P na dosku na chlieb. Dajte koniec tak, aby divot smeroval hore, na chlebovú dosku. Kolík 1 je ľavý horný kolík. Kolík 2 je ďalší nadol a tak ďalej na kolík 14, ktorý je vľavo dole. Potom je kolík 15 vpravo dole a kolíky 16 až 28 počítajú späť na pravú stranu čipu.

Pripojte kolíky 8 a 22 k zemi.

Pripojte pin 7 k VCC (+5V).

Pripojte 16MHz kremenný kryštál medzi piny 9 a 10. Tiež malý kondenzátor (22pF) medzi kolík 9 a zem a medzi kolík 10 a zem. To dáva Atmega 328P rýchlosť 16 MHz. Na inom mieste sú inštrukcie, ako naučiť 328P namiesto toho používať vnútorné hodiny 8 MHz, ktoré by ušetrili pár častí, ale spomalili by procesor.

Porty Arduino GPIO 5, 6, 7 a 8, ktoré sme použili ako vstupné piny, sú v skutočnosti fyzické piny 11, 12, 13, 14 na zariadení Atmega 328P. To by boli štyri spodné kolíky vľavo.

Porty Arduino GPIO 11, 10 a 9, ktoré sme použili na výstupné piny, sú v skutočnosti fyzické piny 17, 16, 15 na zariadení Atmega 328P. To by boli tri spodné kolíky vpravo.

Pripojil som LED k týmto kolíkom ako predtým.

Krok 5: Záver

Záver
Záver

Čipy TTL fungujú, ale na ich stavbu je potrebných veľa. FPGA fungujú naozaj dobre, ale nie sú lacné. Ak môžete žiť s menším počtom IO pinov a nižšou rýchlosťou, potom môže byť čip Atmega 328P pre vás.

Niektoré veci, ktoré je potrebné mať na pamäti:

FPGA:

Pro

- Dokáže zvládnuť vysokorýchlostné signály. Pretože neexistuje procesory CPU, ktoré by obmedzovali spracovanie jednej inštrukcie súčasne, obmedzujúcim faktorom je oneskorenie šírenia cez brány v danom obvode. V mnohých prípadoch to môže byť oveľa rýchlejšie ako hodiny dodávané s čipom. Podľa môjho návrhu by vypočítané oneskorenie umožnilo zariadeniu twoBitAdder reagovať na približne 100 miliónov zmien vstupných hodnôt za sekundu (100 MHz), aj keď sú palubné hodiny iba 12 MHz.

- Keďže je návrh stále komplexnejší, výkon existujúcich obvodov sa (veľmi) nezhoršuje. Pretože pridanie obvodov k tkanine znamená jednoducho vloženie niečoho nového do nepoužívaných nehnuteľností, neovplyvní to existujúce obvody.

- V závislosti od FPGA môže byť počet dostupných IO pinov veľmi vysoký a spravidla nie sú viazané na žiadny konkrétny účel.

Con

- Môže byť drahé a/alebo ťažké zohnať sa.

- Obvykle sa dodáva v balení BGA, ktoré vyžaduje nejaký druh odpočinkovej dosky na prácu s čipom v akomkoľvek amatérskom projekte. Ak ho staviate do dizajnu s vlastnou viacvrstvovou doskou SMT PCB, nie je to problém.

- Väčšina výrobcov FPGA poskytuje vlastný softvér na návrh uzavretého zdroja, ktorý môže v niektorých prípadoch stáť peniaze alebo môže mať dátum vypršania platnosti licencie.

Arduino ako FPGA:

Pro

- Lacné a ľahko dostupné. Stačí vyhľadať atmega328p-pu na Amazone. Mali by byť asi 4 doláre/kus. Niekoľko predajcov ich predáva v šaržiach 3 alebo 4.

- Toto je balík DIP, čo znamená, že sa perfektne hodí na nepájivé pole s vonkajšími kolíkmi.

- Toto je 5V zariadenie, ktoré môže uľahčiť prepojenie s inými 5V zariadeniami.

Con

- ATMEGA328P má obmedzený počet IO pinov (23) a niekoľko z nich je vyhradených pre konkrétne úlohy.

- Ako sa zvyšuje zložitosť obvodu, zvyšuje sa množstvo kódu spusteného v slučke Arduino, čo znamená, že trvanie každého cyklu je dlhšie.

- Aj keď je zložitosť obvodu nízka, každý cyklus vyžaduje veľa inštrukcií CPU na načítanie hodnôt vstupných pinov a zápis hodnôt výstupných pinov a návrat na začiatok slučky. S kryštálom 16 MHz, dokonca aj pri jednej inštrukcii za hodinový cyklus, slučka nepobeží viac ako 1 milión krát za sekundu (1 MHz). Pre väčšinu amatérskych projektov elektroniky je to však oveľa rýchlejšie, ako je potrebné.

Odporúča: