Układy FPGA kontra mikrokontrolery [zamknięte]

36

Pracowałem nad rodziną Arduino (szczególnie Sanguino), zbudowałem kilka prostych urządzeń i prostą fototropę. Czuję się więc bardzo dobrze z mikrokontrolerami - szczególnie z Atmelem. Ciekawi mnie, jak różnią się układy FPGA od standardowych mikrokontrolerów. Jestem z wykształcenia technicznego (programowanie w C / C ++) i dlatego chętnie udzielę odpowiedzi technicznych. Pamiętaj tylko, że jestem nowicjuszem (w stosunku do mojego doświadczenia w s / w) w dziedzinie elektroniki. :)

Przeszedłem to zapytanie i było dobrze, ale szukam dalszych głębszych szczegółów.

Dzięki! Sushrut.

Sushrut J Mair
źródło
Dodatek - Czy istnieją jakieś dobre przykłady w prawdziwym świecie, które wykorzystują architektury hybrydowe, to znaczy łączą FPGA z mikrokontrolerami?
Sushrut J Mair
Sushrut J Mair - Ogólnie, gdy masz układ FPGA i potrzebujesz mikroprocesora, mikro zostaje zaimplementowane w układzie FPGA.
Connor Wolf,
Tak, fałszywe imię, uzgodnione. Jednak szukałem rzeczywistych przypadków, w których zarówno układy FPGA, jak i MCU są używane do projektowania systemu. Idea polega na tym, że część projektu FPGA jest wykorzystywana do wdrożenia „ewoluowalnego” sprzętu, który reaguje i zmienia się zgodnie ze zmieniającymi się wejściami do systemu, podczas gdy podstawowe przetwarzanie logiczne jest wykonywane przez MCU.
Sushrut J Mair

Odpowiedzi:

48

Projektowanie układu FPGA wymaga języka opisu sprzętu (HDL). HDL są absolutnie niczym. C. Podczas gdy program C jest sekwencyjną serią instrukcji i musi się wykrzywić, aby osiągnąć równoległe wykonywanie, HDL opisuje obwód równoległy i musi wykrzywić się, aby osiągnąć wykonanie sekwencyjne. Jest to zupełnie inny świat i jeśli spróbujesz zbudować obwód w FPGA, myśląc jak programista, będzie to bolało.

MCU jest ograniczony czasowo. Aby wykonać więcej pracy, potrzebujesz więcej cykli procesora. Zegary mają bardzo realne granice częstotliwości, więc łatwo jest trafić w ścianę obliczeniową. Jednak układ FPGA ma ograniczoną przestrzeń. Aby wykonać więcej pracy, wystarczy dodać więcej obwodów. Jeśli Twój układ FPGA nie jest wystarczająco duży, możesz kupić większy. Bardzo trudno jest zbudować obwód, który nie zmieści się w największym układzie FPGA, a nawet jeśli to zrobisz, istnieją notatki aplikacji opisujące sposób łączenia łańcuchów układów FPGA.

Układy FPGA skupiają się bardziej na równoległym wykonywaniu. Czasami musisz się martwić, ile czasu zajmuje ISR twojego MCU, aby obsłużyć przerwanie i czy będziesz w stanie osiągnąć swoje ograniczenia w czasie rzeczywistym. Jednak w FPGA cały czas działa wiele skończonych maszyn stanu (FSM). Są jak „femto-kontrolery”, jak małe chmury logiki sterowania. Wszystkie działają jednocześnie, więc nie musisz się martwić, że przegapisz przerwanie. Możesz mieć FSM do połączenia z ADC, inny FSM do połączenia z magistralą adresową / mikrokontrolera, inny FSM do strumieniowego przesyłania danych do kodeka stereo, jeszcze inny FSM do buforowania przepływu danych z ADC do kodeka ... trzeba użyć symulatora, aby upewnić się, że wszystkie FSM śpiewają w harmonii.

Układy FPGA są mokrym marzeniem projektantów układów PCB. Są niezwykle konfigurowalne. Możesz mieć wiele różnych interfejsów logicznych (LVTTL, LVCMOS, LVDS itp.), O różnych napięciach, a nawet o sile napędowej (więc nie potrzebujesz rezystorów terminujących). Szpilki można wymieniać; czy widziałeś kiedyś magistralę adresową MCU, w której piny były rozrzucone wokół układu? Twój projektant PCB prawdopodobnie musi upuścić kilka przelotek, aby poprawnie połączyć wszystkie sygnały. Dzięki układowi FPGA projektant PCB może następnie kierować sygnały do ​​układu w dowolnej dogodnej kolejności, a następnie projekt może zostać opatrzony adnotacjami wstecznymi do łańcucha narzędzi FPGA.

FPGA mają również wiele fajnych, fantazyjnych zabawek. Jednym z moich ulubionych jest Digital Clock Manager w układach Xilinx. Podajesz mu jeden sygnał zegarowy, a on może uzyskać z niego cztery kolejne, korzystając z szerokiej gamy mnożników i dzielników częstotliwości, wszystkie z nieskazitelnym 50% cyklem pracy i 100% w fazie ... i może nawet uwzględnić przesunięcie zegara, że wynika z opóźnień propagacji na zewnątrz układu!

