Spartan-6の問題を発見したようなので、XILINXのWebCaseというのに投稿してみました。
あまりにもマイナーな問題なので、おそらく世界中の誰よりも早く発見したのではないかと思います。
----------------------------------
使用したFPGA:XC6SLX16 2C-ES
使用したボード:SP601評価ボード
■問題の概要:
XC6SLX16 ESでバウンダリスキャンのSAMPLEインストラクションを実行したとき、入力として設計したI/O端子のコントロールセルにキャプチャされる値が常に0になってしまい、出力端子のようにふるまう。
例えば、以下のような記述で作成した入力端子(test_in)は、デバイスのコンフィギュレーション後、バウンダリスキャンでは出力端子として認識されてしまう。
test_in : in STD_LOGIC;
・・・
led_out <= test_in;
・・・
このように設計した端子は、コントロールセルには'1'(出力禁止をあらわす)がキャプチャされるのが正常な動作だが、Spartan-6ではなぜか'0'(出力許可)がキャプチャされてしまう。
ただし、実際のデバイスは入力ピンとして動作しているので、バウンダリスキャンを行わなければ問題には気が付かない。
なお、この問題は、ISE11.2とSpartan-6の組み合わせのみで発生する。ISE11.2とSpartan3Eとの組み合わせでは発生しない。
■暫定的な回避方法:
バウンダリスキャンで入力として認識させたいデバイスの端子は、入出力端子として設定し、なおかつ入出力方向を切り替えられるようにインプリメントしなければならない。
test_in : inout STD_LOGIC;
・・・
test_in <= 'Z' when (tristate_test = '1') else '0';
led_out <= test_in;
・・・
このようにすることで、当該I/O端子のコントロールセルに正しい値がキャプチャされるようになるが、記述として不自然である。Spartan-3Eや3AN、Virtex5以前のデバイスでは発生していないので、Spartan-6のMAPあるいはBITGENの時点でなんらかの問題があると考えられる。
----------------------------------
超マイナーな不具合ですが、うちにとっては重大な問題です。
わかりやすく図にします。
あるデザインで、F6,F5,D4,D5番端子は入力端子ですが、入力ピンとして宣言したり、
入出力として宣言していても
gpio <= "ZZZZ";
のように設計すると、バウンダリスキャンでは出力端子として認識されています。
ISE11.2は「どうせ入力しかしない端子」と判断するようです。
しかし、この端子を
gpio <= "ZZZZ" when (tristate_condition = '1') else "0000";
のように記述して、入出力を切り替わる可能性がある端子として設計すると、
ちゃんと、入力端子として認識されます。
たぶん、ISE11.2のMAPの後半かBitgenの問題だと思います。シリコンの問題でないことを祈ります。
XILINXは対応してくれるでしょうか。
英語で書いてフォーラムにも投稿しようかと思いましたが、英訳が大変なので保留しておきます。
最近のコメント