Bisakah Anda benar-benar memecahkan FPGA dengan memprogramnya dengan salah?

26

Bisakah Anda benar-benar merusak FPGA dengan memprogramnya secara salah?

Saya seorang pria perangkat lunak sebenarnya. Bukan rahasia lagi jika perangkat lunak Anda salah, Anda dapat menghancurkan semua jenis data penting, dan mungkin bahkan menghancurkan seluruh mesin. Tetapi benar-benar sulit untuk merusak komputer secara fisik hanya dengan memprogramnya.

(Ada desas-desus yang tak ada habisnya tentang instruksi Hentikan-Dan-Tangkap-Api, atau bisa merombak firmware sistem untuk merusak motherboard, atau memprogram nilai yang salah ke kartu grafis untuk menggoreng monitor Anda. Tetapi semua ini tampaknya persis seperti itu. : rumor. Dan semua tentang perangkat keras yang sudah lama usang. Tampaknya sangat, sangat sulit untuk mematahkan peralatan komputer modern dengan pemrograman yang buruk.)

Dengan FPGA, Anda (setidaknya secara nominal) menyambungkan sirkuit individual bersama-sama. Tampaknya sangat masuk akal bahwa kerusakan fisik dapat terjadi jika terjadi kesalahan.

Misalnya, Anda dapat menulis beberapa VHDL yang meminta dua output diikat menjadi satu. Jika mereka menghasilkan level logika yang berbeda, saya membayangkan itu mungkin akan menggoreng sesuatu. (Saya berharap alat sintesis Anda akan berteriak kepada Anda untuk tidak melakukan ini ... tapi saya tidak tahu apakah alat tersebut benar-benar menerapkan tingkat pengecekan kesalahan tersebut.)

Tampaknya juga sangat mungkin untuk secara tidak sengaja memilih model FPGA yang salah dalam alat sintesis, dan akhirnya mencoba memprogram chip Anda dengan bitstream yang ditujukan untuk beberapa model yang sama sekali berbeda. Saya tidak tahu apa yang akan dilakukan, tetapi saya curiga itu akan "buruk".

Dalam hal ini, Anda pasti dapat menghubungkan chip FPGA ke seluruh rangkaian secara tidak benar. Misalnya, jika Anda mengacaukan nomor pin, Anda mungkin berakhir dengan papan mencoba untuk menggerakkan pin I / O bahwa FPGA itu sendiri juga mencoba untuk mengemudi. Apakah pin I / O biasanya memiliki "perlindungan" terhadap kesalahan seperti itu? Atau akankah chip hanya goreng?

Matematika Matematika
sumber
3
Beberapa FPGA memiliki fitur keamanan yang hanya memungkinkan memuat bitstream yang dienkripsi dan ditandatangani dari memori eksternal. Kunci disimpan dalam FPGA dan hanya dapat diprogram sekali. Jika Anda mengaktifkan fitur seperti itu secara tidak sengaja atau kehilangan kunci, pada dasarnya Anda memiliki FPGA "bricked".
filo
2
"Tetapi benar-benar sulit untuk merusak komputer secara fisik hanya dengan memprogramnya." kau pikir begitu? Sekali waktu terserah pada pengemudi untuk mengendalikan kepala hard disk - artinya virus dapat memainkan ulang tahun pada hard disk Anda. BIOS mengontrol kipas - memungkinkannya menyebabkan kerusakan karena panas berlebih (mungkin ada beberapa perlindungan yang terpasang di dalamnya, tetapi jika Anda memanaskannya dengan cukup cepat maka itu tidak dapat disimpan). BIOS bahkan dapat memutuskan untuk mencoba memasukkan 20V ke dalam CPU Anda .... Perangkat lunak dapat dengan mudah bertanggung jawab untuk merusak komputer jika Anda tahu perangkat lunak mana yang ingin Anda gunakan.
UKMonkey
2
@UKMonkey youtube.com/watch?v=CsQd2n99zS4
Joshua
2
@UKMonkey Tergantung pada bagaimana sistem Anda diatur, saya cukup yakin Anda dapat melelehkan CPU dengan usaha yang cukup. Sebagian besar komputer - AFAIK apa pun yang tidak didinginkan secara pasif - akan memiliki cara untuk mengontrol sistem pendingin. Anda dapat menonaktifkan pelambatan termal, jalur pertahanan lain, melalui BIOS, yang secara tidak langsung dapat dilakukan secara terprogram oleh kernel. Dalam kasus tertentu, itu harus disengaja, tapi itu sangat mungkin.
Dana Gugatan Monica

Jawaban:

31

Tampaknya juga sangat mungkin untuk secara tidak sengaja memilih model FPGA yang salah dalam alat sintesis, dan akhirnya mencoba memprogram chip Anda dengan bitstream yang ditujukan untuk beberapa model yang sama sekali berbeda.

Biasanya perangkat lunak pemrograman akan meminta bagian yang diprogram untuk nomor bagiannya, dan menolak memprogram dalam bitstream yang dimaksudkan untuk model FPGA yang berbeda.

Bagian itu sendiri juga umumnya akan menolak untuk memulai jika diprogram dengan bitstream yang panjangnya tidak tepat (dan itu sangat jarang untuk bitstream untuk chip yang berbeda dengan panjang yang sama).

Anda pasti dapat menghubungkan chip FPGA ke seluruh rangkaian secara tidak benar. Misalnya, jika Anda mengacaukan nomor pin, Anda mungkin berakhir dengan papan mencoba untuk menggerakkan pin I / O bahwa FPGA itu sendiri juga mencoba untuk mengemudi.

Ini adalah cara yang paling mungkin untuk merusak FPGA dengan pemrograman yang salah.

Cara lain bisa dengan memprogram desain yang sangat intensif sumber daya dan menjalankannya pada frekuensi tinggi (sehingga daya tinggi dikonsumsi), dan kemudian menjalankannya pada FPGA tanpa heat sink yang memadai.

Apakah pin I / O biasanya memiliki "perlindungan" terhadap kesalahan seperti itu? Atau akankah chip hanya goreng?

Pin keluaran akan "sering" bertahan dalam kondisi korsleting selama beberapa detik atau bahkan beberapa menit. Tapi tidak ada yang dijamin.

Foton
sumber
1
Menarik. Apakah FPGA biasa membutuhkan pendinginan aktif? Oh, saya kira itu adalah pertanyaan tersendiri. (Dan saya kira jawabannya tergantung pada banyak hal - seperti apakah Anda membeli £ 15 atau £ 15.000 FPGA!)
MathematicalOrchid
4
@MathematicalOrchid, Tidak harus pendinginan aktif, tetapi heatsink dan udara paksa cukup umum. Vendor FPGA biasanya menyediakan lembar kerja yang sangat kompleks untuk membantu menentukan (berdasarkan bagian, desain, frekuensi jam, dll) seberapa besar heat sink dan seberapa besar kipas diperlukan.
The Photon
3
@MathematicalOrchid Saya telah menggunakan FPGA sebagai penghitung frekuensi untuk mengukur gelombang persegi hingga 250 MHz. Itu membutuhkan pendinginan karena saya mengukur clock 220 MHz, tetapi alih-alih mengatur pendinginan yang tepat, saya hanya memastikan untuk tidak mengukur lebih dari 5 detik. Konsumsi 5 W @ 220Mhz dan IC sekitar 2 cm ^ 2. Itu menjadi sangat panas sangat cepat.
Harry Svensson
@ HarrySvensson Itu sepertinya jumlah panas gila untuk penghitung frekuensi.
user253751
1
@ HarrySvensson Masih gila bahwa itu harus mengambil 5 watt.
user253751
20

Dengan beberapa pengecualian, alat biasanya tidak memberi Anda akses ke silikon primitif yang sebenarnya, sehingga sulit bagi insinyur pengguna akhir untuk memuat desain * yang tidak valid secara elektrik ke dalam FPGA berbasis SRAM, kecuali mungkin dengan secara tidak sengaja menemukan alat bug.

FPGA berbasis flash mungkin dapat diprogram ulang rusak oleh beban tidak valid tertentu. OTP FPGA secara implisit "rusak" bahkan oleh beban konfigurasi yang valid , karena tidak pernah dapat diubah.

Pada akhirnya, apa yang paling dekat dengan apa yang tampaknya Anda tanyakan, dan contoh HCF Anda, adalah konfigurasi yang menghasilkan tekanan panas yang tak tertahankan . Konsumsi daya secara langsung didorong oleh laju jam dan volume * aktivitas dari logika yang digunakan, jadi jika Anda dapat mengelabui alat-alat ke toggling berguna sebagian besar sandal jepit pada chip pada jam maksimum (ada cara ...) maka Anda dapat menghasilkan pemanas yang cukup efektif yang akan melebihi kebanyakan sistem pendingin untuk penggunaan biasa. Maka itu hanya pertanyaan jika sesuatu secara protektif mematikannya sebelum dimasak. Dan tentu saja ada model estimasi daya di alat, yang kemungkinan cukup masuk akal jika Anda tidak berbohong kepada mereka tentang sinyal jam yang disediakan.

(* Ada satu kelas menarik dari masalah listrik bukan-bug yang dapat Anda sebabkan dengan berbohong pada alat, yang tidak selalu merusak secara fisik, tetapi masih mengejutkan. Jika Anda memberi makan jam yang berbeda dari yang Anda katakan Anda akan atau hanya tidak stabil, Anda dapat melanggar waktu penyetelan alamat pada sel-sel RAM blok sinkron, dan melakukan sesuatu di sepanjang garis korslet dan merusak isinya - jadi Anda dapat misalnya melihat konten sesuatu yang ditunjuk sebagai ROM dalam desain sebenarnya berubah saat runtime hanya dengan mencoba untuk membaca dengan jam yang buruk. Tapi aku tidak percaya ini adalah merusak fisik)

