2003.9.12 Ver.0.3 DesignWave2003.10対策
2003.1.29 CoolRunnerが書き込めない事を追記
2003.1.21 自動化に関する補足を追加
2003.1.20 Ver0.2 高速版の公開と更新
2003.1.10 Ver0.1 バイナリのみ暫定公開

USBプローブ対応XSVFプレーヤー

概要

 Xilinxで公開されているXSVFプレーヤーを、SPCISPのDLLドライバー用にカスタマイズしたものです。
 XilinxのFPGA用コンフィグROMやCPLDをUSB-JTAGプローブで書き込めます。

特徴

・SPCISP用のドライバーDLLがそのまま使用できるので、様々なプローブに対応します。
・再生可能なXSVF(SVF)ファイルがあれば、プロトコルにかかわらず様々なデバイスに使用できるハズです。(AlteraCPLDも可能かは不明)
・「とりあえずXC18V0xを書き込むため版」なので遅くて使い辛いです。
・Ver.0.3でAlteraCycloneのコンフィグレーションができるようになりました。

ダウンロード

playxsvf暫定版 (for JTAG DLL Driver)
 バイナリ Ver.0.3
 暫定版バイナリ Ver.0.2
 暫定版バイナリ Ver.0.1

各種JTAGプローブ用ドライバー
 こちらから最新版をダウンロードしてください。

PLAYXSVFオリジナルと、SVFtoXSVFコンバータ
 SVFtoXSVFコンバータはこのソフトに必修です。
 このページのXAPP058->PC直リンク

XSVFとは?

 テキストベースのSVFファイルを、ファイルサイズ効率や、マイコン等による再生プログラムが簡略化出来るようにバイナリ形式に変換したものです。
 1チップマイコン+メモリカードで、JTAGからFPGAを単体コンフィグレーションするような場合にも、XSVFの様なフォーマットを採用するのが安易かつ汎用的と思います。
 くわしくは、XilinxアプリケーションノートXAPP058を参照ください。

XSVF変換ツールとオリジナルソース

 SVF->XSVFへの変換ツール、及びxsvf-playerのソースはXilinxのサイトからダウンロードできます。
 しかし、現在はトップからメニューとたどってもたどり着けません。
 FAQからたどると、2003.1.20現在はここのXSAPP058の右側からダウンロード出来ます。
 SVF->XSVF変換ツール(svf2xsvf.exe)は必要ですのでダウンロードする必要があります。

 しかし、まぁXilinxのサイトは相も変わらず分かりづらいことで。

EZ-USBプローブの作成

SPCISPのページを参照してください。

注意事項、免責

 このプログラムや製作記事に関して、その使用に関していかなる責任も負いません。
 各々自己責任と、良識に基づいて情報やプログラムを使用してください。

プログラムの説明

 オリジナルのplayxsvfを、SPCISPのDLLドライバー用にポーティングしたものです。
 対応プローブはEZ-USB高速版、EZ-USB旧版、XilinxParalell互換、AlteraByteBlaster互換で下記の順番に検索されます。
1.spc_usb2.dll : EZ-USB高速板、デバイス0固定
2.spc_usb2.dll : EZ-USB高速板、デバイス0固定
3.spc_xpar.dll : XilinxParalell互換、0x378(LPT1)固定
4.spc_apar.dll : AlteraByteBlaster互換、0x378(LPT1)固定

 1、2、3、4の順番にDLLを検索していきます。

 コンパイラはmingwを使用しています。Win32用のコンソールプログラムです。
 playxsvfはパラレルポート等ダイレクトI/OのI/Fを想定しているため、USB等のパケット方式に対応させるため、メイン部も多少ハックしています。

使い方

 オリジナルのplayxsvf.exeの代わりに使用します。
 DLLドライバが必要ですので、各自使用したいプローブに対応したdllを同じディレクトリにおいてください。
 WinNT/2K/XPでパラレルポートを使用する方はGIVEIO.SYSサービスを別途開始しておくか、GIVEIO.SYSを同じディレクトリにおいておく必要があります。
 書き込み中は沈黙するので、"-v 2"か"-v 3"オプションの指定をお勧めします。

