こんにちは、インテル® 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 が出力されない

 

やっぱり奥深い、コンフィグレーション。。。