Jakie są różnice i podobieństwa między FPGA, ASIC i General Microcontroller?

25

Przeczytałem ten post i nie odpowiada w całości na moje pytanie:

Uważam mikrokontroler za coś, co ma trochę pamięci, rejestruje i może przetwarzać zestaw instrukcji, takich jak ŁADUJ, ZAPISUJ i DODAJ. Zawiera bramki logiczne i tym podobne, aby spełniać swoją rolę, ale jego głównym zadaniem jest być uniwersalnym procesorem bitów. Myślę, że Microntroller to system połączonych projektów ASIC, umożliwiający przechowywanie i przetwarzanie instrukcji.

Myślę o urządzeniu ASIC jako obwodzie, który został specjalnie skonstruowany przy użyciu komponentów logicznych i elektrycznych do wykonania jednego zadania, bez żadnych innych zadań ani dodatkowego sprzętu.

Myślę o urządzeniu FPGA jako urządzeniu ASIC (urządzenie niskiego poziomu) + kilka niewykorzystanych rzeczy, które zostały wykorzystane do zaimplementowania określonej tabeli prawdy.

Pomimo swojej nazwy, FGPA wydaje się bardzo „specyficzna dla aplikacji”, ponieważ musi zostać ponownie okablowana, aby wykonać nowe i inne zadanie. Prowadzi to do pomylenia z ASIC. Jednak w przypadku zmiany układu FPGA powinien być obecny cały niezbędny sprzęt. Ponadto układy FPGA mają być programowalne, ale czy nie do tego służy mikrokontroler?

W powyższym poście wspomniałem również o HDL, który znam. Czy nie można używać HDL zarówno dla ASIC, jak i FPGA oraz przez proxy do zaprojektowania całego mikrokontrolera?

użytkownik58446
źródło
1
Nie jest jasne, jakie jest twoje pytanie. Czy czytałeś powiązane pytania na temat FPGA vs ASIC? HDL jest faktycznie używany do projektowania ASIC i implementacji FPGA, a ty możesz zaprojektować mikrokontroler w HDL.
pjc50,
3
Altera oferuje bezpłatny ebook o nazwie FPGA dla manekinów , który dobrze wyjaśnia różnicę między FPGA, ASIC i mikrokontrolerami.
kkrambo
@kkrambo Nazywasz mnie manekinem? :) Przepraszam, nie mogłem się oprzeć ... Sprawdzę to.
user58446,
Dodałem słowo „podobieństwa” do tytułu pytania, ponieważ wydaje się, że istnieją drobne szczegóły techniczne żargonu, które mogą mylić relacje między trzema różnymi urządzeniami: na przykład jedno urządzenie może zawierać jedno z pozostałych dwóch urządzeń lub może zawierać wiele podobne elementy, ale różnią się w niektórych ważnych aspektach. Zostało to już poruszone w niektórych istniejących odpowiedziach. Dziękuję Ci.
user58446,

Odpowiedzi:

28

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: wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

FPGA vs Microcontrollers, na tym forum

Pan Mystère
źródło
14

Układy FPGA można „ponownie podłączyć” poprzez przeprogramowanie. FPGA ładuje swoją konfigurację do konfigurowalnych komórek logicznych po włączeniu . Oznacza to, że można go ponownie zaprogramować bez wprowadzania zmian w sprzęcie.

Układy ASIC można podłączyć ponownie tylko poprzez zmodyfikowanie masek fotolitograficznych w odlewni krzemu.

Mikrokontroler jest rodzajem ASIC, który wykonuje program i może w wyniku tego robić rzeczy ogólne. Jeśli jednak chcesz zmienić zestaw instrukcji lub zrobić coś podobnego, musisz zmodyfikować rzeczywisty układ scalony krzemu.


Różnica między FPGA a MCU jest bardziej rozmyta. Zasadniczo tym, czym FPGA jest na poziomie sprzętowym, jest wiele małych komórek SRAM, wszystkie połączone z gęstą macierzą multiplekserów. Zasadniczo FPGA to cały stos dyskretnej logiki, który można elektronicznie „ponownie podłączyć” ** po prostu przez przeprogramowanie multiplekserów i komórek SRAM.

Jako taki, możesz faktycznie zaimplementować MCU w FPGA, ponieważ MCU to tylko pewna konfiguracja komórek logicznych. W rzeczywistości układy FPGA są bardzo często stosowane w procesie projektowania MCU.

Mikrokontroler to implementacja określonej konfiguracji logicznej. Powodem, dla którego je mamy, jest to, że poprzez wdrożenie MCU bezpośrednio w krzemie, ogólna ilość wymaganej przestrzeni matrycy krzemowej może zostać znacznie zoptymalizowana, a niektóre optymalizacje wydajności mogą być wykonane, których zabrania wymagana „ogólność” układu FPGA. Pozwala to znacznie obniżyć koszty produkcji MCU, w wyniku czego wspólna MCU jest znacznie tańsza niż FPGA, która może zawierać równoważną logikę.


Układy FPGA przydatne w niektórych aplikacjach, ponieważ mogą implementować struktury logiczne w sposób, którego MCU nie mogą. Na przykład, jeśli chcesz dodać X1 + Y1, X2 + Y2, X3 + Y3 i X4 + Y4, MCU będzie musiała wykonać każdą operację po kolei *. FPGA może mieć po prostu 4 oddzielne jednostki ALU w tym samym czasie , więc może wykonać tę samą operację w kwadrans (zakładając, że oba urządzenia są taktowane z tą samą szybkością).

