Съдържание:

Arduino като евтина платка FPGA: 5 стъпки (със снимки)
Arduino като евтина платка FPGA: 5 стъпки (със снимки)

Видео: Arduino като евтина платка FPGA: 5 стъпки (със снимки)

Видео: Arduino като евтина платка FPGA: 5 стъпки (със снимки)
Видео: Леон Анави - Направи си сам Raspberry Pi HAT 2024, Ноември
Anonim
Arduino като евтина платка FPGA
Arduino като евтина платка FPGA

Проектирането на хардуерни логически схеми може да бъде забавно. Старият начин да направите това беше с портите на NAND, върху дъска за хляб, свързани с джъмперни проводници. Това все още е възможно, но не отнема много преди броят на портите да излезе извън контрол. По -нова опция е да се използва FPGA (Field Programmable Gate Array). Тези чипове могат да се пренасочат, за да се превърнат във всяка цифрова логическа схема, която можете да проектирате, но не са евтини и лесно достъпни. Ще покажа как тази FPGA може да бъде заменена с евтин чип Atmega от Arduino UNO, ефективно поставяйки цифровата схема в DIP пакет, който е много удобен за макет.

Стъпка 1: Проектирайте схемата, която "FPGA" ще представлява

Проектирайте веригата, която
Проектирайте веригата, която
Проектирайте веригата, която
Проектирайте веригата, която
Проектирайте веригата, която
Проектирайте веригата, която

Ще изградя 2 -битов + 2 -битов суматор. Това отнема две двойки логически входни щифтове и извежда един триплет от изходните щифтове.

За да направите това с NAND порти, вижте схемата на снимката. Нуждае се от 14 NAND порта. Използвах 4 quad NAND порта TTL чипове и ги свързах на дъската за хляб.

Добавих някои светодиоди (не забравяйте текущите ограничаващи резистори), за да покажа кога входните и изходните щифтове са включени (високо) и кога са изключени (ниско). За да задвижвам входните щифтове, или ги прескачах към заземителната релса или към положителната шина за захранване.

Тази схема работи, но вече заема 4 TTL чипа и е гнездо от проводници на плъх. Ако бяха необходими повече битове, щяха да има повече дъски за хляб и повече джъмпери. Много бързо размерът на веригата ще излезе извън контрол.

От друга страна, когато работите с TTL порти, те не извеждат точно 0V или 5V, както се очаква. Те често извеждат около 3V за "високо", но точното напрежение е в много широк диапазон. Същата схема, използваща еквивалентни на CMOS чипове, би имала по -добри точно 0V до точно 5V люлки.

Стъпка 2: Въведете FPGA

Въведете FPGA
Въведете FPGA
Въведете FPGA
Въведете FPGA

FPGA е фантастичен чип, който буквално може да се превърне във всяка комбинация от логически порти, свързани заедно във всяка комбинация. Човек проектира "веригата" на език за хардуерен дизайн (HDL). Има няколко такива езика, един от които се нарича Verilog.. V файлът на снимката е еквивалентът на Verilog на двубитовия суматор.. Pch файлът под него също е необходим за присвояване на входните и изходните щифтове, посочени във файла verilog, към истински хардуерни щифтове на чипа.

