Czy rzeczywiście potrafisz złamać układ FPGA, źle go programując?

26

Czy rzeczywiście potrafisz złamać układ FPGA, programując go niepoprawnie?

Naprawdę jestem facetem od oprogramowania. Nie jest tajemnicą, że jeśli twoje oprogramowanie jest złe, możesz zniszczyć wszystkie ważne dane, a może nawet zawiesić całą maszynę. Ale naprawdę trudno jest fizycznie uszkodzić komputer przez samo jego zaprogramowanie.

(Niekończące się plotki na temat instrukcji Halt-and-Catch-Fire, lub możliwości ponownego flashowania oprogramowania układowego w celu zamurowania płyty głównej lub programowania nieprawidłowych wartości na karcie graficznej w celu usmażenia monitora. Ale wszystko wydaje się dokładnie takie : pogłoski. A wszystko o dawno przestarzałym sprzęcie. Wydaje się naprawdę bardzo trudne do złamania współczesnego sprzętu komputerowego przy złym programowaniu.)

Dzięki FPGA (przynajmniej nominalnie) łączysz poszczególne obwody razem. Wydaje się całkowicie prawdopodobne, że w przypadku pomyłki mogą wystąpić szkody fizyczne.

Na przykład możesz napisać VHDL z żądaniem powiązania dwóch wyjść. Jeśli wyprowadzą różne poziomy logiczne, wyobrażam sobie, że prawdopodobnie coś usmaży. (Mam nadzieję, że twoje narzędzie do syntezy krzyczy na ciebie, aby tego nie robić ... ale nie wiem, czy takie narzędzia faktycznie implementują ten poziom sprawdzania błędów).

Wydaje się również całkiem możliwe, aby przypadkowo wybrać niewłaściwy model FPGA w narzędziu do syntezy, co kończy się próbą zaprogramowania układu za pomocą strumienia bitów przeznaczonego dla zupełnie innego modelu. Nie wiem, co by to zrobiło, ale podejrzewam, że byłoby to „złe”.

W tym przypadku zdecydowanie można niepoprawnie podłączyć układ FPGA do reszty obwodu. Na przykład, jeśli zepsujesz numery pinów, możesz skończyć z płytką próbującą wbić pin we / wy, którą sama FPGA również próbuje prowadzić. Czy styki we / wy zazwyczaj mają jakąkolwiek „ochronę” przed takim błędem? A może chip po prostu się usmaży?

MathematicalOrchid
źródło
3
Niektóre układy FPGA mają funkcje bezpieczeństwa, które pozwalają tylko ładować zaszyfrowany i podpisany strumień bitów z pamięci zewnętrznej. Klucze są przechowywane w FPGA i programowalne tylko raz. Jeśli przypadkowo włączysz taką funkcję lub zgubisz klucze, masz zasadniczo „zamurowany” układ FPGA.
filo
2
„Ale naprawdę ciężko jest fizycznie uszkodzić komputer przez samo programowanie”. tak myślisz? Dawno, dawno temu, to sterownik musiał kontrolować głowice dysków twardych - co oznacza, że ​​wirus może grać z okazji urodzin na twoich dyskach twardych. BIOS kontroluje wentylatory - pozwalając mu na uszkodzenie przez przegrzanie (może być wbudowana pewna ochrona, ale jeśli podgrzejesz ją wystarczająco szybko, nie będzie można jej zapisać). BIOS może nawet zdecydować się na umieszczenie 20 V w twoim procesorze .... Oprogramowanie może bardzo łatwo być odpowiedzialne za uszkodzenie komputerów, jeśli wiesz, z jakim oprogramowaniem majstrować.
UKMonkey
2
@UKMonkey youtube.com/watch?v=CsQd2n99zS4
Joshua
2
@UKMonkey W zależności od konfiguracji systemu jestem pewien, że można stopić dowolny procesor przy wystarczającym wysiłku. Większość komputerów - AFAIK cokolwiek, co nie jest wyłącznie biernie chłodzone - będzie miało sposób na kontrolowanie układu chłodzenia. Możesz wyłączyć dławienie termiczne, kolejną linię obrony, poprzez BIOS, co oznacza, że ​​można to zrobić programowo przez jądro. W tym konkretnym przypadku musiałoby to być celowe, ale jest to zdecydowanie możliwe.
Pozew funduszu Moniki

Odpowiedzi:

31

Wydaje się również całkiem możliwe, aby przypadkowo wybrać niewłaściwy model FPGA w narzędziu do syntezy, co kończy się próbą zaprogramowania układu za pomocą strumienia bitów przeznaczonego dla zupełnie innego modelu.

Zazwyczaj oprogramowanie do programowania sprawdza numer programowanej części i odmawia programowania w strumieniu bitów przeznaczonym dla innego modelu FPGA.

