Spartan3の使い方
発表 平成16年12月10日 最終更新日 平成16年12月24日
デザインウェーブマガジン基板は、XILINX
Parallel III(互換を含む)ケーブルを使用した場合に、iMPACTから認識されないという不具合が良く聞かれます。
どうやら、パソコンの機種や、コンフィグROMの有無、ボードの個体差などによっても現象に差があるようです。 私なりに、いろいろ簡単な調査をした結果、下記の結論にたどり着きました。
- 74HC125で3.3Vでのコンフィギュレーションは、ぎりぎりOK/NGのボーダーライン(?)
- 74HC125ではなく、74AC125を使うとよい。
- 74AC(HC)125の後ろには電流制限抵抗(100Ω程度)を入れること。
74AC125を使うことによって、Parallel
III互換のケーブルで、2.5Vの電源でもiMPACTやMITOUJTAGから認識されるようになりました。下の写真1は、ヒューマンデータ様のXCKITで、ICソケットを用いて74AC125を装着した写真です。
 写真1 TCKを生成するICを74AC125に変更
下の写真2は、デザインウェーブ付録基板をJTAG接続している写真です。電源は3.3Vでも2.5Vでも正常に動作するようになりました。
(74HC125を使った場合は、3.3VとダイオードショートでOK、2.5Vでは不可でした)
 写真2 2.5VでJTAGコンフィギュレーション
より、確実に行うためには3.3Vから取ったほうが良いとは思われますが、現状では2.5Vでも動作しています。
私なりに考えた対策方法は次のとおりです。
- まだJTAGケーブルを作っていない方
→ 74AC125でケーブルを作るか、ヒューマンデータさんのようにHC14のバッファを入れると良いかと思われます。
- 既に純正のParallelIIIケーブルをお持ちの方
→電源を3.3Vからお取りください。それでも上手くいかない場合は、TCKにHC14などの外付けバッファをつけてください。
- 自作もしくはParallel III互換品をご利用の方
→電源を3.3Vからお取りください。それでも上手くいかない場合は、VCCに電源を供給するダイオードを短絡してください(電源の逆接保護はなくなります)。それでも上手くいかない場合は、100pFのコンデンサを取ってください。それでも上手くいかない場合は74AC125にお取替えください。 または、TCKに外付けのバッファをつけてください。
- ALTERAやLatticeのケーブル(互換を含む)をお持ちの方
→「自作もしくはParallel
III互換品」と同じ対策を施した後、MITOUJTAGをご利用ください。ByteBlaster互換ケーブルでコンフィギュレーションする方法についてはこちら
ご参考 ヒューマンデータさんの実験記事
http://www.hdl.co.jp/XCKIT/dwbd/ (74HC14のバッファによる方法)
なぜHC125では動作不具合が発生することがあるのですか?
74HCシリーズの動作速度が遅いということが理由の一つと考えられます。74HCよりも高速な74ACを使用することで、不具合の発生頻度を下げることができると推定されます。この不具合の原因は74HCの速度の問題だけではなく、もう一つの大きな要因、すなわちTCKの立上り速度も絡んでいるものと思われます。
なぜ74ACシリーズなのですか?
2.5V⇔3.3V、2.5V⇔5Vの変換を行うためには、本来は低電圧ロジックというものを使用するのが正当な方法だと思います。しかし、秋葉原などで簡単に購入でき、かつ、DIPパッケージが存在するものは限られてきます。昨今の低電圧ロジックは、アマチュアユースでの入手性が難しいことと、細かいはんだ付けがDIPより難しいという問題があります。
そういうわけで、74HC125よりも若干高速な74AC125という選択になりました。(私はRSコンポーネンツで購入しました。秋葉原で探すときは、鈴商、若松、千石、田中無線、その他ガード下などを探してみてください。)
これで確実に動作しますか?
本情報については、私、内藤竜治(なひたふ)は一切保証をいたしません。皆様の創意工夫によって動作の確認を行ってください。
さらに詳細は
デザインウェーブマガジン付録基板は、私が設計した基板ではございませんので、本件についてはこれ以上の調査は行いません。
より詳細な情報をご希望の場合は、正式に調査のご依頼をいただければ喜んで調査させていただきますので、まずはお問い合わせください。→
nahitafu@nifty.com
平成16年12月24日
Spartan3のJTAGの注意
Spartan3のデータシート(ds99)の第3章によれば、
M0-M2、CCLK、PROG_B、DONE、HSWAP_EN、TCK、TDI、TDO、TMS
の各ピンには、VCCAUXに対してダイオードが内蔵されているそうです。 そのダイオードは、VCCAUX+0.5VまでONしないとのことですので、JTAG信号が2.5VというのはVCCAUX(2.5V)が原因のようです。つまり、入力の保護用のクランプダイオードがONする電圧がVCCAUX+0.5Vで、絶対最大定格が一般には3Vとなるようです。 おそらく、下の図のような構造をしていると推定されます。(下側のダイオードは省略)

JTAGケーブルの出力に100Ωくらいの電流制限抵抗を直列に入れておけば、3.3Vの電圧を入れても大丈夫と思われます。それは、下の図のような電流の流れになっていると考えられます。

