Streszczenie

Sterowanie sygnałami cyfrowymi „w skali pojedynczych nanosekund" to dziś codzienność laboratoriów, ale w czasach Projektu Manhattan było jednym z najtrudniejszych problemów inżynierskich całego przedsięwzięcia. To właśnie potrzeba jednoczesnego, z dokładnością do nanosekund, odpalenia wielu detonatorów z odparowującym przewodem (EBW) wymusiła powstanie przełącznika iskrowego i X-Unitu, bez których implozja Fat Mana po prostu nie zadziałałaby symetrycznie. Dziś tę samą klasę precyzji czasowej można osiągnąć modułami, które kupuje się w tych samych sklepach co Arduino.1,2

Ten artykuł otwiera mały cykl o nowoczesnej elektronice szybkich sygnałów. Pokazuje najpierw, dlaczego nanosekunda to już „elektronika wysokich częstotliwości", a potem prowadzi czytelnika od najprostszej platformy edukacyjnej, czyli Arduino, przez szybkie mikrokontrolery klasy Teensy i STM32N6, aż do progu, za którym trzeba sięgnąć po układy FPGA i moduły rozwojowe. Część poświęcona przełączaniu wysokich napięć z taką szybkością została wydzielona do osobnych tekstów o modułach MOSFET, GaN i SiC oraz o gotowych pulserach HV i ich integracji z FPGA.

Rozszerzenie tematu

Nanosekunda wydaje się czasem niewyobrażalnie krótkim, a jednak cała ta opowieść jest o tym, że dla współczesnej elektroniki to skala zupełnie oswojona — pod warunkiem, że rozumie się, czym naprawdę jest „szybki sygnał cyfrowy". Poniżej rozkładamy ten problem na czynniki pierwsze: od fizyki zbocza, przez budżet czasowy i tor sygnałowy, aż po konkretne płytki, którymi można dziś takie sygnały generować.

Po co w ogóle sterować nanosekundami

Zanim zejdziemy w szczegóły, warto pokazać, że nie jest to ćwiczenie czysto akademickie. Sterowanie zdarzeniami w skali nanosekund jest sercem zaskakująco wielu technologii. Historycznym, dramatycznym przykładem jest firingset broni implozyjnej: wiele detonatorów EBW musi odpalić z rozrzutem rzędu pojedynczych nanosekund, bo inaczej zbieżna fala uderzeniowa traci symetrię. Ale dokładnie ta sama klasa precyzji napędza dziś technologie cywilne. W pomiarze odległości metodą czasu przelotu (LIDAR, dalmierze laserowe) 1 ns błędu to około 15 cm błędu dystansu, bo światło pokonuje w nanosekundzie właśnie tyle. W konwerterach czas–cyfra (TDC) mierzy się odstępy czasowe z rozdzielczością pikosekund. W radarach, w sterowaniu szybkimi diodami laserowymi, w próbkujących oscyloskopach, w wyzwalaniu detektorów w fizyce cząstek, wreszcie w sterowaniu impulsami bramkującymi kubity komputerów kwantowych — wszędzie tam liczy się ta sama umiejętność: ustawić zdarzenie w czasie z dokładnością do nanosekundy lub lepszą.

Co istotne, te zastosowania dzielą się na dwie grupy o różnych wymaganiach. Jedne potrzebują tylko pojedynczego, czystego impulsu o precyzyjnym opóźnieniu (jak wyzwolenie detonatora czy lasera) — i tu często wystarczy szybki mikrokontroler lub gotowy generator opóźnień. Inne potrzebują wielu równoległych, zsynchronizowanych kanałów albo ciągłych strumieni gigabitowych — i to jest naturalna domena FPGA. Zrozumienie, do której grupy należy nasze zadanie, jest pierwszą i najważniejszą decyzją projektową, bo przesądza o wyborze całej platformy.

Dlaczego „cyfrowy" nie znaczy „prosty"

Najpierw warto rozprawić się z mitem, że „sygnał cyfrowy" jest prosty. Dopóki mówimy o miganiu diodą raz na sekundę, faktycznie liczy się tylko stan logiczny 0 albo 1, a cała fizyka mieści się w jednym zdaniu: „jest napięcie albo go nie ma". To wyobrażenie jest jednak złudne i załamuje się gwałtownie, gdy ten sam stan ma się zmieniać co kilka nanosekund. Cyfrowość jest bowiem abstrakcją nałożoną na zjawisko z gruntu analogowe. Pod spodem zawsze mamy ciągły przebieg napięcia, który tylko interpretujemy jako dwa poziomy. Przy zmianach wolnych interpretacja jest bezbłędna, bo sygnał ma mnóstwo czasu, żeby „dojść" do docelowego poziomu i tam się ustabilizować. Przy zmianach nanosekundowych przebieg nie nadąża, zaczyna dzwonić, odbijać się i rozmywać, a granica między 0 a 1 przestaje być oczywista.

Inżynier mówi wtedy nie o „bitach", lecz o integralności sygnału (signal integrity). Składają się na nią bardzo konkretne wielkości: czas narastania i opadania, jitter, marginesy szumowe (różnica między poziomem, który nadajnik gwarantuje jako jedynkę, a poziomem, który odbiornik jeszcze jako jedynkę uznaje), impedancja ścieżek, terminacja oraz pasmo całego toru. Dobrym, syntetycznym obrazem stanu sygnału jest tak zwany diagram oka (eye diagram): nakładamy na siebie setki kolejnych bitów i patrzymy, jak duże pozostaje „otwarte oko" w środku — czyli obszar, w którym odbiornik bez wątpliwości rozpoznaje stan logiczny. Im szybszy sygnał i gorszy tor, tym oko bardziej się przymyka, aż w końcu zamyka zupełnie i transmisja przestaje działać. To wszystko są realne zjawiska fizyczne, a nie abstrakcje — i to one decydują, czy układ w ogóle zadziała.3

Z cyfrowością wiążą się też dwa pojęcia czasowe, które przy nanosekundach stają się krytyczne: czas ustalania (setup) i czas podtrzymania (hold). Każdy element zatrzaskujący dane (przerzutnik, rejestr) wymaga, by sygnał danych był stabilny przez pewien minimalny czas przed aktywnym zboczem zegara (setup) i po nim (hold). Jeśli dane zmienią się w tym zakazanym oknie — co przy nanosekundach i niedopasowanych opóźnieniach ścieżek zdarza się łatwo — układ może wpaść w stan metastabilny: wyjście przez chwilę „wisi" między 0 a 1, zanim losowo opadnie w jedną ze stron. Metastabilność jest zmorą szybkich układów i powodem, dla którego sygnały przekraczające granice domen zegarowych przeprowadza się przez specjalne synchronizatory. To kolejny dowód, że „cyfrowy" świat na poziomie nanosekund rządzi się prawami analogowymi i probabilistycznymi, a nie prostą logiką zero-jedynkową.4

Nanosekunda, czyli gigaherc: częstotliwość, okres i harmoniczne

Punktem wyjścia jest jedna, fundamentalna zależność. Okres T = 1 ns odpowiada częstotliwości f = 1/T = 1 GHz, bo f = 1/T. Gdyby sygnał był idealną sinusoidą o okresie 1 ns, wystarczyłby tor o paśmie 1 GHz. Problem w tym, że sygnał cyfrowy nie jest sinusoidą. Idealny przebieg prostokątny to — zgodnie z analizą Fouriera — nieskończona suma sinusoid: częstotliwości podstawowej oraz jej nieparzystych harmonicznych (3f, 5f, 7f...), o amplitudach malejących jak 1/n. To właśnie te wysokie harmoniczne budują strome, „kanciaste" zbocza. Jeśli tor sygnałowy obetnie harmoniczne powyżej pewnej częstotliwości — a każdy realny tor jest filtrem dolnoprzepustowym — zbocza się zaokrąglą, a róg prostokąta zamieni w łagodną krzywą. Próba „przywrócenia" idealnego prostokąta przez gwałtowne obcięcie pasma daje dodatkowo charakterystyczne oscylacje przy zboczu, znane jako efekt Gibbsa.3

Dlatego praktyczna reguła brzmi: aby wiernie przenieść sygnał cyfrowy przełączany w nanosekundach, potrzeba pasma znacznie szerszego niż sama częstotliwość podstawowa — od setek MHz do wielu GHz. Często mówi się o zachowaniu harmonicznych co najmniej do piątej albo siódmej, co dla sygnału 500 MHz oznacza tor o paśmie 2,5–3,5 GHz. Pojawia się tu też pojęcie częstotliwości „kolana" (knee frequency), w przybliżeniu f_knee ≈ 0,5 / t_r: to ta częstotliwość, powyżej której energia sygnału cyfrowego szybko maleje i poniżej której musi mieścić się pasmo toru, by zbocza pozostały wierne. Kolano zależy więc od czasu narastania, a nie od częstotliwości taktu — co jest jedną z najważniejszych i najczęściej przeoczanych prawd szybkiej elektroniki.3

Sygnał prostokątny jako suma harmonicznych. Im więcej składowych wysokoczęstotliwościowych zachowamy, tym bardziej strome i wierne stają się zbocza; tor o zbyt wąskim paśmie „obcina" rogi i rozmywa impuls. Animacja: Wikimedia Commons, *Fourier synthesis square wave animated*
Sygnał prostokątny jako suma harmonicznych. Im więcej składowych wysokoczęstotliwościowych zachowamy, tym bardziej strome i wierne stają się zbocza; tor o zbyt wąskim paśmie „obcina" rogi i rozmywa impuls. Animacja: Wikimedia Commons, *Fourier synthesis square wave animated*

Trzy różne „szybkości": rozdzielczość, przepływność, czas narastania

Dla porządku warto rozdzielić trzy różne pojęcia, które laik notorycznie myli, bo wszystkie „mają coś wspólnego z szybkością". Pierwsze to rozdzielczość czasowa, czyli najmniejszy krok, z jakim potrafimy ustawić moment zdarzenia. Jeśli chcemy generować impulsy albo opóźnienia z krokiem 1 ns, potrzebujemy bazy czasu, licznika, pętli PLL lub linii opóźniającej o rozdzielczości rzędu 1 GHz. W praktyce dla zapasu stosuje się szybszą bazę, na przykład 2–5 GHz, albo techniki interpolacji fazy, które pozwalają „wcisnąć" zdarzenie między takty zegara. Przykładowo, jeśli zegar bazowy ma 500 MHz (takt 2 ns), to bez dodatkowych sztuczek nie da się ustawić zdarzenia z krokiem lepszym niż te 2 ns; dopiero linia opóźniająca albo interpolator fazy pozwala zejść niżej.

Drugie pojęcie to przepływność bitowa, czyli ile bitów na sekundę wysyłamy. Strumień 1 bit/ns to 1 Gb/s. Tu kryje się pułapka pojęciowa: wzór bitów 1010... przy 1 Gb/s ma częstotliwość podstawową tylko 500 MHz, bo pełny okres przebiegu obejmuje dwa bity — jedynkę i zero. Dlatego ktoś nieuważny mógłby pomyśleć, że wystarczy tor 500 MHz. To błąd, bo o wierności zbocza decydują harmoniczne, a nie częstotliwość podstawowa. Co gorsza, realne dane to nie idealne 1010..., lecz losowe ciągi, w których zdarzają się długie serie jedynek lub zer; takie „leniwe" przebiegi mają inne widmo i wymagają od toru zarówno wysokiego pasma (dla szybkich zboczy), jak i poprawnego zachowania przy niskich częstotliwościach (dla długich serii). Dlatego w szybkich łączach stosuje się kodowanie liniowe, np. 8b/10b, które gwarantuje dostatecznie częste zmiany stanu.

Trzecie pojęcie to czas narastania (t_r), czyli czas, w jakim sygnał przechodzi zwykle od 10% do 90% poziomu docelowego. To on, a nie nominalna częstotliwość, najlepiej charakteryzuje „szybkość" zbocza i to z nim wiąże się wymagane pasmo. Można mieć sygnał o niskiej częstotliwości powtarzania, ale bardzo stromych zboczach — i taki sygnał, mimo „wolnego" taktu, postawi torowi sygnałowemu wymagania jak dla wielu gigaherców. To częsta i kosztowna pomyłka projektowa: ocenianie trudności sygnału po jego częstotliwości, a nie po czasie narastania.3

Pasmo a czas narastania: skąd się bierze 0,35

Związek między czasem narastania a pasmem opisuje słynne przybliżenie BW ≈ 0,35 / t_r. Bierze się ono z modelu toru jako filtru dolnoprzepustowego pierwszego rzędu (obwód RC). Dla takiego filtru czas narastania od 10% do 90% wynosi t_r ≈ 2,2·RC, a pasmo -3 dB to BW = 1/(2π·RC). Pomnożenie tych dwóch wyrażeń daje stałą: BW · t_r ≈ 2,2/(2π) ≈ 0,35. Dla nowocześniejszych, szybkich oscyloskopów cyfrowych o ostrzejszej charakterystyce częstotliwościowej stosuje się raczej współczynnik 0,40–0,45. Konsekwencje są bardzo namacalne i dobrze widać je w tabeli: im krótsze zbocze chcemy zobaczyć lub wytworzyć, tym szersze pasmo jest niezbędne.3

Czas narastania Minimalne pasmo orientacyjnie
1 ns 350–450 MHz
500 ps 700–900 MHz
200 ps 1,75–2,25 GHz
100 ps 3,5–4,5 GHz

To są wartości minimalne, czyli granica, poniżej której pomiar lub generacja stają się jawnie błędne. Do wiernego kształtu impulsu, małych przeregulowań i wiarygodnego pomiaru bierze się zwykle większy zapas — trzy- do pięciokrotności względem częstotliwości podstawowej, a w praktyce oscyloskop o paśmie kilku GHz dla impulsów liczonych w pojedynczych nanosekundach. Warto rozumieć, dlaczego tak jest: jeśli pasmo przyrządu jest tylko nieznacznie większe od minimum, to zmierzony czas narastania będzie wypadkową rzeczywistego zbocza i czasu narastania samego toru pomiarowego. Czasy te sumują się geometrycznie, t_zmierzony ≈ √(t_sygnału² + t_toru²). Konkretny przykład: jeśli sygnał ma czas narastania 1 ns, a oscyloskop własny 1 ns, to zmierzymy √(1² + 1²) ≈ 1,41 ns — czyli błąd o 40%. Dopiero oscyloskop o czasie narastania 0,3 ns (pasmo ponad 1 GHz) zmierzy nasz sygnał z błędem poniżej 5%. Zbyt wolny przyrząd „dorysowuje" więc sygnałowi własne, sztuczne spowolnienie i zafałszowuje wynik. Historyczny kontekst tych pomiarów — od czego zaczynała aparatura ery atomowej — opisuje osobny artykuł o elektronice pomiarowej ery atomowej.3,4

Współczesny oscyloskop cyfrowy. Aby wiernie zobaczyć zbocze o czasie narastania `1 ns`, przyrząd musi mieć pasmo rzędu setek MHz; dla `100 ps` potrzeba już kilku GHz, a czas narastania samego toru pomiarowego sumuje się geometrycznie z mierzonym. Zdjęcie: Wikimedia Commons, *Hameg Oscilloscope HMO3004 Series*
Współczesny oscyloskop cyfrowy. Aby wiernie zobaczyć zbocze o czasie narastania `1 ns`, przyrząd musi mieć pasmo rzędu setek MHz; dla `100 ps` potrzeba już kilku GHz, a czas narastania samego toru pomiarowego sumuje się geometrycznie z mierzonym. Zdjęcie: Wikimedia Commons, *Hameg Oscilloscope HMO3004 Series*

Jitter i budżet czasowy

Z pasmem nierozerwalnie wiąże się jitter, czyli drżenie chwili, w której zdarzenie faktycznie następuje względem chwili idealnej. Jitter dzieli się na dwie zasadnicze klasy. Losowy (random jitter) wynika m.in. z szumu termicznego, jest teoretycznie nieograniczony co do amplitudy i opisuje go rozkład gaussowski; dlatego podaje się go zwykle jako wartość skuteczną (RMS), a jego wpływ na niezawodność rośnie wraz z wymaganą stopą błędów (BER). Deterministyczny (data-dependent, okresowy) wynika z konkretnych, powtarzalnych przyczyn: przesłuchów między liniami, ograniczeń pasma, zakłóceń od zasilania, niedopasowań impedancji. Dla projektanta liczy się budżet czasowy: jeśli chcemy operować w skali 1 ns, to jitter źródła zegara powinien być od niej znacznie mniejszy — rzędu dziesiątek pikosekund lub mniej. Inaczej rozrzut momentu przełączenia „zje" całą rozdzielczość, a w transmisji przymknie diagram oka.

Dlatego w poważnych układach nanosekundowych dystrybucja zegara jest osobnym, starannie projektowanym podsystemem. Zaczyna się od stabilnego źródła — oscylatora kwarcowego lub generatora MEMS — za którym stoi syntezer/PLL o niskim jitterze. Dalej sygnał zegarowy rozprowadza drzewo zegarowe (clock tree): bufory o dopasowanych opóźnieniach i ścieżki o dopasowanych długościach, tak aby zegar dotarł do wszystkich bloków w tej samej chwili (z minimalnym skew). To dokładnie ta sama klasa problemu, którą w 1945 roku rozwiązywano sprzętowo, rozdzielając jeden impuls na wiele równoległych kanałów przełącznikiem iskrowym, tak aby rozrzut między detonatorami EBW nie przekroczył kilku nanosekund. Różnica jest taka, że dziś budżet jittera projektuje się w pikosekundach i weryfikuje przyrządowo, a wtedy walczono o nanosekundy na granicy ówczesnej techniki.4

Jaką logiką: od TTL do LVDS, CML i PECL

Skoro mówimy o sygnałach, trzeba też powiedzieć, jaką logiką się je przenosi. Klasyczny 5 V TTL lub 3,3 V CMOS względem masy (single-ended) świetnie sprawdza się w wolnej elektronice, ale na długich połączeniach i przy nanosekundach zawodzi: jest wrażliwy na zakłócenia, na „pływanie" masy i na przesłuchy, a do tego pełne wychylenie napięcia (0–5 V) jest powolne do przeładowania i energochłonne. Dlatego w szybkich torach króluje logika różnicowa.

