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.