W tym miejscu naprawdę mogą błyszczeć układy FPGA (lub układy ASIC zaprojektowane do tego samego zadania), ponieważ można wykonywać wiele, wiele rzeczy jednocześnie , co pojedynczy proces może wykonywać tylko sekwencyjnie.

* (uwaga: tutaj ignoruję niektóre rzeczy, takie jak SIMD)

Connor Wolf
źródło
Nie sądzę, aby rozróżnienie FPGA / ASIC było rozmyte; w układzie FPGA obwody, których „okablowanie” można zmienić, działają jednocześnie i niezależnie. MCU ma dużą liczbę obwodów, których okablowania nie można zmienić, a ich zachowanie jest kontrolowane poprzez informacje, które są dostępne fragmentarycznie z programowalnej tablicy pamięci. W dowolnym momencie procesor generalnie będzie w stanie wykonać tylko jedną operację z listy od kilku tysięcy do kilku miliardów wyborów, ale MCU zostanie zaprojektowane w taki sposób, że połączenie takich operacji w sekwencji umożliwi wykonanie przydatna praca.
supercat
Dziękuję Ci. BARDZO blisko stawania się odpowiedzią ... choć 10 miesięcy później. +1, aby zrobić poprawki.
user58446,
6

To dobre pytanie

Zasadniczo mikrokontroler i układ ASIC mają sprzęt (często nazywany krzemem), który jest osadzony w kamieniu i nie można go zmienić. Układ FPGA można skonfigurować tak, aby reprezentował wiele różnych rodzajów sprzętu (może to obejmować mikrokontrolery).

Może się wydawać, że mikrokontroler może wykonywać wiele różnych czynności, ale wszystko to odbywa się poprzez uruchamianie różnych programów - technicznie oprogramowania, ale czasami nazywanego oprogramowaniem sprzętowym - sam sprzęt nie zmienia się zasadniczo, wykonuje te same operacje, ale wykonuje inna kolejność z różnymi danymi wejściowymi.

FPGA są zwykle używane do generowania projektów, które są przypisane do ASIC. Różnica między nimi polega na tym, że jeśli chcesz zaktualizować wewnętrzne działanie FPGA lub dodać / usunąć bloki funkcjonalne, wszystko co musisz zrobić, to zaktualizować oprogramowanie układowe, to nie może należy wykonać na układach ASIC, ponieważ wewnętrzne działania zostały poświęcone krzemowi, nie można go ponownie skonfigurować.

Krótko mówiąc, z mikroprocesorem używasz tego samego sprzętu do uruchamiania różnych programów, w FPGA rekonfigurujesz sprzęt do wykonywania różnych funkcji, a układy ASIC są jak mikrokontroler, ponieważ sprzętu nie można zmienić, ale zwykle są zaprojektowane do działania jedna funkcja niezwykle wydajnie.

Zarówno układy ASIC, jak i FPGA mogą zawierać mikrokontrolery, a jeśli tak, możesz pisać dla nich programy tak jak samodzielny mikrokontroler, przykładem tego jest wbudowany procesor Altera NIOS II.

Jeśli nadal jest to mylące, daj mi znać, co jest niejasne, a ja dołożę wszelkich starań, aby wyjaśnić moją odpowiedź.

cygański

Niebezpieczeństwo cygańskie
źródło
3

cóż, żaden układ FPGA nie jest programowany przez sygnały elektryczne, jeśli zachowuje się jak określony zestaw bramek, niektóre układy FPGA zawierają pamięć flash do przechowywania tej konfiguracji, niektóre nie i muszą być przeprogramowane po każdym resecie zasilania.

ASIC zjeżdża z już skonfigurowanej linii produkcyjnej.

Błędy FPGA można naprawić za pomocą aktualizacji oprogramowania układowego, błędów ASIC nie można ekonomicznie naprawić.

Jasen
źródło
2

Pomimo swojej nazwy, FGPA wydaje się bardzo „specyficzna dla aplikacji”, ponieważ musi zostać ponownie okablowana, aby wykonać nowe i inne zadanie.

To jest przeciwieństwo tego, co oznacza „specyficzny dla aplikacji”. Możesz użyć FPGA dla więcej niż jednej aplikacji, ponownie ją instalując. Nie można zmienić ASIC, więc można go zastosować tylko do jednego zadania (tym zadaniem może być implementacja mikrokontrolera).

Jednak w przypadku zmiany układu FPGA powinien być obecny cały niezbędny sprzęt.

Nie jestem pewien, co to oznacza. Zwykle jest interfejs oprogramowania do przeprogramowania FPGA. Jest to układ ASIC, który wymaga milionów sprzętu [jednostek walutowych].

Układy FPGA mają być programowalne, ale czy nie do tego służy mikrokontroler?

Mikrokontroler pozwala programować oprogramowanie sekwencyjne dla ustalonego sprzętu. Podobnie jak normalny komputer, ale bardzo mały i ograniczony pod względem zasobów. FPGA pozwala zaprogramować dowolny sprzęt za pomocą HDL.

Przestań krzywdzić Monikę
źródło