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?
Odpowiedzi:
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ść).
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.
Piny wyjściowe „często” przetrwają zwarcie przez kilka sekund lub nawet minut. Ale nic nie jest gwarantowane.
źródło
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)
źródło
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.
źródło
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 .
źródło