FPGAを間違ってプログラミングして、実際にFPGAを壊すことはできますか?


26

FPGAを間違ってプログラミングすることで、実際にFPGAを壊すことはできますか?

私は本当にソフトウェアの男です。ソフトウェアが間違っていると、あらゆる種類の重要なデータが破壊され、マシン全体がクラッシュする可能性もあります。しかし、コンピュータをプログラミングするだけで物理的に損傷することは本当に困難です。

(Halt-And-Catch-Fire命令、またはマザーボードをブリックするためにシステムファームウェアを再フラッシュできること、またはグラフィックカードに誤った値をプログラミングしてモニターを揚げることができることは無限にあります。しかし、これらはすべてまさにそれのようです:うわさ。そして、時代遅れのハードウェアについて。悪いプログラミングで現代のコンピューター機器を壊すのは本当に、本当に難しいようだ。)

FPGAを使用すると、個々の回路を(少なくとも名目上)一緒に配線できます。ミスの場合に物理的な損傷が発生する可能性があることは完全に妥当なようです。

たとえば、2つの出力を結合するように要求するVHDLを作成できます。それらが異なる論理レベルを出力する場合、私はそれがおそらく何かを揚げるだろうと思います。(あなたの合成ツールがこれをしないようにあなたに叫ぶことを願っています...しかし、そのようなツールが実際にそのレベルのエラーチェックを実装しているかどうかはわかりません。)

また、合成ツールで誤ってFPGAの間違ったモデルを選択する可能性が非常に高いため、完全に異なるモデルを対象としたビットストリームでチップをプログラムしようとしています。私はそれが何をするのか分かりませんが、それは「悪い」だろうと思います。

さらに言えば、FPGAチップを回路の残りの部分に確実に誤って接続する可能性があります。たとえば、ピン番号を台無しにすると、FPGA自体が駆動しようとしているI / Oピンをボードが駆動しようとすることになります。I / Oピンには通常、このような間違いに対する「保護」がありますか?それとも、チップはちょうど揚げますか?


3
一部のFPGAには、外部メモリから暗号化および署名されたビットストリームの読み込みのみを許可するセキュリティ機能があります。キーはFPGAに保持され、一度だけプログラム可能です。このような機能を誤って有効にしたり、キーを緩めたりすると、本質的に「ブリック」FPGAになります。
フィロ

2
「しかし、プログラミングするだけでは、コンピューターを物理的に損傷することは本当に困難です。」あなたはそう思う?むかしむかし、ハードディスクのヘッドを制御するのはドライバー次第でした。つまり、ウイルスがハードディスク上で誕生日を迎えることができました。BIOSはファンを制御します-過熱による損傷を引き起こすことができます(何らかの保護が組み込まれている場合がありますが、十分に速く加熱すると保存できません)。BIOSはCPUに20Vを入れようとすることもできます。...どのソフトウェアを使用するかを知っている場合、ソフトウェアはコンピューターを損傷する原因になります。
UKMonkey



2
@UKMonkeyシステムのセットアップ方法にもよりますが、十分な労力でCPUを溶かすことができると確信しています。ほとんどのコンピューター(純粋に受動的に冷却されない限り)には、冷却システムを制御する方法があります。BIOSを介して、別の防御線であるサーマルスロットリングを無効にできます。これは、カーネルによってプログラムで実行できることを意味します。その特定のケースでは、それは意図的でなければなりませんが、それは非常に間違いなく可能です。
ファンドモニカの訴訟

回答:


31

また、合成ツールで誤ってFPGAの間違ったモデルを選択する可能性が非常に高いため、完全に異なるモデルを対象としたビットストリームでチップをプログラムしようとしています。

通常、プログラミングソフトウェアは、プログラムされているパーツのパーツ番号を照会し、FPGAの異なるモデルを対象としたビットストリームでのプログラミングを拒否します。

正確な長さではないビットストリームでプログラムされている場合、デバイス自体も一般に起動を拒否します(異なるチップのビットストリームが同じ長さになることは非常にまれです)。

FPGAチップを回路の残りの部分に確実に誤って接続する可能性があります。たとえば、ピン番号を台無しにすると、FPGA自体が駆動しようとしているI / Oピンをボードが駆動しようとすることになります。

これは、間違ったプログラミングでFPGAを損傷する可能性が最も高い方法です。

別の方法は、非常にリソースを集中的に使用するデザインをプログラムし、それを高周波数で実行して(高電力を消費する)、適切なヒートシンクなしでFPGAで実行することです。

I / Oピンには通常、このような間違いに対する「保護」がありますか?それとも、チップはちょうど揚げますか?

出力ピンは、数秒または数分間の短絡状態に「しばしば」耐えます。しかし、何も保証されていません。


1
面白い。FPGAがアクティブ冷却を必要とするのは普通ですか?ああ、それ自体が完全な質問だと思います。(そして、答えは多くのことに依存していると思います-あなたが£15または£15,000 FPGAを買ったかどうかなど!)
MathematicalOrchid

4
@MathematicalOrchid、必ずしもアクティブな冷却ではありませんが、ヒートシンクと強制空気はかなり一般的です。FPGAベンダーは通常、非常に複雑なスプレッドシートを提供して、ヒートシンクの大きさとファンの大きさを(部品、設計、クロック周波数などに基づいて)決定するのに役立ちます。
のフォトン

3
@MathematicalOrchid最大250 MHzの方形波を測定するための周波数カウンターとしてFPGAを使用しました。それは必要な私は220 MHzのクロックを測定すると、冷却が、代わりに冷却適切に設定するの私はちょうど5秒以上測定しないようにしてくださいました。220Whzで5Wを消費し、ICは約2cm ^ 2でした。非常に速く非常に熱くなりました。
ハリースベンソン

@HarrySvenssonこれは、周波数カウンターにとっては異常な量の熱のようです。
user253751

1
@HarrySvenssonそれが5ワットかかるのはまだクレイジーです。
user253751

20

いくつかの例外を除いて、ツールは通常、実際のシリコンプリミティブにアクセスできないため、エンドユーザーエンジニアが電気的に無効なデザイン*をSRAMベースのFPGAにロードすることは困難です。バグ。

FlashベースのFPGAは、特定の無効なロードによって再プログラミングが破損する可能性があります。OTP FPGAは、変更できないため、有効なコンフィギュレーションロードでさえ暗黙的に「破損」します。

最終的に、あなたが尋ねているように見えるもの、およびあなたのHCFの例に最も近いのは、耐えられないほどの応力を生じさせる構成でしょう。消費電力は、使用されるロジックのクロックレートとボリューム*アクティビティによって非常に直接駆動されるため、ツールをだまして、最大クロックでチップ上のほとんどのフリップフロップを無用に切り替えさせることができる場合(方法があります...)通常の使用ではほとんどの冷却システムを超える非常に効果的なヒーターです。それから、料理する前に何かがそれを保護的にシャットダウンするかどうかは単なる質問です。そしてもちろん、ツールには電力推定モデルがありますが、提供されるクロック信号について嘘をついていない場合は、おそらく合理的に予測可能です。

(*ツールに横たわることによって引き起こされる可能性のあるバグではない電気的な問題の1つの興味深いクラスがあります。これは必ずしも物理的に破壊的ではありませんが、それでも驚くことになります。同期ブロックRAMセルのアドレスセットアップタイミングに違反する可能性があり、それらをショートさせて内容を破壊するという線に沿って何かを行うことができます。たとえば、デザインでROMに指定された内容を実行時に実際に変更することができます悪い時計でそれを読むために。しかし、私はこれが物理的に破壊的であるとは思わない)


2
すべてのフロップを間にインバーターでつなぎ合わせて、大量の熱を発生させることができます。FPGAが高温になった場合にクロックを変調する保護回路を備えていますか?クロックツリーは多くの場合、制御できません。
ベンジャクソン

@BenJackson:クロックツリーは多かれ少なかれハードワイヤードではなく、各ロジックエレメントはいくつかの異なるツリーから選択できますか?クロックソース自体は制御できない場合がありますが、クロックツリーバッファーが熱くなった場合は、単純にクロックツリーバッファーをオフにすることができます。または、供給をオフにできると思います。
マイケル

5

最も可能性が高いのは、既に駆動されているピンを駆動することにより、GPIOの電流定格に違反していることです。一部のFPGAには、設定可能な電流制限または変更可能な出力ドライバーがあるため、ポートマップを正しく実行できない場合、これが助けになるか、痛むことがあります。ピンの交換などの間違いを解決するには数時間かかる場合があるため、プログラミングの前にポートリストをダブルチェックする必要があります。(エラーを見つけるスリルが好きでない限り)

HDL自体は通常、2つの出力を同じワイヤに接続させないため、合成を停止し、それを行うコードがある場合は間違いを修正します。

問題を引き起こす可能性のある場所の1つに双方向ポートがありますが、それらには電流制限抵抗器が必要です。


2つの出力を同じワイヤに接続する」を再度参照してください。合成ツールで両方を同時に有効にしないと約束した場合、2つのスリーステートバッファーの出力を接続できませんか?バッファの「有効化」を駆動するロジックが非常に複雑な場合でも、ツールはあなたが約束を保持していることを確認できますか?
エドガーボネット

@EdgarBonetうん、この方法で競合を引き起こす可能性があります。論理的にステートフルロジックやFPGA外部のハードウェア/ソフトウェアを含む可能性のあるロジックが原因で2つの競合するOEがアクティブになる場合、出力を相互に排他的に強制的に強制する必要はありません。 OEのロジックは、それを防ぐために明示的にコーディングされています。
ロドニー

@EdgarBonetできますが、通常、ドライバー/トランシーバーが必要であり、それらはGPIOにあるため、トライステートワイヤーはFPGAの外部にあります。FPGAでスリーステートを使用して設計したことはなく、FPGAのハードウェアがスリーステートをサポートするとは思わない。2つのバッファを同時にオンにすることができます。物理的な設計により、それらが燃え尽きないようにする必要があります。
電圧スパイク

4

マイクロコントローラーと同様に、各ピンから最大電流(またはそれ以上)を引き出すことにより、IOバンクごとの最大合計電流を常に超えることができます。FPGAにこのような状況に対する保護機能が組み込まれていない限り、これにより損傷が生じる可能性があります。

別の可能性は、定期的に準安定になるか、FPGAファブリックが処理するように設計されているよりもはるかに高い周波数(数GHz)で発振する組み合わせループを作成することです。それは非常に局所的な過熱を引き起こし、チップ全体の熱保護が作動する前に物理的な損傷を与える可能性があります。つまり、そのような保護があると仮定すると:過熱がシャットダウンにつながらない場合、単純に非常に電力を消費する回路であり、冷却が不十分な状態で稼働させます。

動的再構成は、静的構成の場合に開発ツールによって実施される可能性のある内部プリミティブの無効な構成に対する保護を回避することもできます。たとえば、最大内部周波数を超える方法でPLLを構成したり、同じ相互接続ラインに2つのソースを同時に供給したり、高電圧IOバンクのピンにLVDSなどの低電圧トランシーバーを使用するように強制したりできます。 。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.