XSVFファイルの作成方法(Xilinx ISE)

 XSVFへの道のりは長く、とても手間がかかります。

1.XC18Vxxシリーズへ、FPGA用コンフィグデータを書き込むXSVF
 ・デザイン時、"Generate PROM, ACE, or JTAG File"でiMPactを起動
 ・"Prepare Configeration Files"を選択
 ・"PROM File"を選択
 ・"Xilinx Serial ROM","MCS"を選択
 ・対象デバイスを選択、Addで追加後、"次へ"
 ・"次へ"
 ・"Add"を押して、デザインファイル(.bit)を選択
 ・"いいえ"、"完了"、"はい":これで.mcsが出来上がります。

 ・"Edit"->"Lanch Wizard"で再び起動
 ・"Prepare Configeration Files"を選択
 ・"Boundary-Scan File"を選択
 ・"Xilinx Serial ROM","MCS"を選択
 ・"SVF File"を選択、ファイル名を指定、次に.mcsファイルを指定
 ・PROMデバイスを選択
 ・PROMデバイスを右クリック->"Program"
 ・"OK"を押す。※USBではVerifyのチェックをはずすことをお勧め
 ・これでsvfファイルが出来上がります。
 ・コマンドラインから"svf2xsvf -i [SVFファイル] -o [XSVFファイル]"

2.CPLDコンフィグ用データを書き込む方法
 ・上のmsc->svfと同じで要領で、jedからsvfを作成します。
 ・ROMデータの作成がないのでbit->mcsの作業は不要です
 ・私はCPLDに関する動作チェックは一切おこなっていません。
2003.1.29 XCR3(CoolRunner)の書き込みを試したところ、出来ませんでした。

XSVFファイルの作成方法(Altera Quartus II)

1.CycloneシリーズのJTAGコンフィグレーション
 ・"Tool"-"Programmer"のダイアログで、書き込むsofファイルを選択
 ・"File"-"Create/Update-Create"-"jam,svf or ISC File"を選択
 ・ファイル名を決定する。
 ・"File Format"を"Serial Vector Format"に設定
 ・OKボタンを押す。これでsvfが出来る。
 ・コマンドラインからsvf2xsvfをオプション付きで実行する
  "svf2xsvf -fpga -rlen 8192 -v2 -i [SVFファイル] -o [XSVFファイル]"

 iMPactの様に、最初にIDCODEチェック等はしてくれませんが、チェックサムは見ているようです。
 JTAGのDaisyChainには対応していないようです。
 -fpga指定は必修です。

書き込み時間(参考)

バージョン ドライバー デバイス 条件 実行時間
0.3 spc_usb2 Cyclone EP1C3 -rlen 8192 0.751sec.
0.2 spc_usb2 XC18V01 ベリファイ無し 16.153sec.
0.2 spc_usb2 XC18V01 ベリファイ有り 38.665sec.
0.1 spc_usb V1.00 XC18V01 ベリファイ無し 39.546sec.
0.1 spc_usb V1.00 XC18V01 ベリファイ有り 484.357sec.
0.1 spc_xpar V1.00 XC18V01 ベリファイ無し 8.281sec.
0.1 spc_xpar V1.00 XC18V01 ベリファイ有り 26.558sec.

今後の展開

 XSVFまで手間がかかりすぎるため、XilinxのFPGAならSPCISPから.bitファイルを直接FlashROMに書き込めるようにした方がずっとましです。

 最適化により実用範囲速度になったので、CPLDをターゲットとしたSVFプレーヤーとして書き直そうかと再考中。でも他にもそんなフリーソフトあったよなぁ
 もしくは、XSVFもどきの独自フォーマットを作らないとダメかな

自動化に関する補足

 iMPactのバッチモードを使用すれば、コマンドラインでSVFまで作成が出来ることに気が付いた。
 DOSのバッチファイルと組み合わせれば、bit/jedファイルから書き込みまで自動化することも可能だ。
 iMPactのバッチコマンドを記述するのもまた面倒ではあるが、最初に一回作ればすむ話なので、CPLD開発向けにはこの手はありかもしれない。
 iMPactのバッチモードについては、iMPactの日本語マニュアルに説明があるが、Webpackではインストールされない為、別途ダウンロードする必要がある。