Sama część również generalnie odmawia uruchomienia, jeśli jest zaprogramowana ze strumieniem bitów, który nie jest dokładnie prawidłowej długości (i bardzo rzadko zdarza się, aby strumienie bitów dla różnych układów miały tę samą długość).

zdecydowanie możesz niepoprawnie podłączyć układ FPGA do reszty obwodu. Na przykład, jeśli zepsujesz numery pinów, możesz skończyć z płytką próbującą wbić pin we / wy, którą sama FPGA również próbuje prowadzić.

Jest to najbardziej prawdopodobny sposób uszkodzenia FPGA przy niewłaściwym programowaniu.

Innym sposobem może być zaprogramowanie projektu bardzo wymagającego zasobów i uruchomienie go z wysoką częstotliwością (tak, aby zużywa się dużą moc), a następnie uruchomienie go na FPGA bez odpowiedniego radiatora.

Czy styki we / wy zazwyczaj mają jakąkolwiek „ochronę” przed takim błędem? A może chip po prostu się usmaży?

Piny wyjściowe „często” przetrwają zwarcie przez kilka sekund lub nawet minut. Ale nic nie jest gwarantowane.

The Photon
źródło
1
Ciekawy. Czy zwykle FPGA wymaga aktywnego chłodzenia? Och, przypuszczam, że to samo w sobie całe pytanie. (I myślę, że odpowiedź zależy od wielu rzeczy - na przykład od tego, czy kupiłeś FPGA 15 GBP czy 15 000 GBP!)
MathematicalOrchid
4
@MathematicalOrchid, niekoniecznie aktywne chłodzenie, ale radiatory i wymuszone powietrze są dość powszechne. Dostawcy FPGA zwykle dostarczają bardzo złożony arkusz kalkulacyjny, który pomaga określić (na podstawie części, projektu, częstotliwości zegara itp.), Jak duży jest radiator i jak duży wentylator jest potrzebny.
Photon
3
@MathematicalOrchid Użyłem FPGA jako licznika częstotliwości do pomiaru fal prostokątnych do 250 MHz. To wymaga chłodzenia jak zmierzyć zegarem 220 MHz, lecz utworzenia właściwego chłodzenia właśnie wykonane z pewnością nie zmierzyć więcej niż 5 sekund. Zużywał 5 W @ 220 MHz, a IC miał około 2 cm ^ 2. Robiło się bardzo gorąco bardzo szybko.
Harry Svensson
@HarrySvensson To wydaje się jak szalona ilość ciepła dla licznika częstotliwości.
user253751
1
@HarrySvensson To nadal szalone, że powinno to zająć 5 watów.
user253751
20

Z kilkoma odnotowanymi wyjątkami, narzędzia zazwyczaj nie dają dostępu do rzeczywistych prymitywów krzemowych, więc inżynierowi końcowemu trudno jest załadować elektrycznie nieprawidłowy projekt * do układu FPGA opartego na pamięci SRAM, chyba że przypadkowo odkryje narzędzie pluskwa.

Możliwe jest, że niektóre układy FPGA oparte na pamięci flash mogą zostać ponownie zaprogramowane przez niektóre nieprawidłowe obciążenia. Układy FPGA OTP są domyślnie „uszkadzane” nawet przez prawidłowe obciążenie konfiguracji, ponieważ nigdy nie można tego zmienić.

Ostatecznie to, co jest najbliższe temu, co wydaje się pytać, i na przykład HCF, byłoby konfiguracją, która wytwarzała niedopuszczalne naprężenia termiczne . Zużycie energii jest dość bezpośrednio zależne od częstotliwości zegara i aktywności * wykorzystanej logiki, więc jeśli możesz zmusić narzędzia do bezużytecznego przełączania większości flip-flopów na chipie przy maksymalnym zegarze (istnieją sposoby ...), możesz produkować całkiem skuteczny grzejnik, który przewyższałby większość systemów chłodzenia do zwykłego użytku. To tylko pytanie, czy coś ochronnie wyłącza to przed ugotowaniem. I oczywiście w narzędziach znajdują się modele szacowania mocy, które prawdopodobnie są dość przewidywalne, jeśli nie okłamujesz ich na temat dostarczonego sygnału zegara.

(* Istnieje jedna interesująca klasa problemu elektrycznego, który nie jest błędem, który możesz wywołać, okłamując narzędzia, co niekoniecznie jest fizycznie destrukcyjne, ale wciąż zaskakujące. Jeśli karmisz zegarem innym, niż powiedziałeś, lub po prostu niestabilnym, możesz naruszyć ustawienia adresu w synchronicznych blokowych komórkach RAM i zrobić coś zgodnie z ich zwarciem i uszkodzeniem ich zawartości - możesz więc na przykład zobaczyć zawartość czegoś, co w projekcie zostało oznaczone jako ROM, zmieniając się w czasie wykonywania, po prostu próbując do zapoznania się ze złym zegara. Ale nie wierzę, to jest fizycznie niszcząca)