もし電流制限抵抗がなければ、パッドに内蔵されたダイオードが発熱し、故障に至る可能性があります。
なお、XILINXの代理店の公開している技術情報によれば、「3.3Vバウンダリ・スキャンテストを行う場合は接続ラインに直列で30Ωの制限抵抗を挿入します」とあります。挿入する抵抗は30Ωという説もありますが、56Ω以上という情報もあります。
詳細はXILINXのアンサー#20477もご覧下さい
「Spartan-3 コンフィギュレーション - 3.3V トレラント コンフィギュレーション インターフェイスの作成方法」 http://www.xilinx.co.jp/xlnx/xil_ans_display.jsp?BV_UseBVCookie=yes&getPagePath=20477
ご参考までにXILINXのアンサー#20477もご覧下さい
「Spartan-3 - Are the Spartan-3 I/Os 5V-tolerant? Can I drive I/O with a higher
voltage? 」 http://www.xilinx.co.jp/xlnx/xil_ans_display.jsp?BV_UseBVCookie=yes&getPagePath=19146
抵抗で電圧を下げるには
簡易的に低電圧ロジックに変換する方法では、150Ωくらいの抵抗を直列に入れ、その後に1000Ωの抵抗でプルダウンするという方法も考えられます。電圧は分圧されるので、1000/(150+1000)*3.3
= 2.86Vになり、ON時の電圧変換は大丈夫です。ON時の電流も3.3/1150=2.86mAと低く抑えられます。OFFも勿論大丈夫です。
これで波形が鈍るとお考えの方もいらっしゃるかもしれませんが、配線やパッドの静電容量と抵抗の値を考え、シミュレーションしてみてください。

上記の方法で上手くいく保証はありませんし、絶対に安全であるという保証もありません。
確実なのは、LVCやALVCや、その他の様々な低電圧ロジックを使って変換することです。しかし、店頭で1個単位で購入できるか、5Vトレラントがあるか、そしてDIPパッケージがあるかどうかは難しいところです。
製品を作る場合などの評価時には、ちゃんとしたレベル変換を行ったほうがよいのでしょうが、今扱っているものはそもそも評価基板です。趣味で使うのであれば、動かすまでの労力を削減してみるのもよいのではないでしょうか。
既にALTERAのByteBlasterをお持ちの方は、新たにJTAGケーブルを購入する必要はありません。MITOUJTAGというソフトウェアを使用すれば、ALTERAやLATTICEのJTAGケーブルを使って、Spartan3やXCF01Sをコンフィギュレーションすることができます。
下の写真では、ヒューマンデータ社のByteBlaster互換JTAGケーブル(BL3)を用いて、XCF01Sに書き込んでいます。ケーブルの電源は2.5Vではなく、ボード上の3.3Vから取っています。このようにすると、BL3の中の74HC244は3.3Vで動作するので、JTAG信号のTDI、TCK、TMSは3.3Vが出てきます。
Spartan3のJTAG信号は絶対最大定格2.5Vであり、3.3Vの信号を入れてはいけないことになっていますが、BL3の中には各信号に100Ωの直列抵抗が入っていて、ある程度緩衝してくれます。Spartan3の入力ダイオードはONしますが、電流は3mAくらいしか流れないでしょう。
もちろん、これは定格オーバーの使い方ですが、
評価ボードですから、これでいいのではないでしょうか?
もちろん、製品を作ったりするときには、しっかり2.5Vロジックを使ってくださいね。

また、上記の使い方では、実際にはうまくいかないことが多いようです。オシロスコープをつなぐと上手くいったりいかなかったり、日や気温やケーブルの角度によってコンフィグが成功したり失敗したりします。どうやら、信号の反射が原因のようです。Spartan3は、JTAG信号の反射が激しいようなので、うまくいかない場合は、日を改めるか、JTAGケーブルの長さを極力短くしてください。
どうしてもダメな場合は、レベル変換用にバッファを入れてください。そうすると、結局、自分でJTAGケーブルを作成するのと同じことになってしまいますが。
乗算器の使い方と性能
Spartan3の乗算器は、デフォルトで18×18ビットの符号付きで、符号無しの乗算は17ビット×17ビットまでです。
この乗算器は、「符号付き」という高度な演算が基本なのでお間違いないようにご注意ください。この乗算器は18ビットの符号無し数値を扱うことはできません。そのため、普通に
a : signal std_logic_vector(17 downto 0); b : signal std_logic_vector(17 downto 0); p : signal std_logic_vector(35 downto 0);
としておいて、
p <= a * b;
などとすると、18ビットの符号無し演算を実現するために乗算器が3個使われてしまいます。
この問題を回避するには、VHDLファイルの先頭の
use IEEE.STD_LOGIC_UNSIGNED.ALL;
を、下記のように変更します。
use IEEE.STD_LOGIC_SIGNED.ALL;
このようにすると、std_logic_vectorは符号付きの数値として扱われるので、18×18ビットの乗算でも1つの乗算器で行われ、パフォーマンスは低下しません。

お問い合わせは nahitafu@nifty.comまでお願いします。 戻る
|