/*
* 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/
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -