こんにちは、インテル® FPGA を勉強中のハチです。
今回は Cyclone® IV デバイスの AS モードにおけるコンフィグレーション・シーケンスを勉強していきます。
『 コンフィグレーション時間 』でも記載した通り、EPCS と Cyclone IV は以下の図のように接続します。
各信号はどのような意味を持つのでしょう?
表にまとめてみました。
Cyclone IV のピン名 |
概要 |
nCONFIG | コンフィグレーション・コントロール・ピン |
nSTATUS | コンフィグレーション・ステータス・ピン |
nCE | チップイネーブル・ピン |
DATA[0] | コンフィグレーション・データ・ピン |
DCLK | コンフィグレーション・クロック入出力ピン |
nCSO | チップイネーブル・アウトプット・ピン |
ASDO | コンフィグレーション制御ピン |
『 イニシャライズ時間 』 にも記載したとおり、通常、基板に電源供給後、EPCS からコンフィグレーション・データが Cyclone IV にロードされます。
コンフィグレーション・シーケンスはどのような場合が考えられるか、自分の経験をもとに考えてみると以下の 3 つのパターンとなりました。
◆ 基板に電源を供給
◆ コンフィグレーションを再度実行
◆ コンフィグレーション・エラー発生時に再コンフィグレーションを実行
コンフィグレーション中の各端子の動きは以下の表の通りです。
信号名 |
属性 |
値 |
説明 |
nCONFIG | 入力 |
High |
コンフィグレーションを開始 |
Low |
FPGA をリセット状態 (POR を実施中 ) | ||
nSTATUS | 双方向オープンドレイン |
出力 = High |
正常なコンフィグレーション状態 |
出力 = Low |
コンフィグレーション・エラー | ||
入力 = High |
正常なコンフィグレーション状態 | ||
入力 = Low |
エラー・ステート | ||
CONF_DONE | 双方向オープンドレイン |
出力 = High (解放) |
コンフィグレーション・データ受信完了 |
出力 = Low |
コンフィグレーション前・コンフィグレーション中 |
3つのパターンのコンフィグレーション・シーケンスについて見ていきます。
電源を入れてからコンフィグレーションが終わるまでのコンフィグレーション・シーケンス
1. POR 回路がVCCINT, VCCIO, VCCA を監視
2. nCONFIG ピンが VCCIO に Pull-Up され High 状態
3. nSTATUS ピンが VCCIO に Pull-Up され High 状態
4. DCLK と ASDO が出力され、DATA0 にデータが送信
5. データ受信完了後、CONF_DONE を開放し VCCIO に Pull-Up され High 状態
再コンフィグレーションをおこなった時のコンフィグレーション・シーケンス
1. nCONFIG を 500ns 以上 Low にドライブ
2. nCONFIG を Low から High
3. nSTATUS を Low から High
4. DCLK と ASDO が出力され、DATA0 にデータが送信
5. データ受信完了後、CONF_DONE を開放し VCCIO に Pull-Up され High 状態
コンフィグレーションが失敗した時のコンフィグレーション・シーケンス
1. POR 回路がVCCINT, VCCIO, VCCA を監視
2. nCONFIG ピンが VCCIO に Pull-Up され High 状態
3. nSTATUS ピンが VCCIO に Pull-Up され High 状態
4. DCLK と ASDO が出力され、DATA0 にデータが送信
5. nSTATUS が Low
コンフィグレーションが失敗する原因
コンフィグレーションが失敗するとはどのようなことが考えられるのでしょうか?大きく分けて二種類の原因が考えられそうです。
● ツール操作時のミス
⇒ sof ファイルの作成やピン配置制約を基板と異なる状態に設定してしまった場合などの人為的問題です。
● 基板に関連する問題
⇒ 信号品質と接続に関する 2 つの問題です。
1) 信号品質に関する問題
反射やクロストーク、ノイズなどによりコンフィグレーション・データが化けるなどでエラーが起きてしまう場合です。
対処方法としては基板配線のインピーダンスや配線長を考慮する必要があるようです。
2. 接続に関する問題
MSEL が AS モードになっていない場合は、AS モードのコンフィグレーションに失敗します。
また、nSTATUS や CONF_DONE はオープンドレインのため、Pull-Up 抵抗が必要になるなど、コンフィグレーションをおこなうために必要な接続があります。
私が製作実習で失敗したところでは、Cyclone IV の DATA ラインに 25Ω 直列抵抗を入れ忘れ、コンフィグレーションがうまくいかずに苦労したことなどありました。
基板の接続を間違えることで下記のような現象になり、コンフィグレーション・エラーとなります。
・ コンフィグレーション・チェーンを認識しない
・ nSTATUS が High もしくは Low に張り付いてしまう
・ CONF_DONE が High にならない
・ DATA が送信されない
・ DCLK が出力されない
やっぱり奥深い、コンフィグレーション。。。