FPGAの内蔵プルアップ抵抗の効果を見る
起動していないFPGAに対するデバッグ
Spartan3EのI/Oには、プルアップ抵抗やプルダウン抵抗が内蔵されています。
これらの抵抗はコンフィギュレーションした後はユーザが使用するか否かを設定できますが、コンフィギュレーション前ではどうなるのか調べてみました。
HSWAP_ENと内蔵プルアップ抵抗
Spartan3以降ではHSWAP_ENという端子があります。この端子をHにすると、コンフィギュレーション前にI/Oの内蔵プルアップ抵抗がOFFになり、各端子はハイインピーダンスになります。
ハイインピーダンスになった状態はMITOUJTAGを使えば、バウンダリスキャンで見ることができます。各ピンが入力状態のときには、自然にLが読み出されます。
図1 Spartan3E のコンフィグ前の端子の状態 (HSWAP_EN=H)
(内蔵プルアップ抵抗はOFFになっている。)
HSWAP_ENをLにした場合や、HSWAP_ENをHにしていても未コンフィギュレーション状態でEXTESTモードにした場合、多くのピンがHレベルにプルアップされます。
図2 Spartan3E のコンフィグ前の端子の状態 (HSWAP_EN=L)
(内蔵プルアップ抵抗がONになった。)
このように、バウンダリスキャンを使えば、コンフィグ前の内蔵プルアップ抵抗の効果も見ることができます。
データシートに記載されていない振る舞い
コンフィギュレーション前では、FPGAをEXTESTモードにすると、HSWAP_EN=Hでもプルアップされましたが、コンフィギュレーションされた後ではEXTESTモードにしてもプルアップはされません。
この件は、データシートには記載されていないマイナーな事項です。
HSWAP_EN = Hに従わないピン
HSWAPEN = 1 にしておくと、全ピンがHI-Zになると書きましたが、どうやらM0,M1,M2はプルダウンされるようです。このときのプルダウン抵抗はかなり強く、10kΩ程度の外付けプルアップ抵抗をつけていても負けてしまいます。
試しにM0,M1,M2を10kΩでプルアップした場合、M0端子の電圧は558mVとなり、 5kΩでプルアップした場合は1.91Vでした。つまり、10kΩの抵抗では大きすぎてプルアップできません。

図3 Spartan3Eにプルアップ抵抗10kΩは大きすぎる
一方、HSWAPEN = 0 にすると、(もしくは未コンフィグ状態でEXTESTモードにすると)、全ピンはプルアップされるのですが、M0,M1,M2もプルアップされます。このときのプルアップ抵抗はさらに強いようです。
10kΩでプルダウンした場合は2.84Vとなり、5kΩでプルダウンした場合は2.43Vでした。5kΩや10kΩでプルダウンしても、Lとは認識されません。

図4 Spartan3Eにプルアップ抵抗10kΩは大きすぎる
この件はデータシート(ds312)をよく見ると71ページに書いてありました、要約すると、M0,M1,M2をプルアップする時には4.7kΩ以下に、プルダウンのときには560Ω以下にしなければならないようです。また、VS[2:0]も同様に、強力なプルアップ/プルダウンが入っていると思われます。
このようなI/O絡みのマイナーなトラブルで基板が動作しない場合、MITOUJTAGをつかわないとデバッグは恐ろしく困難となるでしょう。


