Streszczenie
Gdy szybki mikrokontroler przestaje wystarczać — bo potrzebujemy wielu równoległych kanałów, twardego determinizmu i pełnej kontroli czasowej w pojedynczych nanosekundach — naturalnym następnym krokiem jest FPGA. To układ logiki programowalnej, w którym nie pisze się „programu wykonywanego instrukcja po instrukcji", lecz konfiguruje sprzęt, który działa równolegle i synchronicznie z zegarem. Dzięki temu FPGA potrafi generować deterministyczne sekwencje cyfrowe, dystrybuować zegar o małym jitterze i obsługiwać szybkie standardy różnicowe — wszystko to, czego konstruktorzy implozji Fat Mana musieli kiedyś szukać w dedykowanej elektronice impulsowej i przełączniku iskrowym X-Unitu.1
Najważniejsza myśl tego artykułu jest taka: moduły FPGA zdolne do pracy w skali nanosekund nie są dziś niczym egzotycznym. Płytki takie jak Digilent Arty A7, Opal Kelly XEM7310 czy Eclypse Z7 można kupić w tych samych sklepach co Arduino. Pokażemy, czym się różnią, kiedy zamiast FPGA lepiej wziąć gotowy generator impulsów, oraz dlaczego o przydatności płytki decydują nie gigaherce, lecz rodzaj wyprowadzonych wyjść. Przełączanie mocy z taką szybkością opisują osobne teksty o modułach MOSFET, GaN i SiC oraz o gotowych pulserach HV.
Rozszerzenie tematu
FPGA bywa dla osób z doświadczeniem w mikrokontrolerach pojęciem onieśmielającym — kojarzy się z drogim, trudnym sprzętem dla specjalistów. Ta reputacja jest dziś w dużej mierze nieaktualna. Poniżej tłumaczymy, czym FPGA naprawdę jest, dlaczego tak dobrze nadaje się do sygnałów nanosekundowych, jak się go programuje i jakie konkretne, łatwo dostępne płytki warto rozważyć — od edukacyjnych po klasy „przyrząd pomiarowy".
Czym właściwie jest FPGA
Aby zrozumieć przewagę FPGA, trzeba zobaczyć, czym różni się od mikrokontrolera na poziomie architektury. Mikrokontroler ma ustalony, niezmienny sprzęt (rdzeń, peryferia) i wykonuje na nim kolejne instrukcje programu, jedna po drugiej. FPGA (Field-Programmable Gate Array, czyli „programowalna w terenie macierz bramek") to coś zupełnie innego: to „czysta kartka" złożona z setek tysięcy, a w większych układach milionów, konfigurowalnych elementów logicznych, które można połączyć w niemal dowolny układ cyfrowy. Podstawowym klockiem jest komórka logiczna zawierająca tablicę przeglądową (LUT, Look-Up Table) realizującą dowolną funkcję boolowską kilku wejść oraz przerzutnik (flip-flop) przechowujący jeden bit stanu. Te komórki grupuje się w bloki (w terminologii AMD/Xilinx nazywane CLB), a całość spina konfigurowalna sieć połączeń (routing). Do tego dochodzą gotowe bloki specjalizowane: pamięci Block RAM, układy mnożące i sumujące DSP, pętle PLL/MMCM do generowania i przesuwania zegarów oraz wspomniane szybkie transceivery.1
Te wbudowane bloki (tzw. hard IP) są ważne, bo łączą elastyczność FPGA z wydajnością dedykowanego sprzętu. Gdyby pamięć, mnożarki czy pętle PLL trzeba było budować z samych komórek logicznych, zajmowałyby ogromne zasoby i działałyby wolniej. Producent „wtapia" je więc w krzem jako gotowe, zoptymalizowane układy, które projektant po prostu konfiguruje. Dla naszego tematu kluczowe są zwłaszcza bloki zarządzania zegarem (PLL/MMCM) oraz elementy w blokach wejścia/wyjścia odpowiedzialne za szybkie standardy i precyzyjne opóźnienia — to one, a nie sama „programowalna logika", dają FPGA przewagę w generowaniu sygnałów nanosekundowych. Patrząc na kartę katalogową układu, warto więc sprawdzać nie tylko liczbę komórek logicznych, ale i liczbę oraz parametry tych bloków specjalizowanych.1
Cała ta struktura jest konfigurowana plikiem zwanym bitstreamem, ładowanym po włączeniu zasilania (zwykle z pamięci flash). To dlatego mówi się o „programowaniu" FPGA, choć precyzyjniej należałoby mówić o „konfigurowaniu sprzętu". Najważniejsza konsekwencja jest taka: jeśli zaprojektujemy w FPGA dziesięć liczników i dziesięć wyjść, wszystkie będą tykać jednocześnie, co takt zegara, bez wzajemnego spowalniania, bo każdy z nich jest osobnym, fizycznym kawałkiem logiki. W mikrokontrolerze dziesięć takich liczników musiałby obsłużyć jeden rdzeń, dzieląc czas między nie i wprowadzając opóźnienia oraz jitter. To właśnie ten równoległy, deterministyczny charakter sprawia, że FPGA jest naturalnym narzędziem do generowania precyzyjnych, wielokanałowych sygnałów nanosekundowych.1

Krótka historia i miejsce FPGA wśród układów programowalnych
Warto osadzić FPGA w szerszym kontekście układów cyfrowych, bo to porządkuje całą dziedzinę. Na jednym biegunie mamy układy o stałej funkcji: zwykłe bramki, liczniki, a w skali przemysłowej kosztowne układy ASIC (Application-Specific Integrated Circuit) projektowane pod konkretne zadanie i produkowane w wielkich seriach. ASIC jest najszybszy, najtańszy w masowej produkcji i najbardziej energooszczędny, ale jego zaprojektowanie kosztuje miliony i trwa miesiące, a raz wyprodukowanego nie da się zmienić. Na drugim biegunie jest mikroprocesor: w pełni elastyczny, ale wykonujący wszystko sekwencyjnie programem. FPGA leży dokładnie pomiędzy: daje elastyczność zbliżoną do oprogramowania (można go przekonfigurować w dowolnej chwili nowym bitstreamem) przy zachowaniu równoległości i szybkości sprzętu. Dlatego mówi się czasem o FPGA jako o „ASIC-u dla każdego" albo o sprzęcie, który jest „miękki" jak oprogramowanie.
Historycznie pierwszy nowoczesny FPGA wprowadziła firma Xilinx w 1985 roku, a sama idea wyrosła z prostszych układów programowalnych: pamięci PROM, układów PAL/GAL i bardziej rozbudowanych CPLD (Complex Programmable Logic Device). Różnica między CPLD a FPGA jest dziś głównie ilościowa i architektoniczna: CPLD ma mniej zasobów, prostszą, „płaską" strukturę logiki i zwykle nieulotną konfigurację, dlatego startuje natychmiast po włączeniu i nadaje się do prostej logiki klejącej oraz zarządzania zasilaniem. FPGA ma ogromne zasoby, ulotną konfigurację ładowaną z zewnętrznej pamięci flash i nadaje się do złożonych, wielokanałowych projektów. W naszym zastosowaniu — precyzyjne, wielokanałowe sygnały nanosekundowe — to właśnie FPGA jest właściwym wyborem, choć do najprostszych zadań czasowych wystarczy czasem tani CPLD.1
Dlaczego FPGA, a nie mikrokontroler, do nanosekund
Przewaga FPGA w zadaniach czasowych wynika z trzech cech, których mikrokontroler nie ma. Pierwsza to równoległość: dowolnie wiele bloków pracuje naprawdę jednocześnie, więc dziesięć czy sto kanałów wyjściowych można przełączać w tej samej chwili, co takt zegara. Druga to determinizm co do taktu (cycle-accurate): logika synchroniczna zmienia stany wyłącznie na zboczu zegara, więc moment każdego zdarzenia jest z góry przewidywalny z dokładnością do pojedynczego taktu, bez jittera od przerwań czy cache. Trzecia to potokowość (pipelining): nawet bardzo złożone przetwarzanie można rozłożyć na etapy wykonywane równolegle, tak że układ przyjmuje nowe dane w każdym takcie, mimo że pojedyncza operacja trwa dłużej.
W praktyce oznacza to, że w FPGA da się zbudować generator sekwencji, który na przykład w takcie numer 37 ustawia jeden pin, w takcie 42 drugi, a w takcie 50 jednocześnie trzeci i czwarty — i robi to za każdym razem identycznie, z rozrzutem ograniczonym jedynie jitterem zegara i drobnymi różnicami opóźnień ścieżek. Przy zegarze 500 MHz (takt 2 ns) daje to rozdzielczość 2 ns, a stosując techniki SERDES albo wielofazowe zegary z bloków PLL można zejść jeszcze niżej, do ułamków nanosekundy. To dokładnie ta klasa precyzji, której wymagało jednoczesne wyzwolenie wielu detonatorów EBW — tylko że dziś realizowana jednym układem konfigurowanym w godzinę, a nie tajną aparaturą budowaną latami.1
Różnice między mikrokontrolerem a FPGA dobrze podsumowuje tabela. Nie chodzi w niej o to, że jedno jest „lepsze", lecz że narzędzia są przeznaczone do różnych klas zadań:
| Cecha | Mikrokontroler | FPGA |
|---|---|---|
| Model pracy | program sekwencyjny | równoległa logika sprzętowa |
| Wiele kanałów naraz | dzielone przez rdzeń | naprawdę jednoczesne |
| Determinizm czasowy | zakłócany przerwaniami | co do taktu zegara |
| Rozdzielczość czasowa | ograniczona instrukcjami | takt, a z PLL/ODELAY ułamki ns |
| Język | C/C++ | VHDL/Verilog (HDL) |
| Próg wejścia | niski | wyższy (inny sposób myślenia) |
| Najlepszy do | logiki sterującej, wolnych zadań | szybkich, wielokanałowych sygnałów |
Jak FPGA buduje precyzyjny timing
Warto zajrzeć głębiej i zobaczyć, z jakich konkretnie mechanizmów FPGA korzysta, by uzyskać rozdzielczość lepszą niż okres zegara. Najprostszy budulec to licznik taktowany zegarem systemowym: zlicza takty i wystawia zdarzenie po zadanej ich liczbie. Przy zegarze 500 MHz daje to natywną rozdzielczość 2 ns. Drugim budulcem są rejestry przesuwne i bloki OSERDES (output serializer), które potrafią wystawiać kilka bitów na jeden takt zegara „wolnego", taktowane wewnętrznie zegarem szybszym; pozwala to generować zbocza częściej niż co takt logiki użytkownika. Trzecim, najpotężniejszym narzędziem są pętle PLL/MMCM, które z jednego zegara wejściowego tworzą wiele zegarów o różnych częstotliwościach i, co kluczowe, o kontrolowanych przesunięciach fazowych. Mając do dyspozycji cztery zegary przesunięte o 90°, można wystawić zdarzenie w czterech różnych chwilach w obrębie jednego okresu, czyli czterokrotnie poprawić rozdzielczość.
Najwyższą precyzję dają wreszcie programowalne linie opóźniające wbudowane w bloki wejścia/wyjścia (w układach AMD/Xilinx nazywane IDELAY/ODELAY). Składają się z łańcucha elementów opóźniających o kroku rzędu kilkudziesięciu pikosekund (typowo ~78 ps na „odczep"), więc pozwalają dostroić moment zbocza z dokładnością znacznie poniżej nanosekundy, kompensując przy okazji różnice długości ścieżek. Połączenie licznika (zgrubne ustawienie w taktach), wielofazowego zegara (podział okresu) i linii opóźniającej (dostrojenie pikosekundowe) daje w praktyce rozdzielczość czasową, o jakiej mikrokontroler nie może marzyć — i to na wielu kanałach jednocześnie. To właśnie ta warstwa techniczna stoi za zdaniem „FPGA nadaje się do nanosekund".1
Język opisu sprzętu: VHDL, Verilog i domknięcie czasowe
Ceną za moc FPGA jest inny sposób pracy. Zamiast pisać program w C czy C++, projektuje się logikę w języku opisu sprzętu (HDL, Hardware Description Language) — najczęściej w VHDL lub Verilogu. To zmiana paradygmatu, która początkujących bywa myli: kod HDL nie „wykonuje się" po kolei, lecz opisuje sprzęt, który ma powstać. Konstrukcje wyglądające jak instrukcje są w istocie opisem równolegle działających bloków logiki. Napisany opis przechodzi przez łańcuch narzędzi producenta (dla układów AMD/Xilinx jest to Vivado, dla Intel/Altera — Quartus): najpierw synteza zamienia HDL na sieć bramek i przerzutników, potem etap rozmieszczenia i połączenia (place and route) przypisuje tę sieć do fizycznych zasobów konkretnego układu i prowadzi połączenia.
Na końcu pojawia się kluczowe dla szybkich projektów pojęcie domknięcia czasowego (timing closure). Narzędzie analizuje wszystkie ścieżki sygnału i sprawdza, czy dane zdążą dotrzeć od jednego przerzutnika do drugiego w jednym takcie zegara, z zachowaniem czasów setup i hold. Jeśli któraś ścieżka jest za wolna, projekt „nie domyka się" przy zadanej częstotliwości i trzeba albo obniżyć zegar, albo przeprojektować logikę (np. dodać etap potokowania). Ta dyscyplina — myślenie w kategoriach taktów, ścieżek i marginesów czasowych — jest sednem projektowania cyfrowego na FPGA i właśnie ona daje gwarancję deterministycznego działania w skali nanosekund. Dla osoby ze świata Arduino to nowy język i nowy sposób myślenia, ale narzędzia są dziś darmowe (w wersjach dla mniejszych układów), a materiałów edukacyjnych przybywa.1
Warto wiedzieć, że projektowanie na FPGA to nie tylko pisanie HDL. Równie ważna jest symulacja: zanim cokolwiek trafi do układu, projekt sprawdza się w symulatorze, podając mu wymuszenia (tzw. testbench) i obserwując przebiegi czasowe sygnałów wewnętrznych. To pozwala wyłapać błędy logiczne bez ryzyka i bez żmudnego debugowania na sprzęcie. Po drugie, nie wszystko pisze się od zera — producenci i społeczność dostarczają gotowe rdzenie IP (Intellectual Property): bloki realizujące interfejsy (UART, SPI, Ethernet, PCIe), kontrolery pamięci, procesory FFT i wiele innych, które wstawia się do projektu jak klocki. Po trzecie, w FPGA można uruchomić miękki procesor (soft core), czyli procesor zbudowany z zasobów logicznych — w świecie AMD to MicroBlaze, coraz częściej także rdzenie RISC-V. Pozwala to połączyć elastyczność oprogramowania z szybką, dedykowaną logiką w jednym układzie. Wreszcie istnieje synteza wysokiego poziomu (HLS), pozwalająca opisać niektóre bloki w języku zbliżonym do C i automatycznie przetłumaczyć je na HDL — to obniża próg wejścia, choć do precyzyjnego timingu wciąż lepiej panować nad logiką wprost.1
Przykładowy projekt: generator sekwencji wyzwalających
Aby uziemić te abstrakcje, prześledźmy, jak wyglądałby w FPGA prosty, ale realistyczny projekt: generator sekwencji wyzwalającej dla kilku urządzeń, który po sygnale startu wystawia impulsy na czterech kanałach w precyzyjnie zadanych chwilach. Sercem układu jest licznik taktowany zegarem systemowym, na przykład 200 MHz (takt 5 ns). Po wykryciu zbocza sygnału startu licznik rusza, a cztery komparatory — po jednym na kanał — porównują jego bieżącą wartość z zaprogramowanymi progami. Gdy licznik osiąga próg danego kanału, odpowiedni przerzutnik ustawia wyjście; drugi próg je kasuje, definiując szerokość impulsu. Wszystkie cztery kanały działają równolegle, więc ich wzajemny rozrzut jest ograniczony tylko jitterem zegara i różnicami opóźnień ścieżek, a nie kolejnością wykonywania kodu.
Gdyby natywna rozdzielczość 5 ns była zbyt zgrubna, dokłada się opisane wcześniej mechanizmy: blok PLL generuje dodatkowe zegary przesunięte w fazie, a linie ODELAY dostrajają każde zbocze z krokiem rzędu 78 ps. Wartości progów i opóźnień można uczynić rejestrami zapisywanymi z komputera (np. przez interfejs FrontPanel modułu Opal Kelly), dzięki czemu operator zmienia sekwencję w locie, bez rekompilacji projektu. To dokładnie ta architektura, która osiemdziesiąt lat temu wymagała przełącznika iskrowego i X-Unitu rozdzielającego jeden impuls na wiele kanałów — dziś mieści się w kilkuset liniach kodu HDL i jednym tanim układzie. Co istotne, taki generator nie steruje jeszcze niczym „mocnym": jego wyjścia to sygnały logiczne, które dopiero trzeba wzmocnić i odizolować, zanim podłączy się do nich realne obciążenie — o czym mówią kolejne artykuły cyklu.1
Szybkie wejścia i wyjścia: LVDS, a do gigabitów SERDES
Do naprawdę szybkich zadań FPGA dysponuje też standardami wejść/wyjść, których mikrokontroler zwykle nie ma. Zamiast pojedynczego napięcia względem masy (single-ended) używa się sygnałów różnicowych: LVDS, CML, PECL. Jak opisano w poprzednim artykule, niosą one informację jako różnicę napięć w parze przewodów, co daje odporność na zakłócenia wspólne i pozwala pracować w setkach MHz oraz GHz. Banki wejść/wyjść nowoczesnych FPGA potrafią konfigurować pary różnicowe sprzętowo, a wbudowane elementy SERDES (serializer/deserializer) pozwalają zamieniać dane równoległe na szybki strumień szeregowy i z powrotem.1
Do strumieni rzędu gigabitów na sekundę służą natomiast wbudowane transceivery wysokiej szybkości — w układach AMD znane jako GTP, GTX, GTH i GTY. To kompletne, sprzętowe bloki nadajnika i odbiornika z odzyskiwaniem zegara z danych, korekcją (equalization) i kodowaniem liniowym, osiągające dziś przepływności rzędu dziesiątek Gb/s na pojedynczy kanał. To dzięki nim FPGA jest pierwszym wyborem nie tylko do „przełączania szybko", ale i do transmisji danych oraz precyzyjnego, niskojitterowego taktowania. Żaden typowy mikrokontroler nie ma na pokładzie niczego, co dorównywałoby tym transceiverom.2

Anatomia złączy: Pmod, SMA, FMC i SYZYGY
Skoro o przydatności płytki decydują wyjścia, warto poznać typowe rodzaje złączy spotykane na płytkach FPGA, bo różnią się one drastycznie pod względem przydatności do szybkich sygnałów. Najprostsze i najpopularniejsze są złącza Pmod — niewielkie, sześcio- lub dwunastopinowe gniazda do dołączania prostych modułów (czujników, przekaźników, wyświetlaczy). Są wygodne i tanie, ale to zwykłe szpilki bez kontrolowanej impedancji i terminacji, więc do czystych impulsów nanosekundowych się nie nadają. Lepsze są pary różnicowe wyprowadzone wprost z banków I/O oraz złącza SMA/coax, dające pełną kontrolę impedancji 50 Ω aż do gniazda.
Do poważnych zastosowań pomiarowych służą złącza standaryzowane. FMC (FPGA Mezzanine Card) to przemysłowy standard złącza-mezzanine z dużą liczbą par różnicowych i liniami transceiverów, pozwalający dołączać profesjonalne moduły ADC/DAC i interfejsy. SYZYGY (oraz oparte na nim Zmod firmy Digilent) to nowszy, mniejszy i tańszy standard pomyślany właśnie pod szybkie I/O w kompaktowych przyrządach. Wybierając płytkę pod sygnały nanosekundowe, patrzy się więc nie na liczbę gniazd Pmod, lecz na obecność wyjść różnicowych, FMC, SYZYGY albo SMA — bo to one przesądzają, czy szybki sygnał w ogóle wyjdzie z układu w stanie nadającym się do użytku.
Rodziny i producenci układów FPGA
Rynek FPGA jest dziś bogaty, co dodatkowo obniża ceny i zwiększa dostępność. Najwięksi gracze to AMD (dawniej Xilinx) i Intel (dawniej Altera). W ofercie AMD układy ułożone są w rodziny rosnącej wydajności: Spartan i Artix to seria ekonomiczna (na niej oparte są popularne płytki edukacyjne), Kintex to klasa średnia z mocnymi transceiverami, a Virtex oraz nowsze UltraScale i UltraScale+ to topowe układy do najbardziej wymagających zastosowań. U Intela odpowiednikami są Cyclone (ekonomiczna), Arria (średnia) i Stratix (topowa), przy czym układy Stratix 10 mają transceivery sięgające ponad 28 Gb/s. Osobną, ważną rodziną są układy SoC łączące FPGA z procesorem ARM — Zynq u AMD oraz odpowiedniki u Intela.
Obok wielkiej dwójki rośnie znaczenie producentów oferujących tanie i energooszczędne układy: Lattice specjalizuje się w małych, niskomocowych FPGA, a chińskie Gowin i amerykańskie Efinix agresywnie obniżają cenę wejścia, napędzając wspomniane już płytki za kilkadziesiąt złotych. Dla osoby uczącej się ten wybór jest komfortowy: można zacząć od bardzo taniego układu, a wiedza (myślenie w kategoriach logiki synchronicznej, HDL, domknięcia czasowego) przenosi się między rodzinami i producentami, bo zasady są wspólne.2
Gdzie naprawdę pracują FPGA
Żeby nie pozostać w abstrakcji, warto pokazać, gdzie FPGA są dziś realnie używane — bo to te same powody (równoległość, determinizm, szybkie I/O) prowadzą do wyboru tej technologii. W telekomunikacji FPGA obsługują przełączanie pakietów i przetwarzanie sygnału w stacjach bazowych oraz routerach, gdzie strumienie gigabitowe trzeba obrabiać w locie. W aparaturze pomiarowej tworzą serce oscyloskopów, analizatorów i generatorów — to właśnie FPGA zbiera próbki z przetworników i wyzwala pomiary z nanosekundową precyzją. W finansach (handel wysokich częstotliwości) FPGA skracają czas reakcji na zdarzenia rynkowe do nanosekund, bo każda mikrosekunda opóźnienia ma wymierną cenę. W radarach i systemach obrazowania (medycznego, satelitarnego) realizują przetwarzanie sygnału w czasie rzeczywistym.
Szczególnie pouczający jest przykład fizyki cząstek. W wielkich eksperymentach detektory generują dane z prędkością, której żaden komputer nie nadąży zapisać, więc to FPGA podejmują w nanosekundach pierwszą decyzję (trigger): które zdarzenia są na tyle interesujące, by je zachować, a które odrzucić. To bezpośredni potomek problemu, od którego zaczął się cały ten cykl — wyzwalania zdarzeń z precyzją nanosekundową — tylko zastosowany do nauki, a nie do broni. Wreszcie FPGA służą jako platforma do prototypowania układów ASIC: zanim wyda się miliony na produkcję dedykowanego czipu, jego logikę testuje się właśnie na FPGA. Ta różnorodność zastosowań tłumaczy, dlaczego ekosystem jest tak bogaty i dlaczego ceny płytek edukacyjnych spadły tak nisko.1
Od czego zacząć: Digilent Arty A7 i płytki edukacyjne
W praktyce próg wejścia do FPGA jest dziś zaskakująco niski. Najpopularniejszą płytką edukacyjną jest Digilent Arty A7 (oraz większy Nexys A7), oparta na układzie AMD/Xilinx Artix-7. To gotowa płytka rozwojowa z ekosystemem Vivado, złączami Pmod, a nawet złączem zgodnym z shieldami Arduino/chipKIT — celowo pomyślana jako pomost dla osób przechodzących ze świata Arduino do FPGA. Na niej najłatwiej nauczyć się projektowania logiki, pierwszych maszyn stanów i sekwencji czasowych. Co więcej, dolna granica cenowa FPGA spadła ostatnio dramatycznie: płytki takie jak Sipeed Tang Nano z układami chińskiej firmy Gowin kosztują mniej niż niejedno Arduino, a mimo to oferują prawdziwą, konfigurowalną logikę. To pokazuje skalę demokratyzacji tej technologii.3

Warto od razu zaznaczyć ważne praktyczne zastrzeżenie. Zwykłe złącza Pmod, choć wygodne, nie są idealne do czystych impulsów 1 ns, bo to proste złącza szpilkowe bez kontrolowanej impedancji i terminacji. Do naprawdę szybkich, czystych sygnałów lepiej szukać płytek z wyjściami różnicowymi, złączami FMC, Zmod/SYZYGY albo SMA/coax, ewentualnie projektować własną płytkę-córkę z buforami LVDS/CML i terminacją 50 Ω. To powtórzenie zasady z poprzedniego artykułu: przy nanosekundach złącza i prowadzenie sygnału bywają ważniejsze niż sam układ.3
Ścieżka nauki jest dziś dobrze przetarta. Zaczyna się zwykle od prostych ćwiczeń: zaświecić diodę, obsłużyć przyciski z eliminacją drgań styków, zbudować licznik i wyświetlić jego stan, zrobić maszynę stanów sterującą sekwencją. Potem przychodzą interfejsy (UART, SPI), generowanie przebiegów i pierwsze projekty czasowe. Kluczowe jest, by od początku korzystać z symulacji i myśleć w kategoriach logiki synchronicznej, a nie „kodu, który się wykonuje". Środowiska producentów (Vivado dla AMD, Quartus dla Intela, darmowe narzędzia dla układów Lattice i Gowin) są bezpłatne w wersjach obejmujących układy z płytek edukacyjnych, a społeczność udostępnia mnóstwo otwartych projektów do nauki na przykładach. Po kilku tygodniach ćwiczeń osoba znająca wcześniej tylko Arduino jest zwykle w stanie zaprojektować działający, wielokanałowy generator sygnałów — co najlepiej pokazuje, że bariera jest dziś czasowa, a nie finansowa czy sprzętowa.3
Integracja z komputerem: Opal Kelly XEM7310
Gdy projekt ma ściśle współpracować z komputerem — zbierać dane, sterować eksperymentem z poziomu Pythona, strumieniować pomiary — wygodny jest moduł Opal Kelly XEM7310. To kompaktowa płytka, mniejsza od karty kredytowej (75 × 50 mm), z układem Artix-7 w wariancie XC7A75T (75 520 komórek logicznych, 180 bloków DSP) lub mocniejszym XC7A200T (215 360 komórek, 740 DSP). Komunikuje się z komputerem przez interfejs SuperSpeed USB 3.0 oparty na kontrolerze Cypress FX3, osiągając przepustowość ponad 340 MiB/s, ma 1 GiB pamięci DDR3 (pasmo szczytowe 25,6 Gb/s) oraz dwa złącza Samtec dające 126 linii I/O.4
Prawdziwym atutem rozwiązania Opal Kelly nie jest jednak sam sprzęt, lecz pakiet FrontPanel SDK. Dostarcza on gotowe API w językach C, C++, C#, Pythonie, Javie i Ruby, działające pod Windows, Linux i macOS, które całkowicie ukrywa złożoność komunikacji USB i pozwala czytać oraz pisać do rejestrów i bufrów w FPGA kilkoma liniami kodu. Dzięki temu inżynier może skupić się na logice w FPGA i na aplikacji na komputerze, a warstwa transportu „po prostu działa". To typowy wybór do integracji OEM w aparaturze pomiarowej, systemach akwizycji danych i przetwarzania obrazu — wszędzie tam, gdzie FPGA ma być szybkim „przedłużeniem" komputera.4
Moduły tej klasy dobrze ilustrują też pewien podział pracy, typowy dla nowoczesnych systemów. FPGA bierze na siebie to, co wymaga szybkości i determinizmu — generowanie sygnałów, akwizycję z dużą szybkością, filtrowanie i wstępne przetwarzanie strumienia w czasie rzeczywistym. Komputer bierze to, co wymaga elastyczności i mocy obliczeniowej ogólnego przeznaczenia — analizę zebranych danych, wizualizację, zapis i interfejs użytkownika. Granica między nimi (ile przetwarzania zrobić w FPGA, a ile na komputerze) jest jedną z kluczowych decyzji architektonicznych takiego systemu i zależy od tego, jak szybko dane napływają oraz jak bardzo zależy nam na reakcji w czasie rzeczywistym. Im wyższe wymagania czasowe, tym więcej logiki przenosi się do FPGA.4

SoC: FPGA z procesorem ARM, czyli Zynq, Eclypse Z7 i Red Pitaya
Osobną, bardzo praktyczną kategorią są układy łączące FPGA z pełnoprawnym procesorem ARM w jednej kości — w świecie AMD/Xilinx to rodzina Zynq. Daje to najlepsze z dwóch światów: procesor ARM uruchamia system operacyjny (zwykle Linux), obsługuje sieć, interfejs użytkownika i logikę wysokiego poziomu, a sprzężona z nim część FPGA realizuje to, co wymaga determinizmu i szybkości. Komunikacja między nimi odbywa się szybką magistralą wewnątrz układu. To architektura idealna dla „inteligentnych przyrządów", które muszą być jednocześnie wygodne w obsłudze i bardzo szybkie w warstwie pomiarowej.
W żargonie Zynq mówi się o dwóch częściach układu: PS (Processing System), czyli sekcji z procesorem ARM, pamięcią i typowymi peryferiami, oraz PL (Programmable Logic), czyli właściwym FPGA. Łączy je rodzina magistral AXI, po których procesor zapisuje i czyta rejestry oraz bufory zaimplementowane w logice, a logika może z kolei sięgać do wspólnej pamięci. W praktyce wygląda to tak, że aplikacja w Linuksie na ARM ustawia parametry (np. progi czasowe naszego generatora sekwencji), a deterministyczna logika w PL wykonuje pracę wymagającą nanosekundowej precyzji. Taki podział pozwala napisać wygodny interfejs i sieć po stronie procesora, nie tracąc nic z twardego determinizmu po stronie logiki — i właśnie dlatego układy Zynq zdominowały rynek elastycznej aparatury pomiarowej oraz sterującej.
Sztandarowym przykładem zorientowanym na pomiary jest Digilent Eclypse Z7, oparty na Zynq-7000, z modularnym, szybkim wejściem/wyjściem przez moduły Zmod zgodne ze standardem SYZYGY. Mechanizm SmartVIO automatycznie dobiera napięcie banku I/O do podłączonego modułu, co jest istotne, bo nie można założyć dowolnego poziomu logicznego — trzeba dopasować moduł lub płytkę-córkę do napięć banku. W zestawie z modułami Zmod ADC i Zmod DAC Eclypse zamienia się w konfigurowalny tor akwizycji i generacji sygnałów analogowych sterowany z FPGA. Pokrewną filozofię ma Red Pitaya STEMlab 125-14, oparta na Zynq 7010, z dwoma wejściami i dwoma wyjściami 125 MS/s o rozdzielczości 14 bitów. Łączy ona ARM z programowalnym FPGA i jest niezwykle wygodną platformą eksperymentalną — choć trzeba uczciwie powiedzieć, że nie jest generatorem „idealnych impulsów 1 ns", lecz raczej elastycznym przyrządem 125 MS/s z dostępem do logiki.5,6

Siłą platform tego typu jest też otwarty ekosystem oprogramowania. Red Pitaya udostępnia gotowe aplikacje (oscyloskop, generator, analizator widma) działające w przeglądarce, a zaawansowany użytkownik może wgrać własny projekt do części FPGA i dopisać do niego obsługę po stronie Linuksa. Dzięki temu jedno tanie urządzenie pełni rolę kilku przyrządów laboratoryjnych naraz, a jednocześnie pozostaje w pełni programowalne. To czyni je popularnym narzędziem dydaktycznym i badawczym: od ćwiczeń studenckich, przez radioamatorstwo i pomiary fizyczne, po prototypy układów sterowania w pętli sprzężenia zwrotnego o krótkich czasach reakcji. Pokazuje też ogólniejszy trend — szybka, programowalna elektronika coraz częściej przychodzi z gotowym ekosystemem, który dramatycznie skraca drogę od pomysłu do działającego pomiaru.6
Dla tych, którzy chcą zintegrować FPGA we własnym urządzeniu, istnieją też gotowe moduły systemowe (System-on-Module). Firma Trenz Electronic oferuje na przykład małe moduły TE0720 z układem Zynq, pamięcią DDR3 i wyprowadzonymi liniami I/O, które wlutowuje się we własną płytkę bazową. Pozwala to przejść od prototypu na płytce ewaluacyjnej do własnego produktu bez projektowania od zera całej, trudnej części z szybkim układem i jego zasilaniem.9
Gdy FPGA to przerost: gotowe generatory impulsów i opóźnień
Bywa jednak, że FPGA to przerost formy nad treścią. Jeśli potrzebujemy tylko: „po wyzwoleniu wygeneruj impuls po 37 ns, o szerokości 5 ns, z małym jitterem", to pisanie logiki w VHDL jest zbędnym wysiłkiem. Lepszy jest wtedy gotowy generator impulsów i opóźnień (pulse/delay generator). Tania, „kartowa" droga to na przykład SpinCore PulseBlasterESR-PRO: programowalny, wielokanałowy generator sekwencji o rozdzielczości 2 ns (przy zegarze 500 MHz), z 21 wyjściami TTL i pamięcią programu do 32k instrukcji, obsługujący zagnieżdżone pętle. Jest powszechnie używany w spektroskopii NMR/ESR i innych eksperymentach fizycznych właśnie dlatego, że pozwala zdefiniować złożoną sekwencję czasową bez projektowania sprzętu.7
Z górnej, laboratoryjnej półki pochodzą generatory opóźnień jak Stanford Research Systems DG645 czy Highland Technology T660, ceniące się ekstremalnie małym jitterem i powtarzalnością. DG645 to klasyczny laboratoryjny generator opóźnień i impulsów z wieloma kanałami i rozdzielczością pikosekundową; Highland T660 jest kompaktowym modułem OEM, który po wyzwoleniu generuje cztery precyzyjnie ustawione impulsy o bardzo małym jitterze. Istnieją też scalone generatory impulsów i opóźnień, które wlutowuje się we własną płytkę, gdy potrzeba zintegrowanego rozwiązania. Takie urządzenia i układy bywają lepsze od płytki FPGA wszędzie tam, gdzie liczy się czystość i stabilność pojedynczego impulsu, a nie dowolność logiki.
Reguła praktyczna jest więc taka sama jak w całym cyklu: dobieraj narzędzie do zadania. Do złożonych, zmiennych sekwencji i wielu kanałów — FPGA. Do stabilnych, powtarzalnych impulsów o zadanym opóźnieniu — gotowy generator opóźnień. Do strumieni gigabitowych — FPGA z transceiverami i złączami SFP/SFP+. Warto dodać, że te światy się przenikają: wiele gotowych generatorów impulsów ma w środku właśnie FPGA, tyle że ukryty pod wygodnym interfejsem, dzięki czemu użytkownik dostaje gotowy przyrząd zamiast surowej płytki do oprogramowania.7
Najważniejsze kryterium: liczą się wyjścia, nie gigaherce
Na koniec najważniejsza, a najczęściej przeoczana zasada zakupowa: o przydatności płytki decydują wyjścia, a nie taktowanie rdzenia logiki. Nawet najszybszy FPGA będzie ograniczony, jeśli sygnał wyprowadzimy zwykłym Pmodem na przewodach. Do czystych impulsów nanosekundowych potrzebne są wyjścia różnicowe (LVDS/CML), złącza SMA/coax 50 Ω, FMC (do modułów pomiarowych), Zmod/SYZYGY albo przynajmniej pary o kontrolowanej impedancji. Dobierając płytkę, trzeba patrzeć nie na liczbę komórek logicznych czy maksymalny zegar, lecz na to, czy fizycznie ma sensowne, szybkie wyjścia i czy banki I/O obsługują potrzebne standardy. To znów powrót do tej samej, fundamentalnej prawdy: przy nanosekundach złącza i tor sygnałowy bywają ważniejsze niż sam układ scalony.1,5
Pobór mocy, konfiguracja i uruchomienie
Warto być świadomym kilku praktycznych aspektów, które odróżniają pracę z FPGA od beztroskiego wpięcia Arduino w USB. Po pierwsze, zasilanie: nowoczesny FPGA wymaga kilku precyzyjnych napięć (osobno dla rdzenia, banków I/O, transceiverów), często włączanych w określonej kolejności (power sequencing). Na gotowych płytkach rozwojowych jest to już rozwiązane, ale projektując własną płytkę, trzeba zaprojektować staranny układ zasilania, bo to jeden z najczęstszych powodów niepowodzeń. Po drugie, konfiguracja: ulotny bitstream trzeba po każdym włączeniu załadować — w fazie rozwoju przez kabel JTAG z komputera, a w gotowym urządzeniu automatycznie z dołączonej pamięci flash. Po trzecie, uruchomienie i diagnostyka: do podglądania sygnałów wewnątrz działającego układu służą wbudowane analizatory logiczne (np. AMD Integrated Logic Analyzer), które „podsłuchują" wybrane sygnały w czasie rzeczywistym i wyświetlają je na komputerze — to nieoceniona pomoc, gdy projekt zachowuje się inaczej, niż przewidywała symulacja.
Te kroki nie są trudne, ale wymagają dyscypliny i pokazują, że FPGA to platforma „inżynierska", a nie zabawka. W zamian dostaje się powtarzalność i kontrolę nad sprzętem nieosiągalną dla mikrokontrolera. Dla projektów, które mają trafić do produkcji, ta dojrzałość procesu (symulacja, kontrola wersji bitstreamu, weryfikacja czasowa, analiza na sprzęcie) jest zaletą, a nie obciążeniem.1
Jak bezpiecznie wyprowadzić sygnał ze świata FPGA
Skoro FPGA generuje już precyzyjny sygnał, pozostaje pytanie, jak podać go dalej, do realnego świata. Tu obowiązuje kilka żelaznych zasad. Pin FPGA pracuje na niskim napięciu (typowo 1,8, 2,5 lub 3,3 V) i oddaje niewielki prąd — nie wolno więc obciążać go bezpośrednio terminacją 50 Ω do masy ani sterować nim wprost wejścia wymagającego 5 V TTL czy dużego prądu. Między FPGA a światem zewnętrznym wstawia się bufory i translatory poziomów, a do długich połączeń — nadajniki LVDS/CML. Trzeba też pamiętać o ochronie: wejścia i wyjścia FPGA są wrażliwe na wyładowania elektrostatyczne i na przepięcia, więc na granicy z otoczeniem stosuje się diody zabezpieczające i rezystory szeregowe.
To wszystko nabiera szczególnego znaczenia, gdy do wyjścia FPGA chcemy podłączyć stopień mocy — driver tranzystora, a za nim wysokie napięcie. Wtedy oprócz buforowania konieczna jest izolacja galwaniczna, chroniąca cenny układ przed skutkami szybkich zmian potencjału po stronie mocy. Tym, jak przejść od logicznego sygnału z FPGA do realnego przełączania napięć — najpierw umiarkowanych, a potem kilowoltowych — zajmują się dwa kolejne artykuły cyklu: o tranzystorach MOSFET, GaN i SiC oraz o gotowych pulserach HV i izolowanych driverach.1
Te moduły nie są niczym specjalnym
I wreszcie pointa całego cyklu: te moduły nie są niczym specjalnym ani trudno dostępnym, mimo że obsługują sygnały, które osiemdziesiąt lat temu były domeną tajnych laboratoriów. Najlepszym dowodem jest to, że kompletny zestaw Eclypse Z7 Bundle (płytka Eclypse Z7 plus moduły Zmod ADC 1410 i Zmod DAC 1411) sprzedaje polski sklep kamami.pl — ten sam, w którym kupuje się Arduino i tani moduł MOSFET za kilkanaście złotych. Cena zestawu to około 3572 zł, czyli wyraźnie więcej niż mikrokontroler, ale to wciąż sprzęt z normalnej oferty sklepu hobbystyczno-inżynierskiego, dostępny dla każdego, a nie zamknięta technologia wojskowa.8
To samo dotyczy wiedzy: dokumentacja, darmowe wersje narzędzi (Vivado, Quartus), kursy i przykładowe projekty są powszechnie dostępne. Bariera nie leży więc w dostępie do sprzętu ani do wiedzy, lecz w czasie potrzebnym na opanowanie sposobu myślenia o logice synchronicznej i domknięciu czasowym. Gdy już się go opanuje, FPGA staje się narzędziem, które otwiera świat sygnałów nanosekundowych — a podpięcie do jego wyjść stopnia mocy (opisane w kolejnym i następnym artykule) pozwala przejść od precyzyjnego sygnału logicznego do realnego sterowania mocą.8

Ćwiczenia praktyczne
Pierwsze ćwiczenie to dobór narzędzia do zadania. Dla trzech scenariuszy — (a) jeden powtarzalny impuls 5 ns po zadanym opóźnieniu, (b) osiem równoległych linii przełączanych synchronicznie co 2 ns, (c) strumień danych 2,5 Gb/s — należy:
- zdecydować, czy wystarczy mikrokontroler, czy potrzebny jest FPGA, czy gotowy generator impulsów,
- uzasadnić wybór determinizmem i równoległością,
- dla (c) wskazać, że konieczne są transceivery SERDES i złącza różnicowe,
- dla (a) ocenić, czy
PulseBlaster/DG645nie będzie prostszy niż HDL, - wypisać, jakie wyjścia fizyczne (Pmod/SMA/LVDS/FMC) są w każdym przypadku potrzebne.
Celem jest nauczenie, że FPGA nie jest odpowiedzią na każde pytanie o nanosekundy.
Drugie ćwiczenie dotyczy wyjść. Należy:
- porównać Pmod, złącze SMA
50 Ω, wyjście LVDS i złączeFMC/Zmodpod kątem przydatności do impulsów1 ns, - wyjaśnić, dlaczego długie przewody Dupont psują zbocza,
- opisać rolę terminacji
50 Ω/100 Ω, - wskazać, dlaczego sam wysoki zegar FPGA nie gwarantuje czystego sygnału na wyjściu,
- sformułować listę kontrolną „na co patrzeć kupując płytkę".
To ćwiczenie ma utrwalić zasadę, że przy nanosekundach złącza i PCB bywają ważniejsze niż sam układ.
Trzecie ćwiczenie dotyczy rozdzielczości czasowej FPGA. Należy:
- przyjąć zegar logiki
200 MHzi policzyć wynikającą rozdzielczość ustawiania zdarzeń, - powtórzyć dla
500 MHz, - wyjaśnić, w jaki sposób bloki PLL/MMCM i techniki SERDES pozwalają zejść poniżej jednego taktu,
- oszacować, jaki zegar bazowy byłby potrzebny do rozdzielczości
200 psbez interpolacji, - ocenić, czy w danym zadaniu prościej jest podnieść zegar, czy użyć interpolacji fazy.
To ćwiczenie pokazuje, skąd bierze się realna rozdzielczość czasowa układu FPGA.
Przejdź do ćwiczenia interaktywnego
Powiązane artykuły
Przed tym tekstem warto przeczytać o sterowaniu sygnałami od Arduino do szybkich mikrokontrolerów, a po nim — o tym, co podpiąć do wyjść FPGA: szybkie przełączanie wysokich napięć (MOSFET, GaN, SiC) oraz gotowe pulsery HV i ich integrację z FPGA. Historyczne tło daje Spark Gap Switch i X-Unit.