2015年5月9日土曜日

USB JTAG でXilinx FGPAのプログラムをする方法についての考察

FPGAというと、ALTERAよりもXilinxに慣れているわたしですが、Xilinx FPGAのフィールドでのre-programがいまいちめんどくさいように思っています.

もちろん、このようなUSB→JTAG変換回路が売られていて、それを買えばJTAG経由でre-programできるようにXilinxが用意してくれています.ただ、フィールドにいつもコレを持ち歩くの?っていう不満がマグマのように溜まりそうに思います.
USBからre-programしたい
けれど、量産基板でUSBコネクタからre-programしたいという要望があると、この回路をコピーするのは至難です.Xilinxが回路を公開している事例はあるけど(SP605で公開)、Xilinxは中身のlogicとfirmwareを公開してないんです.
写真には2つのchipが見えますけど、大きい方が昨今わたしが弄って遊んでいたEZ-USB(100pin)です.EZ-USBのfirmwareは公開されていません.小さい方のchipはFPGAです.Virtex2だったかな? FPGAのlogicは公開されていません.これをハックした事例をわたしは知りません.それに、値段の安い基板のre-programのためだけにEZ-USBとV2を載せるかフツー?っていう絶望感もあったりして (汗)

死力を尽くされた先人の方々
同じような背景で同じ願望を持つ方は全国津々浦々にいらっしゃるようで、基板の外部コネクタ飽くまでもUSBを厳守で、Xilinx FPGAを焼きたい、という努力をなさっている先人の方々はいろいろいらっしゃいます.ここ2日間ぐらいそこらを情報収集して回っていたのですが、結論は上手く動かせませんでした.古いバージョンのiMPACTなら動くけど、新しいバージョンではダメだとか、動作が不安定だとか、どうしても焼けないとか、、、いろいろでした.全般的に2012年以前に書かれた記事であるように思いました.
もちろん秋月でFT2232の基板を買って試しました.
先人の方々へのリンク、(多謝、多謝)
http://elecworld.blog13.fc2.com/blog-category-6.html
http://www.hmwr-lsi.co.jp/fpga/fpga_1.htm
http://fenrir.naruoka.org/archives/000644.html
http://nemuisan.blog.bai.ne.jp/?eid=186523
http://naknet.jpn.ph/blog/log/eid319.html

LatticeのispVM
iMPACTでSVFファイルを生成して、Latticeが提供するispVMというツールでXilinx FPGAを焼くという手段もあります.これには成功しましたが、SVFを生成するのがかったるくて嫌気がさして挫折しました.あと、JTAG chainに複数のデバイスが存在していて、かつSPI EEPROMが分岐接続されていたりすると、またまたかったるいかと思ってしまいました.

とはいえispVMについては有用なアプリであるように思いますので、簡単に解説しておきます.
LatticeのサイトではispVMを単独でDLはできません.
こちらのラチスのページにて、下記をDLします.
ispLEVER Classic 1.8 Base Module   (741MB)
↓これはispLEVERという統合開発環境で、その中にispVMが入っています.ispVMだけをインストールすることができます.
ちなみに、こういう↓Programmerも目立つ場所でDL出来ますが、これはispVMではありません.ご注意ください.
Programmer Standalone 3.4 64-bit for Windows

↓ispVMがFT2232基板をJTAGケーブルとして認識させる画面はこれです.autodetectで検出できると思います.
↓それで「scan」ボタンを押すと、Lattice以外のメーカーのFPGAは「JTAG-NOP」とかいう名称で認識されます.
 その後の手順は忘れましたが、JTAG-NOPデバイスをクリックして、JTAG-SVFに変更して、SVFファイルを指定し、Goボタンを押すと、Xilinx FPGAへprogrammingされます.SVFファイルは前もってiMPACTで作っておきます.

JTAG HS2+iMPACTって本当?
Digilentという会社がJTAG HS2というケーブルを販売しています.秋月でも取扱中.¥7000
http://akizukidenshi.com/catalog/g/gM-07741/
このJTAG HS2って、Digilent社が提供する「adept」というツールで、Xilinxを焼けるそうです.
https://www.digilentinc.com/Products/Detail.cfm?NavPath=2,66,828&Prod=ADEPT2
それだけではなくて、iMPACTからも認識するらしいっていうんだから、願ったり叶ったりだと思いませんか???

↓同じ回路でこんな小基板もDigilent社から提供されていて、この小基板をお客様の製品に載せてください、そうすれば、USBコネクタからXilinxのre-programができますよ、というコンセプトの商品です.
この写真を拡大してみると、載ってるchipがあのおなじみ「FT232」なんですよ.というコトは、、、手持ちのUSBシリアルが使えるのかも?   手持ちのFT232基板(USB-シリアル)をPCに繋いで、「adept」を起動してみましたが、「adept」がFT232基板を認識するコトはありませんでした.さすがにVID/PIDが違うから無理のようでした.

そこで、FT232のVID/PIDをDigilentを同じになるよう書き換えてみました.
まず、DigilentのFT232基板のVID/PIDを知るために、PC内のデバドラの.infファイルを開いてみます.
C:\Program Files (x86)\Digilent\Runtime\UsbDriver\dmodusb.inf
がそれです.
コメントアウトされてはいますが、これがDigilent社のVID/PID=1443/0007であるようです.
[DGLNT.NTamd64]
%DigilentUsbDeviceDesc% = DmodUsb,USB\VID_1443&PID_0007
%DonboardUsbDesc%       = DmodUsb,USB\VID_1443&PID_0005
%DmodUsbDesc%           = DmodUsb,USB\VID_1443&PID_0003
%DcabUSBDesc%           = DmodUsb,USB\VID_1443&PID_0001

