ソフトウェア仕様

2003/12/24

【ソフトウェア概要】
 DLC-008 には 基本ソフト ( 実用性のあるサンプルプログラム ) を付属しています。このプログラムは,サポートページよりダウンロードすることができます。このプログラムはSVFファイルから、USB-JTAG 用データの変換と送信を行い CPLD/FPGA/PROM に対して書込みを行います。


次の機能はサポートしていません。
1.JTAGチェーン対応していません (ターゲットは1つのみ)
2.ザイリンクス社以外のデバイス
3.ベリファイはしていません ( TDO を一致させていません )



【SVFファイルの解説】
 Serial Vector Format (SVF) は Texas Instruments 社が開発した IEEE1149.1 (JTAG) のバス動作を記述する文法仕様です。USB-JTAGの基本ソフトが対応しているSVF コマンドは、次の6つです。

基本ソフトがサポートしているコマンド
SVFコマンド 説明
ENDDR SDRコマンドの最終ステート ENDIR IRPAUSE;;
ENDIR SIRコマンドの最終ステート ENDDR IDLE;
SDR データレジスタにスキャン入力されるデータパターン SDR 32 TDI (00000000) SMASK (ffffffff) TDO (f6d8f093) MASK (0fff8fff) ;
SIR インストラクションレジスタにスキャン入力されるデータパターン SIR 8 TDI (ff) SMASK (ff) TDO (01) MASK (03) ;
STATE TAPコントローラの状態遷移 STATE RESET IDLE;
RUNTEST 指定したステートでTCKパルスを入力 RUNTEST DRPAUSE 5000 TCK;

ザイリンクス社インパクトから生成されるが、基本ソフトがサポートしていないコマンド
SVFコマンド 説明 省略した理由
HDR/HIR/TDR/TIR バイパスされるデバイスに対するビット指定 JTAGチェーンを無効とし,ターゲットデバイスは1個
TRST TAPコントローラをハードウェア的にリセットするための信号 ザイリンクスデバイスには TRST ピン がないため

ザイリンクス社インパクトからSVFファイルとして生成されないSVFコマンド
FREQUENCY
PIO/PIOMAP

JTAGには、次の16個のステートがあります。図に記述している数値は,他のステートに遷移するときのTMSの値です。[RESET] ステートから [IDLE] への遷移はTMSを「0」の状態で、TCKの立ち上がりエッジにて、遷移します。このとき,TMSが「1」であれば、[RESET]のままです。

TMSの値によるステートの移動


実際のSVFファイルを例に説明します。
1 . // SVFファイルの例
2 . TRST OFF;
3 . ENDIR IRPAUSE;
4 . ENDDR IDLE;
5 . STATE RESET IDLE;
6 . TIR 0 ;
7 . HIR 0 ;
8 . TDR 0 ;
9 . HDR 0 ;
10. SIR 5 TDI (09) ;
11. SDR 16 TDI (1234) SMASK (ffff) TDO (5678) MASK (fff0) ;
12. RUNTEST DRPAUSE 5000 TCK;

13. STATE IDLE;

※ 一行は’;’セミコロンで指定します。
※ 始めにTMSを「1」にしてTCKにクロックを5回供給します。これによって,初期ステートが[RESET](Test-Logic-Reset)になります。

1. ” // ” はコメント文です
2.TRST コマンドはTRST信号ピンが存在しませんので,無視します。
3.SIR コマンドの最終ステートを [IRPAUSE] とします。
4.SDR コマンドの最終ステート [IDLE] とします。この ENDIR/ENDDR はファイルの先頭以外でも出現します。
5.ステートを [RESET] から [IDLE] とします。
STATEコマンドは、最終ステートとその経路をしていします。
例 : STATE IREXIT2 IRUPDATE DRSELECT DRCAPTURE DREXIT1 DRPAUSE;
上記のような場合には [現在のステート] -> [IREXIT2] -> [IRUPDATE] -> [DRSELECT] -> [DRCAPTURE] -> [DREXIT1] -> [DRPAUSE]の順にステートを遷移します。


6−9.ターゲットのデバイスが1つしかない場合、TIR/HIR/TDR/HDR は 「0」 となります。これは無視しても影響はありません。


10.SIR コマンドは 5 はスキャン対象のビット数です。このコマンドが実行されると、ステートを [IDLE] から [IRSHIFT] に遷移します。実際にスキャン入力する TDI の値は、TDI ( 09 ) の 0x09 です。 [IRSHIFT] に留まったまま下位から順に 10010 を入力します。[IRSHIFT] に留まるとは TMS を 「0」 にしたままということになります。0x09の下位から数えて5ビット目(最後のビット)は TMS を 「1」にしてステートを [IREXIT1] に移動します。スキャン対象のビット数は
数ビットから数百万ビットまであります。
そして [IREXIT1] から [IRPAUSE] に遷移します。つまり、「ENDIR IRPAUSE;」 で設定したステートまで遷移します。ENDIRやENDDRが省略された場合には、[IDLE] となります。

11.SIRコマンドと同様の考え方ですが、ステートは [DRSHIFT] にてデータを入力します。まず、先程のSIRコマンドで遷移した[IRPAUSE] から [DRSHIFT] まで遷移します。TDI の値は、TDI (12345678) の 0x12345678 です。SMASK が示す数値が 「0」 であれば "don't care" という意味です。0xffffffff なのですべて「1」となり32ビットすべて必要な値です。
0x12345678は ( 10010001101000101011001111000 ) なので 下位ビットから 0001111000011010100010110001001 となります。32ビット目(最後のビット)はTMSを「1」にして、[DRSHIFT] から [IDLE] まで遷移します。「ENDDR IDLE;」 にて最終ステートを設定したためです。この文が省略された場合には [IDLE] となります。またベリファイの機能はありませんので、「TDO (f0614093) MASK (0fffffff) ;」 は無視します。

12.RUNTEST コマンドは、指定のTCKクロック数の間、[設定したステート] に留まります。「RUNTEST DRPAUSE 5000 TCK;」であれば、[現在のステート] から [DRPAUSE] に遷移し,TCK数で表された待ち時間となります。Virtex系のFPGAでは、実際にTCKクロックを供給しないと動作しません。USB-JTAGでは、シリアル通信が最大1Mbpsの場合でも動作するように設定してあります。

前コマンドで遷移した [IDLE] から [DRPAUSE] に遷移します。[DRPAUSE] にて TMS を 「0」 にしたままで、TCKクロックを供給します。


13.ステートを [DRPAUSE] から [IDLE] に遷移します。

以上のように、指定されたコマンドを先頭から順に処理していけばFPGA/CPLD/PROMデバイスにプログラミングすることができます。



【SVFファイルとオシロスコープ波形】

前項にてステートの動作を説明しましたが、USB-JTAGからの波形について説明します。
1 . // SVFファイルの例
2 . TRST OFF;
3 . ENDIR IRPAUSE;
4 . ENDDR IDLE;
5 . STATE RESET IDLE;
6 . TIR 0 ;
7 . HIR 0 ;
8 . TDR 0 ;
9 . HDR 0 ;
10. SIR 5 TDI (09) ;
11. SDR 16 TDI (1234) SMASK (ffff) TDO (5678) MASK (fff0) ;
12. RUNTEST DRPAUSE 5000 TCK;

13. STATE IDLE;


処理の前に[IDLE]から[RESET]に遷移。ステートの移動にはTDIの値は関係ありません。

STATE RESET IDLE;
[RESET] から [IDLE] に遷移。TDIの値は影響しません。

SIR 5 TDI (09) ;
ステート [IDLE] から [IRSHIFT] まで遷移し、TDIから5ビット 0x09 を下位から出力する。終了ステートはENDIRで設定した[IRPAUSE]。


SDR 16 TDI (1234) SMASK (ffff) TDO (5678) MASK (fff0) ;
画像が長いので、3つに分割します。はじめに[IRCAPTURE] から[DRSELECT] まで移動。
次にTDI(1234)からを [IRSHIFT] にて出力します。6ビットにて2回送信し、残りの4ビットを個別に送ることで16ビット送信します。
「ENDDR IDLE;」と設定してあるので、[IDLE] に遷移します。

RUNTEST DRPAUSE 5000 TCK;
[IDLE] から [DRPAUSE] まで遷移し、そのステートでTMSを「0」にてTCKクロックを入力します。

STATE IDLE;
TMS 110 にて、ステートを [DRPAUSE] から [IDLE] に遷移します。



【USB-JTAG基本ソフトウェアの解説】


上図のように、SVFファイルから1行ずつ読込みを行い、コマンドの判定を行います。生成されたデータは送信キューにためて、一度に送信します。




メールでのご質問はこちらへどうぞ

HDLのホームページへ