Chris Stratton
sumber
2
Anda dapat menghubungkan setiap kegagalan bersama-sama dengan inverter di antaranya dan menghasilkan banyak panas. Apakah ada FPGA yang memiliki sirkuit perlindungan untuk memodulasi jam jika terlalu panas? Pohon jam sering di luar kendali mereka.
Ben Jackson
@ BenJackson: Bukankah pohon jam lebih atau kurang kabel keras, dengan setiap Elemen Logika dapat memilih di antara beberapa pohon yang berbeda? Sumber jam itu sendiri bisa berada di luar kendali mereka, tetapi mereka bisa mematikan buffer pohon jam jika terlalu panas. Atau saya kira mereka bisa mematikan pasokan.
Michael
5

Hal yang paling mungkin adalah melanggar peringkat saat ini di GPIO dengan mengendarai pin yang sudah digerakkan. Beberapa FPGA memiliki batas saat ini yang dapat diatur atau driver output yang dapat diubah, jadi ini dapat membantu / menyakiti Anda jika Anda tidak menyelesaikan peta port dengan benar. Anda harus mengecek daftar port Anda terlebih dahulu sebelum memprogram karena kesalahan seperti menukar pin dapat menghabiskan waktu berjam-jam untuk menyelesaikannya, yang terbaik adalah mengatasi kesalahan dan tahu persis apa yang dimaksudkan untuk dilakukan firmware. (kecuali jika Anda suka sensasi menemukan kesalahan)

HDL sendiri biasanya tidak membiarkan Anda menghubungkan dua output ke kabel yang sama dan akan berhenti mensintesis dan membuat Anda memperbaiki kesalahan Anda jika Anda memiliki kode yang melakukan itu.

Satu tempat yang dapat menyebabkan masalah adalah port dua arah, tetapi Anda harus memiliki resistor pembatas saat ini.

Lonjakan tegangan
sumber
Re “ sambungkan dua output ke kabel yang sama ”: Tidak bisakah Anda menghubungkan output dari dua buffer tiga-negara secara bersamaan jika Anda menjanjikan alat sintesis untuk tidak pernah mengaktifkan keduanya sekaligus? Bisakah alat memeriksa Anda memegang janji Anda bahkan jika logika mengemudi "mengaktifkan" buffer sangat berbelit-belit?
Edgar Bonet
@ EdgarBonet ya Anda bisa menyebabkan konflik dengan cara ini. Tidak ada persyaratan untuk memaksakan output secara logis memungkinkan untuk saling eksklusif, jika beberapa logika (yang dapat mencakup logika statefull dan / atau perangkat keras / perangkat lunak eksternal ke FPGA) menyebabkan dua OE yang saling bertentangan menjadi aktif, tidak ada yang menghentikannya kecuali jika logika untuk OE telah dikodekan secara eksplisit untuk mencegah hal itu.
Rodney
@ EdgarBonet Anda bisa, tetapi biasanya kabel threestate eksternal untuk FPGA karena Anda memerlukan driver / transceiver dan ditemukan di GPIO. Saya tidak pernah dirancang dengan threestate dalam FPGA dan saya tidak berpikir perangkat keras dalam FPGA mendukung tiga negara. Anda dapat menyalakan dua buffer sekaligus, desain fisik harus mencegah Anda membakar mereka.
Voltage Spike
4

Seperti halnya mikrokontroler, Anda selalu dapat melebihi arus total maksimum per bank IO dengan menggambar arus maksimum (atau lebih) dari setiap pin. Kecuali jika FPGA memiliki perlindungan bawaan terhadap situasi seperti itu, ini dapat mengakibatkan kerusakan.

Kemungkinan lain adalah membuat loop kombinatorial yang secara periodik menjadi meta-stable, atau berosilasi pada frekuensi yang jauh lebih tinggi daripada yang dirancang untuk ditangani oleh fabric FPGA (beberapa GHz). Itu akan menyebabkan overheating sangat lokal yang dapat merusak fisik sebelum perlindungan termal chip-lebar masuk. Artinya, dengan asumsi ada perlindungan seperti itu: jika suhu berlebih tidak menyebabkan shutdown, Anda dapat dengan mudah membuat sirkuit sangat haus daya dan biarkan beroperasi dengan pendinginan yang tidak memadai.

Konfigurasi ulang dinamis juga dapat mengatasi perlindungan terhadap konfigurasi primitif internal yang tidak valid yang dapat diberlakukan oleh alat pengembangan jika terjadi konfigurasi statis. Misalnya, Anda dapat mengkonfigurasi PLL dengan cara yang melebihi frekuensi internal maksimum, atau memberi makan garis interkoneksi yang sama dengan dua sumber sekaligus, atau memaksa pin dari bank IO tegangan tinggi untuk menggunakan transceiver bertegangan rendah seperti LVDS .

Dmitry Grigoryev
sumber