Spartan3の使い方

発表 平成16年12月10日
最終更新日 平成16年12月24日

circle21_purple.gif Parallel III互換ケーブルでのJTAGトラブルシュート

 デザインウェーブマガジン基板は、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を装着した写真です。

 

TCKを生成するICを74AC125に変更
写真1 TCKを生成するICを74AC125に変更

 

 下の写真2は、デザインウェーブ付録基板をJTAG接続している写真です。電源は3.3Vでも2.5Vでも正常に動作するようになりました。

 (74HC125を使った場合は、3.3VとダイオードショートでOK、2.5Vでは不可でした)

 

2.5VでJTAGコンフィギュレーション
写真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日

 


circle21_purple.gif 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となるようです。
 おそらく、下の図のような構造をしていると推定されます。(下側のダイオードは省略)
 

Spartan3のJTAG入力部の推定構造

 

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

 

100Ωで直列につないだ場合

 もし電流制限抵抗がなければ、パッドに内蔵されたダイオードが発熱し、故障に至る可能性があります。

 

 なお、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

 

circle21_purple.gif 抵抗で電圧を下げるには

 簡易的に低電圧ロジックに変換する方法では、150Ωくらいの抵抗を直列に入れ、その後に1000Ωの抵抗でプルダウンするという方法も考えられます。電圧は分圧されるので、1000/(150+1000)*3.3 = 2.86Vになり、ON時の電圧変換は大丈夫です。ON時の電流も3.3/1150=2.86mAと低く抑えられます。OFFも勿論大丈夫です。

 これで波形が鈍るとお考えの方もいらっしゃるかもしれませんが、配線やパッドの静電容量と抵抗の値を考え、シミュレーションしてみてください。

抵抗分圧でレベル変換した場合

 

 上記の方法で上手くいく保証はありませんし、絶対に安全であるという保証もありません。

 確実なのは、LVCやALVCや、その他の様々な低電圧ロジックを使って変換することです。しかし、店頭で1個単位で購入できるか、5Vトレラントがあるか、そしてDIPパッケージがあるかどうかは難しいところです。

 

 製品を作る場合などの評価時には、ちゃんとしたレベル変換を行ったほうがよいのでしょうが、今扱っているものはそもそも評価基板です。趣味で使うのであれば、動かすまでの労力を削減してみるのもよいのではないでしょうか。

 

circle21_purple.gif ALTERAのByteblasterでコンフィギュレーションする

 既に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ケーブルを作成するのと同じことになってしまいますが。

 

 

circle21_purple.gif 乗算器の使い方と性能

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つの乗算器で行われ、パフォーマンスは低下しません。

 

 ball_metal.gif

お問い合わせはmail14.gifnahitafu@nifty.comまでお願いします。

chickens_back.gif 戻る

 Copyright(C) 2004 NAITOU Ryuji. All rights reserved. 無断転載を禁ず