Sun, 17 Jul 2005
shobon-JTAG は、動作状態、あるいは内部回路と切り離した状態で、FPGA,CPLD 等の JTAG バウンダリスキャン(IEEE 1149.1)対応デバイスのピンの信号レベルをモニタするためのソフトです。
ダウンロード、ChangeLog 等はこちらのエントリからどうぞ。
さて、実際に新しいデバイスを追加する具体例として、 偶然手元にあった、Altera の FLEX10K10LC84 が乗っているブレッドボード、HuMANDATA さんの CSP-004 を使うと仮定して、私が実際にコードの追加、変更を進めながら(笑)説明してみます。
実はこのボードは JTAG のサンプルには向いてないことに後で気づくのですが、そこんとこの(・ω・)ぶりは後半で。
1)shobon-JTAG のプロジェクトの塊をここから落として、VisualStudio.NET で開きます。
2)shobon-JTAG でピンの状態をみてみたいデバイス、今回の場合だと FLEX10K10LC84のBSDL ファイル が shobon-JTAG のいいかげんな BSDL パーザで読めるかどうか、あらかじめ試しておきましょう。
といいますのは、もし読めないと、バウンダリスキャンビットとピンの対応を手入力する必要があるので、大変だからです。
具体的に見たい信号が決まっていて、数が少ないから、手入力するから BSDL のピン情報は自動で読めなくてもいいよ、という方はまず 4)以降のステップを先に行ってLSI の応答を確認します。 動作後、空の ListView の右クリックメニューから、Add Item を選択して、ダイアログボックスでバウンダリスキャンビット番号、ピン番号、信号名称を追加してください。ビット情報の保存は 3)項のBSDL からロードした後の .vfd のセーブの説明と同じ操作です。
さて、いまのところ(2005.7.16 時点)BSDLファイルの読み込み機能はデバイス情報と結びついていない(ピン情報のみ)ので、デバイスが違っても BSDL が読めるかどうかは試せます。まず VisualStudio の統合環境上で実行して、Device メニューから適当なデバイスを選び(とりあえず XC95144_PQ160 とかでOK)、View->ShowViewer メニューで空のリストビューを表示させます。アダプタはまだ関係ないので、気にしなくていいです。
3)ListView 上での右クリックメニューから、"Read Info From BSDL File"を選び、上記 URL から落としたファイルを読み込ませて見ます。リストビューに表示が現れると思います。それっぽい表示がでると思います。偶然(笑)読めたようです。
信号名称(ListView の NAME欄)には BSDL ファイルのものが入っていますが、項目を選択してダブルクリックか、右クリックメニューで編集して、DIPSWとか、LED とか実際のネット名称に変更できます。
せっかく読めたのでセーブしておきましょう。右クリックメニューから、"Save ItemInfo" を選び、適当な名前(ここでは CSP004)をつけてセーブします。拡張子は自動的に .vfd になります。XML なので、テキストエディタでも編集可能です。
4)BSDL が読めたので、いよいよデバイスのクラスを作りましょう。
VisualStudio 上で、一旦プログラムを終了した状態にしてください。(本来これから作成するデバイスのクラスがもつ情報は BSDL から自動的に読み取ってそのようなクラスを生成すべきなのですが、自分がつかえればいいジャンクウェアなんで、面倒なのでやってません。)まず適当なデバイス(XC95144_PQ160.cs)を VS.NET の「ソリューションエクスプローラ」でコピー、貼り付け操作をし、 EPF10K10L84.cs という名前に変更します。
5)変更したファイルを開き、まず xc95144_pq160 という文字列(クラス名、コンストラクタ名など)をEPF10K10L84 に置換してしまいます。
6)さきほど2)で Altera サイトからダウンロードした、EPF10K10L84 の BSDL ファイルをテキストエディタなどで開いて眺めながら、このデバイスのパラメータを埋めていきましょう。static StringDictionary CreateInstruction() ですが、これは単にインストラクションの羅列の StringDictionary を作っているだけです。このデバイスのBSDL にはコマンドが 5 つしかありませんので、まねをして書き換えます。
// "BYPASS (1111111111), "& sd.Add( "BYPASS","1111111111") ; // "EXTEST (0000000000), "& sd.Add( "EXTEST","0000000000") ; // "SAMPLE (0001010101), "& sd.Add( "SAMPLE","0001010101") ; // "IDCODE (0000000110), "& sd.Add( "IDCODE", "0000000110") ; // "USERCODE (0000000111)"; sd.Add( "USERCODE","0000000111") ;
7)ここまでくれば、あとは定数をいくつか書き換えるだけです。
LSINAME: 選択時に表示されます。EPF10K10 等、自分の好きな文字列に。
TAP_SCAN_CLOCK:BSDL ファイルからコピーします。10.00e6。
INSTRUCTION_LENGTH:BSDL ファイルからコピーします。10 ですね。
INSTRUCTION_CAPTURE:BSDL ファイルからコピーします。"0101010101"。
BOUNDARY_LENGTH:BSDL ファイルからコピーします。480 だそう。
8)おつかれさまでした。全体をリビルドして、エラーがないかどうか確かめてください。あとはメインフォームの Device メニューから今作ったデバイスのクラスが選択できるようにするだけです。Form1.cs を開き、Device メニュー(メニューエディタで)に EPF10K10LC84 を追加してください。
9)自動生成されるメニューのハンドラに、以下のコードを追加でおしまいです。
なお、CONFIG ROM などとJTAG のチェインをする場合のために DeviceChain クラスが用意されています。すでにメニューにあるチェインの定義を参考に書いてください。private void menuItem15_Click(object sender, System.EventArgs e) { SetDevice(new EPF10K10LC84()) ; }
7/22 追記:デバイスチェイン、動くようです。Viewメニューではその数だけリストビューが開きます。
デバイス 2 つチェインの記述例:Device1->2 SetDevice(new DeviceChain(new Device1(),new Device2())) ; デバイス 3 つのチェインの記述例:Device1->2->3 SetDevice(new DeviceChain(new Device1() , new DeviceChain(new Device2(),new Device3())) ;
10)実際に CSP-004 を接続して、試してみましょう。リビルドして実行、Device メニューから、9)で追加したばかりの EPF10K10LC84 を選択して、Cable は ByteBlasterMV だからデフォルト、LPT アドレスは Windows デバイスマネージャで表示される占有ポートの先頭アドレスを選択します。0x3BC がデフォルトですが、これは単に私が便利なようにそうなっているだけです。面倒な方は、自分が使うマシンに応じてソースを変更してください。
11)で、Back To Run-Test/Idle をクリック後、Capture-IR。あれ、1111111111 ? ん? よめないじゃん(・ω・)
12)よくよく取り説を読むと、CSP-004 は、JTAG コンフィグではないのですね。付属のケーブルを使った標準の接続では FPGA の JTAG ピンには繋がってないのですね、はは。大間抜け。
13)かなり(・ω・)な気分ですが、FPGA の JTAG 用信号ピン自体は CSP004 のコネクタ(CN3,CN4)に出ていますので、無理やりつないで実験してみました。
※オプションの EPC2 を実装している方はこの方法は使えません(多分)
むりやり接続法
A)HC244 の近くにあるジャンパ(JP6)をすべて 2-3 側につなぎ変えます。
B)回路図をみるとわかりますが、もともと Option の EPC2 にコンフィグするために JTAG の接続が JP6 にきています。JP6 の基板の1-2-3の刻印がある側から、TCK,TDO,TMS、ひとつおいて TDI になります。
C)手元にあったブレッドボード(CSP004 のことじゃなく、穴一杯のやつです)用のジャンパ線で、TCK<=>(CN4-5)、TDO<=>(CN4-9)、TMS<=>(CN4-26)、TDI<=>(CN3-21)と接続、電源を入れます。
D)こんどはちゃんと IR-Capture 成功しました(あたりまえですね)。
E)さきほど3)で作った CSP004.vfd を View->ShowViewer メニューで表示される ListView 上の右クリックメニュー LoadItemInfo から読み込んでやります。SAMPLE ボタンを押すと、信号レベルが表示されました(・∀・)
F)Continuous にチェックを入れてから SAMPLE すると、PUSHSW を押すと信号レベル表示が変わるのが確認できました。(連続 SAMPLE 解除はチェックをはずす)
追記:実際に CSP-004 を JTAG で運用(コンフィグも)するには、JP6をすべて 2-3 側に接続した上で、EPC2 コネクタと FPAG の JTAG 信号該当箇所にピンヘッダや丸ピンコネクタを設置してクリップやブレッドボード用ジャンパで接続するか、基板裏でワイヤでジャンパするなどして、安定して接続できるようにすると便利です。
(参考図):CSP-004 JTAG 化用、EPC2 コネクタ部参考資料 PDF
14)かなり間抜けな結果でしたが、自分で使うデバイスやブレッドボードを追加する方法はなんとなく分かるかと思います。shobon-JTAG ともども、なにかの参考になれば幸いです。
今回追加した EPF10K10LC84 が含まれたプロジェクト一式は、
こちらのエントリから落とせます。