LVDS (Low-Voltage Differential Signaling) przenosi informację jako różnicę napięć w parze przewodów, z niewielkim wychyleniem rzędu 350 mV wokół wspólnego poziomu. Ponieważ odbiornik patrzy tylko na różnicę, każde zakłócenie wspólne dla obu żył (common-mode) jest na końcu odejmowane i znika — stąd znakomita odporność na szumy. Małe wychylenie oznacza też szybkie zbocza i niski pobór mocy, dlatego LVDS pracuje wygodnie w setkach MHz. Standardy CML (Current-Mode Logic) i PECL/ECL idą jeszcze wyżej, do wielu GHz, kosztem większego poboru prądu i bardziej wymagającej terminacji. Wreszcie do strumieni rzędu gigabitów na sekundę stosuje się wbudowane w nowoczesne układy transceivery SERDES, które serializują dane równoległe i nadają je po pojedynczej parze różnicowej z przepływnościami sięgającymi dziś dziesiątek Gb/s na kanał, z wbudowanym kodowaniem i odzyskiwaniem zegara z danych. Wybór standardu to zawsze kompromis między szybkością, poborem mocy, złożonością i odpornością. Co ważne: zwykły mikrokontroler udostępnia na pinach logikę single-ended; wyjścia różnicowe i SERDES to domena układów FPGA, o których mowa w kolejnym artykule.4

Płytka to też układ: linie transmisyjne, odbicia i terminacja

Druga, równie ważna lekcja brzmi: nie chodzi tylko o szybkość układu, ale o całą drogę sygnału. Przy nanosekundach ścieżka na płytce przestaje być „kawałkiem drutu" i staje się linią transmisyjną o określonej impedancji falowej. Kluczowa jest tu prędkość propagacji sygnału: w laminacie FR4 fala elektromagnetyczna biegnie wolniej niż w próżni, z prędkością odpowiadającą mniej więcej 15 cm na nanosekundę (czyli około 6 ps na milimetr ścieżki). Oznacza to, że już kilkucentymetrowa ścieżka wprowadza opóźnienie porównywalne z nanosekundowym zboczem. Stąd praktyczna reguła: jeśli długość ścieżki przekracza około 2 cale na każdą nanosekundę czasu narastania, należy traktować ją jak linię transmisyjną.

Impedancja charakterystyczna linii zależy od geometrii (szerokości ścieżki, grubości i stałej dielektrycznej laminatu, odległości od płaszczyzny masy). W praktyce projektuje się dwa najpopularniejsze typy: mikropasek (microstrip, ścieżka na powierzchni nad płaszczyzną masy) i linię paskową (stripline, ścieżka między dwiema płaszczyznami masy). Typowo celuje się w 50 Ω dla połączeń pojedynczych i 100 Ω dla par różnicowych. Jeśli na końcu linii impedancja obciążenia nie jest dopasowana, część energii odbija się i wraca, powodując dzwonienie i przeregulowania. Wielkość odbicia opisuje współczynnik Γ = (Z_L − Z_0)/(Z_L + Z_0), więc otwarty koniec (Z_L → ∞) odbija prawie całość sygnału, a zwarcie (Z_L = 0) odbija go z odwróconą fazą. Lekarstwem jest terminacja: szeregowa przy nadajniku (rezystor dopasowujący impedancję wyjścia do linii), równoległa przy odbiorniku (rezystor do masy lub zasilania), albo dzielnik Thevenina. Do tego dochodzą mniej oczywiste zjawiska: ground bounce i jednoczesne przełączanie wielu wyjść (SSN, simultaneous switching noise) potrafią chwilowo „podnieść" lokalną masę, a źle poprowadzona ścieżka powrotu prądu (np. przerwana przez przelotkę albo szczelinę w płaszczyźnie masy) drastycznie pogarsza integralność sygnału. Dlatego w szybkim PCB dba się o ciągłą płaszczyznę masy, krótką pętlę prądu powrotnego i unikanie nagłych zmian geometrii. Te zasady opisuje cała dziedzina projektowania szybkich obwodów drukowanych.6

Dlaczego 80 lat temu to była granica techniki

Dlaczego więc osiemdziesiąt lat temu sterowanie nanosekundami było tak trudne, skoro dziś wydaje się rutyną? Bo nie istniał żaden z filarów, na których dziś stoimy. Nie było szybkiej elektroniki półprzewodnikowej — tranzystor wynaleziono dopiero w 1947 roku, już po Hiroszimie i Nagasaki, więc cała impulsowa elektronika Projektu Manhattan opierała się na lampach próżniowych, tyratronach i iskiernikach. Najszybsze przełączanie wysokiego napięcia realizowały później specjalizowane lampy próżniowe wyzwalane (krytrony i sprytrony), które na długo stały się jednym z symboli technologii broni jądrowej i objęto je ścisłą kontrolą eksportu.

Nie było też precyzyjnych, niskojitterowych źródeł czasu w dzisiejszym rozumieniu. Nie było wreszcie narzędzi pomiarowych o odpowiednim paśmie: oscyloskopy katodowe tamtej epoki ledwie sięgały pojedynczych megaherców, więc najszybsze zjawiska rejestrowano metodami pośrednimi. Stosowano kamery z wirującym lustrem, technikę smużenia (streak camera), w której obraz „rozciąga się" w czasie wzdłuż kliszy, oraz błyskową radiografię rentgenowską do zaglądania w głąb nieprzezroczystej, implodującej geometrii. W tych warunkach uzyskanie jednoczesności wielu detonatorów EBW z rozrzutem rzędu pojedynczych nanosekund było osiągnięciem na samej granicy ówczesnej techniki.

Rozwiązaniem nie był „szybki procesor", lecz sprytna architektura sprzętowa: jeden potężny impuls wysokiego napięcia z X-Unitu, rozdzielony przełącznikiem iskrowym do wielu identycznych kanałów o dopasowanych długościach, tak aby fala dotarła do wszystkich soczewek wybuchowych niemal równocześnie. Większy rozjazd zniszczyłby symetrię zbieżnej fali uderzeniowej i obniżył albo zupełnie zniweczył efektywność implozji, prowadząc w skrajnym przypadku do predetonacji albo niewypału (fizzle). To, co dziś robi pojedynczy układ scalony za kilkadziesiąt złotych, wtedy wymagało osobnej, tajnej i kosztownej gałęzi inżynierii impulsowej.1,2

Ten kontrast jest właściwie morałem całego artykułu. Współczesny student, który chce wytworzyć precyzyjny, nanosekundowy impuls, sięga po płytkę za kilkadziesiąt lub kilkaset złotych, programuje ją w wygodnym środowisku i weryfikuje wynik oscyloskopem o paśmie kilku gigaherców. Inżynier z Los Alamos musiał ten sam efekt wyrwać naturze gołymi rękami: konstruując własne lampy, własne źródła impulsu, własne metody pomiaru i własną teorię tego, co się dzieje, gdy energia płynie przez układ szybciej, niż dało się to wówczas zobaczyć. Demokratyzacja szybkiej elektroniki — przejście od tajnej technologii zbrojeniowej do katalogowego modułu — jest jednym z najbardziej niedocenianych skutków rozwoju półprzewodników. Kolejne części cyklu pokazują, że dotyczy to nie tylko sygnałów logicznych, ale też szybkiego przełączania mocy i wysokonapięciowych pulserów.

Arduino: standard, który jest za wolny

Skoro wiadomo już, czego potrzeba, można zapytać: od czego zacząć dzisiaj? Naturalnym punktem wyjścia jest Arduino. To otwarta platforma złożona z prostej płytki z mikrokontrolerem oraz wyjątkowo przystępnego środowiska programistycznego. Klasyczne Arduino Uno opiera się na 8-bitowym mikrokontrolerze ATmega328P z rodziny AVR, taktowanym zegarem 16 MHz. Architektura AVR jest typu RISC i wykonuje większość instrukcji w jednym takcie, co jak na 8-bitowy układ jest zaletą. Arduino stało się de facto standardem prototypowania mało wymagającej elektroniki: czujników, silników krokowych, wyświetlaczy, automatyki domowej, prostych robotów. Jego prawdziwą siłą nie są parametry, lecz ekosystem: ogromna społeczność, tysiące gotowych bibliotek na niemal każdy peryferyjny układ, mnóstwo materiałów edukacyjnych i bardzo niska bariera wejścia. Dla nauki podstaw elektroniki cyfrowej trudno o lepszy start.5

`Arduino Uno` z 8-bitowym mikrokontrolerem `ATmega328P` (`16 MHz`). To standard prototypowania prostej elektroniki, ale jego zegar i architektura wykluczają deterministyczne przełączanie pinów co kilka nanosekund. Zdjęcie: Wikimedia Commons, *Arduino Uno - R3*
`Arduino Uno` z 8-bitowym mikrokontrolerem `ATmega328P` (`16 MHz`). To standard prototypowania prostej elektroniki, ale jego zegar i architektura wykluczają deterministyczne przełączanie pinów co kilka nanosekund. Zdjęcie: Wikimedia Commons, *Arduino Uno - R3*

Problem w tym, że do nanosekund Arduino jest zdecydowanie za wolne, i to z kilku niezależnych powodów naraz. Po pierwsze, zegar. Przy 16 MHz pojedynczy takt trwa 62,5 ns — czyli już sam jeden cykl maszynowy jest kilkadziesiąt razy dłuższy niż interesująca nas skala. Po drugie, narzut programowy. Wygodna, „przyjazna" funkcja digitalWrite() wykonuje pod spodem mnóstwo pracy: sprawdza numer pinu, mapuje go na rejestr i bit, obsługuje ewentualne wyłączenie kanału PWM, kontroluje stan przerwań. W rezultacie pojedyncze wywołanie digitalWrite() zajmuje rzędu kilku mikrosekund — czyli tysiące nanosekund. Po trzecie, nawet jeśli ominiemy biblioteki i zapiszemy bezpośrednio do rejestru portu (np. PORTB ^= (1 << PB0)), jedna taka operacja to wciąż kilka taktów, więc maksymalne przełączanie pinu osiągniemy rzędu pojedynczych megaherców, co daje zbocza i odstępy mierzone w setkach nanosekund, a nie w pojedynczych. Po czwarte wreszcie, brak twardego determinizmu: jeśli w tle działają przerwania (a działają, choćby od licznika millis()), to moment wykonania naszej instrukcji „pływa", wprowadzając jitter nie do zaakceptowania w reżimie nanosekundowym. Arduino świetnie nadaje się do nauki i do zadań wolnych, ale fizycznie nie jest w stanie wejść w świat pojedynczych nanosekund — i nie jest to wada konstrukcyjna, lecz po prostu inna liga zastosowań.5

Płytka stykowa kontra nanosekundy

Do tego dochodzi sprawa montażu, o której początkujący często zapomina, a która potrafi pogrzebać projekt nawet z szybkim układem. Typowy zestaw Arduino buduje się na płytce stykowej i łączy przewodami Dupont. Przy sygnałach wolnych to wygodne i całkowicie wystarczające. Przy nanosekundach staje się jednak źródłem katastrofy, bo takie połączenia mają przypadkową, niekontrolowaną impedancję, znaczną indukcyjność i pojemność pasożytniczą. Długi przewód Dupont zaczyna działać jednocześnie jak antena (wypromieniowuje sygnał i zbiera zakłócenia) i jak źle zakończona linia transmisyjna (odbija sygnał tam i z powrotem). Styki płytki stykowej dokładają własne pojemności i niepewne, zmieniające się w czasie kontakty. Efektem są zbocza rozmyte nie do poznania, dzwonienie i przesłuchy między sąsiednimi liniami, a często też przypadkowe, trudne do zdiagnozowania błędy. Dlatego w elektronice nanosekundowej rezygnuje się z płytek stykowych na rzecz płytek drukowanych o kontrolowanej impedancji, ze złączami SMA/MMCX/coax i krótkimi, dopasowanymi połączeniami. To pierwsza praktyczna granica, na którą trafia każdy, kto próbuje „przyspieszyć Arduino" bez zmiany sposobu montażu.6

