Чи можете ви насправді зламати FPGA, неправильно запрограмувавши його?


26

Чи можете ви дійсно зламати FPGA, неправильно запрограмувавши його?

Я справді програмний хлопець. Ні для кого не секрет, що якщо ваше програмне забезпечення неправильне, ви можете знищити всілякі важливі дані та, можливо, навіть розбити всю машину. Але фізично пошкодити комп’ютер фізично просто програмуючи його.

(Існує нескінченний слух інструкції Halt-And-Catch-Fire або про можливість перепрошивання системної мікропрограми, щоб цеглити материнську плату, або запрограмувати неправильні значення на відеокарті, щоб обсмажити ваш монітор. Але все це, здається, саме так : чутки. І все про давно застаріле обладнання. Здається, справді важко зламати сучасне комп'ютерне обладнання з поганим програмуванням.)

З FPGA ви (принаймні номінально) з'єднуєте окремі схеми разом. Здається цілком правдоподібним, що у випадку помилки може статися фізичне пошкодження.

Наприклад, ви можете написати деякі VHDL з проханням пов'язати два виходи. Якщо вони випускають різні рівні логіки, я думаю, що це, можливо, щось б обсмажило. (Я сподіваюся, що ваш інструмент синтезу кричить на вас, щоб цього не робити ... але я не знаю, чи такі інструменти реалізують цей рівень перевірки помилок.)

Також видається цілком можливим випадково вибрати неправильну модель FPGA в інструменті синтезу, і, таким чином, закінчити спробу запрограмувати ваш чіп біт-потоком, призначеним для якоїсь абсолютно іншої моделі. Я не знаю, що це зробить, але я підозрюю, що це було б "погано".

З цього питання ви точно можете підключити чіп FPGA до решти схеми неправильно. Наприклад, якщо ви зіпсуєте номери штифтів, ви можете закінчити, що плата намагається запустити штифт вводу / виводу, який FPGA також намагається керувати. Чи мають штифти вводу-виводу зазвичай "захист" від такої помилки? Або чіп просто обсмажиться?


3
Деякі FPGA мають функції безпеки, які дозволяють завантажувати зашифровані та підписані бітові потоки із зовнішньої пам'яті. Клавіші зберігаються у FPGA та програмуються лише один раз. Якщо ви ввімкнули таку функцію випадково або втратили ключі, у вас по суті є "цегляна" FPGA.
філо

2
"Але фізично пошкодити комп’ютер фізично просто програмуючи його. ти так думаєш? Колись драйвер повинен був контролювати голови жорсткого диска - це означає, що вірус може зіграти з днем ​​народження на ваших жорстких дисках. BIOS контролює вентилятори - дозволяє йому завдати шкоди від перегріву (може бути вбудований якийсь захист, але якщо нагріти його досить швидко, то його неможливо зберегти). BIOS може навіть вирішити спробувати поставити 20 В у ваш процесор .... Програмне забезпечення може дуже легко нести відповідальність за пошкодження комп'ютерів, якщо ви знаєте, з яким програмним забезпеченням рухатися.
UKMonkey



2
@UKMonkey Залежно від того, як налаштована ваша система, я впевнений, що ви можете розплавити будь-який процесор достатньо зусиль. Більшість комп'ютерів - AFAIK, що не є пасивно охолодженим - матимуть можливість керувати системою охолодження. Ви можете відключити термічне дроселювання, іншу лінію захисту, через BIOS, що означає, що ядро ​​це може здійснюватися програмно. У цьому конкретному випадку це повинно бути навмисно, але це, безумовно, можливо.
Фонд позову Моніки

Відповіді:


31

Також видається цілком можливим випадково вибрати неправильну модель FPGA в інструменті синтезу, і, таким чином, закінчити спробу запрограмувати ваш чіп біт-потоком, призначеним для якоїсь абсолютно іншої моделі.

Зазвичай програмне забезпечення буде запитувати частину, яка запрограмована на номер її частини, і відмовляється програмувати в бітовому потоці, призначеному для іншої моделі FPGA.

Сама частина, як правило, відмовляється запускатися, якщо запрограмована з бітовим потоком, який не є точно правильною довжиною (і дуже часто зустрічаються бітові потоки для різних чіпів однакової довжини).

Ви точно можете підключити чіп FPGA до решти схеми неправильно. Наприклад, якщо ви зіпсуєте номери штифтів, ви можете закінчити, що плата намагається запустити штифт вводу / виводу, який FPGA також намагається керувати.

Це найімовірніший спосіб пошкодити FPGA при неправильному програмуванні.

Іншим способом може бути запрограмувати дуже ресурсоємну конструкцію та запустити її на високій частоті (щоб спожити високу потужність), а потім запустити її на FPGA без адекватного тепловідводу.

Чи мають штифти вводу-виводу зазвичай "захист" від такої помилки? Або чіп просто обсмажиться?

Вихідні штифти "часто" переживають стан короткого замикання протягом декількох секунд чи навіть хвилин. Але нічого не гарантується.


1
Цікаво. Чи зазвичай FPGA потребує активного охолодження? О, я вважаю, це ціле питання саме по собі. (І я думаю, що відповідь залежить від багатьох речей - наприклад, ви купили £ 15 або £ 15 000 FPGA!)
MathematicalOrchid

4
@MathematicalOrchid, Не обов'язково активне охолодження, але радіатори і примусове повітря досить поширені. Постачальники FPGA зазвичай надають дуже складну електронну таблицю, яка допоможе визначити (виходячи з частини, конструкції, тактової частоти тощо), наскільки великий радіатор і як потрібен великий вентилятор.
The Photon

3
@MathematicalOrchid Я використовував FPGA як лічильник частот для вимірювання квадратних хвиль до 250 МГц. Це вимагало охолодження, оскільки я вимірював тактову частоту 220 МГц, але замість того, щоб налаштувати належне охолодження, я просто переконався, що не вимірювати більше 5 секунд. Він споживав 5 Вт при 220 МГц, а ІС близько 2 см ^ 2. Дуже швидко нагрілося.
Гаррі Свенссон,

@HarrySvensson Це здається шаленою кількістю тепла для частотного лічильника.
користувач253751

1
@HarrySvensson Це все ще божевільно, що для цього потрібно 5 Вт.
користувач253751

20

За кількома зауваженими винятками, інструменти, як правило, не дають вам доступу до фактичних приміщень кремнію, тому інженеру-кінцевому користувачеві важко завантажити електрично недійсну конструкцію * в FPGA на базі SRAM, за винятком, можливо, випадкового виявлення інструменту помилка

На базі флеш-пам’яті FPGA, можливо, можлива їх перепрограмована шкода певним недійсним навантаженням. OTP FPGA неявно «пошкоджуються» навіть дійсним навантаженням конфігурації, оскільки його ніколи не можна змінити.

Зрештою, те, що найбільше наближається до того, що ви, здається, запитуєте, і до вашого прикладу HCF - це конфігурація, яка спричинила нестерпну теплову напругу. Споживання електроенергії досить безпосередньо обумовлено тактовою частотою та обсягом * активністю використовуваної логіки, тому, якщо ви зможете обдурити інструменти в непотрібному перемиканні більшості фліп-флоп на мікросхемі на максимальний тактовий час (є способи ...), тоді ви можете виробляти досить ефективний обігрівач, який перевершує більшість систем охолодження для звичайного використання. Тоді це лише питання, якщо щось захисно відключить його перед тим, як варити. І звичайно, в інструментах є моделі оцінки потужності, які, ймовірно, досить прогностичні, якщо ви не брешите їм про поданий тактовий сигнал.

(* Є один цікавий клас електричної несправності, який не викликає помилок, який ви можете викликати, лежачи на інструментах, це не обов'язково фізично руйнує, але все-таки дивно. Якщо ви годуєте годинник, інший, ніж ви сказали, що ви хочете або просто нестабільний, ви можете порушити час налаштування адреси на осередках синхронного блоку оперативної пам’яті та зробити щось по лінії їх скорочення та пошкодження їх вмісту - так ви можете, наприклад, побачити вміст чогось призначеного ПЗУ в дизайні, насправді змінюється під час виконання просто намагаючись щоб прочитати його з поганими годинами. Але я не вважаю , що це фізично руйнівний)


2
Ви можете зв'язати між собою кожен флоп разом з інвертором і генерувати багато тепла. Чи є у FPGA схеми захисту для модулювання годинника, якщо вони занадто гарячі? Дерево годинника часто знаходиться поза їх контролем.
Бен Джексон

@BenJackson: Чи не годинникове дерево більш-менш жорстко провідне, кожен логічний елемент не може вибрати один з кількох різних дерев? Саме джерело годинника може бути поза їх контролем, але вони можуть просто вимкнути буфери дерева годин, якщо стане занадто жарко. Або я здогадуюсь, вони могли б відключити постачання.
Майкл

5

Найімовірніше, це порушення поточного рейтингу на GPIO, керуючи штифтом, який вже ведеться. Деякі FPGA мають встановлені обмеження струму або змінні вихідні драйвери, тому це може допомогти вам / нашкодити, якщо ви не зробите карту портів правильно. Ви повинні все-таки подвійно перевірити список своїх портів перед програмуванням, оскільки помилки, такі як заміна штифтів, можуть зайняти години, щоб вирішити, найкраще випереджати помилки і точно знати, що саме прошивка мала на меті зробити. (якщо вам не подобається відчуття помилки)

HDL самі по собі зазвичай не дозволяють вам підключити два вихідних сигнали до одного дроту і перестануть синтезувати і змусять виправити свою помилку, якщо у вас є код, який це робить.

Одне місце, яке може спричинити проблеми, - це двонаправлені порти, але у вас повинні бути обмежувальні поточні резистори на них.


Повторно “ підключіть два вихідних сигнали до одного дроту ”: Чи не можете ви з'єднати виходи двох тридержавних буферів разом, якщо ви обіцяєте інструмент синтезу ніколи не включати обидва одночасно? Чи може інструмент перевірити, чи ви дотримуєтесь своєї обіцянки, навіть якщо логіка, що керує функцією "включення" буферів, дуже помилкова?
Едгар Бонет

@EdgarBonet yup ви можете викликати конфлікти таким чином. Немає вимоги до логічно вимушеного виводу, що дозволяє взаємно виключати, якщо певна логіка (яка може включати повну логіку та / або апаратне / програмне забезпечення, що не є FPGA) викликає активізацію двох суперечливих ОЕ, і нічого не може зупинити це, якщо Логіка ОЕ була чітко кодована, щоб запобігти цьому.
Родні

@EdgarBonet Ви можете, але, як правило, трипровідні дроти є зовнішніми для FPGA, оскільки вам потрібен драйвер / приймач, і такі знаходяться на GPIO. Я ніколи не розробляв триестати в FPGA, і не думаю, що апаратне забезпечення в FPGA підтримує три стану. Ви можете вмикати два буфери одночасно, фізичний дизайн повинен запобігти їх спалюванню.
Спайк напруги

4

Як і у випадку з мікроконтролерами, ви завжди можете перевищити максимальний загальний струм на банку вводу-виводу, витягуючи з кожного штифта максимальний струм (або більше). Якщо FPGA не має вбудованого захисту від подібної ситуації, це може призвести до пошкодження.

Іншою можливістю є створення комбінаторного циклу, який періодично переходить у метастабільний стан, або коливається на набагато більшій частоті, ніж тканина FPGA призначена для обробки (кілька ГГц). Це призведе до дуже локалізованого перегріву, який може завдати фізичної шкоди перед тим, як наступить термозахист загального мікросхеми. Тобто, якщо припустити, що існує такий захист: якщо перегрівання не призведе до відключення, ви можете просто створити дуже потужна електрична схема і нехай вона працює при недостатньому охолодженні.

Динамічна конфігурація також може захищати захист від недійсної конфігурації внутрішніх примітивів, яка може бути застосована засобами розробки у разі статичної конфігурації. Наприклад, ви можете налаштувати PLL таким чином, що перевищує його максимальну внутрішню частоту, або подати одну і ту ж лінію з'єднання двома джерелами одночасно, або змусити штифт з високовольтного IO банку використовувати його приймач низької напруги, як LVDS .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.