ASIC vs FPGA
Programowalną macierz bramek polowych można postrzegać jako etap prototypowania układów scalonych specyficznych dla aplikacji: układy ASIC są bardzo drogie w produkcji, a po ich wykonaniu nie ma cofania się (ponieważ najdroższym stałym kosztem są maski [wzornik produkcji ” „] i ich rozwój). Układy FPGA są wielokrotnie programowalne, jednak ze względu na to, że do osiągnięcia celu podłączony jest ogólny zestaw bramek, nie jest on zoptymalizowany jak układy ASIC. Ponadto układy FPGA są urządzeniami natywnie dynamicznymi, ponieważ po wyłączeniu zasilania tracisz nie tylko bieżący stan, ale także konfigurację. Obecnie istnieją płyty, które dodają układ FLASH i / lub mikrokontroler, aby załadować konfigurację podczas uruchamiania, więc jest to mniej ważny argument. Zarówno ASIC, jak i FPGA mogą być konfigurowane za pomocą języków opisu sprzętu, a czasami FPGA są używane do produktu końcowego. Ale generalnie ASIC uruchamiają się, gdy projekt jest naprawiony.
FPGA vs mikrokontroler
Jeśli chodzi o różnicę między mikrokontrolerem a układem FPGA, możesz uznać mikrokontroler za układ ASIC, który zasadniczo przetwarza kod w pamięci FLASH / ROM sekwencyjnie. Możesz tworzyć mikrokontrolery z układami FPGA, nawet jeśli nie są zoptymalizowane, ale nie odwrotnie. Układy FPGA są podłączone podobnie jak układy elektroniczne, dzięki czemu można mieć naprawdę równoległe obwody, a nie w mikrokontrolerze, w którym procesor przeskakuje z fragmentu kodu do drugiego, aby symulować wystarczająco dobrą równoległość. Ponieważ jednak układy FPGA zostały zaprojektowane do zadań równoległych, pisanie kodu sekwencyjnego nie jest tak łatwe jak w mikrokontrolerze.
Na przykład, zazwyczaj jeśli piszesz w pseudokodzie „niech C będzie A XOR B”, na FPGA, która zostanie przetłumaczona na „zbuduj bramkę XOR z klocków lego (tabele przeglądowe i zatrzaski) i podłącz A / B jako dane wejściowe i C jako wyjście ”, które będzie aktualizowane w każdym cyklu zegara, niezależnie od tego, czy używane jest C. Podczas gdy na mikrokontrolerze, który zostanie przetłumaczony na „instrukcję odczytu - jest to XOR zmiennych pod adresem A i adresem B pamięci RAM, wynik jest przechowywany pod adresem C. Załaduj rejestry jednostek arytmetycznych, a następnie poproś ALU o wykonanie XOR, a następnie skopiuj rejestr wyjściowy pod adres C pamięci RAM ”. Po stronie użytkownika obie instrukcje zawierały 1 linię kodu. Gdybyśmy to zrobili, NASTĘPNIE coś innego, w HDL musielibyśmy zdefiniować proces zwany procesem sztucznego wykonywania sekwencji - niezależnie od kodu równoległego. Natomiast w mikrokontrolerze nie ma nic do zrobienia. Z drugiej strony, aby uzyskać „równoległość” (naprawdę dostrajanie i wyprowadzanie) z mikrokontrolera, trzeba żonglować wątkami, które nie są trywialne. Różne sposoby pracy, różne cele.
W podsumowaniu:
ASIC vs FPGA: naprawiony, droższy dla niewielkiej liczby produktów (tańszy dla dużych ilości), ale bardziej zoptymalizowany.
ASIC kontra mikrokontroler: z pewnością jak porównanie narzędzia z młotem.
FPGA vs mikrokontroler: nie jest zoptymalizowany do sekwencyjnego przetwarzania kodu, ale może bardzo łatwo wykonywać naprawdę równoległe zadania. Ogólnie FPGA są programowane w HDL, mikrokontrolery w C / Assembly
Ilekroć problemem jest szybkość równoległych zadań, weź FPGA, rozwinąć swój projekt i wreszcie uczyń go ASIC, jeśli na dłuższą metę będzie taniej (produkcja masowa). Jeśli kolejne zadania są w porządku, weź mikrokontroler. Sądzę, że możesz zrobić z tego jeszcze bardziej specyficzny dla aplikacji układ scalony, jeśli na dłuższą metę jest to również tańsze. Najlepszym rozwiązaniem będzie prawdopodobnie jedno i drugie.
Cóż za szybkie wyszukiwanie po napisaniu tego:
FPGA vs Microcontrollers, na tym forum