Odpowiedzi:
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/
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?
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.
Służą do łamania kluczy szyfrowania znacznie szybciej niż komputer ogólnego przeznaczenia. :RE
Aby zaoszczędzić pieniądze i ryzyko kontra ASIC. Chyba że Ty
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.