Płytka stykowa z przewodami Dupont — wygodna do nauki, ale przy sygnałach nanosekundowych jej długie, niekontrolowane impedancyjnie połączenia działają jak anteny i źle zakończone linie transmisyjne, rozmywając zbocza. Zdjęcie: Wikimedia Commons, *400 points breadboard*
Płytka stykowa z przewodami Dupont — wygodna do nauki, ale przy sygnałach nanosekundowych jej długie, niekontrolowane impedancyjnie połączenia działają jak anteny i źle zakończone linie transmisyjne, rozmywając zbocza. Zdjęcie: Wikimedia Commons, *400 points breadboard*

Krok wyżej: szybkie mikrokontrolery klasy Teensy

Czy między „wolnym Arduino" a „ciężkim FPGA" jest coś pośredniego? Tak, i to bardzo dużo. Najprostszym skokiem jakościowym jest sięgnięcie po szybki mikrokontroler, który zachowuje wygodny ekosystem Arduino, ale ma radykalnie lepsze parametry. Sztandarowym przykładem jest Teensy 4.x firmy PJRC. Teensy 4.1 opiera się na układzie NXP i.MX RT1062 — to tak zwany procesor „crossover", łączący wydajność aplikacyjnego procesora z prostotą i determinizmem mikrokontrolera. W sercu ma rdzeń ARM Cortex-M7 taktowany 600 MHz. To już zupełnie inna klasa: pojedynczy takt trwa tu około 1,67 ns, a rdzeń Cortex-M7 jest superskalarny i dual-issue, co oznacza, że w jednym takcie może wykonać dwie instrukcje. Co więcej, układ ma pamięć ściśle sprzężoną z rdzeniem (TCM) o dostępie jednocyklowym oraz cache, co eliminuje typowe dla wolniejszych mikrokontrolerów opóźnienia dostępu do pamięci.

Nazwa „crossover" nie jest marketingiem: i.MX RT1062 ma wydajność i peryferia procesora aplikacyjnego (taktowanie setek MHz, bogate interfejsy), ale uruchamia kod wprost z pamięci, bez systemu operacyjnego i bez nieprzewidywalności dużego procesora z pamięcią wirtualną. To czyni go znacznie bardziej deterministycznym niż „komputerek" pokroju Raspberry Pi, a zarazem nieporównanie szybszym niż klasyczny mikrokontroler. Dla osoby przyzwyczajonej do Arduino oznacza to skok wydajności o dwa rzędy wielkości przy zachowaniu tego samego, znajomego sposobu programowania — bez konieczności uczenia się od nowa architektury czy narzędzi.

Teensy 4.1 udostępnia 55 wyprowadzeń cyfrowych i — co istotne dla naszego tematu — bogaty zestaw sprzętowych peryferiów czasowych. Ma zaawansowane generatory PWM (FlexPWM), kanały DMA pozwalające przerzucać dane bez udziału rdzenia oraz wyjątkowo elastyczny blok FlexIO, który potrafi sprzętowo emulować rozmaite szybkie interfejsy i generować własne, niestandardowe przebiegi czasowe. To właśnie te bloki, a nie samo szybkie wykonywanie kodu, pozwalają wytwarzać precyzyjne sygnały bez angażowania rdzenia w każdą zmianę stanu. Programuje się to wszystko z poziomu Arduino IDE przez dodatek Teensyduino, więc osoba znająca Arduino przesiada się niemal bezboleśnie. W praktyce przełączanie pinów wchodzi tu już w zakres dziesiątek megaherców. To wciąż nie jest świat pojedynczych nanosekund z twardym determinizmem na wielu kanałach, ale do impulsów i opóźnień rzędu kilkudziesięciu nanosekund Teensy bywa w zupełności wystarczające — a kosztuje tyle co lepszy obiad.7

`Teensy 4.1` — mikrokontroler ARM `Cortex-M7` taktowany `600 MHz`, kompatybilny z Arduino IDE. Przy takcie `~1,67 ns`, rdzeniu dual-issue i sprzętowych blokach FlexPWM/FlexIO przełączanie pinów wchodzi w zakres dziesiątek MHz, co dla wielu zadań „prawie nanosekundowych" już wystarcza. Zdjęcie: Wikimedia Commons, *Teensy 4.1*
`Teensy 4.1` — mikrokontroler ARM `Cortex-M7` taktowany `600 MHz`, kompatybilny z Arduino IDE. Przy takcie `~1,67 ns`, rdzeniu dual-issue i sprzętowych blokach FlexPWM/FlexIO przełączanie pinów wchodzi w zakres dziesiątek MHz, co dla wielu zadań „prawie nanosekundowych" już wystarcza. Zdjęcie: Wikimedia Commons, *Teensy 4.1*

Trzeba jednak uczciwie dodać, że nawet Teensy ma ograniczenia wynikające z samej natury mikrokontrolera. Obecność cache, choć przyspiesza typową pracę, wprowadza pewną zmienność czasu wykonania (raz dane są w cache, raz trzeba je sprowadzić z wolniejszej pamięci), co dla zastosowań wymagających absolutnego determinizmu bywa kłopotliwe. Podobnie przerwania i ewentualny system operacyjny czasu rzeczywistego dokładają jitter. Sztuczki w rodzaju wyłączania przerwań na czas krytycznej sekwencji, umieszczania kodu i danych w TCM albo generowania przebiegu wyłącznie sprzętowym timerem czy FlexIO pomagają, ale pokazują też, że zbliżamy się do granicy modelu „program w pętli". Gdy potrzebujemy nie jednego, lecz wielu idealnie zsynchronizowanych kanałów, model programowy zaczyna trzeszczeć.7

STM32N6 i sztuczka z timerem wysokiej rozdzielczości

Kolejny szczebel to nowoczesne mikrokontrolery o jeszcze wyższym zegarze, jak rodzina STM32N6 firmy STMicroelectronics. STM32N657 ma rdzeń ARM Cortex-M55 taktowany 800 MHz — to najwyższa częstotliwość rdzenia w całej historii STM32 — wzbogacony o wektorowe rozszerzenie Helium oraz akcelerator sieci neuronowych Neural-ART osiągający do 600 Gops. Te elementy AI są dziś modne, ale z perspektywy szybkiego sterowania liczą się przede wszystkim dwie rzeczy: ten 800 MHz zegar oraz bogate, dojrzałe peryferia czasowe.

