ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

FPGAで忘れてはいけない、たった一つのオプション

FPGAの回路を実機で動かすときに、一つだけ忘れてはいけないオプションがあります。それは「未使用ピンを入力/Hi-Zに設定する」です。数あるオプションの中で最も重要であるにも関わらず、ISEやクオータスのバージョンによってデフォルト値がまちまちになっています。

このオプションが適切に設定されていない場合、時に回路が動かなくなり、最悪ボードの破壊まで可能性があります。まずい設定の例としては、未使用ピンをas output driving groundに設定した時(Alteraの場合)を考えます。これは、使っていないピン(Verilogに記載されていないピン)をGNDに接続してしまいます。このオプションを使い基板側で未使用ピンをGNDに接続しておけば、FPGAバイスのGNDピンが増えるためノイズに強くなるというメリットがあります。しかし、基板側でGNDに落ちていないときは非常に危険な事になります。

私が実際に見た例ですが、PCIの回路で問題が起きたことがありました。普通のPCIバイスはPERR(パリティエラー)やSERR(システムエラー)といった緊急用の信号をドライブしません。これらの信号が、未使用ピンとしてGNDに落とされるとどうなるでしょう。SERR、PERRは負論理なのでGNDに落ちている場合は、CPUに対して「パリティやばい。マジやばい」「もうやめて!、PCIバイスのライフは0よ」と警告を出すことを意味します。結果的にCPUが「なんかやばいからブートしない」となり、パソコンが立ち上がらなくなります。これとは別に、接続先がHを出力しているときは過電流が流れ、最悪基板を壊してしまします。

スターターキットのような基板では、全部の機能を使うことは希です。必然的に未使用ピンが出てくるので、オプションで忘れずに設定しておきましょう。

Alitera、Xilinxの設定方法です。

Alteraの場合

QuartusIIのメニューから、Assiginmetns→Settingsを選びます。
Settingsの画面が出たら、Deviceを選択し、さらにDevice and pin Optionsを選択します。
Device and pin Optionsの画面から、Unused Pinsのタグを選び、All input tristatedを選択してください。


Xilinxの場合

ISEのプロジェクトから、Generate Programming Fileを右クリックしpropertiesを開きます。
propertiesの画面が出たら、Configuration Optionsを選択します。
Unused IOB Pinsを選択しfloatに設定してください。


補足

何も考えずに入力/Hi-Zにして良いのかという疑問に対しての回答。

まっとうな基板であれば、基板上のクリティカルな信号はプルアップ/プルダウンの処理がなされています。なぜなら、FPGAが未コンフィグの場合(もしくはコンフィグレーション中)、ピンの出力はHi-Zになります。このときに各周辺ICが誤動作しては困るので、重要な信号はFPGAのピンがHi-Zの状態でHかLに設定されています。安心して、未使用ピンのオプションを使ってください。