こんにちは、ハチです。
前回まではユーザーモードになるまでの時間について勉強してきましたが、Power On Reset ( POR ) とイニシャライズでは何が違うのかはっきりしませんでした。
今回も Cyclone® IV E を例にとって、その違いについて勉強していきます。
リセットというのは FPGA 内部を "0" にするというイメージがあり、イニシャライズでは FPGA を初期化するということであると思っていました。
それに アルテラ社の FPGA において、イニシャライズはフリップフロップに "0" を代入することと聞いたことがあります。
POR は電源を入れてからのスタート期間、イニシャライズはユーザーモードになるまでの準備期間のようなイメージを持っていました。
Power On Reset
POR 回路は、各電源電圧レベルが安定するまで、デバイス全体をリセット状態のまま維持する回路です。
モニタしている電源は下記の 3 電源です。
●VCCINT
●VCCA
●VCCIO ※ コンフィグレーション・ピン、JTAG ピンが存在する I/O Bank のみ監視
注意:デバイスファミリーによって POR が監視している電源電圧は異なります。
つまり、上記 3 電源 (VCCIN、VCCA、VCCIO (※)) の電源が電源仕様を満たすと、 POR 回路がリセットを解除するため コンフィグレーションが開始されます。
電源投入後、POR 期間中、デバイスはリセット状態になり、下記表の通りです。
ピン |
状態 |
nSTATUS |
Low |
CONF_DONE |
Low |
全ユーザー I/O |
トライステート状態 |
各電源電圧が規定値まで達したところで POR が終わり、 nSTATUS を開放することでコンフィグレーションが開始されます。
なお 電源安定後 (POR 終了後)、ある程度の時間が経過した後にコンフィグレーションを開始したい場合は、手動で nCONFIG を Low にしておき、コンフィグレーションを開始したいタイミングで nCONFIG を High にすることで対応可能です。
お客様から下記のご質問をいただきました。
お客様: 「基板に電源投入後、FPGA よりも早く動き出すデバイスがあります。基板上では FPGA で結線されているので、FPGA のピンの状態を教えていただけないでしょうか?」
言われてみれば確かに、コンフィグレーション前、FPGA の各ピンはどのような状態になっているのか知りませんでした。
コンフィグレーションが終了しないと各ピンは入力ピンなのか出力ピンなのか決まっていない状態になります。
全ピン同じ状態になるのか・・・コンフィグレーション中、コンフィグレーション・ピンはコンフィグレーション・データを流しているし・・・。
各フェーズにおける I/O の状態を Cyclone® IV ハンドブックで確認すると下記の記載を発見しました。
(ハンドブックの記載はこちら⇒ Configuration -> Configuration -> Reset )
The I/O pins are tri-stated until the device enters user mode.
The user I/O pins and dual-purpose I/O pins have weak pull-up resistors, which are always enabled (after POR) before and during configuration. The weak pull up resistors are not enabled prior to POR.
POR 後、コンフィグレーションが終了するまでの間、ユーザー I/O と Dual-Purpose I/O (兼用ピン) は、トライステート状態であり、デバイス内部の Weak Pull-Up 抵抗が有効になっていることがわかりました。
デバイス内部に存在する I/O の Pull-Up 抵抗の抵抗値は、データシートに記載されていて、VCCIO の電圧レベルにより異なります。
( Operating Condition -> DC Characteristics -> Internal Weak Pull-Up and Weak Pull-Down Resistor )
電源の揺れにより、POR がうまくいかず、結果としてコンフィグレーションが失敗するようです。
コンフィグレーションが失敗するとコンフィグレーションに関係する部分のみを解析してしまいそうですが、電源投入時の電圧も忘れずに確認していきたいと思います。
イニシャライズ
次に、イニシャライズでは どの様な初期化を行っているのでしょうか。
その名の通り、設計した論理が動作開始できるように、論理の状態にあわせてデバイスの初期状態をおこなっています。
デバイス内部には次のものがあり、これらのプリミティブがデザインの初期状態にセットされます。
●LUT (ルックアップ・テーブル)
●レジスター
●I/O
●メモリー・ブロック
●乗算器ブロック
まとめ
POR と イニシャライズの違いが理解できました。
●POR・・・電源投入時、電源電圧が規定値に達するまでデバイス全体をリセットしている
●イニシャライズ・・・FPGA 内部のレジスタ、メモリ等に初期値の設定をしている
お客様からご質問いただいた通り、基板上には FPGA 単体ということはないはず・・・では FPGA がユーザーモードになっていないときのユーザー I/O と兼用ピンの状態は調べられましたが、コンフィグレーション・ピンは、どうしてコンフィグレーション・ピンとして振る舞え、いつ、コンフィグレーション・モードが判明しているんだろうか?
次回のコンフィグレーション・シーケンスについて調査していきます。
以上が POR とイニシャライズの違いでした!コンフィグレーションって一言で言っていましたが、奥が深いですね・・・。