В този случай използвам дъска за разработка на iCEstick на Lattice Semiconductors (https://www.latticesemi.com/icestick). Действителният FPGA чип е iCE40HX-1k, с малко над 1000 порта, всеки от които може да се превърне във всяка логическа порта. Това означава, че всяка порта може да бъде NAND порта или OR порта, НЕ порта, NOR, XOR и т.н. Освен това всяка порта може да обработва повече от два входа. Това е специфично за всеки производител, но на iCE40 всяка порта може да обработва 4 входа. По този начин всяка порта е значително по -способна от 2 -те входни NAND порта.

Трябваше да присвоя 4 -те входни бора и 3 -те изходни щифта съответно на физически пинове 91, 90, 88, 87, 81, 80 и 79. Това е специфично за чипа fpga и пробивната платка, на която е, и как тези щифтове са свързани към порта PMOD. Това е налично в информационните листове за тази FPGA платка.

Lattice предоставя собствена верига от инструменти за синтезиране (FPGA еквивалент на компилация за процесори) вериги от Verilog, но аз използвах безплатната верига от инструменти с отворен код Icestorm (https://www.clifford.at/icestorm/). Инструкциите за инсталиране са достъпни на този сайт. С инсталирана icestorm и Verilog и pcf файл, командите за зареждане на тази верига на 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

Това работи чудесно, но доставката на този iCEstick ще струва около 30 долара. Това не е най -евтиният начин за изграждане на цифрова схема, но е мощен. Той има над 1000 врати и за тази малка верига използва само 3 от тях. Еквивалентът на порта NAND използва 14 порти. Това се дължи на факта, че всяка порта може да се превърне във всякакъв вид порта и всяка порта всъщност е 4 входни порта. Всяка порта може да направи повече. Ако имате нужда от повече порти, iCEstick има по -голям брат с 8000 врати, което струва около двойно. Други производители имат други предложения, но цената може да стане доста стръмна.

Стъпка 3: От FPGA до Arduino

От FPGA до Arduino
От FPGA до Arduino

FPGA са страхотни, но могат да бъдат скъпи, трудно достъпни и не са много удобни за хляб. Приятен и евтин чип за макет е Atmega 328 P, който се предлага в чист DIP пакет, идеален за макетиране. Може да се купи и за около 4 долара. Това е сърцето на Arduino UNO. Разбира се, можете да използвате цялото UNO, но ако сте евтини, можем да изтеглим Atmega 328 P от UNO и да го използваме самостоятелно. Все пак използвах борда на UNO като програмист за Atmega.

В този момент ще имате нужда

1. Arduino UNO, с подвижен процесор Atmega 328P.

2. Друг Atmega 328P с предварително изгорен буутлоудър Arduino, за да замени този, който предстои да извадим от UNO. (По избор, ако все пак искате да имате използваемо UNO).

Целта е да конвертирате verilog файла в arduino проект, който може да бъде зареден в 328P. Arduino е базиран на C ++. Удобно има преводач от Verilog на C ++, наречен Verilator (https://www.veripool.org/wiki/verilator). Verilator е предназначен да се използва от хардуерни дизайнери, които трябва да симулират дизайна си, преди да ги ангажират със скъп хардуер. Verilator cross компилира verilog в C ++, след което потребителят предоставя тестова сбруя, за да осигури симулирани входни сигнали и да запише изходните сигнали. Ще го използваме, за да вмъкнем дизайна на verilog в Atmega 328P, използвайки веригата от инструменти Arduino.

Първо инсталирайте Verilator. Следвайте инструкциите на

Също така инсталирайте Arduino IDE и проверете дали той може да се свърже с Arduino UNO през USB.

Ние ще използваме същия Verilog файл като за FPGA, с изключение на това, че имената на пиновете трябва да бъдат променени. Добавих подчертаване (_) в началото на всеки. Това е необходимо, защото библиотеките arduino включват заглавен файл, който превежда неща като B0, B001 и т.н., в двоични числа. Другите имена на входни пинове биха били добре както са, но B0 и B1 биха причинили неуспех на компилацията.

В директорията, съдържаща twoBitAdder.v и iCEstick.pcf, изпълнете следното:

верификатор -Wall --cc twoBitAdder.v

Това ще създаде поддиректория, наречена obj_dir, съдържаща няколко нови файла. Нуждаем се само от заглавните и cpp файлове, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h и VtwoBitAdder_Syms.cpp.

В IDE на Arduino създайте нова скица, наречена twoBitAdder.ino. Това ще създаде ino файла в нова директория, наречена twoBitAdder, във вашата директория за скици на Arduino. Копирайте вашите файлове VtwoBitAdder.h и VtwoBitAdder.cpp в тази папка twoBitAdder във вашата папка Arduino.

Сега копирайте заглавните файлове от инсталацията на верификатора.

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

накрая копирайте в std c ++ библиотеката от https://github.com/maniacbug/StandardCplusplus. Съгласно техните инструкции за инсталиране "Това е инсталирано точно като обикновена библиотека на Arduino. Разопаковайте съдържанието на дистрибуцията в папката" библиотеки "под вашата скица. Например моят скицник е на адрес/home/maniacbug/Source/Arduino, така че тази библиотека е в/home/maniacbug/Source/Arduino/libraries/StandardCplusplus.

Не забравяйте да нулирате вашата Arduino IDE, след като я инсталирате."

Сега заменете съдържанието на twoBitAdder.ino с това, предоставено на тази стъпка. Това е тест, който очаква верификаторът, който настройва входните/изходните щифтове, след това в цикъла, чете входните щифтове, подава ги към VtwoBitAdder (преведената версия на нашата верига), след това чете изходите от VtwoBitAdder и прилага ги към изходните щифтове.

Тази програма трябва да компилира и изпълнява на Arduino UNO.

Стъпка 4: От Arduino до DIP чип на дъска за хляб

От Arduino до DIP чип на дъска за хляб
От Arduino до DIP чип на дъска за хляб

Сега, когато програмата работи на Arduino, вече не се нуждаем от самата платка Arduino. Всичко, от което се нуждаем, е процесорът.

Извадете Atmega 328P внимателно от гнездото Arduino UNO и по желание поставете неговата подмяна.

Поставете Atmega 328P върху дъската. Поставете края с посоката нагоре върху дъската за хляб. Пин 1 е горният ляв щифт. Пин 2 е следващият надолу и така нататък до щифт 14, който е долу вляво. Тогава щифт 15 е в долния десен ъгъл, а щифтове 16 до 28 броят обратно дясната страна на чипа.

Свържете щифтове 8 и 22 към земята.

Свържете щифт 7 към VCC (+5V).

Свържете 16Mhz кварцов кристал между щифтове 9 и 10. Също така малък кондензатор (22pF) между щифт 9 и маса и между щифт 10 и маса. Това дава на Atmega 328P 16Mhz тактова честота. На друго място има инструкции как да се научи 328P вместо това да използва своя вътрешен 8Mhz часовник, което би спестило няколко части, но това би забавило процесора.

Arduino GPIO портовете 5, 6, 7 и 8, които използвахме за входните щифтове, всъщност са физическите пинове 11, 12, 13, 14 на Atmega 328P. Това биха били четирите долни щифта вляво.

Arduino GPIO портовете 11, 10 и 9, които използвахме за изходните щифтове, всъщност са физическите пинове 17, 16, 15 на Atmega 328P. Това биха били долните три щифта вдясно.

Свързах светодиодите към тези щифтове както преди.

Стъпка 5: Заключение

Заключение
Заключение

TTL чиповете работят, но отнема много от тях, за да се изгради нещо. FPGA работят наистина добре, но не са евтини. Ако можете да живеете с по -малко IO щифтове и по -ниска скорост, тогава Atmega 328P може да е чипът за вас.

Някои неща, които трябва да имате предвид:

FPGA:

Про

- Може да обработва високоскоростни сигнали. Тъй като няма процесор, който да ограничава обработката до една инструкция наведнъж, ограничаващият фактор е забавянето на разпространението през портите на дадената верига. В много случаи това може да е много по -бързо от часовника, предоставен с чипа. За моя дизайн изчисленото забавяне би позволило на twoBitAdder да реагира на около 100 милиона промени във входните стойности в секунда (100Mhz), въпреки че бордовият часовник е само 12Mhz кристал.

- Тъй като дизайнът става все по -сложен, работата на съществуващите схеми не се влошава (много). Тъй като добавянето на вериги към тъканта просто поставя нещо ново в неизползвани недвижими имоти, това не влияе на съществуващите схеми.

- В зависимост от FPGA, броят на наличните IO щифтове може да бъде много голям и те обикновено не са заключени за някаква конкретна цел.

Con

- Може да бъде скъпо и/или трудно да се намери.

- Обикновено се предлага в BGA пакет, който изисква някакъв вид пробивна дъска за работа с чипа във всеки любителски проект. Ако го вграждате в дизайн с персонализирана многослойна SMT PCB, това не е проблем.

- Повечето производители на FPGA предоставят собствен софтуер за проектиране със затворен код, който в някои случаи може да струва пари или да има срок на валидност на лиценза.

Arduino като FPGA:

Про

- Евтино и лесно за получаване. Просто потърсете atmega328p-pu в Amazon. Те трябва да са около $ 4/брой. Няколко продавачи ги продават на партиди от 3 или 4.

- Това е DIP пакет, което означава, че се вписва идеално в макет с външните му щифтове.

- Това е 5V устройство, което може да улесни взаимодействието с други 5V устройства.

Con

- ATMEGA328P има ограничен брой IO пинове (23) и няколко от тях са запазени за специфични задачи.

- С увеличаването на сложността на веригата, количеството код, изпълнен в метода на Arduino цикъл, се увеличава, което означава, че продължителността на всеки цикъл е по -голяма.

- Дори ако сложността на схемата е ниска, всеки цикъл изисква много инструкции на процесора, за да извлече стойностите на входния пин и да запише стойности на изходния пин и да се върне в горната част на цикъла. С 16Mhz кристал, дори при една инструкция за такт, цикълът няма да работи повече от може би 1 милион пъти в секунда (1Mhz). За повечето проекти за аматьорска електроника обаче това е много по -бързо от необходимото.

Препоръчано: