Przeczytałem ten post i nie odpowiada on w całości na moje pytanie:
Myślę o mikrokontrolerze jako o wszystkim, co ma pewną pamięć, rejestry i może przetwarzać zestaw instrukcji, takich jak LOAD, STORE i ADD. Zawiera bramki logiczne i takie, które spełniają swoją rolę, ale jego głównym zadaniem jest być uniwersalnym procesorem bitów. Myślę o Microntroller jako systemie połączonych ze sobą projektów ASIC w celu stworzenia możliwości przechowywania i przetwarzania instrukcji.
Myślę o urządzeniu ASIC jako obwodzie, który został specjalnie skonstruowany przy użyciu elementów logicznych i elektrycznych do wykonywania jedno zadanie, bez żadnego innego zadania na myśli ani dodatkowego sprzętu.
Myślę o urządzeniu FPGA jako o urządzeniu ASIC (urządzenie niskiego poziomu) + garść nieużywanych rzeczy pozostałych, używanych do implementuje konkretną tablicę prawdy.
Pomimo swojej nazwy FGPA wydaje się być bardzo „specyficzna dla aplikacji”, ponieważ musi zostać ponownie okablowana, aby wykonywać nowe i inne zadanie. Prowadzi to do pomylenia z ASIC. Jednak w przypadku ponownego okablowania FPGA cały niezbędny sprzęt powinien być obecny. Również FPGA ma być programowalne, ale czy nie jest to do czego przeznaczony jest mikrokontroler?
Powyższy post, do którego się odwołałem, wspomina również o HDL, z którym jestem zaznajomiony. Czy „t HDL może być używane zarówno w układach ASIC, jak i FPGA, a przez proxy do projektowania całego mikrokontrolera?
Komentarze
- It ' nie jest zbyt jasne, jakie jest Twoje pytanie. Czy czytałeś powiązane pytania dotyczące FPGA i ASIC? HDL jest rzeczywiście używany do projektowania układów ASIC i implementacji FPGA, a także możesz zaprojektować mikrokontroler w HDL.
- Altera oferuje darmowy ebook o nazwie FPGA dla opornych , który dobrze wyjaśnia różnicę między FPGA, ASIC i mikrokontrolerami.
- @kkrambo Nazwałeś ' mnie atrapą? 🙂 Przepraszam, nie mogłem ' się oprzeć … sprawdzę to.
- Dodałem słowo ' podobieństwa ' do tytułu pytania, ponieważ wydaje się, że istnieje drobiazgowy żargon techniczny, który może mylić związek 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 podobnych elementów, ale różni się pod pewnymi ważnymi aspektami. Zostało to już poruszone w niektórych z istniejących odpowiedzi. Dziękuję.
Odpowiedź
ASIC kontra FPGA
Tablica bramek programowalna przez użytkownika może być postrzegana jako etap prototypowania układów scalonych specyficznych dla aplikacji: układy ASIC są bardzo drogie w produkcji, a po ich wykonaniu nie ma odwrotu (ponieważ najdroższym kosztem stałym są maski [rodzaj „szablonu” produkcyjnego] i ich rozwój). FPGA można wielokrotnie przeprogramowywać, jednak ze względu na fakt, że ogólny zestaw bramek jest podłączony, aby osiągnąć cel , nie jest zoptymalizowany tak, jak układy ASIC. Ponadto układy FPGA są natywnie dynamicznymi urządzeniami w tym sensie, że jeśli je wyłączysz, stracisz nie tylko bieżący stan, ale także konfigurację. Obecnie istnieją płyty, które dodają układ FLASH i / lub mikrokontroler do ładować konfigurację podczas uruchamiania, więc jest to mniej ważny argument. Zarówno układy ASIC, jak i FPGA można skonfigurować za pomocą języków opisu sprzętu, a czasami układy FPGA są używany do produktu końcowego. Ale generalnie układy ASIC włączają się, gdy projekt jest naprawiony.
FPGA a mikrokontroler
Jeśli chodzi o różnicę między mikrokontrolerem a FPGA, można 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ą one zoptymalizowane, ale nie na odwrót. Układy FPGA są okablowane tak jak obwody elektroniczne, dzięki czemu można mieć naprawdę równoległe obwody, a nie jak w mikrokontrolerze, w którym procesor przeskakuje z fragmentu kodu do drugiego aby zasymulować wystarczająco dobry paralelizm, jednak ponieważ układy FPGA zostały zaprojektowane do zadań równoległych, nie jest tak łatwo pisać sekwencyjny kod, jak w mikrokontrolerze.
Na przykład, jeśli piszesz w pseudokodzie „niech C będzie A XOR B”, na FPGA, które zostanie przetłumaczone na „zbuduj bramę XOR z zawartymi w niej klockami lego (tablice przeglądowe i zatrzaski), i podłącz A / B jako wejścia i C jako wyjście ”, które będzie aktualizowane w każdym cyklu zegara, niezależnie od tego, czy C jest używane czy nie. Natomiast na mikrokontrolerze, który zostanie przetłumaczony na „instrukcję odczytu” – to jest XOR zmiennych pod adresem A i adresem B pamięci RAM, wynik będzie zapisany pod adresem C. Załaduj rejestry jednostek arytmetycznych, a następnie poproś ALU o wykonanie XOR, następnie skopiuj rejestr wyjściowy pod adres C pamięci RAM. ”Jednak po stronie użytkownika obie instrukcje miały jedną linię kodu.Gdybyśmy mieli to zrobić, WTEDY coś innego, w HDL musielibyśmy zdefiniować to, co nazywa się procesem, aby sztucznie tworzyć sekwencje – niezależnie od kodu równoległego. Natomiast w mikrokontrolerze nie ma co robić. Z drugiej strony, aby uzyskać „równoległość” (naprawdę dostrajanie i wyłączanie) z mikrokontrolera, musiałbyś żonglować wątkami, co nie jest trywialne. Różne sposoby pracy, różne cele.
Podsumowując:
ASIC vs FPGA: stałe, droższe w przypadku małej liczby produktów (tańsze przy dużych ilościach), ale bardziej zoptymalizowane.
ASIC vs mikrokontroler: z pewnością przypomina porównywanie narzędzia z młotkiem.
FPGA vs mikrokontroler: niezoptymalizowany pod kątem sekwencyjnego przetwarzania kodu, ale może również bardzo łatwo wykonywać naprawdę równoległe zadania. Generalnie FPGA są programowane w HDL, mikrokontrolery w C / Assembly
Zawsze, gdy problemem jest prędkość równoległych zadań, weź FPGA, rozwiń swój projekt i ostatecznie zrób z niego ASIC, jeśli na dłuższą metę jest tańszy (produkcja masowa). Jeśli zadania sekwencyjne są w porządku, weź mikrokontroler. Myślę, że możesz zrobić z tego jeszcze bardziej specyficzny dla aplikacji układ scalony, jeśli będzie tańszy również na dłuższą metę . Najlepszym rozwiązaniem będzie prawdopodobnie jedno i drugie.
Jakie szybkie wyszukiwanie po napisaniu tego dało mi:
Odpowiedź
FPGA można „ponownie podłączyć” przez przeprogramowanie. FPGA ładuje swoją konfigurację do konfigurowalnych komórek logicznych, gdy jest zasilany . Oznacza to, że można go ponownie zaprogramować bez zmian w sprzęcie.
Układy ASIC można ponownie podłączyć tylko poprzez zmodyfikowanie masek fotograficznych w odlewni krzemu.
Mikrokontroler to typ ASIC, który wykonuje program i może w rezultacie robić ogólne rzeczy. Jeśli jednak chcesz zmienić zestaw instrukcji lub zrobić coś podobnego, musisz zmodyfikować rzeczywisty układ krzemowego układu scalonego.
Różnica między FPGA a MCU jest bardziej rozmyta. Zasadniczo FPGA na poziomie sprzętowym to wiele małych komórek SRAM, wszystkie podłączone do gęstej matrycy multiplekserów. Zasadniczo FPGA to cały stos dyskretnej logiki, która może być elektronicznie „ponownie okablowana” ** po prostu przez przeprogramowanie multiplekserów i komórek SRAM.
Jako takie, możesz faktycznie zaimplementuj MCU w FPGA, ponieważ MCU to tylko pewna konfiguracja komórek logicznych. W rzeczywistości układy FPGA są bardzo często używane w procesie projektowania mikrokontrolerów.
Mikrokontroler to implementacja określonej konfiguracji logicznej. Powodem, dla którego je mamy, jest to, że poprzez implementację MCU bezpośrednio w krzemie, ogólną ilość wymaganej przestrzeni matrycy krzemowej można znacznie zoptymalizować i można dokonać pewnych optymalizacji wydajności, których wymaga „ogólność” FPGA. Pozwala to radykalnie obniżyć koszty produkcji MCU, w wyniku czego zwykły MCU jest znacznie tańszy niż FPGA, który jest w stanie pomieścić równoważną logikę.
FPGA są przydatne w niektórych aplikacjach, ponieważ mogą implementować struktury logiczne w sposób niemożliwy do zastosowania przez MCU. Na przykład, jeśli musisz dodać X1 + Y1, X2 + Y2, X3 + Y3 i X4 + Y4, MCU będzie musiał 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 ćwierć czasu (zakładając, że oba urządzenia są taktowane z tą samą częstotliwością).
Tutaj FPGA ( lub ASIC przeznaczone do tego samego zadania) mogą naprawdę zabłysnąć, ponieważ możesz wykonać wiele, wiele rzeczy jednocześnie , co pojedynczy proces może wykonać tylko sekwencyjnie.
* (uwaga: ignoruję tutaj niektóre rzeczy, takie jak SIMD)
Komentarze
- Nie ' Nie sądzę, że rozróżnienie FPGA / ASIC jest niewyraźne; w układzie FPGA obwody, których ” okablowanie ” można zmieniać, działają jednocześnie i niezależnie. MCU ma dużą liczbę obwodów, których okablowania nie można zmienić, których zachowanie jest kontrolowane przez informacje, do których dostęp jest uzyskiwany fragmentarycznie z programowalnej tablicy pamięci. W dowolnym momencie procesor będzie generalnie w stanie wykonać tylko jedną operację z listy od kilku tysięcy do kilku miliardów wyborów, ale MCU zostanie zaprojektowany w taki sposób, że połączenie takich operacji w kolejności umożliwi wykonanie użyteczna praca.
- Dziękuję. BARDZO blisko uzyskania odpowiedzi … aczkolwiek 10 miesięcy później. +1 do naprawy.
Odpowiedź
To dobre pytanie
Zasadniczo mikrokontroler i ASIC ma sprzęt (często nazywany krzemem), który jest ustawiony w kamieniu i nie można go zmienić. FPGA można skonfigurować reprezentować wiele różnych rodzajów sprzętu (może to obejmować mikrokontrolery).
Możesz pomyśleć, że mikrokontroler może wykonywać wiele różnych rzeczy, ale wszystko to odbywa się za pomocą różnych programów – technicznie oprogramowania ale czasami określane jako oprogramowanie układowe – sam sprzęt nie zmienia się zasadniczo, wykonuje te same operacje, ale w innej kolejności z różnymi wejściami.
FPGA są zwykle używane do generowania projektów, które są przeznaczone dla układów 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, nie można tego zrobić na układach ASIC jako wewnętrznej pracy królowie byli zaangażowani w krzem, nie można go rekonfigurować.
Krótko mówiąc, z mikroprocesorem używasz tego samego sprzętu do uruchamiania różnych programów, w przypadku FPGA rekonfigurujesz sprzęt, aby wykonywał różne funkcje, a układy ASIC są jak mikrokontroler, ponieważ sprzęt nie może być zmienione, ale zwykle są zaprojektowane do wykonywania pojedynczej funkcji 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 w przypadku samodzielnego mikrokontrolera, przykład to jest wbudowany procesor Altera NIOS II.
Jeśli to nadal jest niejasne, daj mi znać, co w tym jest niejasne, a ja dołożę wszelkich starań, aby wyjaśnić moją odpowiedź.
Cygan
Odpowiedź
cóż, nie, FPGA nie jest programowane przez sygnały elektryczne, jeśli zachowują się jak określona kolekcja bramek, niektóre FPGA zawierają flash pamięć do przechowywania tej konfiguracji, niektóre nie wymagają i muszą być przeprogramowane po każdym resecie zasilania.
ASIC schodzi z linii produkcyjnej już c skonfigurowane.
Błędy FPGA można naprawić za pomocą aktualizacji oprogramowania układowego, błędów ASIC nie można naprawiać ekonomicznie.
Odpowiedź
Pomimo swojej nazwy FGPA wydaje się być bardzo„ specyficzna dla aplikacji ”, ponieważ musi zostać ponownie okablowana, aby wykonać nowe i inne zadanie.
To przeciwieństwo tego, co oznacza „specyficzna dla aplikacji”. Możesz użyć FPGA dla więcej niż jednej aplikacji, zmieniając jej okablowanie. Nie możesz zmienić ASIC, więc można go zastosować tylko do jednego zadania (to zadanie może polegać na implementacji mikrokontrolera).
Jednak w przypadku ponowne okablowanie FPGA, cały niezbędny sprzęt powinien być obecny.
Nie wiem, co to oznacza. Zwykle istnieje interfejs oprogramowania do przeprogramowania FPGA. Jest to układ ASIC, który wymaga milionów [jednostek walutowych] sprzętu.
FPGA „s mają być programowalne, ale czy nie do tego służy mikrokontroler?
Mikrokontroler umożliwia programowanie sekwencyjnego oprogramowania dla stałego sprzętu. Podobnie jak zwykły komputer, ale jest bardzo mały i ma ograniczone zasoby. FPGA umożliwia programowanie dowolnego sprzętu przy użyciu HDL.