Obsah:

Arduino jako levný Breadboard FPGA: 5 kroků (s obrázky)
Arduino jako levný Breadboard FPGA: 5 kroků (s obrázky)

Video: Arduino jako levný Breadboard FPGA: 5 kroků (s obrázky)

Video: Arduino jako levný Breadboard FPGA: 5 kroků (s obrázky)
Video: How to use Prototyping Shield with breadboard for Arduino 2024, Listopad
Anonim
Arduino jako levný FPGA na prkénku
Arduino jako levný FPGA na prkénku

Navrhování hardwarových logických obvodů může být zábava. Starý školní způsob, jak to udělat, byl s branami NAND na prkénku propojenými propojovacími dráty. To je stále možné, ale než se počet bran vymkne z rukou, netrvá to dlouho. Novější možností je použít FPGA (Field Programmable Gate Array). Tyto čipy se mohou samy přepojit na jakýkoli digitální logický obvod, který můžete navrhnout, ale nejsou levné a snadno dostupné. Ukážu, jak lze tento FPGA nahradit levným čipem Atmega z Arduino UNO, čímž se digitální obvod efektivně vloží do DIP balíčku, který je velmi šetrný k prkénku.

Krok 1: Navrhněte obvod, který bude představovat „FPGA“

Navrhněte obvod, který
Navrhněte obvod, který
Navrhněte obvod, který
Navrhněte obvod, který
Navrhněte obvod, který
Navrhněte obvod, který

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

Chcete -li to provést pomocí bran NAND, viz schéma na obrázku. Potřebuje 14 bran NAND. Použil jsem 4 čtvercové čipy NAND gate TTL a zapojil je na desku chleba.

Přidal jsem několik LED diod (nezapomeňte na odpory omezující proud), aby ukazovaly, kdy byly vstupní a výstupní piny zapnuté (vysoké) a kdy byly vypnuté (nízké). Abych poháněl vstupní piny, buď jsem je propojil s pozemní kolejnicí nebo kladnou napájecí kolejnicí.

Tento obvod funguje, ale už zabírá 4 TTL čipy a je krysím hnízdem drátů. Pokud by bylo potřeba více bitů, bylo by více desek na chléb a více propojek. Velikost obvodu by se velmi rychle vymkla z rukou.

Na druhou stranu, při práci s branami TTL nevydávají přesně 0V nebo 5V, jak by se dalo očekávat. Pro „vysoké“často vydávají kolem 3V, ale přesné napětí je ve velmi širokém rozsahu. Stejný obvod využívající ekvivalentní čipy CMOS by měl lepší přesně 0V až přesně 5V výkyvy.

Krok 2: Zadejte FPGA

Zadejte FPGA
Zadejte FPGA
Zadejte FPGA
Zadejte FPGA

FPGA je fantastický čip, který se může stát doslova jakoukoli kombinací logických bran, propojených dohromady v jakékoli kombinaci. Jeden navrhuje „obvod“v hardwarovém návrhovém jazyce (HDL). Existuje několik takových jazyků, z nichž jeden se nazývá Verilog. Soubor.v na obrázku je ekvivalentem Verilogu dvoubitové sčítačky. Níže uvedený soubor.pch je také potřeba k přiřazení vstupních a výstupních pinů pojmenovaných v souboru verilog ke skutečným hardwarovým pinům na čipu.