EDYCJA (odpowiedź na uzupełnienie):

Możesz umieścić „miękki rdzeń” w FPGA. Dosłownie łączysz obwód mikrokontrolera, a raczej prawdopodobnie upuszczasz obwód innej osoby do swojego projektu, na przykład PicoBlaze lub MicroBlaze Xilinx lub Nios Altera. Ale podobnie jak kompilatory C-> VHDL, te rdzenie wydają się być nieco rozdęte i powolne w porównaniu do korzystania z FSM i ścieżki danych lub rzeczywistego mikrokontrolera. Narzędzia programistyczne mogą również znacznie zwiększyć złożoność procesu projektowania, co może być złą rzeczą, gdy układy FPGA są już niezwykle złożonymi układami.

Istnieją również niektóre układy FPGA z wbudowanymi „twardymi rdzeniami”, takie jak seria Virtex4 Xilinx, która ma prawdziwy, dedykowany procesor IBM PowerPC z tkaniną FPGA.

EDYCJA 2 (odpowiedź na komentarz):

Myślę, że teraz widzę ... pytasz o podłączenie dyskretnego MCU do FPGA; tj. dwa oddzielne układy scalone. Są ku temu dobre powody; FPGA, które mają twarde rdzenie i te, które są wystarczająco duże, aby obsłużyć przyzwoite miękkie rdzenie, to zwykle potwory z wieloma setkami pinów, które w końcu wymagają pakietu BGA, co łatwo zwiększa trudność zaprojektowania płytki drukowanej 10 razy.

C jest jednak o wiele łatwiejszy, więc MCU zdecydowanie mają swoje miejsce w parze z FPGA. Ponieważ łatwiej jest pisać C, możesz napisać „mózgi” lub centralny algorytm w MCU, podczas gdy FPGA może implementować sub-algorytmy, które mogą wymagać przyspieszenia. Spróbuj umieścić rzeczy, które zmieniają się w kodzie C, ponieważ łatwiej to zmienić, i pozostaw FPGA bardziej dedykowanym typem rzeczy, które nie będą się często zmieniać.

Narzędzia do projektowania MCU są również łatwiejsze w użyciu. Narzędzia projektowe budują plik bitów FPGA nawet po kilku minutach, nawet w przypadku dość prostych projektów, ale złożone programy MCU zwykle trwają kilka sekund. Z MCU jest o wiele, wiele mniej do zrobienia, więc są one również łatwiejsze do debugowania ... Nie mogę zrozumieć, jak skomplikowane mogą być układy FPGA. Naprawdę musisz uzyskać arkusz danych dla tego, który masz, i powinieneś spróbować przeczytać każdą jego stronę. Wiem, to kilkaset stron ... i tak to zrób.

Najlepszym sposobem na ich połączenie jest użycie MCU z zewnętrznym adresem i magistralą danych. Następnie możesz po prostu zmapować pamięć obwodów FPGA do MCU i dodać własne „rejestry”, z których każdy ma swój własny adres. Teraz FPGA może dodawać niestandardowe urządzenia peryferyjne, takie jak 32-bitowy zegar, który może zablokować wszystkie 4 bajty jednocześnie, gdy pierwszy bajt jest odczytywany, aby zapobiec przepełnieniu między odczytami 8-bitowymi. Możesz go również użyć jako logiki kleju do mapowania pamięci większej liczby urządzeń peryferyjnych z innych układów, takich jak oddzielny ADC.

Wreszcie, niektóre MCU są zaprojektowane do użytku z „zewnętrznym urządzeniem nadrzędnym”, takim jak FPGA. Cypress produkuje kilka MCU USB, które mają 8051 wewnątrz, ale chodzi o to, aby dane USB były wytwarzane / wykorzystywane przez np. FPGA.

ajs410
źródło
To dobra informacja, dzięki. Słyszałem o kompilatorach C / C ++ na HDL. Próbowałeś ich w ogóle?
Sushrut J Mair
Oni są ... w porządku. Dla pojedynczego bloku logicznego nie jest tak źle. Ale nie napisałbym całego projektu za pomocą tego rodzaju kompilatora. Nie są zbyt wydajne, ponieważ języki są tak niesamowicie różne ... musisz stosować specjalne konwencje, nie biorą tylko starego kodu ANSI C.
ajs410
Dzięki, to się przydaje. Zamówiłem zestaw deweloperski Brevia dla XP2 firmy Lattice Semiconductor. Zamierzam wypróbować niektóre kompilatory HDL do C, kiedy tylko będę zadowolony z podstawowych koncepcji projektowania FPGA.
Sushrut J Mair
Właśnie zobaczyłem odpowiedź na moje uzupełnienie w pierwotnym zapytaniu. Dzięki - więc czy mówisz, że praktycznie (przynajmniej przy dzisiejszej technologii) architektura hybrydowa standardowego MCU + FPGA ma bardzo niewielką wartość dodaną, aby być naprawdę użyteczną w rzeczywistych sytuacjach?
Sushrut J Mair
Niesamowite. Dzięki ajs410. Mam nadzieję, że poświęcę kilka tygodni na uruchomienie się w FPGA, zanim przejdę do ekscytujących możliwości łuku hybrydowego!
Sushrut J Mair
10

