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?
Jawaban:
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).
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.
Pin keluaran akan "sering" bertahan dalam kondisi korsleting selama beberapa detik atau bahkan beberapa menit. Tapi tidak ada yang dijamin.
sumber
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)
sumber
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.
sumber
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 .
sumber