2012年4月20日金曜日

XilinxのUSBケーブルの中身

CPLDやFPGAに設定を書き込む(プログラミングやダウンロードと呼ばれる)にはJTAGインターフェースを使うが、PCには標準的なJTAGインターフェースがない。そこで、何らかの接続インターフェースを経由する必要がある。ちょっと前までは(昔、プリンター接続に使われていた)パラレルポートを使うのが一般的だったが、最近はUSB接続が当たり前になってきた。USB接続のスピーカーやキーボードは標準的なプロトコルが規定されているが、JTAGにはそういったものがなく、メーカーごとに独自のインターフェースを用意している。

Xilinxでは「プラットフォームケーブルUSB」というシリーズのケーブルを販売しており、要するにUSBからJTAGへの変換ケーブルである。WindowsやLinuxにデバイスドライバーをインストールすれば使えるようになるのだが、ちょっと気になったので調べてみたらなかなかおもしろい。

実はこの「プラットフォームケーブルUSB」自身がプログラマブルにできていて、デバイスドライバーが毎回設定を書き込んでいる。しかも、プログラマブルなパートとしてCypress社のEZ-USBシリーズ(8051プロセッサにUSBインターフェースを統合したもの)と、Xilinx社のCPLDであるXC2C256があり、それぞれの設定ファイルを書き込む仕組みになっている。書き込みに使われるのはそれぞれfxloadとimpactである。

CentOS 6.2の場合、Xilinx ISEをインストールしただけだと、設定ファイルの記述をしくじっていてfxloadがうまく動かなかった。/etc/udev/rules.d/xusbdfwu.rulesの"$TEMPNODE"という文字列をすべて小文字に置き換えて"$tempnode"にすると問題なく動くようになる。

プログラマブルということでXilinx謹製の設定ではなく、独自開発で動かそうという猛者もいて、xsvftool-xpcuというツールが公開されている。EZ-USB(8051用のC言語で記述)やCPLD(Verilog HDLで記述)のソースコードを含んでいて、どうやらUSBプロトコルまで独自開発しているようで非常に興味深い。

さらにおもしろいのが、XilinxのテストボードSP601などの設定の仕掛けである。JTAGインターフェースがついておらずUSBしかないので一体どうなっているのかと思ったら、上記の「プラットフォームケーブルUSB」に相当する回路(EZ-USBとCPLD)が基板上に最初から載っていて、そのかわりFPGAのJTAGインターフェースが出ていない。USBでアクセスできるようにしてあるのだから生のJTAGはいらないでしょ、という理屈はもっとも。ところが、無理やり生のJTAG端子を増設する人もいておもしろい。

なお、SP601でxsvftool-xpcuが使えるか、というところまでは未検証。

2 件のコメント: