com.miolab.junk.test::shobon::article20050705210036

Sun, 31 Jul 2005

shobon-JTAG 2005.7.5 (last update 2005.8.26)

トピックが長引きそうなので、一部新エントリに移動しました。

★shobon-JTAG ダウンロード

shobon-JTAG は、動作状態、あるいは内部回路と切り離した状態で、FPGA,CPLD 等の JTAG バウンダリスキャン(IEEE 1149.1)対応デバイスのピンの信号レベルをモニタするためのソフトです。

shobon-JTAG を作ったいきさつについては、こちらもお読みください→旧エントリ:JTAG の練習(6/13)

ジャンクソフトですので、ソースコードでの配布(VisualStudio.NET 2003 プロジェクトフォルダの圧縮 イメージ)となっています。

配布条件は一部私に著作権のないと思われるファイル( 他社デバイスドライブ用 DLL,ListViewX フォルダ以下のもの、 etc)を除き、現行 GPL に準じるものとします。

コンパイル済みバイナリ(アセンブリ)が展開フォルダの shobonjtag/bin/Debug の下に含まれている場合がありますが、 最新のソースでビルドしたものである保証はありません。できればリビルドをお勧めします。

上記のことから、shobon-JTAG を使ってみるには VisualStudio.NET 2003、実行には giveio.sys のインストール、および .NET Framework と NT 系 OS が必要です。

現在動作確認している OS および環境 は WindowsXP (SP2), Windows2000 Professional (SP4) 上の .NET Framework 1.1です。

現在手元にあって、shobon jtag での動作が確認できている JTAG ケーブルはパラレルポート接続の

★ByteBlasterMV(互換回路)
★Xilinx Parallel(互換品、HumanData さんの XC2 旧モデルの方
★ByteBlasterII (互換品、アルファプロジェクトさんのHJ-LINK

の3種類です。

giveio.sys の入手、インストールについては、google 様に聞いてください。

shobon-JTAG をロジックモニタとして実用的に使うには、ピン番号とバウンダリスキャンビット番号の対応情報を与える必要があります。これらは、デバイスメーカが配布している BSDL ファイルに記述されています。BSDL ファイルは VHDL のサブセットだそうで(Verilog しか使えない私にはよくわかりませんが)人間の読めるテキストファイルになっています。

大体、前半にピン番号とデバイス信号名称の対応テーブル、後半にバウンダリスキャンビット番号とデバイス信号名称の対応テーブルが記述されているようです。

BSDL ファイルの配布元
Xilinx: http://www.xilinx.com/support/sw_bsdl.htm
Altera: http://www.altera.com/support/devices/bsdl/bsdl.html

実際にモニタしたい信号数が少ない場合には、BSDL ファイルを眺めながら(笑)、バウンダリスキャンビット番号、ピン番号、信号名称を手入力でいれてもさほど手間ないではないとおもいます。データは View メニューで現れる ViewForm 上の右クリックメニューから 編集、Load、Save できるようになっています。

しかし、すべてのピンをざっと眺めたいというような場合には、手入力は非常に面倒です(っていうか、自分がそうでした)。そこで、shobon-JTAG(6/30 以降版) には、これらが記述された BSDL ファイル(のごく一部)を読む機能がついています。

デバイス選択後、Viewer ->(ListView 上の右クリックメニューの BSDL ほげほげ)。
偶然(笑)うまくよめた場合には、手入力の必要がありません。 現在 Device メニューにあるデバイスの BDSL は一応それなりに読めることを確認しております。
(なお、Xilinx ConfigRom の BSDL を読む場合はファイル名に、なんとか 1532 のついてないほうを使ってください。)

「(・ω・) JTAG 20050623」(ちょっと古い、間違いもありますが、シンプル。ちょっとのぞいてみようという方向け)

「(・ω・) JTAG 20050722」(余計なコード盛りだくさん。いちおう安定版)

「(・ω・) JTAG 20050826」(新しい。余計なコード盛りだくさん。β版)


-- shobon-JTAG 使い方まとめ --

1)giveio.sys インストール。

2)shobon-JTAG 本体起動。

3)ケーブルとベースアドレス選択。メインメニューの Config->Cable、Config->LPT Port。
デフォルトは ByteBlasterMV 、ポートアドレス 0x3BC (俺設定)になっていますので、それ以外のケーブル、LPT ベースアドレスの場合は起動のたびに選んでください。
んなことやってらんないよ!、という方は "Form1.cs" へGO!
してソースを改造してリビルド。あなたの「俺設定」をデフォルトにしてね。

4)デバイスを選択。
メニューにないよ、という方は「shobon-JTAG に新しいデバイスを追加して使ってみる例」に GO!。

5)「Back To Run-Test/Idle」ボタンを押します。下のボタンが押せるようになります。

6)「Capture-IR」ボタンを押します。ここでステータスバーに IR Capture Success (xx ms) の表示が出れば動作しています。

ステータスバーに Invalid Instruction Capture!! と表示されてしまった場合(・ω・)

うまく動作していないようです。以下をチェックしてください。

「ケーブルの選択」「LPT ベースアドレス」「ケーブルの接続」
「デバイスの電源」「自作デバイスクラスファイル IR データ」
特に "111111111""000000000" とか、連続して同じ状態が表示
(Capture した IR レジスタの内容は横の TextBox に出ます)される場合は
ケーブル種類とベースアドレス、電源を再チェックしてください。


なお、動作途中でデバイス、ケーブルを変えた場合は、一度 shobon-JTAG を再起動したほうが確実です。

7)「SAMPLE(...)」ボタンを押すたびにピンの状態をサンプルしてビット列が表示されます。何度も押してられない方は 「Continuous」をチェックしてからボタンを押すと、連続サンプルします。

8)"1010101010000101"とか見ても分けわかんないので、(Continuous のチェックを外した状態で) View -> ShowViewer を選択。ViewForm を開きます。

9)監視したいデバイス ViewForm の ListView の右クリックメニューから「Read Info from BSDL file」を選択。メーカ BSDL ファイルを読み込みます。

A)「SAMPLE」を押すたびにピンの情報が色分けされて表示されます。もちろん「Continuous」をチェックしておくと連続サンプルします。カラフルできれいです。
なお、連続サンプル時、メニューの反応が悪いときは、「Continuous」のチェック を一旦はずしてください。

B)WebPack6 をお使いの方、D2CAD をお使いの方は、Mentor ネットリストもしくは .ucf を読ませて、NAME 欄を利用している信号名称にできます。「Read Pin-Name Info ....」を選択して読ませてください。
Mentor ネットリストの場合は、どの石が該当デバイスかわかんないんで、ダイアログで IC7 とか U6 とか、入れてやる必要があります。

C)UCF も Mentor ネットリストもない方は、ピン名称を手で編集出来ます。ダブルクリックでダイアログが開きます。ピンの削除、ビットの追加は ListView 上の右クリックメニューからできます。

D)BDSL、ネットリスト、手編集の情報はファイルにしてセーブし、次回以降活用できます。ListView 上の右クリックメニューの「Save Item Info」でセーブしてください。

E)次回以降は 9)から先は BDSLやネットリスト、UCF のかわりに 「Load Item Info」でOKです。


-- 現在 Device メニューの選択肢にあるデバイス(・ω・) --
デバイス名 動作確認ボード等 備考
XC95144(PQFP160) 内製 -
XC95144(TQFP100) 内製 -
XC18V01_SO20 → XC2S30(TQFP144) 内製 ROMが先にチェーンに繋がっている
xcf01s_vo20 → XC2S30(TQFP144) 内製 ROMが先にチェーンに繋がっている
XC2S100(TQFP144) EZ-FPGA(オプティマイズ) EXO-3 20MHz を実装、10ピンヘッダコネクタ(アルテラ配列になってるとこ)に ByteBlasterMV を挿して試した
EP1C12F324(BGA) LiveDesign Evaluation Kit(Altium Japan) 付属のコンフィグケーブル。ByteBlasterMV モードで使用
EPF10K10(PLCC84) CSP-004(HuMAN DATA)

付属のコンフィグケーブル。
JTAG で使うには細工が必要
ByteBlasterMV モードで使用。

XC95108(PLCC84) XC95108/72評価基板(キット)/SK95108-84(共立電子)

ライタは HUMAN DATA 製 XC2
Xilinx Parallel モードで使用。

     
EP1C6Q240(QFP) 内製評価用(未テスト)

-- 未テスト --

     
     


基本的に私が持っている、もしくは仕事で使う必要のあるデバイスしかプログラム本体の Device メニューに追加する予定が(今のところ)ないので、お手持ちのデバイスで使用する場合には「shobon-JTAG に新しいデバイスを追加して使ってみる例」を参照して、Device メニューに追加して使ってください。

私が確認できない未サポートデバイスを試されて、クラスソースを追加して動作確認していただけた場合、もちろん大喜びで(・∀・)追加します。どんなデバイスで動作したか、しなかったか、教えてください。クラスソースファイルはコメント欄にでも貼ってやってください。


-- 変更履歴(・ω・) --

8/26 : ちょっとだけ(・∀・)になった?点。
1)EP1C6Q240 を追加。動作は未確認
2)プロジェクトアーカイブにサンプルの .vfd ファイル を添付。アーカイブ内の README 参照。

8/2 : ちょっとだけ(・∀・)になった?点。
1)XC95108_PC84 を追加。動作を確認。
2)XC18V01_SO20 + XC2S30_TQ144 のデバイスの組み合わせを確認。

7/31 : ちょっとだけ(・∀・)になった?点。
1)XC95144_TQ100 での動作を確認。
2)XC18V01_SO20 + XC2S30_TQ144 のデバイスの組み合わせを Device メニューに追加(ただし未テスト)
3)ViewForm にて、同じピン名称に "input" 属性がないときは、"output3" 属性の bit 情報も読み込むようにした(BSDL リーダ関連)。ご都合主義ですが、ConfigRom なんかだと、input ピンが少なくて ViewForm の表示がさみしかったので(笑)

7/22 : ちょっとだけ(・∀・)になった?点。
1)ByteBlasterII (互換ケーブル)対応、始めました(・ω・)。動作確認ケーブルは、アルファプロジェクトさんのHJ-LINKです。

参考(ByteBlasterII 回路図等)にさせてもらったページ - http://www.axas.org/ - FPGA総合情報サイト FPGA Navigator

2)XCF01S_VO20 -> XC2S30(TQFP144) のデバイスチェーン(デバイスチェインを試したのは初めて(^^;)でモニタできているような気がします。使い勝手は(・ω・)ですが。

7/17 : ちょっとだけ(・∀・)になった?点。
1)shobon-JTAG に新しいデバイスを追加して使ってみる例で説明した CSP-004D で使用されているデバイス EPF10K10LC84 を追加。
2)shobon-JTAG に新しいネットリストリーダ?を追加する例で説明した「いかさま」な .ucf リーダを追加。

7/15 : ちょっとだけ(・∀・)になった?点。
1)XCF01S_VO20 + XC2S30 をメニューに追加(未テスト)
2)XC95144_TQ100 をメニューに追加(未テスト)
3)BSDL ファイルのピン番号の1文字目が 'P' のとき(XC2SXXシリーズなど)に、ネットリスト(Mentor)のピン番が 'P' なしでもむりやりピン番一致とみなすようにした。Spartan2 使った結果不便だったので....

7/5 : ちょっとだけ(・∀・)になった点。
1)View 画面をデバイスごとにしました(デバイス選択ののち、View が開けます)
2)ListView の描画をサボることで、連続 SAMPLE 時の更新のちらつきをすこし低減しました。

参考にさせてもらったページ:CodeProject :Flicker-free ListView - http://www.codeproject.com/cs/miscctrl/listviewff.asp

3)あからさまにやる気のないネットリスト Reader を 内蔵 。
D2CAD で生成した Mentor 形式のネットリスト」 ファイルから、ピンと回路図上のネットの対応を読めるようになりました。
.net ファイルを指定すると、回路図上のJTAG対象デバイス(当該 ListView の)部品番号を聞いてきますので入力してください(例:IC5 など)。
運がよければネット名称が読み込めます。但し、すでに対象ピンの情報が View にある必要があります。先に手で入力するか、BSDL を読ませておいてください。
なお、ネット名称に空白文字を含む場合、その信号名称は正常に読み込めません。このような信号名称は、読み込み後「Edit....」メニューで編集してください。
(要はいきなりスペースで string.split() して、ネット名の前後のシングルクオートの認識をサボるような実装をしているからです(w)

★1)デバイスを選択、2)BSDL読み込み、3)ネットリスト読み込みのあと、右クリックメニューの4)Info ファイルとしてセーブで、 (ビット番号)-(ピン番号)-(ネット名称) のリストを保存できます。次回以降はそれをロードするだけで利用できます。

4)EXTEST ボタンがつきました。テストモード(=デバイス内部を切り離した状態でのピンの状態)を観察するのに使用できます。
SAMPLE(PRELOAD ALL 0) を行うまでこのボタンは無効です。
現在 ALL 0 以外の値の LOAD はできません(controlr ビット、internal ビット等も 0 になります)ので、そのような設定でテストモード動作させてはいけない回路、デバイスについては、このボタンを押すのはお勧めできません。
EXTEST は連続取り込みには未対応です。SAMPLE(PRELOAD ALL 0)ボタンで動作状態に復帰します。

6/30 : ちょっとだけ(・∀・)になった点。
あからさまにやる気のない shobon-parser を 内蔵 (View 画面、リストビューの右クリックメニューにあります)。
「ごく一部の」 BSDL ファイルから読めるようになりました。「運がよければ」バウンダリスキャンのビットと実際のピン番の対応を BSDL ファイルからもってこれます。

ただしデバイス選択にはまだ使えません。標準で "Device" メニューにないデバイスは、クラス作成の上、リコンパイルしてください。

具体的には、すでに存在するデバイスのクラスは現在 "デバイス名.cs" のような名前になっていますので、これらのソースファイルのどれかをコピーして、追加したいデバイス名のクラスに変更し、中のプロパティの応答のうち数箇所(IR ビット長、バウンダリスキャンレジスタ長、etc...)をいじると、デバイスのクラスが追加できます。

Device メニューへ新規デバイスの追加は、他の Device メニューのハンドラルーチンを参考にしてください。メインフォームへの数行の追加です。

★shobon-JTAG へのデバイス追加の方法のガイド?が新エントリにできました。
shobon-JTAG に新しいデバイスを追加して使ってみる例

6/29 : いくつか問題点(w追加
1)FTDI の USB-Serial チップ、232BM の BitBang モードで(読みながらなのでかなり遅い 約7msec/bit)動くようにいろいろやったが、失敗。IR はよめるが、DR が全部 0 になる。SAMPLE コマンドが正しくセットできていない?のか。原因いまのとこ不明。そのせいでプロジェクトが膨れた。
追記(7/24):これが原因?-「FT232BM で shobon-JTAG できなかったワケ?」
上記でうまくいく?ようなら、速度は 1/1000 ながら、現在 shobon-JTAG においては LPT に頼らない唯一のサポートアダプタ(笑)なので、僕なりに価値はあります。はい。別項にも書いたのですが、JTAG を API でサポートする FT2232 で試してみたいなあ。 だれか恵んでください(笑)。

参考にさせてもらったページ:Bit-Bangモードの使い方

2)まだ SAMPLE のみですが、検査に使えるよう、注目ビットのリストを登録しておき、別画面で監視できるようにした。このビットのリストはセーブ、ロードも可能(ただし対応はバウンダリスキャンのビット番号)。View メニューの ListView の上で右メニューでいろいろいじれる、はず。

View 画面の↓(・ω・)なスクリーンショット(ちと古いです)。

6/23 : ちょっとだけ(・∀・)になった点。
1)XC2S100_TQ144(Spartan2)を追加。
2)デバイスチェーンができるような仮想デバイスクラスを作った。ただしBYPASSとかはまだ考えてない。
3)IR Capture のパターンに 'X' があるときに Invalid になっていたのを修正(したつもり)。
4)変化表示のビット番号が逆になっていたのをとりあえず修正。

6/13 : ちょっとだけ(・∀・)になった点。
1)Xilinx Parallel (ヒューマンデータさんの)互換ケーブルでも動いてるように見えます。
2)Cyclone 以外に XC95144-PQ160 でも試しました。(単に試した、というだけです.....)
3)LPT のベースアドレス、ケーブル種類、デバイス別の SAMPLE コマンドやIRレジスタ長等の選択がハードコードからメニュー選択になりました(デバイスを追加するときにはやっぱりハードコードなわけだが)。

6/12 : shobon-JTAG 初版

posted at: 07:00 | permanent link