STM32 słynie z zaawansowanych timerów, a w niektórych liniach z tak zwanego timera wysokiej rozdzielczości (HRTIM). Dzięki technikom interpolacji opóźnień HRTIM potrafi ustawiać zbocza PWM z krokiem znacznie mniejszym niż jeden takt rdzenia — schodząc do setek, a w sprzyjających warunkach do dziesiątek pikosekund. To pokazuje ważną, powtarzającą się w tym artykule zasadę: prawdziwą rozdzielczość czasową daje nie tyle „szybkie wykonywanie kodu", co dedykowany blok sprzętowy zaprojektowany właśnie do precyzyjnego mierzenia czasu. Rdzeń tylko konfiguruje taki blok i zostawia mu pracę. Cenę za wyższe parametry STM32 płaci się złożonością: nie jest on tak „arduinowo bezbolesny" jak Teensy i wymaga własnego środowiska (STM32CubeIDE, biblioteki HAL, świadoma konfiguracja drzewa zegarów i peryferiów). Koncepcyjnie jest jednak wciąż blisko Arduino — to mikrokontroler programowany w C/C++, a nie układ, w którym trzeba projektować logikę w języku opisu sprzętu.8

Płytka rozwojowa STM32 Nucleo. Rodzina `STM32N6` z rdzeniem `Cortex-M55` taktowanym `800 MHz` to dziś najszybsze mikrokontrolery ST; o realnej rozdzielczości czasowej decydują tu jednak głównie dedykowane bloki sprzętowe (timery HRTIM), a nie samo wykonywanie kodu. Zdjęcie: Wikimedia Commons, *Nucleo-board*
Płytka rozwojowa STM32 Nucleo. Rodzina `STM32N6` z rdzeniem `Cortex-M55` taktowanym `800 MHz` to dziś najszybsze mikrokontrolery ST; o realnej rozdzielczości czasowej decydują tu jednak głównie dedykowane bloki sprzętowe (timery HRTIM), a nie samo wykonywanie kodu. Zdjęcie: Wikimedia Commons, *Nucleo-board*

Trzecia droga: programowalne I/O (PIO) w RP2040

Między „zwykłym mikrokontrolerem" a FPGA istnieje jeszcze jedno, bardzo ciekawe rozwiązanie pośrednie, które warto znać: programowalne bloki wejścia/wyjścia. Najlepiej spopularyzował je układ RP2040 z Raspberry Pi Pico. Jego główne rdzenie to skromne, dwurdzeniowe Cortex-M0+ taktowane 133 MHz, ale prawdziwą perełką są bloki PIO (Programmable I/O). To dwa zespoły po cztery maleńkie maszyny stanów, czyli mikroskopijne, wyspecjalizowane procesory wykonujące własny, prosty zestaw instrukcji synchronicznie z zegarem systemu, jedna instrukcja na takt (czyli co około 7,5 ns przy 133 MHz). Co kluczowe, maszyna stanu PIO działa niezależnie od głównego rdzenia: nie przeszkadzają jej przerwania ani inny kod, więc generuje sygnały deterministycznie, bez jittera typowego dla pętli programowej.

Daje to jakość niedostępną dla klasycznego Arduino: precyzyjne, powtarzalne przebiegi, własne, niestandardowe protokoły szeregowe, dokładne pomiary czasu — wszystko w cenie i prostocie mikrokontrolera. PIO to filozoficznie krok w stronę FPGA (dedykowany sprzęt zamiast pętli), choć wciąż bez pełnej dowolności logiki i z rozdzielczością ograniczoną do pojedynczych taktów (rzędu 7–8 ns), a nie ułamków nanosekundy. Dla bardzo wielu zadań „prawie nanosekundowych" — taktowania wyświetlaczy, sterowania paskami LED, generowania sekwencji wyzwalających — PIO jest jednak strzałem w dziesiątkę i tańszą alternatywą dla FPGA. To dobra ilustracja ogólnej prawidłowości: producenci coraz częściej dokładają do mikrokontrolerów bloki sprzętowe, które przejmują dokładnie te zadania czasowe, w których rdzeń jest beznadziejny.

Minimalny praktyczny zestaw i uczciwy pomiar

Jak w praktyce wygląda układ, który świadomie generuje sygnały w skali 1–5 ns? Sensowna architektura ma pięć elementów. Po pierwsze, generator zegara: stabilny oscylator i syntezer/PLL o jitterze znacznie mniejszym niż budżet czasowy, na przykład rzędu pojedynczych dziesiątek pikosekund. Po drugie, logika sterująca: FPGA do dowolnych sekwencji, prostszy CPLD do zadań trywialnych albo gotowy generator impulsów i opóźnień, gdy nie chcemy pisać logiki. Po trzecie, wyjścia dopasowane do zadania: LVDS/CML albo szybkie bufory logiczne, a poza płytkę najlepiej 50 Ω coax ze złączem SMA. Po czwarte, płytka drukowana: czterowarstwowa lub lepsza, z kontrolowaną impedancją, ciągłą masą, terminacjami i krótkimi połączeniami. Po piąte, pomiar: oscyloskop o paśmie co najmniej 1 GHz dla wolniejszych zboczy, a dla naprawdę nanosekundowych impulsów raczej 2–5 GHz lub więcej.4

Osobnego akapitu wymaga samo sondowanie, bo to tu początkujący najczęściej „kłamią sobie wyniki". Zwykła sonda pasywna 10:1 dokłada do badanego węzła pojemność rzędu kilkunastu pikofaradów, a jej długa „masa-krokodylek" — sporą indukcyjność. Przy nanosekundach ta pojemność i indukcyjność tworzą obwód rezonansowy, który dorzuca do oscylogramu dzwonienie i przeregulowania, których w rzeczywistości nie ma — albo wręcz tłumi zbocze, które jest. Dlatego do szybkich pomiarów używa się sond aktywnych o małej pojemności wejściowej, albo prowadzi sygnał wprost torem 50 Ω (coax/SMA) do wejścia 50 Ω oscyloskopu, eliminując sondę w ogóle. Masę sondy trzeba podłączać najkrótszą możliwą drogą (sprężynka, a nie krokodylek), a pasmo sondy musi być co najmniej takie jak pasmo oscyloskopu. Bez tego nawet najlepszy przyrząd pokaże artefakty zamiast prawdy o sygnale. Te same zasady, w prymitywniejszej formie, ograniczały aparaturę ery atomowej.3

