Spisu treści:
- Krok 1: Zaprojektuj obwód, który będzie reprezentował „FPGA”
- Krok 2: Wprowadź FPGA
- Krok 3: Od FPGA do Arduino
- Krok 4: Od Arduino do układu DIP na płycie do chleba
- Krok 5: Wniosek
Wideo: Arduino jako tani układ scalony FPGA: 5 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Projektowanie sprzętowych obwodów logicznych może być świetną zabawą. Starym szkolnym sposobem na to było użycie bramek NAND, na tabliczce do krojenia chleba, połączonej przewodami połączeniowymi. Jest to nadal możliwe, ale nie trzeba wiele czasu, zanim liczba bramek wymknie się spod kontroli. Nowszą opcją jest użycie FPGA (Field Programmable Gate Array). Te chipy mogą same się przełączyć, aby stać się dowolnym cyfrowym obwodem logicznym, który można zaprojektować, ale nie są tanie i łatwo dostępne. Pokażę, jak można zastąpić ten układ FPGA tanim układem Atmega z Arduino UNO, skutecznie umieszczając układ cyfrowy w obudowie DIP, która jest bardzo przyjazna dla płytki stykowej.
Krok 1: Zaprojektuj obwód, który będzie reprezentował „FPGA”
Zbuduję sumator 2 bity + 2 bity. Zajmuje dwie pary logicznych pinów wejściowych i wyprowadza jedną trójkę pinów wyjściowych.
Aby to zrobić z bramkami NAND, zobacz schemat na zdjęciu. Potrzebuje 14 bramek NAND. Użyłem 4 poczwórnych chipów TTL z bramką NAND i podłączyłem je na płytce do chleba.
Dodałem kilka diod LED (nie zapomnij o rezystorach ograniczających prąd), aby pokazać, kiedy piny wejściowe i wyjściowe są włączone (wysokie), a kiedy wyłączone (niskie). Aby wysterować szpilki wejściowe, podłączyłem je do szyny uziemiającej lub dodatniej szyny zasilającej.
Ten obwód działa, ale zajmuje już 4 chipy TTL i jest szczurzym gniazdem przewodów. Gdyby potrzebnych było więcej bitów, byłoby więcej desek chlebowych i więcej skoczków. Bardzo szybko rozmiar obwodu wymknąłby się spod kontroli.
Na marginesie, pracując z bramkami TTL, nie wyprowadzają dokładnie 0 V lub 5 V, jak można by się spodziewać. Często wyprowadzają około 3V dla „wysokiego”, ale dokładne napięcie jest w bardzo szerokim zakresie. Ten sam obwód wykorzystujący chipy równoważne CMOS miałby lepsze dokładnie wahania od 0 V do dokładnie 5 V.
Krok 2: Wprowadź FPGA
FPGA to fantastyczny układ scalony, który może stać się dosłownie dowolną kombinacją bramek logicznych, połączonych ze sobą w dowolnej kombinacji. Jeden projektuje „obwód” w języku projektowania sprzętu (HDL). Istnieje wiele takich języków, z których jeden nazywa się Verilog. Plik.v na zdjęciu jest odpowiednikiem dwubitowego sumatora Verilog. Plik.pch poniżej jest również potrzebny do przypisania pinów wejściowych i wyjściowych wymienionych w pliku Verilog do prawdziwych pinów sprzętowych na chipie.
W tym przypadku używam płytki rozwojowej Lattice Semiconductors iCEstick (https://www.latticesemi.com/icestick). Właściwy układ FPGA to iCE40HX-1k, z nieco ponad 1000 bramkami, z których każda może stać się dowolną bramką logiczną. Oznacza to, że każda bramka może być bramką NAND lub bramką OR, bramką NOT, NOR, XOR itp. Dodatkowo każda bramka może obsługiwać więcej niż dwa wejścia. Jest to specyficzne dla każdego producenta, ale w iCE40 każda bramka może obsłużyć 4 wejścia. W ten sposób każda bramka jest znacznie bardziej wydajna niż 2 wejściowe bramki NAND.
Musiałem przypisać 4 piny wejściowe i 3 piny wyjściowe odpowiednio do fizycznych pinów 91, 90, 88, 87, 81, 80 i 79. Jest to specyficzne dla układu FPGA i płytki zaciskowej, na której się znajduje, oraz sposobu podłączenia tych pinów do portu PMOD. Jest to dostępne w arkuszach danych dla tej płyty FPGA.
Lattice zapewnia własny łańcuch narzędzi do syntezy (odpowiednik FPGA do kompilacji dla procesorów) z Verilog, ale użyłem darmowego łańcucha narzędzi o otwartym kodzie źródłowym icestorm (https://www.clifford.at/icestorm/). Instrukcja instalacji jest dostępna na tej stronie. Po zainstalowaniu Icestorm i pliku Verilog i pcf, polecenia załadowania tego obwodu do FPGA to:
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
Działa to świetnie, ale wraz z wysyłką tego iCEsticka kosztuje około 30 USD. Nie jest to najtańszy sposób na zbudowanie obwodu cyfrowego, ale jest potężny. Ma ponad 1000 bramek, a do tego malutkiego obwodu wykorzystuje tylko 3 z nich. Odpowiednik bramki NAND używał 14 bramek. Wynika to z faktu, że każda bramka może stać się dowolnym rodzajem bramki, a każda bramka jest w rzeczywistości bramką 4 wejściową. Każda brama może więcej. Jeśli potrzebujesz więcej bramek, iCEstick ma większego brata z 8000 bramek, co kosztuje około dwukrotnie. Inni producenci mają inne oferty, ale cena może być dość wysoka.
Krok 3: Od FPGA do Arduino
Układy FPGA są świetne, ale mogą być drogie, trudne do zdobycia i nie są zbyt przyjazne dla chleba. Przyjazny dla płytek chlebowych i tani chip to Atmega 328 P, który jest dostarczany w zgrabnym opakowaniu DIP, idealnym do płytek chlebowych. Można go również kupić za około 4 USD. To serce Arduino UNO. Można oczywiście używać całego UNO, ale taniej, możemy zdjąć Atmegę 328 P z UNO i używać jej samodzielnie. Użyłem jednak płyty UNO jako programatora dla Atmegi.
W tym momencie będziesz potrzebować
1. Arduino UNO, z wymiennym procesorem Atmega 328P.
2. Kolejna Atmega 328P z wstępnie wypalonym bootloaderem Arduino, w miejsce tego, który zamierzamy wyjąć z UNO. (Opcjonalne, zakładając, że nadal chcesz mieć użyteczne UNO).
Celem jest przekonwertowanie pliku Verilog na projekt arduino, który można załadować do 328P. Arduino bazuje na C++. Dogodnie jest tłumacz z Verilog na C++, zwany Verilator (https://www.veripool.org/wiki/verilator). Verilator jest przeznaczony do użytku przez projektantów sprzętu, którzy muszą symulować swoje projekty przed wprowadzeniem tych projektów do drogiego sprzętu. Verilator cross kompiluje Verilog do C++, a następnie użytkownik zapewnia wiązkę testową, aby zapewnić symulowane sygnały wejściowe i rejestrować sygnały wyjściowe. Zamierzamy go użyć, aby wepchnąć projekt Verilog do Atmega 328P za pomocą łańcucha narzędzi Arduino.
Najpierw zainstaluj Verilator. Postępuj zgodnie z instrukcjami na
Zainstaluj również Arduino IDE i sprawdź, czy może połączyć się z Arduino UNO przez USB.
Będziemy używać tego samego pliku verilog, co w przypadku FPGA, z wyjątkiem tego, że nazwy pinów muszą zostać zmienione. Dodałem podkreślenie (_) na początku każdego. Jest to potrzebne, ponieważ biblioteki arduino zawierają plik nagłówkowy, który tłumaczy rzeczy takie jak B0, B001 itp. Na liczby binarne. Inne nazwy pinów wejściowych byłyby w porządku, ale B0 i B1 spowodowałyby niepowodzenie kompilacji.
W katalogu zawierającym twoBitAdder.v i iCEstick.pcf uruchom następujące polecenie:
verilator -Wall --cc twoBitAdder.v
Stworzy to podkatalog o nazwie obj_dir zawierający kilka nowych plików. Potrzebujemy tylko plików nagłówka i cpp, VtwoBitAdder.h, VtwoBitAdder.cpp, VtwoBitAdder_Syms.h i VtwoBitAdder_Syms.cpp.
W Arduino IDE utwórz nowy szkic o nazwie twoBitAdder.ino. Spowoduje to utworzenie pliku ino w nowym katalogu zwanym również twoBitAdder, w katalogu szkicownika Arduino. Skopiuj pliki VtwoBitAdder.h i VtwoBitAdder.cpp do tego folderu twoBitAdder w folderze Arduino.
Teraz skopiuj pliki nagłówkowe z instalacji weryfikatora.
cp /usr/local/share/verilator/include/verilated*.
na koniec skopiuj do biblioteki std c++ z https://github.com/maniacbug/StandardCplusplus. Zgodnie z ich instrukcjami instalacji „Jest to instalowane tak jak zwykła biblioteka Arduino. Rozpakuj zawartość dystrybucji do folderu „biblioteki” pod szkicownikiem. Na przykład mój szkicownik znajduje się w /home/maniacbug/Source/Arduino, więc ta biblioteka znajduje się w /home/maniacbug/Source/Arduino/libraries/StandardCplusplus.
Pamiętaj, aby zresetować Arduino IDE po jego zainstalowaniu."
Teraz zastąp zawartość twoBitAdder.ino tą podaną w tym kroku. To jest wiązka testowa, której oczekuje werilator, która ustawia piny wejścia/wyjścia, następnie w pętli odczytuje piny wejściowe, podaje je do VtwoBitAdder (przetłumaczona wersja naszego układu), następnie odczytuje wyjścia z VtwoBitAdder i stosuje je do pinów wyjściowych.
Ten program powinien skompilować się i wykonać na Arduino UNO.
Krok 4: Od Arduino do układu DIP na płycie do chleba
Teraz, gdy program działa na Arduino, nie potrzebujemy już samej płytki Arduino. Wszystko czego potrzebujemy to procesor.
Wyjmij ostrożnie Atmega 328P z gniazda Arduino UNO i opcjonalnie włóż jego zamiennik.
Połóż Atmegę 328P na płytce stykowej. Połóż koniec dwoją skierowaną do góry na desce do krojenia chleba. Pin 1 to lewy górny pin. Pin 2 jest następny w dół i tak dalej do pinu 14, który znajduje się w lewym dolnym rogu. Następnie pin 15 znajduje się w prawym dolnym rogu, a piny 16 do 28 odliczają z powrotem prawą stronę żetonu.
Połącz styki 8 i 22 z masą.
Podłącz pin 7 do VCC (+5V).
Podłącz kryształ kwarcowy 16 Mhz między pinami 9 i 10. Również mały kondensator (22 pF) między pinem 9 a masą oraz między pinem 10 a masą. Daje to Atmega 328P częstotliwość zegara 16 MHz. W innym miejscu znajdują się instrukcje dotyczące uczenia 328P, aby zamiast tego używał wewnętrznego zegara 8 MHz, co pozwoliłoby zaoszczędzić kilka części, ale spowolniłoby to procesor.
Porty Arduino GPIO 5, 6, 7 i 8, których użyliśmy do pinów wejściowych, są w rzeczywistości fizycznymi pinami 11, 12, 13, 14 w Atmega 328P. To byłyby cztery dolne szpilki po lewej stronie.
Porty Arduino GPIO 11, 10 i 9, których użyliśmy do pinów wyjściowych, są w rzeczywistości fizycznymi pinami 17, 16, 15 w Atmega 328P. To byłyby trzy dolne piny po prawej stronie.
Diody podpiąłem do tych pinów jak poprzednio.
Krok 5: Wniosek
Chipy TTL działają, ale do zbudowania czegokolwiek potrzeba ich wielu. FPGA działają naprawdę dobrze, ale nie są tanie. Jeśli możesz żyć z mniejszą liczbą pinów IO i niższą prędkością, to Atmega 328P może być dla Ciebie chipem.
Kilka rzeczy, o których należy pamiętać:
FPGA:
Zawodowiec
- Może obsługiwać szybkie sygnały. Ponieważ nie ma procesora przetwarzającego wąskie gardło do jednej instrukcji na raz, czynnikiem ograniczającym jest opóźnienie propagacji przez bramki w danym obwodzie. W wielu przypadkach może to być znacznie szybsze niż zegar dostarczony z chipem. W moim projekcie obliczone opóźnienie pozwoliłoby, aby twoBitAdder zareagował na około 100 milionów zmian wartości wejściowych na sekundę (100 MHz), mimo że zegar pokładowy jest tylko kryształem 12 MHz.
- W miarę jak projekt staje się bardziej złożony, wydajność istniejących obwodów nie ulega pogorszeniu (znacznie). Ponieważ dodawanie obwodów do struktury jest po prostu umieszczaniem czegoś nowego w nieużywanej nieruchomości, nie ma to wpływu na istniejące obwody.
- W zależności od FPGA, liczba dostępnych pinów IO może być bardzo duża i generalnie nie są one zablokowane w żadnym konkretnym celu.
Kon
- Może być drogi i/lub trudny do zdobycia.
- Zazwyczaj jest dostarczany w pakiecie BGA, który wymaga jakiejś płytki zaciskowej do pracy z chipem w dowolnym projekcie amatorskim. Jeśli wbudujesz go w projekt z niestandardową wielowarstwową płytką drukowaną SMT, nie stanowi to problemu.
- Większość producentów FPGA dostarcza własne oprogramowanie do projektowania o zamkniętym kodzie źródłowym, które w niektórych przypadkach może kosztować lub mieć datę wygaśnięcia licencji.
Arduino jako FPGA:
Zawodowiec
- Tani i łatwy do zdobycia. Po prostu wyszukaj atmega328p-pu na Amazon. Powinny wynosić około 4 USD za sztukę. Kilku sprzedawców sprzedaje je po 3 lub 4 sztuki.
- Jest to pakiet DIP, co oznacza, że idealnie pasuje do płytki stykowej z zewnętrznymi pinami.
- Jest to urządzenie 5 V, które może ułatwić komunikację z innymi urządzeniami 5 V.
Kon
- ATMEGA328P ma ograniczoną liczbę pinów IO (23), a kilka z nich jest zarezerwowanych do określonych zadań.
- Wraz ze wzrostem złożoności obwodu zwiększa się ilość kodu uruchamianego w metodzie pętli Arduino, co oznacza, że czas trwania każdego cyklu jest dłuższy.
- Nawet jeśli złożoność obwodu jest niska, każdy cykl wymaga wielu instrukcji procesora, aby pobrać wartości pinów wejściowych, zapisać wartości pinów wyjściowych i powrócić na początek pętli. Z kryształem 16Mhz, nawet przy jednej instrukcji na cykl zegara, pętla nie będzie działać więcej niż może 1 milion razy na sekundę (1Mhz). W przypadku większości amatorskich projektów elektronicznych jest to jednak o wiele szybsze niż to konieczne.
Zalecana:
Arduino jako dostawca usług internetowych -- Nagraj plik szesnastkowy w AVR -- Bezpiecznik w AVR -- Arduino jako programista: 10 kroków
Arduino jako dostawca usług internetowych || Nagraj plik szesnastkowy w AVR || Bezpiecznik w AVR || Arduino As Programmer:…………Zasubskrybuj mój kanał YouTube, aby uzyskać więcej filmów………Ten artykuł to wszystko o arduino jako isp. Jeśli chcesz wgrać plik hex lub chcesz ustawić bezpiecznik w AVR to nie musisz kupować programatora, możesz zrobić
Obwód elektroniczny LED Chaser wykorzystujący układ scalony timera 555: 20 kroków
Układ elektroniczny ścigacza diod LED wykorzystujący układ scalony czasomierza 555: Układy ścigacza diod LED są najczęściej używanymi zintegrowanymi obwodami elektronicznymi. Są one niezmiernie używane w różnych aplikacjach, takich jak sygnały, system tworzenia słów, systemy wyświetlania itp. Układ scalony timera 555 jest skonfigurowany w trybie stanu astabilnego. NS
Arduino i układ scalony sterownika LED TLC5940 PWM: 7 kroków
Arduino i układ scalony sterownika LED TLC5940 PWM: W tym artykule przyjrzymy się 16-kanałowemu układowi scalonemu sterownika LED Texas Instruments TLC5940. Powodem, dla którego to robimy, jest zademonstrowanie innego, łatwiejszego sposobu napędzania wielu diod LED – a także serw. Po pierwsze, oto kilka przykładów TLC5940
2 $ Arduino. ATMEGA328 jako samodzielny. Łatwy, tani i bardzo mały. kompletny przewodnik: 6 kroków (ze zdjęciami)
2 $ Arduino. ATMEGA328 jako samodzielny. Łatwy, tani i bardzo mały. Kompletny przewodnik.: W tej instrukcji dowiesz się, jak używać mikrokontrolera Arduino ATMEGA328 jako samodzielnego mikrokontrolera. Kosztują tylko 2 dolce, mogą zrobić to samo, co Arduino i sprawić, że Twoje projekty będą bardzo małe. Omówimy układ pinów
Automatyczny regulator poziomu wody wykorzystujący tranzystory lub układ scalony timera 555: 5 kroków
Automatyczny regulator poziomu wody za pomocą tranzystorów lub timera 555 IC: Wstęp: Cześć Wszyscy tutaj dowiemy się o efektywnym oszczędzaniu wody. więc dokładnie zapoznaj się z krokami i zdaniami. Przepełnienie zbiornika na wodę to powszechny problem, który prowadzi do marnowania wody. Chociaż istnieje ma