„przykłady w prawdziwym świecie ... łączenie układów FPGA z mikrokontrolerami?”

Zasadniczo sam wystarczająco duży układ FPGA może zrobić wszystko, co może zrobić układ FPGA i mikrokontroler - być może poprzez wdrożenie miękkiego procesora wewnątrz układu FPGA. W praktyce dany poziom wydajności często wiąże się z niższymi kosztami części i wymaga niższej mocy w przypadku implementacji z układem FPGA oraz osobnym mikrokontrolerem niż w przypadku samych układów FPGA (lub samych układów MCU). Oto kilka bardziej znanych urządzeń z zarówno układami FPGA, jak i mikrokontrolerami na pokładzie:

  • Kamera Elphel ; Elphel Project Wiki ma bramę FPGA Xilinx® Spartan 3e 1200K i procesor ETRAX FS z systemem GNU / Linux.
  • TS-7500 ma 5000 LUT Lattice FPGA i procesor ARM9 250MHz Cavium że można uruchomić Linuksa.
  • Płyta Balloon ma układ FPGA Xilinx Spartan i procesor ARM
  • kilka Teeny weeny Linux SBC zawiera zarówno układ FPGA, jak i procesor
  • The Armadeus Projektu Wiki dokumenty pokładzie kilka desek zarówno Xilinx Spartan-3 FPGA i procesorem 400 MHz ARM9.
  • The Borel Handy Nadzorcza obejmuje zarówno Xilinx Spartan 3e FPGA i procesor 600 MHz Analog Devices Blackfin® ADSP-BF537. (Nie ma MMU, więc nie może uruchomić pełnego Linuksa, ale może uruchomić uClinux).
  • „Minimig” (mini Amigi) zawiera Xilinx Spartan 3 FPGA do M68000 CPU oraz małą PIC MCU jako działanie sterownika dysku.
Davidcary
źródło
4

Często układy FPGA przyzwyczajają się do wykonywania zadań, których mikrokontroler nie może wykonać wydajnie, takich jak operacje o bardzo dużej równoległości lub niskim opóźnieniu, praca w wielu domenach zegarowych lub wykonywanie niestandardowej logiki przy szybkościach sprzętowych. W związku z tym wykonują ciężkie podnoszenie i rzadko potrzebujesz MCU, aby być centralnym w projekcie - można je przenieść na stanowiska zarządzania, takie jak ładowanie strumienia bitów konfiguracji. Przykładem tego jest PIC lub ARM w Minimig , który implementuje interfejs pamięci.

Kilka produktów zaciera jednak linie. Kilka przykładów:

  1. Większe układy FPGA zwykle mają wbudowane twarde procesory (większe projekty i tak często ich potrzebują), podobnie jak mają pamięć RAM i bloki multiplikatora
  2. Niektóre mikrokontrolery mają na celu równoległe operacje (XMOS XS1, Atmel Xmega, GreenArray, Parallax Propeller)
  3. Niektóre układy są zaprojektowane jako hybrydy (Cypress PSoC, Atmel FPSLIC)

Wywodzący się z imperatywnego zaplecza programistycznego jest dość dostosowaniem do projektowania sprzętowego, ponieważ musisz zyskać zalety układów FPGA. Jednak doświadczenie to będzie przydatne także w innym miejscu.

Yann Vernier
źródło
1

Tak naprawdę nie ma różnicy między MCU, takim jak AVR, a tym zaprogramowanym w FPGA. Witryna OpenCores ma kod VHDL dla AVR, którego można używać w FPGA. Możesz go przestudiować i zobaczyć, jak to działa, a nawet wypróbować samemu w symulatorze bez kupowania odpowiedniej karty FPGA.

Leon Heller
źródło
1
Często stwierdzam, że układy FPGA muszą działać z mniejszą częstotliwością zegara dla tego samego MCU, w przeciwnym razie będą znacznie droższe. W droższym przypadku możesz łatwo wdrożyć dodatkowy sprzęt między kontrolerem a zewnętrznymi pinami, często całkiem tego wart.
Kortuk
Jeśli mimo wszystko układ FPGA jest potrzebny, MCU jest „darmowy”.
Leon Heller
1

Mikrokontrolery to obwody cyfrowe, które wykonują polecenia z pamięci programu sekwencyjnie jedno polecenie po drugim. Cyfrowy obwód sprzętowy mikrokontrolera jest stały, a połączenia między różnymi bramkami składającymi się na obwód cyfrowy są trwałe i wyryte na krzemie. Gdzie jako FPGA można myśleć o puli cyfrowych bramek (w rzeczywistości zamiast nich obecne są luts), które mają programowalne interkonekty. Teraz każdy układ cyfrowy (nawet mikrokontroler) może być utworzony na FPGA poprzez programowanie interkonektów.

Dipten
źródło