V tomto případě používám vývojovou desku Latice Semiconductors iCEstick (https://www.latticesemi.com/icestick). Skutečný čip FPGA je iCE40HX-1k s něco málo přes 1000 bran, z nichž se každý může stát jakoukoli logickou bránou. To znamená, že každá brána může být brána NAND nebo brána NE, brána NOT, NOR, XOR atd. Navíc každá brána zvládne více než dva vstupy. To je specifické pro každého výrobce, ale na iCE40 každá brána zvládne 4 vstupy. Každá brána je tedy mnohem schopnější než 2 vstupní brány NAND.

Musel jsem přiřadit 4 vstupní borovice a 3 výstupní kolíky fyzickým pinům 91, 90, 88, 87, 81, 80 a 79. To je specifické pro čip fpga a oddělovací desku, na které je, a jak jsou tyto piny zapojeny do portu PMOD. To je k dispozici v listech pro tuto desku FPGA.

Lattice poskytuje svůj vlastní řetězec nástrojů pro syntézu (FPGA ekvivalent kompilace pro CPU) obvodů od Verilogu, ale já jsem použil bezplatný open source řetěz nástrojů icestorm (https://www.clifford.at/icestorm/). Pokyny k instalaci jsou k dispozici na tomto webu. Když je nainstalován icestorm a soubor verilog a pcf, příkazy k načtení tohoto obvodu na FPGA jsou:

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 skvěle, ale včetně zaslání tohoto iCEstick bude stát asi 30 $. Toto není nejlevnější způsob, jak vybudovat digitální obvod, ale je to silné. Má více než 1000 bran a pro tento malý obvod používá pouze 3 z nich. Ekvivalent brány NAND používal 14 bran. To je dáno skutečností, že každá brána se může stát jakýmkoli druhem brány a každá brána je ve skutečnosti bránou se 4 vstupy. Každá brána dokáže více. Pokud potřebujete více bran, iCEstick má většího bratra s 8 000 branami, který stojí zhruba dvojnásobek. Jiní výrobci mají jiné nabídky, ale cena může být docela strmá.

Krok 3: Od FPGA po Arduino

Od FPGA po Arduino
Od FPGA po Arduino

FPGA jsou skvělá, ale mohou být drahá, těžko dostupná a nejsou příliš chlebová. Chlebem přívětivým a levným čipem je Atmega 328 P, který je dodáván v úhledném DIP balíčku, který je ideální pro breadboarding. Lze jej také získat za přibližně 4 dolary. To je srdcem Arduino UNO. Samozřejmě můžete použít celé UNO, ale buďte levní, můžeme Atmega 328 P stáhnout z UNO a použít ho samostatně. Desku UNO jsem však použil jako programátor pro Atmega.

V tuto chvíli budete potřebovat

1. Arduino UNO s vyjímatelným procesorem Atmega 328P.

2. Další Atmega 328P s předpáleným zavaděčem Arduino, který nahradí ten, který se chystáme vyřadit z UNO. (Volitelné za předpokladu, že stále chcete mít použitelné UNO).

Cílem je převést soubor verilog na projekt arduino, který lze načíst do 328P. Arduino je založeno na C ++. Pohodlně existuje překladač z Verilogu do C ++, nazývaný Verilator (https://www.veripool.org/wiki/verilator). Verilator je určen k použití hardwarovými designéry, kteří potřebují simulovat své návrhy, než tyto návrhy odevzdají drahému hardwaru. Verilator cross kompiluje verilog do C ++, poté uživatel poskytne testovací svazek, který poskytne simulované vstupní signály a zaznamená výstupní signály. Použijeme ho k nacpání designu verilogu do Atmega 328P pomocí řetězce nástrojů Arduino.

Nejprve nainstalujte Verilator. Postupujte podle pokynů na

Nainstalujte si také Arduino IDE a vyzkoušejte, zda se dokáže připojit k Arduino UNO přes USB.

Budeme používat stejný soubor verilogu jako pro FPGA, kromě toho, že je třeba změnit názvy pinů. Na začátek každého jsem přidal podtržítko (_). To je potřeba, protože arduino knihovny obsahují soubor záhlaví, který překládá věci jako B0, B001 atd. Do binárních čísel. Ostatní názvy vstupních pinů by byly v pořádku, ale B0 a B1 by způsobily selhání sestavení.

V adresáři obsahujícím twoBitAdder.v a iCEstick.pcf spusťte následující:

verilator -Wall --cc twoBitAdder.v

Tím se vytvoří podadresář s názvem obj_dir obsahující několik nových souborů. Potřebujeme pouze soubory záhlaví a cpp, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h a VtwoBitAdder_Syms.cpp.

V Arduino IDE vytvořte novou skicu s názvem twoBitAdder.ino. Tím vytvoříte soubor ino v novém adresáři nazývaném také twoBitAdder, ve vašem adresáři skicáře Arduino. Zkopírujte soubory VtwoBitAdder.h a VtwoBitAdder.cpp do této složky twoBitAdder ve složce Arduino.

Nyní zkopírujte soubory záhlaví z instalace verilatoru.

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

nakonec zkopírujte do knihovny std c ++ z https://github.com/maniacbug/StandardCplusplus. Podle jejich pokynů k instalaci Toto je nainstalováno stejně jako běžná knihovna Arduino. Rozbalte obsah distribuce do složky 'libraries' ve vašem skicáři. Můj skicář je například na/home/maniacbug/Source/Arduino, takže tato knihovna je v/home/maniacbug/Source/Arduino/libraries/StandardCplusplus.

Po instalaci nezapomeňte resetovat IDE Arduino."

Nyní nahraďte obsah twoBitAdder.ino obsahem uvedeným v tomto kroku. Toto je testovací kabelový svazek, který verilator očekává, který nastaví vstupně/výstupní piny, poté ve smyčce přečte vstupní piny, přivede je na VtwoBitAdder (přeložená verze našeho obvodu), poté přečte výstupy z VtwoBitAdder a aplikuje je na výstupní piny.

Tento program by se měl zkompilovat a spustit na Arduino UNO.

Krok 4: Od Arduina po DIP čip na prkénku

Od Arduina po DIP čip na prkénku
Od Arduina po DIP čip na prkénku

Nyní, když program běží na Arduinu, již nepotřebujeme samotnou desku Arduino. Vše, co potřebujeme, je CPU.

Opatrně vyjměte Atmega 328P ze zásuvky Arduino UNO a volitelně vložte jeho náhradu.

Umístěte Atmega 328P na prkénko. Umístěte konec tak, aby divot směřoval nahoru, na chlebovou desku. Kolík 1 je levý horní kolík. Kolík 2 je další dolů a tak dále na kolík 14, který je vlevo dole. Poté je kolík 15 vpravo dole a kolíky 16 až 28 se počítají zpět na pravou stranu čipu.

Připojte kolíky 8 a 22 k zemi.

Připojte pin 7 k VCC (+5V).

Připojte 16Mhz křemenný krystal mezi piny 9 a 10. Také malý kondenzátor (22pF) mezi pin 9 a zem a mezi pin 10 a zem. To dává Atmega 328P rychlost hodin 16 MHz. Jinde jsou pokyny, jak naučit 328P místo toho používat interní 8Mhz hodiny, které by sice ušetřily pár částí, ale to by zpomalilo procesor.

Porty Arduino GPIO 5, 6, 7 a 8, které jsme použili pro vstupní piny, jsou ve skutečnosti fyzické piny 11, 12, 13, 14 na Atmega 328P. To by byly čtyři spodní kolíky vlevo.

Porty GPIO Arduino 11, 10 a 9, které jsme použili pro výstupní piny, jsou ve skutečnosti fyzické piny 17, 16, 15 na Atmega 328P. To by byly tři spodní kolíky vpravo.

Zapojil jsem LED diody do těchto kolíků jako předtím.

Krok 5: Závěr

Závěr
Závěr

Čipy TTL fungují, ale na jejich stavbu je potřeba hodně. FPGA fungují opravdu dobře, ale nejsou levné. Pokud můžete žít s menším počtem IO pinů a nižší rychlostí, pak může být pro vás čip Atmega 328P.

Několik věcí, které je třeba mít na paměti:

FPGA:

Pro

- Zvládne vysokorychlostní signály. Protože neexistuje CPU pro zúžení zpracování až na jednu instrukci najednou, limitujícím faktorem je zpoždění šíření branami v daném obvodu. V mnoha případech to může být mnohem rychlejší než hodiny dodávané s čipem. Podle mého návrhu by vypočítané zpoždění umožnilo, aby twoBitAdder reagoval na přibližně 100 milionů změn vstupních hodnot za sekundu (100 MHz), přestože palubní hodiny jsou pouze krystal 12 MHz.

- Jak se návrh stává složitějším, výkon stávajících obvodů nedegraduje (hodně). Vzhledem k tomu, že přidávání obvodů do textilie jednoduše přináší něco nového do nepoužívaných nemovitostí, neovlivní to stávající obvody.

- V závislosti na FPGA může být počet dostupných IO pinů velmi vysoký a obecně nejsou zamčeny pro žádný konkrétní účel.

Ošidit

- Může být drahé a/nebo těžké sehnat.

- Obvykle se dodává v balíčku BGA, který vyžaduje nějaký druh odpočinkové desky pro práci s čipem v jakémkoli amatérském projektu. Pokud jej stavíte do designu s vlastní vícevrstvou deskou plošných spojů SMT, není to problém.

- Většina výrobců FPGA poskytuje vlastní software pro návrh uzavřeného zdroje, který může v některých případech stát peníze nebo mít datum vypršení platnosti licence.

Arduino jako FPGA:

Pro

- Levné a snadno dostupné. Stačí na Amazonu vyhledat atmega328p-pu. Měly by být asi 4 $/kus. Několik prodejců je prodává v dávkách 3 nebo 4.

- Jedná se o balíček DIP, což znamená, že se perfektně hodí na prkénko s vnějšími kolíky.

- Toto je 5V zařízení, které umožňuje snadné propojení s dalšími 5V zařízeními.

Ošidit

- ATMEGA328P má omezený počet IO pinů (23) a několik z nich je vyhrazeno pro konkrétní úkoly.

- Jak se zvyšuje složitost obvodu, zvyšuje se množství kódu spuštěného ve smyčkové metodě Arduino, což znamená, že trvání každého cyklu je delší.

- I když je složitost obvodu nízká, každý cyklus vyžaduje mnoho instrukcí CPU pro načtení hodnot vstupních pinů a zápis hodnot výstupních pinů a návrat na začátek smyčky. S krystalem 16 MHz, dokonce i při jedné instrukci za hodinový cyklus, nebude smyčka běžet více než 1 milionkrát za sekundu (1 MHz). U většiny amatérských elektronických projektů je to však mnohem rychlejší, než je potřeba.

Doporučuje: