/* * jtagw - JTAG writer by MINI EZ-USB * (version 0010) * by uratan! 2005.1.12 */ 概要 Xilinx製 の CPLD/FPGA を書き込むための、XSVF ファイルの JTAG への再生 処理を行う EZ-USB 用ファームウェアです。XSVF ファイルをホスト PC より 受け取り、パラレルダウンロード互換ケーブルを駆動して書き込みを行います。 回路図ほか本ツールの経緯などに関して、こちらの web をご覧ください。 http://www002.upp.so-net.ne.jp/uratan/xi/index.html - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 特徴 ・Xilinx 提供による PlayXSVF のコード(v5.01) はすべて EZ-USB 側に 移植され、実行されます。 ・USB Printing Device として動作するため、Win2000 では usbprint.sys にて 「USB 印刷サポート」として認識され、デバイスドライバが不要です。 ・とりあえず XC9536XL と XC3S50 と XCF02S に使う分には使えてます。 ・書き込み速度は(もっとも小さい回路で)以下のとおりです。 +---------+---------------------+----------+---------------------+ | device | XC9536XL | XC3S50 | XCF02S | +---------+----------+----------+----------+----------+----------+ |Operation|Er/Wr/Vrfy|Vrfy only |Wrt only |Er/Wr/Vrfy|Vrfy only | |xsvf size| (39kB) | (18kB) | (55kB) | (600kB) | (538kB) | +---------+----------+----------+----------+----------+----------+ | Time | 16sec | 6sec | 11sec | 118sec | 84sec | | Status | Good | Good | Good | Good | Good | +---------+----------+----------+----------+----------+----------+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 制限事項 ・コンパイラの 4k制限から、XSVF 再生処理の一部仕様が削除・変更されて ます。また RAM 容量の都合より 1バッファ 768bytes (6144bits) までに 制限されます。 (svf2xsvf502.exe -fpga -rlen 4096 などのオプションが必要) ・データ出力はコマンドプロンプトより以下の形で行います。ダウンロード ケーブルをパラレルポートに直接繋いだ状態と等価な状態を作るわけでは ありません。 +-------------------------------- |C:\XXX> copy/b xxxx.XSVF lptN +-------------------------------- ・上記「USB 印刷サポート」による lptN 出力では、XSVF ファイルの はじめと終わりが認識できないため、書き込み時にはオペレータの アシストが必要です。 ・私は公式な USB の VID を付与されておりませんので、本ファームウェアでは VID = 0x0547 (Anchor Chips Inc.) PID = 0xfffc を使用しています。PID に 0xFFFC を使用しているのは、 "EZ-USB Control Panel"、前作 "UZK" と共存し、なおかつ OS 標準の 「USB 印刷サポート」デバイスドライバを使用するためです。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - オリジナル PlayXSVF(v5.01) からの変更点 1) 圧縮オプションほかをオフにした (XSVF_SUPPORT_COMPRESSION, DEBUG_MODE) 2) 期待値検査のリトライをなしにした (ucMaxRepeat まわり) 3) waitTime() のパラメータの単位を usec から msec に変えた 4) 省略も含め、変数・引数・戻り値のサイズを縮めた 5) SXsvfInfo 構造体をグローバルとして確保し、関数へのポインタ渡しを止めた 6) 中間関数である xsvfBasicXSDRTDO() を展開し、削除した。 7) 使用しない関数・変数を削除した 8) セグメント修飾詞を追加した なお、 ・一言でいうと、4kBytes 収めるためにきれいに書いてあるものを 汚く書き直してます。 ・「2) 期待値検査のリトライ」は、そもそも XC9500/XL のために 導入されたようにコメントがありますので、機能削減はよろしく ないのかもしれません。 ・「3) waitTime()」内部処理については、どう実装するのが正解 なのかよくわかりません。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ファイルの説明 00readme.txt --- このファイル makefile --- make.exe 用の makefile link.awk --- リンカ BL51.exe に食わせる定義ファイルを作成する awk スクリプト fw.c --- EZ-USB のメインエントリー USBJmpTb.a51 --- EZ-USB の割り込みベクタの記述 dscr.a51 --- 各種 USB デスクリプタの定義の記述 uart.c --- デバッグ用に使う uart0 制御サブルーチンの記述 periph.c --- JTAGW のメインプログラムの記述 misc_io.c --- その他 I/O 制御ルーチン (すべてのファイルの TAB は 4 です) micro.h --- 移植された PlayXSVF 本体 micro.c --- (変更部分は主に __C51__ にて切り分け) lenval.h --- 移植された メモリ管理ルーチン lenval.c --- (変更部分は __C51__ にて切り分け) ports.h --- 移植された 機種依存部分 ports.c --- (変更部分は MINIEZUSB にて切り分け) (以下は make した結果生成されるファイルの一部です) jtagw.hex --- HEX フォーマットの jtagw プログラム jtagw.iic --- "Load EEPROM" で使用する形式の jtagw プログラム なお、 ・micro.h, micro.c, lenval.h, lenval.c, ports.h, ports.c の 6ファイルは Xilinx 提供によるものを改変したものです。 (eisp_pc.zip より、v5.01) ・本ファームウェアは、Cypress の web サイト "AN2131-DK001 EZ-USB Development Kit" よりダウンロードできる "EZ-USB Development Tools V2.61.700" にて 作成いたしました。 ・本ファームウェアのコンパイルは、EZ-USB/AN2131 開発キットに含まれる KEIL ELEKTRONIK C51 COMPILER V6.10 にて行いました。 ・プログラムのコンパイルには、上記の開発環境の他にも windows 版の make と awk と rm が必要です。これらは、 "Native Win32 ports of some GNU utilities" に含まれる make.exe, gawk.exe, rm.exe が使用できます。 ・また本ファームウェアは AN2131SC (Rev.E) にて、win2000 に対して 動作確認を行いました。 ・以下の 4ポートは、回路図中には配線がありますがファームウェア からは使用しておりませんので、パラレルダウンロードケーブルとの 接続においては配線する必要はありません。 PB4: LBout PB5: LBin1 PB6: LBin2 PB7: VccSense - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - プリンタの lptN へのアサイン方法 ・詳細は を ご覧ください。 ・以下の手順にて、本ファームウェアにより出現する USB プリンタポートに lptN をマップして使用します。 1. 「プリンタの追加」ウィザードにより USB ポート「USB00n」に プリンタを追加します。この際プリンタのモデルは何でもかまい ませんが、「共有する」ことが必要です。 (以下の例では EPSON, MJ-700V2C を使用、共有名は "EPSONMJ" またコンピュータ名は "tungsten" です) 2. コマンドプロンプトより以下のように操作します。 (a) マイコンピュータ名とプリンタの共有名を確認する +------------------------------------------- |C:\> net view |サーバー名 注釈 |---------------------------------------------------------- |\\TUNGSTEN |~~~~~~~~~~~============================+ |コマンドは正常に終了しました。 | | | |C:\>net view \\tungsten <=========+ |\\tungsten の共有リソース |共有名 タイプ 使用 コメント |---------------------------------------------------------- |EPSONMJ Print EPSON MJ-700V2C ESC/P R |~~~~~~~=======================================+ |コマンドは正常に終了しました。 | +------------------------------------------- | | (b) 共有プリンタの lptN へのマップと削除 | +------------------------------------------- | |C:\>net use lpt2 \\tungsten\epsonmj <=======+ |コマンドは正常に終了しました。 | |C:\>net view \\tungsten |\\tungsten の共有リソース |共有名 タイプ 使用 コメント |---------------------------------------------------------- |EPSONMJ Print LPT2 EPSON MJ-700V2C ESC/P R | ~~~~ |コマンドは正常に終了しました。 +------------------------------------------- 3. コマンドプロンプトより、copy コマンドのコピー先として指定 し使用します。copy で指定したファイルは OS によりスプール された後に実際に USB 上に出力されます。追加したプリンタを 「開く」ことで、スプール/出力中のドキュメントの状態を確認 できます。 +------------------------------------------- |C:\>copy/b xxxx.XSVF lpt2 | +------------------------------------------- 4. 必要なくなった場合には、以下により削除できます。 +------------------------------------------- |C:\>net use lpt2 /delete |lpt2 が削除されました。 | +------------------------------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 書き込み操作手順 本システムでの PC との接続では、以下の点が不十分な状態となってます。 ・データはただ垂れ流されるだけで、出力の開始・終了を知る術がない ・エラーが起こったことをホスト PC に伝えられない ・よって、データの出力を途中で打ち切ることができない なので CPLD/FPGA 書き込みにおいて、オペレータがアシストすることで 必要条件を満たすように作りました。 まず、3つの LED はおのおの以下の状態を表示します。 黄 : USB Busy --- PC よりのデータが流れている間点灯します。 PC で出力させたデータはすべてバッファリングされ、EZ-USB 側 XSVF コントローラの状態にかかわらずデータ末まで転送は行われます。 この黄の LED はデータ転送中、つまり PC 側のバッファが空に なっていないことを示します。 赤 : Error --- XSVF ファイルの再生中にエラーがあったことを示します。 緑 : Complete --- XSVF ファイルの終末に至ったことを示します。 赤、緑の LED はともに終了ステータスであり、EZ-USB 側 XSVF コントローラの停止を意味します。どちらかが点灯以降、送られて くるデータはすべて無視・破棄されます。 またスイッチは、停止した EZ-USB 側の XSVF コントローラをリセットするため に設けてあります。(スイッチを押している間、JTAG の STATE RESET 操作も 行われます) 以上より、書き込みにおいては以下の手順に従ってください。 「データを送出する前に、PC のバッファに貯まっているデータがないか 黄 LED の消灯を確認する。スイッチを押してコントローラを初期化し、 "copy/b xxxx.XSVF lptN" によるデータ送出を開始する。 緑・赤 LED の点灯を見て結果を知る」 具体的には以下のようになります。 ○-点灯、×-消灯 +---+----------+-------------------------------------------------- | | 黄 赤 緑 | +---+----------+-------------------------------------------------- | 1 | × × × | 初期状態、XSVF ファイルの受け入れ可能状態 +---+----------+-------------------------------------------------- | 2 | ○ × × | PC から流れてくるデータに従って XSVF | | | オペレーションを行っている状態 +---+----------+-------------------------------------------------- | 3 | ○ ○ × | エラーが起こったのでオペレーションは停止、 | | | ただし、PC からのデータ出力は継続中なので +---+----------+-------------------------------------------------- | 4 | × ○ × | PC からのデータがすべて掃けるのを待って、 +---+----------+-------------------------------------------------- | 5 | × × × | スイッチを押してデータ受け入れ可能な初期状態に戻す +---+----------+-------------------------------------------------- | 6 | ○ × × | 再度 PC から流れてくるデータに従って XSVF | | | オペレーションを行っている状態 +---+----------+-------------------------------------------------- | 7 | × × ○ | XSVF 操作が成功終了した状態。 +---+----------+-------------------------------------------------- | 8 | × × × | スイッチを押してデータ受け入れ可能な初期状態に戻す +---+----------+-------------------------------------------------- なお緑・赤 LED が点灯している間の JTAG オペレーションを伴わない 場合のデータ転送速度は以下のとおりです。失敗したらちょっと待ってあげて ください。 +---------+----------+---------------------+ | | XC3S50 | XCF02S | +---------+----------+----------+----------+ | |Wrt only |Er/Wr/Vrfy|Vrfy only | | | (55kB) | (600kB) | (538kB) | +---------+----------+----------+----------+ |Feed Only| 1.5sec | 16sec | 14sec | | (Rate) | (36kB/s)| (37kB/s)| (38kB/s)| +---------+----------+----------+----------+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 参考資料 以下の web リソースを使用・参考にさせていただきました。 ◎Xilinx アプリケーションノート 組み込み型マイクロコントローラを使用するザイリンクスの インシステムプログラミング機能 (http://www.xilinx.co.jp/xapp/j_xapp058.pdf) および関連ファイルパッケージ (v5.01) (ftp://ftp.xilinx.com/pub/swhelp/cpld/eisp_pc.zip) (これに svf2xsvf502.exe も入ってました) ◎USB T.A. (http://www.usb.org/developers/docs/) より Printing デバイスクラス定義 (http://www.usb.org/developers/devclass_docs/usbprint11.pdf) ◎AN2131-DK001 EZ-USB Development Kit より EZ-USB Technical Reference Manual (http://www.cypress.com/cfuploads/support/developer_kits/ez-usb_trm.pdf) EZ-USB Development Tools V2.61.700 (http://www.cypress.com/cfuploads/support/developer_kits/EZ-USB_devtools_version_261700.zip) ※ Cypress の web サイトは刷新されたらしくこれらの URL ではアクセスできなくなっているようです - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ライセンス (Xilinx 製のコードの扱いは別にして、) このプログラムはフリーソフトウェアです。使用にあたっては、 X11 License に従うこととします。 (http://www.gnu.org/licenses/license-list.ja.html) (http://www.gnu.org/licenses/license-list.html) このプログラムは有用であることを願って頒布されますが、*全くの無保証* です。商業可能性の保証や特定の目的への適合性は、言外に示されたものも 含め全く存在しません。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 作者 uratan@po.iijnet.or.jp http://www002.upp.so-net.ne.jp/uratan/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -