Co to jest FPGA?

38

Widziałem już wielu ludzi rozmawiających o FPGA i wiem, że to oznacza programowalną tablicę bramek, ale jak to działa i jaki jest cel korzystania z FPGA?

Złapów
źródło

Odpowiedzi:

30

Są to elementy elektroniczne, które dodają logikę do twoich obwodów (więc są podobne do mikrokontrolerów). Ale podejście projektowe jest wtedy zupełnie inne niż w przypadku kontrolera uC (mikrokontrolera). W UC nie można zmienić projektu wewnętrznego UC; możesz na nim uruchamiać tylko „klasyczne” programy. Programowanie układów FPGA przypomina raczej tworzenie nowego sprzętu. Tworzysz nowe połączenia między bramkami logicznymi i tworzysz nowy, specjalistyczny procesor. Możesz to zrobić w domu, na biurku i komputerze.

Brzmi nieźle? Tak, ale są pewne wady. Na przykład cena (ale myślę, że trudno to porównać), wyższy pobór mocy i niższe częstotliwości taktowania (ale możesz zaprojektować aplikację w inteligentny sposób i wykonywać więcej operacji w jednym cyklu zegara).

Przydatne linki:

Przykładowe użycie: http://nsa.unaligned.org/

Maciek Sawicki
źródło
3
Zwrócę uwagę, że wiele układów FPGA jest wystarczająco dużych, aby pomieścić wiele rdzeni procesora, dzięki czemu układ FPGA może być dla siebie całym komputerem.
Craig Trader
3
Uwaga: niższe częstotliwości taktowania mogą wprowadzać w błąd. w porównaniu do komputera, tak. W porównaniu do pic16 mogą być szybsze, ale zależy to od kosztu. Większość tańszych, które miałem przy sobie na biegu 40 MHz, ale znowu, w zależności od produktu.
Kortuk
23

FPGA to dosłownie tablica bramek logicznych, które można zaprogramować w terenie. Przerzutniki, multipleksery, 4-bitowe tabele wyszukiwania itp., Które można podłączyć w dowolny sposób, używając języka C (Verilog).

Komputer uC, taki jak AVR, jest również wykonany z podobnych bramek logicznych, ale są one konfigurowane podczas produkcji urządzenia. Jasne, ma pamięć RAM i Flash, więc możesz pisać oprogramowanie do odczytu wejść i wyjść sterujących, ale nie możesz zmienić faktycznego ustawienia bramek. Bramki zawsze będą ustawione w ALU, kontroler pamięci, port szeregowy itp.

Zaletą uC jest to, że można go zaprogramować w terenie (przy biurku) za pomocą łatwego w użyciu, znanego języka wysokiego poziomu, takiego jak C. Problem polega na tym, że oprogramowanie działa „wolno”. Aby mieć wejście sterujące wyjściem, w najprostszym przypadku możesz napisać:

void loop () {buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {
digitalWrite (ledPin, HIGH);
} else {digitalWrite (ledPin, LOW); }}

To byłoby przekształcone w kilkanaście instrukcji montażu, więc pętla potrzebowałaby około mikrosekundy na sterowanie tym wyjściem z jednego wejścia. I zajmuje to cały układ uC, aby zrobić to tak szybko. Jasne, możesz zrobić znacznie więcej, ale wtedy twoja zdolność do kontrolowania tego wyjścia zwolni, gdy uC będzie zajęty robieniem innych rzeczy.

W FPGA mogłem skonfigurować bramki tak, aby miały kontrolę wejścia i wyjścia w 1 zegarze. Tak więc wynik podążałby za wejściem z opóźnieniem około 25 nanosekund. To 40 razy szybciej, przy użyciu tego samego okresu zegara. Reszta bramek w FPGA jest dostępna do robienia wielu innych rzeczy, które nie wpłyną na szybkość tej małej funkcji.

Kodem FPGA byłby prosty flip-flop:

always @ (zegar pozycji) ledPin <= buttonPin;

Zajmie to tylko 1 komórkę FPGA, około 40 bramek, z dziesiątek tysięcy w FPGA.

Mogę przeprogramować FPGA, aby zrobić coś innego, na przykład sterować diodą LED w oparciu o kombinację czterech wejść, wciąż w jednym zegarze, wciąż używając tej 1 komórki FPGA. Lub kontroluj diodę LED na podstawie szeregowego strumienia z wejścia, w kilku komórkach FPGA, które byłyby setkami bramek. Mogłem więc sterować diodą LED w oparciu o dane szeregowe, powiedz „ON” lub „OFF”, z szeregowym strumieniem z bardzo wysoką częstotliwością (łatwo 20 MHz), i nadal używam tylko niewielkiej części pojemności FPGA.

Tak więc zaletą FPGA jest wyraźnie szybkość. Może zrobić wszystko, co może zrobić uC, i może to zrobić znacznie szybciej, a wszystko odbywa się równolegle. Złożone rzeczy, które uC zajęłoby milisekundom, FPGA mogłaby zrobić w mikrosekundach lub krócej. Tak długo, jak w FPGA pozostały bramy, mogę dodawać do niego więcej funkcji bez wpływu na szybkość lub działanie poprzednich funkcji w FPGA. Nawiasem mówiąc, układ FPGA może bardzo łatwo uruchomić częstotliwość taktowania wynoszącą 20 MHz.

Koszt nie jest wyróżnikiem. Mogę kupić układ FPGA, który mógłby zaimplementować prawie każdy projekt Arduino, jaki kiedykolwiek widziałem, za około 5 USD, mniej więcej tak samo jak układ Arduino AVR. Istnieją również bezpłatne łańcuchy narzędzi (IDE, kompilator, debugger) dla układów FPGA.

Moc nie jest wyróżnikiem. Ponieważ mogę uruchomić układ FPGA ze znacznie mniejszą częstotliwością taktowania, aby uzyskać tę samą funkcję co uC, i użyć niewielkiej części jego bramek (nieużywane bramki używają tylko mocy upływu), FPGA może pokonać moc prawie dowolnej opartej na UC projekt.

Największą wadą FPGA jest to, że jest o wiele bardziej skomplikowane i czasochłonne w definiowaniu, pisaniu kodu i debugowaniu nietrywialnego projektu FPGA niż program uC. Typowy projekt uC, który możesz wykonać wieczorem, może zająć kilka dni na FPGA.

Innymi potencjalnie możliwymi do rozwiązania problemami są przeszkolenie większości programistów, ale niewielu rozumie programowanie sprzętowe. Możesz łatwo nauczyć się Verilog. Ale trzeba też pomyśleć o projektowaniu sprzętu zamiast o oprogramowaniu. Wzory projektowe są bardzo różne.

Inną kwestią jest to, że układy FPGA nie występują w niewielkich pakietach DIP od 8 do 20 pinów. Zwykle występują w opakowaniach o powierzchni 100 pinów lub większych, więc budowanie płyt jest trudniejsze.

Ostatni problem polega na tym, że w tych łatwych w obsłudze interfejsach można dobrze zaimplementować wiele interesujących projektów, więc po co zawracać sobie głowę FPGA?

SiliconFarmer
źródło
2
„Mogę kupić układ FPGA, który mógłby zaimplementować prawie każdy projekt Arduino, jaki kiedykolwiek widziałem, za około 5 $” Przykro mi, ale nie? Gdzie?
medivh
9

Jeśli znasz podstawowe bramki logiczne, powinieneś wiedzieć, że są one praktycznie natychmiastowe. Operacje A i B LUB C zmieniają się natychmiast po zmianie A, B lub C.

FPGA jest (poniekąd) matrycą programowalnych bramek logicznych. Możesz zdefiniować wejścia i wyjścia (jako kombinację wejść).

W uC A + B / C * sqrt (D) zajmowałoby kilka cykli zegara i trochę pamięci. W przypadku FPGA wynik jest prawie natychmiastowy.

Doskonale nadają się do wideo, DSP, kryptografii ...

To główna zaleta. Współczesne układy FPGA są teraz przystosowane do pamięci i istnieją hybrydy uC / FPGA.

ppvi
źródło
Znam wielu Praktykujących EE z wieloletnim doświadczeniem, które często wykorzystują FPGA do projektowania zamiast uC, w którym widziałeś uC. Naprawdę uważam, że świetnie nadają się do obsługi interfejsu.
Kortuk
Tak, myślę, że to dobry przykład: armadeus.com/english/index.html . Szczególnie interesujący jest dla mnie przykład kontroli serwomechanizmu: marwww.in2p3.fr/~duval/wiki_html_dump/articles/m/o/t/…
Maciek Sawicki
2
Warto również zauważyć, że istnieje coraz więcej konwerterów „C na VHDL” lub „C na Verilog”. Nie są to jeszcze najbardziej wydajne rzeczy, ale można przekonwertować już napisany kod na sprzęt, który można wykorzystać do poprawy prędkości. Całkiem fajnie, jeśli mnie zapytasz (i czy masz na to ciasto).
Chris Gammell
5

Służą do łamania kluczy szyfrowania znacznie szybciej niż komputer ogólnego przeznaczenia. :RE

endolit
źródło
1
Haha, podobał mi się twój bardzo funkcjonalny opis. Są absolutnie niesamowite w równoległym przetwarzaniu.
Kortuk
Projekt Codebreaker: copacobana.org
hhh
2

Aby zaoszczędzić pieniądze i ryzyko kontra ASIC. Chyba że Ty

  1. Głęboko dbaj o moc lub
  2. Budujemy ich kilka (powiedzmy> 10k jednostek)

stałe (NRE) koszty wykonania ASIC sprawiają, że koszty są wygórowane.

Ponieważ możesz łatwo zmienić układ FPGA, możesz mniej symulować projekt i szybciej dostać się do laboratorium. Możesz także wykonać częściowy projekt i zbudować na nim, jak w oprogramowaniu.

Brian Carlton
źródło