FT232にはfirmwareは存在しませんが、VID/PIDやデバイスディスクリプタはFT232内部のEEPROMに保持されていて、焼き変えるコトができます.

↓FTDIが提供しているEEPROM焼きかえツールは「FT_Prog」というのがあります.これをDLして焼き変えてみました.これが焼き変え画面です.Vendor IDとProduct IDだけ変更してprogramしました.VID/PIDを焼き変えてしまうと基本的に元に戻せないので、FT232基板を殺すようなモノですから、真似するときは覚悟してやってくださいませ.
↓VID/PIDを焼き変えたFT232基板はこのように、「Digilent USB Device」と認識されるようになりました.
これで、「adept」が「JTAG HS2」として認識してくれるかな? と期待して「adept」を起動しましたけれど、残念ながらadeptはこのインチキ基板を認識はしてくれませんでした.まぁそんなもんだろう.

FT_Progを弄るとわかるんですが、いろいろと設定できる箇所があるんです.特にIOポートに関連する設定がいろいろあります.でも、それはさほど大量ではありません.

というコトは、、、
「JTAG HS2」を1つ買って、「FT_Prog」でEEPROMを全部表示させて、自作のFT232基板のEEPROMを寸分違わずに焼き変えれば、「疑似JTAG HS2」を作れてしまうのではないか??? とわたしは思います.

でも、もしも万が一それに成功しても、当ブログには書かないと思います.Digient社に対してあまりにアコギな仕打ちのように思うから.

追記: JTAG HS2に搭載のICはFT232Hという高速タイプで、わたしが上で実験したFT232Rとは微妙に異なるchipだとわかりました.

追記: JTAG HS2とiMPACT rev.13の組み合わせで、動作確認できました.ただし、DigilentのこちらのページのpluginをISEに組み込む必要がありました.
libCseDigilent_2.5.2-x86-x64-Windows.zip
これを解凍して出てくるファイルをISEのとあるフォルダにコピーすればOKです.わたしの環境ではこのフォルダになります.
C:\Xilinx\13.3\ISE_DS\ISE\lib\nt64\plugins\Digilent\libCseDigilent
これをやらないと、「cableが他のアプリに使われている」とiMPACTが怒ります.

追記:  JTAG HS2をFT Progで開いたら、なんと開けてしまいました.VID/PIDはDigilent社のナンバーになっているだろうとおもっていたのですが、なんとFTDI社のままでした.0403/6014

追記:  FT ProgはEEPROMの全エリアを触れるわけではなさそうです.EEPROMダンプは出来るけど、編集はできませんので、string discriptorの後続のエリアを触れません.APIを使って全部書きとかすれば書けちゃうんだろうなぁ.

追記:  プリント基板上で何らかのloop-backがされていて、iMPACTがそれを確認している様に推測されます.EEPの同一性だけじゃダメってのがオチです.撤退、撤退.

エイメン


人気ブログランキングへ

13 件のコメント:

  1. FT2232 fpga で検索 2番目くらいに マルチJTAGアダプタでCPUデバッグから FPGAコンフィグ なんて出るんですが

    返信削除
    返信
    1. Xilinxについては、海外の誰かがiMPACTがJTAG回路へ発するメッセージを解析したのがルーツになっているみたいです.そんなの公開されてないと思うので、どうやって作ったのかと思います.
      ともあれその情報を元に別の誰かがFT2232のドライバを作ったという流れです.
      ところがiMPACT Rev13だと新メッセージが出現するのでFT2232ドライバが反応できてません.
      仕様が公開されてないセカイですのでいろいろ難しいみたいです.
      ちなみに、FT2232を使ったAVRライタは仕様公開されているので無難に過ごせているようです.

      削除
    2. FT2232 fpg で ねむいさん 
      あるいは iMPACT を付けて V11が出ました。

      削除
    3. iMPACT V11は動くらしいですね.でもV13はダメでした.新設メッセージがあるらしいです.

      削除
    4. iMPACT 13 Xilinx では?

      削除
    5. libusb 1.0 がインストールされているかどうかの確認
      とか

      削除
    6. Jungo ドライバー かも?

      削除
    7. jungoとかlibusbは経由しないんです.リモートのポートを経由します.

      削除
    8. V13/V14 はどちらかが要るみたい

      削除
    9. フツーの使い方ではJungoを使います(V13の場合).
      ですがFT2232では諸事情により使わないんです.

      削除
    10. ? は検索語 fh232h も使えるようです

      削除
    11. 2232H と 232H のJTAGポート
      www.faqssys.info/um232h-b-breakout-module-as-a-parallel-port/

      削除
    12. 暗黙の了解が難しすぎ AG interface using their MPSS
      The FTDIchip.com USB interface chips FT232H, FT2232H, or FT4232H can be connected to Xilinx JTAG pins as follows:
      AD0 = TCK AD1 = TDI AD2 = TDO AD3 = TMS
      For FT2232H you can use BD0, BD1, BD2, BD3 as an alternate connection.
      FT2232Hの+3.3V出力に10kohmで+5Vにプルアップする モロでなければだめ

      削除