Dlaczego FPGA nie są wszechobecne?

65

Czytając o FPGA, jeśli dobrze rozumiem, są to zasadniczo w pełni konfigurowalne obwody bramki logicznej. Dzięki temu można zaprojektować z nimi wszystko. Można zaprojektować wszystko w najbardziej spersonalizowany sposób, a tym samym osiągnąć te same cele w znacznie bardziej wydajny sposób, który można uzyskać za pomocą mikrokontrolera. Dzięki temu wygląda na to, że FPGA bije mikrokontroler o każdej porze, każdego dnia. Więc moje pytanie brzmi: jeśli FPGA są naprawdę tak niesamowite, co sprawia, że ​​nie są one znacznie bardziej rozpowszechnione niż mikrokontrolery? Z tego punktu widzenia wydaje mi się, że układy FPGA powinny już dawno wymazać mikrokontrolery. Dlaczego tak nie jest? Czy to koszt, trudność w zaprogramowaniu FPGA, czy całkowicie coś innego?

Utku
źródło
Możesz także przeczytać ten wątek: electronics.stackexchange.com/questions/4382/...
Tom L.
43
Helikoptery są bardziej elastyczne niż samochody, więc dlaczego ktoś nadal korzysta z samochodu, aby dojeżdżać do pracy?
Olin Lathrop,
15
Ponieważ wszystkie firmy FPGA oferują całkowicie okropne, zastrzeżone narzędzia, które mają ogromną krzywą uczenia się i nie są dostępne dla większości programistów. Zastąp to w pełni otwartym zestawem narzędzi i prawdopodobnie będą one wszechobecne.
R ..
@R .. ... a przynajmniej nie wybór absolutnej opcji ostatecznej.
Dan Neely,

Odpowiedzi:

94

Ignorujesz wiele czynników wpływających na wybór projektu:

  1. Koszt . FPGA są droższe niż mikroskopy z powodu tej samej złożoności logiki.

  2. Złożoność logiczna . Kod wykonywalny może implementować znacznie bardziej skomplikowaną logikę niż ta sama liczba bramek w mikroprocesorze wykorzystywanym bezpośrednio.

  3. Łatwość rozwoju . Łatwiej jest napisać kod wykonywalny niż zdefiniować logikę dla wszystkich problemów oprócz małych. Nawet skromne projekty mikrokontrolerów mają tysiące linii kodu. Opracowanie równoważnych definicji logicznych zajęłoby znacznie więcej czasu i byłoby znacznie trudniejsze do debugowania i weryfikacji.

  4. Pobór mocy . Ponieważ układy FPGA są przeznaczone do szybkich operacji, z którymi mikroskopy nie mogą sobie poradzić (w przeciwnym razie użyłbyś mikro), nie są zoptymalizowane pod kątem niskiej mocy. To sprawia, że ​​nie nadają się do niektórych zastosowań o niskiej mocy. Niektóre mikrosły mają prądy uśpienia poniżej 1 µA i mogą działać na zaledwie kilku µA przy niskich częstotliwościach zegara. Spróbuj znaleźć układ FPGA, który może to zrobić.

Główną zaletą układów FPGA w porównaniu z mikrami jest to, że są one szybsze i mogą robić więcej rzeczy równolegle. Poza tym wolisz używać mikro. Dlatego w procesie projektowania zwykle zaczynasz od mikro, a następnie niechętnie przechodzisz do FPGA, kiedy naprawdę potrzebujesz prędkości i / lub równoczesnej pracy z dużą prędkością. Nawet wtedy implementujesz tylko kluczowe dla prędkości części w FPGA, a funkcje kontroli niższej prędkości i tym podobne pozostawiasz w micro.

Olin Lathrop
źródło
2
„Nawet wtedy implementujesz tylko kluczowe dla prędkości części w FPGA, a funkcje kontroli niższej prędkości i tym podobne pozostawiasz w mikro.” A to dlatego, że opracowanie FPGA jest uciążliwe, prawda?
Utku
2
@Utku: Tak, to jest powód 3 powyżej, chociaż powody 1-2 zwykle też mają zastosowanie. FPGA po prostu nie są tak opłacalne jak mikroskopy do tego samego zadania, chyba że zadanie to ma tak wysokie wymagania prędkości, że mikro po prostu nie może tego zrobić.
Olin Lathrop,
4
Łatwo jest powiedzieć, że ta odpowiedź została napisana z punktu widzenia użytkownika procesora. „niechętnie udaj się do FPGA, kiedy naprawdę potrzebujesz prędkości i / lub równoczesnej pracy z dużą prędkością”. Nie są to złe. Istnieją aplikacje, w których nie można nawet pomyśleć o użyciu procesora nad FPGA.
stanri
26
Sposób, w jaki zwykle to wyjaśniam: Trudno jest robić rzeczy równolegle na procesorze i ciężko robić rzeczy szeregowo w FPGA.
Ben Jackson
14
Jedna ważna rzecz do zapamiętania na temat układów FPGA: rekonfiguracja logiki ma swoją cenę - równoważna logika, którą implementuje FPGA, jest znacznie mniej skomplikowana niż sama FPGA. Wszystkie tabele przeglądowe, elementy macierzy routingu itp. Zużywają znacznie więcej obszaru krzemu i mocy niż równoważne implementacje w logice twardej. Oznacza to, że układy FPGA są gorsze we wszystkich wskaźnikach wydajności - pobór mocy czynnej i bezczynności, gęstość, szybkość zegara itp. - niż budowanie tej samej funkcjonalności bezpośrednio w krzemie, jak w przypadku mikrokontrolerów, procesorów ogólnego przeznaczenia i samej FPGA.
alex.forencich
45

Jedną z różnic, o których nie wspomniałem tutaj, jest to, że FPGA są używane i zachowują się zupełnie inaczej niż procesory.

FPGA jest naprawdę dobra w wykonywaniu dokładnie tego samego zadania w kółko. Na przykład przetwarzanie sygnałów wideo, audio lub RF. Lub routing pakietów Ethernet. Lub symulacja przepływu płynu. Każda sytuacja, w której rzucisz na Ciebie wiele tego samego rodzaju danych i chcesz sobie z tym wszystkim poradzić w ten sam sposób. Lub chcesz wielokrotnie uruchamiać ten sam algorytm. FPGA tak naprawdę nie ma „zadań”, które uruchamiają i zatrzymują [1], jego zadaniem jest robienie tego samego z wszelkimi danymi, które otrzymuje, tak długo, jak są włączone. Nie zmienia biegów, nie robi nic innego. Jest najlepszym pracownikiem linii produkcyjnej. Zrobi to samo wielokrotnie, tak szybko, jak to możliwe, na zawsze.

Z drugiej strony procesory są uosobieniem elastyczności. Można je zaprogramować do robienia czegokolwiek i mogą być zaprogramowane do robienia wielu różnych rzeczy jednocześnie. Mają zadania, które uruchamiają się i zatrzymują, zmieniają biegi, wielozadaniowość, ciągle zmieniają i zmieniają funkcje.

FPGA i procesor to kompletne przeciwieństwa. Towar na procesor to czas - musi być szybciej. Im szybsza aplikacja, tym lepiej.

Towar FPGA to przestrzeń kosmiczna. Twój układ FPGA jest tylko tak duży, a dostępnych jest tylko tyle bram do wykonania żądanego zadania. W większości przypadków problem jest większy niż prędkość [2].

Możliwe jest, aby FPGA działała jak procesor. Możesz umieścić rdzeń IP procesora w FPGA, jednak bardzo trudno to uzasadnić z powodów opisanych przez innych [3]. FPGA i procesor to przeciwieństwa, które mają swoje mocne i słabe strony, i dzięki temu mają swoje własne miejsce.


Uwagi:

1) FPGA można zaprojektować do wykonywania różnych zadań, ale nawet wtedy będzie to konkretna liczba, dla której została wcześniej zaprojektowana.

2) Szybkość jest również specyfikacją projektu FPGA. To naprawdę kompromis między prędkością a rozmiarem.

3) Wstawienie procesora do układu FPGA odbywa się stosunkowo często, jednak w zależności od konkretnych aplikacji. Na przykład, jeśli potrzebujesz naprawdę małego mikrokontrolera i masz dodatkową przestrzeń FPGA.

I na koniec: ta odpowiedź jest dużym uproszczeniem - układy FPGA są używane na bardzo różnorodne i złożone sposoby, a to jest bardzo krótki przegląd ich ogólnego zastosowania.

stanri
źródło
1
„Lub routing pakietów ethernetowych. Lub symulacja przepływu płynu.” Chociaż, o ile mi wiadomo, ASIC jest zwykle używany dla tych pierwszych (przynajmniej w produkcji masowej), a procesory graficzne są szybsze, tańsze, mają mniejszą moc i są łatwiejsze do programowania dla tych drugich.
reirab
1
@reirab Były to przykłady operacji, które FPGA mogą zrobić dobrze, przyszło im do głowy, ponieważ są to aplikacje, dla których osobiście kodowałem FPGA. Jest więcej niż jeden sposób na skórowanie kota. Wybór urządzenia zależy od wielu czynników projektowych.
stanri
5
@reirab wszystko, co FPGA może zrobić, ASIC może zrobić dla niższej mocy i niższych krańcowych kosztów produkcji. Zaletami FPGA są prototypowanie i niewielka produkcja, ponieważ koszty początkowe ASIC są znacznie większe; co oznacza, że ​​to drugie ma sens tylko wtedy, gdy projekt jest sfinalizowany i robisz ich dużo.
Dan Neely,
Dziwnie jest twierdzić, że procesor jest bardziej elastyczny niż FPGA, biorąc pod uwagę, że możesz łatwo zaimplementować procesor w FPGA (każdy poważny student CS powinien to zrobić przynajmniej raz). FPGA jest znacznie niższą koncepcją niż procesor, więc porównywanie ich bezpośrednio nie ma sensu.
Voo
Ta odpowiedź naprawdę mnie niepokoi. „Towarem procesora jest czas”, „Towarem FPGA jest przestrzeń kosmiczna”. Co? Układy ASIC i procesory są biegunowymi przeciwieństwami, a układy FPGA siedzą pośrodku, zdobywając zarówno najlepsze, jak i najgorsze z obu światów.
Jotorious
20

Jak mówi Olin, coś w rodzaju mikro jest bardziej wydajne dla wielu zadań i prawie zawsze znajdziesz mikro używane wszędzie tam, gdzie pojawia się FPGA. Powierzchnia użytego krzemu (co przekłada się na koszty w sposób nieliniowy) i zużycie energii są znacznie mniejsze. Z tego powodu nierzadko wdraża się „miękką” jednostkę MCU w układzie FPGA, ale koszt i wydajność takiego mikroprocesora jest przytłaczająca.

Niektóre współczesne układy FPGA zawierają jeden lub więcej „twardych” rdzeni, takich jak wszechobecna seria ARM. Mogą również zawierać dedykowane bloki pamięci, ponieważ naprawdę nieefektywne jest tworzenie pamięci z bram. 32-bitowy mikroprocesor zajmuje niewielką część obszaru krzemu w typowym układzie FPGA, co daje wyobrażenie o względnych kosztach.

Rozwój jest znacznie trudniejszy, a IP zazwyczaj nie jest tak swobodnie dostępne, jak w przypadku mikroprocesorów i dedykowanych rozwiązań SOC - na przykład kontrolerów LCD, interfejsów PCI, MAC MAC. Powodem jest częściowo to, że ujawniając opisy logiki HDL, przenoszą projekt, a nie tylko jego instancję. Innym powodem jest to, że wydajność zależy od układu logiki w FPGA, co wymaga dużego wysiłku podczas projektowania.

Kolejną komplikacją jest to, że najbardziej złożone układy FPGA są oparte na pamięci RAM do konfiguracji, a koszty procesu są takie, że do przechowywania konfiguracji i pamięci programu dla dowolnego MCU na pokładzie wymagana jest zewnętrzna pamięć nieulotna. Pamięć ta musi zostać załadowana do pamięci RAM podczas uruchamiania.

Układy FPGA są niezwykle przydatnymi narzędziami w przyborniku, ale w najbliższym czasie nie zastąpią uniwersalnych układów scalonych ani układów ASIC.

Spehro Pefhany
źródło
10

Najlepszym zastosowaniem krzemu do pracy jest układ ASIC, nic się nie marnuje, ale mają ogromną krzywą uczenia się, NRE i elastyczność.

Istnieją dwa sposoby na zbudowanie elastyczności w układzie. a) Mieć ALU o zoptymalizowanej przestrzeni i używać go w kółko na przechowywanych danych. Nazywa się to MCU i wymaga ogromnego obszaru krzemu, który „nic nie robi”, pamięci programu, szerokich magistrali biegnących od jednostki do jednostki oraz przełączników dostępu do magistrali. b) Mają precyzyjną logikę z kilkoma opcjonalnymi częściami zoptymalizowanymi pod kątem przestrzeni, takimi jak multiplikatory, małe pamięci RAM i proste procesory. Nazywa się to FPGA i wymaga dużego obszaru krzemu, który „nic nie robi”, programowalnych przełączników i linii połączeniowych.

Oczywiście w przypadku tych struktur MCU najlepiej sprawdzają się w przypadku zadań, które można podzielić na porcje szeregowe, a układy FPGA najlepiej sprawdzają się w przypadku zadań wymagających równoległej pracy z dużą prędkością. Gdy aplikacja jest ciężka, a koszt jest zdominowany przez koszt krzemu, w ten sposób będą naturalnie używane oba typy.

Gdy aplikacja jest lekka, ale duża, koszt jest zdominowany przez opakowanie, a nie krzem, i każdy z tych rodzajów jest opłacalny. Altera ma kilka bardzo małych układów FPGA o bardzo małej mocy, które konkurują z kilkoma MCU za dolara.

W przypadku aplikacji o małej objętości koszt opracowywania zwykle dominuje, a MCU wygrywają, zakładając, że mają szybkość

Neil_UK
źródło
9

Pod względem zużycia energii i wykorzystania krzemu układ FPGA jest bardzo słaby w porównaniu z mikroprocesorem.

FPGA zużywa znaczną część swojego krzemu w obwodzie konfiguracji logicznej, co nie dotyczy mikro. Musi być dostępnych znacznie więcej połączeń wewnętrznych, niż byłoby to konieczne w przypadku dedykowanej implementacji mikroprocesora.

FPGA zużywa więcej energii niż dedykowany układ ASIC, taki jak mikroprocesor, ponieważ logika nie jest wdrażana tak skutecznie.

Dowolną funkcję, którą można zaimplementować w układzie FPGA, można wykonać bardziej wydajnie, taniej, przy niższym zużyciu energii, mniejszej powierzchni płyty itp. W dedykowanym układzie ASIC. Zakłada się, że objętości są wystarczająco duże, aby zrównoważyć NRE.

Kevin White
źródło
Jeśli celem jest wdrożenie całego zestawu funkcji mikroprocesora, na pewno. Gdy przejdziesz do określonego zadania, możesz również zidentyfikować wiele zmarnowanego krzemu w mikrokontrolerze - być może ten silnik szyfrowania to zmarnowane miejsce w twoim projekcie. A może urządzenie peryferyjne CAN? Czy jednostka zmiennoprzecinkowa? Najlepsze wykorzystanie FPGA jest niższe, ale również nie odczuwasz 0% wykorzystania na dużych obszarach, tak jak robi to mikrokontroler. (Z drugiej strony, przy bramkowaniu z zegarem, bardzo pożądane jest użycie 0% dużych obwodów z punktu widzenia mocy)
Ben Voigt
8

Na systemach mikroprocesorowych, a później na mikrokontrolerach, udało się osiągnąć olbrzymi stopień funkcjonalności dzięki możliwości wykorzystania wielu poszczególnych elementów obwodów w celu wykonania wielu różnych zadań w różnym czasie. Myślę, że warto porównać automat arkadowy Tank, zaprojektowany w 1976 r., Z grą Combat, która działa na drugiej na świecie kontrolowanej mikroprocesorem maszynie Atari 2600. Chociaż istnieją pewne różnice w rozgrywce, sprzęt Atari 2600 został zasadniczo zaprojektowany wdrożyć gry takie jak Tank przy minimalnych kosztach; fakt, że można było grać w różne gry po włożeniu różnych kaset ROM, był miłym dodatkiem.

Gra Tank pozwala dwóm graczom prowadzić czołgi po ekranie i strzelać do siebie nawzajem. Posiada liczniki „poślizgu” dla pozycji X i Y każdego czołgu, pozycję X i Y każdego gracza, licznik góra / dół dla kąta każdego gracza i kąta strzału każdego gracza, licznik dla wyniku każdego gracza, X i Y raster-beam - liczniki pozycji i mnóstwo obwodów sterowania na wierzchu tych rzeczy. Ma sprzęt do pobierania danych pola gry z pamięci ROM i wyświetlania go, a także sprzęt do pobierania kształtów dla czołgów dwóch graczy i wyników z pamięci ROM i wyświetlania ich.

Atari 2600 ma licznik poślizgu dla poziomych pozycji każdego z dwóch obiektów gracza, każdego z dwóch obiektów pocisków i jednego dodatkowego obiektu zwanego „piłką”, który nie jest używany w walce, ale jest używany w niektórych innych grach. Dla każdego obiektu odtwarzacza ma sprzęt do generowania wzorca zapisanego w 8-bitowej zatrzasku, a także „opóźnionego” ośmiobitowego zatrzasku dla każdego odtwarzacza, który jest kopiowany na podstawową 8-bitową zatrzask za każdym razem, gdy kształt został zaktualizowany. Ma również poziomy licznik położenia wiązki i 20-bitowy zatrzask w kształcie pola gry, który jest wysyłany na ekran dwa razy na linię skanowania, a kopia po prawej stronie pojawia się jako powtórzenie lub odbicie lewej strony. Ma sprzęt do wykrywania kolizji, ale nie do robienia niczego w wyniku ich wystąpienia. Tak nie jest nie ma żadnego sprzętu dla pozycji pionowych żadnego obiektu, ani pozycji pionowej wiązki rastrowej (!), ani nie ma żadnego sprzętu związanego z utrzymywaniem wyników, wyświetlaniem wyników, czasem trwania gry itp.

Wszystkie funkcje, dla których 2600 pomija sprzęt, są obsługiwane przez oprogramowanie we wkładzie. Konieczne jest tylko sprawdzenie pozycji pionowej każdego obiektu względem pozycji wiązki rastrowej raz na linię skanowania, konieczne jest jedynie zaktualizowanie wyniku gracza i pozostałego czasu gry maksymalnie co najwyżej jeden na klatkę, wyniki graczy są przechowywane na liniach skanowania powyżej pola gry i dlatego może współdzielić ten sam sprzęt, który jest używany na boisku itp.

Normalnym podejściem do implementacji gry typu „Tank” w FPGA byłoby użycie oddzielnych obwodów dla różnych funkcji w podobny sposób, jak robiła to maszyna zręcznościowa z 1976 roku. Takie podejście działałoby, ale wymagałoby znacznej ilości sprzętu. Podejście oparte na mikroprocesorze mogłoby wyeliminować ponad połowę tego sprzętu w zamian za dodanie mikroprocesora, który prawdopodobnie zawierałby mniej obwodów niż sprzęt, który zastąpił (2600 mógłby wdrożyć gry o wiele bardziej wyrafinowane niż Tank, które wymagałyby znacznie więcej sprzętu jeśli nie użyli mikroprocesora).

Układy FPGA są doskonałe w przypadkach, gdy potrzebne jest urządzenie, które może wykonywać wiele prostych zadań jednocześnie . Systemy oparte na mikroprocesorach (lub mikrokontrolerach) są na ogół lepsze, jednak w przypadkach, gdy istnieje wiele zadań, które należy wykonać, ale nie trzeba ich przetwarzać jednocześnie, ponieważ ułatwiają użycie niewielkiej ilości obwodów elektrycznych do realizacji wielu różnych celów.

supercat
źródło
Czy nie mógłbyś też postawić kopalni? ;-)
Scott Seidman
@ScottSeidman: Maszyna zręcznościowa miała kilka min w ustalonych pozycjach, które zostały narysowane jako X-y. Dla 2600 byłoby bardzo trudno pokazać miny jako X, jednocześnie pokazując obu graczy i oba pociski. Gdyby nie przeszkadzało to, że kopalnie migają przy 60 Hz, byłoby możliwe użycie niektórych sztuczek, które zostały odkryte później, ale wymagałoby to więcej kodu (WALKA to kaseta 2K, która jest prawie pełna - nawet dwa bajty w nieużywanym Wektor BRK / IRQ w $ FFFE / FFFF jest używany do przechowywania tabeli dwubajtowej!).
supercat
Prawdopodobnie byłoby możliwe, aby Combat zaimplementował miny jako migające kwadraty, gdyby był gotów zrezygnować z niektórych innych opcji, takich jak odbijanie strzałów itp., Ale myślę, że Joe Decuir (programista) wykonał dobrą robotę, wybierając opcje do gry. Moją jedyną wadą jest to, że dwupłatowiec kontra bombowiec mógłby być bardziej zabawny, gdyby bombowiec był duszkiem 2x zamiast 4x.
supercat
5

To całkowicie koszt. Kiedy mikro może wynosić nawet 30 centów, tani FPGA znajduje się na terytorium 5 USD. Koszt może nie wydawać się tak wysoki, ale kiedy zarobisz milion pierdzących nowości, które sprzedasz za 10 USD, cena FPGA zabije twoje dochody.

vini_i
źródło
6
Koszt to z pewnością jeden problem, ale powiedzenie, że różnica jest całkowicie, jest tak naiwny, jak myślenie, że wszystkie mikroskopy można zastąpić układami FPGA.
Olin Lathrop,
@OlinLathrop, jeśli koszt nie był problemem, to wszystko, co może zrobić mikro, może być wykonane przez FPGA. Pokazano to ze zdolnością FPGA do utrzymywania miękkiego rdzenia mikrokontrolera. Problem polega na tym, że układ FPGA, który może utrzymać taki rdzeń, jest co najmniej o rząd wielkości droższy niż mikro, którego rdzeń jest emulowany.
vini_i
Koszt może oznaczać znacznie więcej niż cenę za jednostkę, ale to wszystko, co chcesz wrzucić w tę analizę.
Scott Seidman,
2
Nie wiem, czy celowo udajesz, że nie rozumiesz sedna sprawy, czy po prostu gęsty. Tak czy inaczej reagujesz na coś, czego nikt nie powiedział. Wszyscy zgadzają się, że FPGA kosztują więcej, a ten koszt stanowi problem. Ale znowu, twierdzenie, że to jedyny problem, jest po prostu błędne. Gdybym podał ci kilka darmowych mikr i FPGA, wciąż istnieją ważne powody, dla których używałbyś mikr na FPGA w wielu projektach.
Olin Lathrop,
4
@sleb: Nie, różnica kosztów wynika nie tylko z objętości. Wymagany obszar krzemowy na dostarczoną bramkę jest znacznie większy w układzie FPGA niż w niestandardowym układzie, takim jak mikrokontroler. Cała konfigurowalność na poziomie połączenia bramy wymaga zastosowania obszaru krzemowego. W dużych ilościach koszt układu zależy od jego powierzchni krzemowej.
Olin Lathrop,
5

Aby dodać do innych bardzo dobrych odpowiedzi, myślę, że przyjęcie FPGA jest również kwestią domenową: na przykład w przypadku urządzeń neuromorficznych płyty FPGA stają się dość wszechobecne, ponieważ istnieje ogromna potrzeba równoległości, która jest mocną stroną FPGA.

Jeśli ekstrapolujesz trend, który widzimy dla urządzeń neuromorficznych, możesz sobie wyobrazić, że inne pola oparte lub krytycznie wymagające równoległości prawdopodobnie przyjmą FPGA znacznie więcej. Być może więc FPGA nie stanie się wszechobecne w przypadku produktów konsumenckich, ale może dotyczyć określonych domen, ponieważ wydaje się, że obecnie dzieje się to w przypadku urządzeń neuromorficznych.

gaboryczny
źródło
Chociaż może to być prawda, nie wydaje się to wystarczające do uzyskania pełnej odpowiedzi. Być może byłoby to lepsze jako komentarz, lub możesz to rozwinąć.
Null
To nie daje odpowiedzi na pytanie. Aby skrytykować lub poprosić autora o wyjaśnienia, zostaw komentarz pod postem.
Funkyguy,
3
@Funkyguy, to odpowiada na pytanie. Zasadniczo twierdzą, że układy FPGA nie są wszechobecne, ponieważ popularne aplikacje konsumenckie nie wymagają równoległości, która jest silną stroną układów FPGA.
stanri