Chris Stratton
źródło
2
Możesz połączyć każdy flop z falownikiem pomiędzy nimi i wygenerować dużo ciepła. Czy jakieś układy FPGA mają obwody ochronne do modulowania zegara, jeśli zrobią się zbyt gorące? Drzewo zegarowe jest często poza ich kontrolą.
Ben Jackson
@BenJackson: Czy drzewo zegarowe nie jest mniej lub bardziej sztywno podłączone, a każdy element logiczny może wybierać spośród kilku różnych drzew? Samo źródło zegara może być poza ich kontrolą, ale mogą po prostu wyłączyć bufory drzewa zegara, jeśli zrobi się zbyt gorąco. Albo myślę, że mogliby wyłączyć dostawy.
Michael
5

Najbardziej prawdopodobne jest naruszenie aktualnej oceny GPIO poprzez wbicie szpilki, która jest już prowadzona. Niektóre układy FPGA mają ustawialne ograniczenia prądu lub zmienne sterowniki wyjściowe, więc może to pomóc / zranić cię, jeśli nie zrobisz poprawnie mapy portu. Mimo to powinieneś dokładnie sprawdzić listę portów przed programowaniem, ponieważ błędy, takie jak zamiana pinów, mogą zająć wiele godzin, najlepiej jest wyprzedzić błędy i dokładnie wiedzieć, co powinno zrobić oprogramowanie układowe. (chyba że lubisz dreszczyk emocji związany ze znalezieniem błędu)

Same HDL zwykle nie pozwalają na podłączenie dwóch wyjść do tego samego przewodu i przestają syntezować się i powodują naprawienie błędu, jeśli masz kod, który to robi.

Jednym z miejsc, które mogą powodować problemy, są porty dwukierunkowe, ale powinieneś mieć na nich oporniki ograniczające prąd.

Skok napięcia
źródło
Ponownie „ podłącz dwa wyjścia do tego samego przewodu ”: Czy nie możesz połączyć wyjść dwóch buforów trójstanowych razem, jeśli obiecujesz, że narzędzie do syntezy nigdy nie włączy obu jednocześnie? Czy narzędzie może sprawdzić, czy dotrzymujesz obietnicy, nawet jeśli logika prowadząca do „włączenia” buforów jest bardzo skomplikowana?
Edgar Bonet
@EdgarBonet, możesz w ten sposób powodować konflikty. Nie ma wymogu, aby logiczne wymuszanie wyjścia umożliwiało wzajemne wykluczanie się, jeśli jakaś logika (która może obejmować logikę stanową i / lub sprzęt / oprogramowanie zewnętrzne w stosunku do FPGA) powoduje aktywację dwóch sprzecznych OE, nic nie może tego zatrzymać, chyba że logika OE została wyraźnie zakodowana, aby temu zapobiec.
Rodney
@EdgarBonet Możesz, ale zwykle przewody testowe są zewnętrzne w stosunku do FPGA, ponieważ potrzebujesz sterownika / urządzenia nadawczo-odbiorczego, które znajdują się w GPIO. Nigdy nie projektowałem z trójzębem w FPGA i nie sądzę, że sprzęt w FPGA obsługuje trzy stany. Możesz włączyć dwa bufory jednocześnie, fizyczny projekt powinien uniemożliwić ich spalenie.
Skok napięcia
4

Podobnie jak w przypadku mikrokontrolerów, zawsze można przekroczyć maksymalny całkowity prąd na bank IO, pobierając maksymalny prąd (lub więcej) z każdego pinu. O ile FPGA nie ma wbudowanej ochrony przed taką sytuacją, może to spowodować uszkodzenie.

Inną możliwością jest wykonanie pętli kombinatorycznej, która albo przechodzi okresowo metastabilność, albo oscyluje z dużo większą częstotliwością, niż tkanina FPGA jest przystosowana (kilka GHz). Spowoduje to bardzo lokalne przegrzanie, które może spowodować fizyczne uszkodzenie, zanim rozpocznie się ochrona termiczna obejmująca cały chip. To znaczy, zakładając, że istnieje taka ochrona: jeśli przegrzanie nie doprowadzi do wyłączenia, możesz po prostu wymyślić bardzo energochłonny obwód i pozwól mu pracować z niewystarczającym chłodzeniem.

Dynamiczna rekonfiguracja może również obejść zabezpieczenia przed nieprawidłową konfiguracją wewnętrznych operacji podstawowych, które mogą być wymuszone przez narzędzia programistyczne w przypadku konfiguracji statycznej. Na przykład, możesz skonfigurować PLL w sposób, który przekracza jego maksymalną częstotliwość wewnętrzną, lub zasilić tę samą linię łączącą z dwóch źródeł jednocześnie lub zmusić pin z banku wysokiego napięcia IO do użycia jego niskiego napięcia urządzenia nadawczo-odbiorczego, takiego jak LVDS .

Dmitrij Grigoriew
źródło