Gdzie naprawdę kończy się mikrokontroler

Warto w tym miejscu uczciwie i twardo postawić granicę możliwości mikrokontrolera. Pomocne jest zestawienie omawianych platform w jednej tabeli — pokazuje ono, że wybór nie jest „lepszy/gorszy", lecz „właściwy do danego zadania":

Platforma Zegar Realne przełączanie pinu Determinizm Próg wejścia
Arduino Uno (ATmega328P) 16 MHz ~1 MHz (setki ns) słaby bardzo niski
RP2040 z PIO 133 MHz kilkadziesiąt MHz bardzo dobry niski
Teensy 4.1 (Cortex-M7) 600 MHz dziesiątki MHz dobry niski
STM32N6 (Cortex-M55) 800 MHz dziesiątki MHz + HRTIM dobry średni
FPGA logika 100–500 MHz wiele kanałów, pojedyncze ns doskonały wysoki

Nawet układ taktowany 800 MHz generuje sygnały zasadniczo programowo: rdzeń wykonuje instrukcje jedna po drugiej, a w tle czyhają przerwania. Daje to znakomite rezultaty dla zdarzeń odległych o dziesiątki czy setki nanosekund, gdzie kilka taktów narzutu nie robi różnicy. Ale gdy potrzebujemy wielu równoległych linii przełączanych synchronicznie z dokładnością do pojedynczej nanosekundy, albo długich, deterministycznych sekwencji bez jittera, programowy model przestaje wystarczać. Można ten problem częściowo obejść, przerzucając pracę na sprzętowe peryferia — i właśnie dlatego producenci publikują noty aplikacyjne pokazujące, jak uzyskać krok opóźnienia PWM poniżej nanosekundy dzięki dedykowanym blokom czasowym. Ale wtedy faktycznie korzystamy już z wyspecjalizowanej logiki sprzętowej, a nie z „pętli w C".9

To zaś jest dokładnie filozofia, którą do skrajności doprowadza FPGA: zamiast wykonywać kod, budujemy sprzęt robiący dokładnie to, czego chcemy, w pełni równolegle i synchronicznie z zegarem. Innymi słowy: Teensy i STM32N6 sprawiają, że granica nanosekund jest „blisko". Dla bardzo wielu realnych zastosowań — wyzwalania pomiarów, generowania pojedynczych impulsów, sterowania umiarkowanie szybkimi układami mocy, obsługi szybkich interfejsów cyfrowych — okazują się one zupełnie wystarczające, a przy tym znacznie tańsze i prostsze w użyciu niż FPGA. Reguła praktyczna brzmi: zaczynaj od najprostszego narzędzia, które dowiezie wymaganą rozdzielczość, i przesiadaj się wyżej dopiero wtedy, gdy twarda arytmetyka zegara udowodni, że trzeba. Dopiero gdy zależy nam jednocześnie na twardym determinizmie, wielu równoległych kanałach i pełnej kontroli czasowej w pojedynczych nanosekundach, sensowne staje się przejście do układów FPGA i modułów rozwojowych, którym poświęcony jest kolejny artykuł cyklu.7,8

Ćwiczenia praktyczne

Pierwsze ćwiczenie powinno polegać na oszacowaniu, czy dana platforma w ogóle „dowiezie" wymaganą rozdzielczość czasową. Należy:

  1. przyjąć zegar Arduino Uno równy 16 MHz i policzyć czas pojedynczego taktu,
  2. założyć, że przełączenie pinu zajmuje kilka taktów, i oszacować najkrótszy realny okres sygnału,
  3. powtórzyć rachunek dla Teensy 4.1 (600 MHz) i STM32N657 (800 MHz),
  4. porównać wyniki z wymaganiem „krok 1 ns",
  5. wskazać, na którym etapie konieczne staje się przejście do FPGA.

Celem jest pokazanie, że wybór platformy wynika z twardej arytmetyki zegara, a nie z marketingu.

Drugie ćwiczenie dotyczy toru sygnałowego. Należy:

  1. przyjąć czas narastania t_r = 1 ns i policzyć minimalne pasmo ze wzoru BW ≈ 0,35 / t_r,
  2. powtórzyć dla t_r = 200 ps,
  3. korzystając z reguły ~2 cale / ns, oszacować długość ścieżki, powyżej której trzeba ją traktować jak linię transmisyjną,
  4. ocenić, czy montaż na płytce stykowej z przewodami Dupont ma szansę zadziałać,
  5. wymienić środki zaradcze (kontrolowana impedancja, terminacja, krótka pętla masy).

To ćwiczenie ma uświadomić, że przy nanosekundach geometria połączeń bywa ważniejsza niż sam układ.

Trzecie ćwiczenie dotyczy błędu pomiaru wynikającego z pasma przyrządu. Należy:

  1. przyjąć sygnał o czasie narastania 1 ns i oscyloskop o czasie narastania 1 ns,
  2. policzyć zmierzony czas narastania ze wzoru t_zmierzony ≈ √(t_sygnału² + t_toru²),
  3. wyznaczyć błąd względny pomiaru,
  4. dobrać czas narastania oscyloskopu tak, aby błąd spadł poniżej 5%,
  5. przeliczyć ten czas na wymagane pasmo przyrządu.

To ćwiczenie pokazuje, dlaczego do nanosekundowych zboczy trzeba przyrządu o paśmie kilku GHz.

Przejdź do ćwiczenia interaktywnego

Powiązane artykuły

Naturalnym dalszym ciągiem są FPGA i moduły rozwojowe do sygnałów nanosekundowych, a potem dwa teksty o przełączaniu mocy: szybkie przełączanie wysokich napięć od modułów MOSFET do GaN i SiC oraz gotowe pulsery wysokiego napięcia i integracja z FPGA. Po kontekst historyczny warto sięgnąć do Spark Gap Switch i X-Unit, detonatorów EBW oraz elektroniki pomiarowej ery atomowej.