NP1003C と JTAG ケーブル


ナヒテックさんから NP1003C (完成品、 50MHz 版) を買った。 動機顛末についてはそのうち。いまのところそういう段階でない。

最初から FPGA OS が載っており、USB ケーブルで繋ぐと linux 側から USB serial として認識 (kernel module としては ftdi_sio が使われる) し、minicom などで入ることができる。

バスパワーで動くので先日作ったばっかの電源にお世話になることもなく、FPGA 部分の動作確認は一瞬で終わった。 SDRAM のテストはまだだけど、そのまえに JTAG からの読みだし/書き込みテストである。 アクセスコード書かないことには SDRAM に手が届かん。

naxjp

書き込みソフトには iMPACT, XLPA-ISP, naxjp 等とある。 書き込むのに使うつもりの Thinkpad 240 が普段 linux マシンなので、とりあえず naxjp

naxjp 0.7.9 を拾ってきて make.
ちなみに gcc 3.2 では make が素直に通らなかった。ヤマほどひっかかったのでとりあえず 2.95 を使った。 3.2 で動かすとかいった作業はともかく JTAG からの書き込みテストが無事すんでから。

直結ケーブル

NP1003C 側のコネクタ配列は XILINX のボードの配列と互換性がない。 XILINX の 10pin コネクタは TCK/TMS/TDI/TDO の順に並んでるのに、NP1003 は TCK/TDI/TMS/TDO の順に並ぶ。 XILINX のプリンタポート側のピン並びと NP1003 のピンの並びが素直なので、由来はそこからか? そのわりにナヒテックさん家のケーブルのピン並びは XILINX のケーブルと違う ...。

ともあれ、ケーブルは自前で作らざるをえない(すくなくとも NP1003 側コネクタは)。 いちばん簡単なのはナヒテックさん家に載ってる ケーブル。 文字通り直結。

naxjp を拾って来て make, 動かすとこうなる:

# ./naxjp  -port ports.txt -getid XC2S100      
NAXJP Ver 0.7.9 beta for Linux (C)Copyright 2003 Nahitafu
Device Chain 0. Command 'getid'. Device 'XC2S100'. File 'XC2S100'
Device error:Device 1 TDO value is not equal, expected:01, actual:03
Device error:JTAG device is not connected correctly. Please check cable connection and power supply.
Note:Terminating procedure by occuring errors... (bypass-first)
Sorry, ISPEXIT routine has not completed yet.
-port 指定でピン入れ換えてあるが、ケーブルのピン配列を XILINX の ISP404 のやつ準拠にして iMPACT からでも使えるようにするため ... だが実はそのまんまのケーブルでも iMPACT から使えるのか? ピン配列見比べるとぜんぶ違うんだけど。
ちなみに同じマシンを win2k で起動しなおし iMPACT からアクセスすると、ケーブルもデバイスも認識しなかった。 これはそのうち。いまは naxjp。こちらで考えたほうがデバッグは楽。

DEBUG_LEVEL=2 として make しなおし (READMEJ.txt にあるように make naxjpd1 しても debug option 付きのは作成されない。 念のため)、ポートの動きを眺めると、 TCK のかわりに TDI が上がったり下がったりしている。なんだ簡単なハナシじゃん、と思ったのだが単に debug コードが XILINX のケーブルを仮定しているだけだった。ま、そんなにうまい話はないわな ...。prnprt.cpp の該当個所:

//Byte output for Linux
void outp(unsigned short addr,unsigned char data){
  #if (DEBUG_LEVEL==2)
        bool tdi,tck,tms;
        tdi = data & 0x01;
        tck = data & 0x02;
        tms = data & 0x04;
        printm(".write port (%04X<=%02X) TDI=%d TCK=%d TMS=%d (In the case of a XILINX genuin cable)\n",addr,data,
tdi,tck,tms);
        fflush(stdout);
  #endif /* DEBUG_LEVEL == 2 */
TDI, TCK, TMS がプリンタポートの D0, D1, D2 にアサインされていることを仮定していて、-port の指定を反映してない。

本題にもどる。デバッグオプションを付けると多少メッセージが変化する。 メッセージはけっこうな量になるが、要所はおそらく次の 2 行:

Error:Device 1 TDO value is not equal, expected:00614093, actual:0AAAAAAB
Device error:JTAG device ID is incorrect.
'A' って '1010' やね ...。クロストークかなんかで読み出すたびに TDO のビットが上がったり下がったりしてるだけの様子が目に浮かぶ。 それとも JTAG のステートマシンがヘンなとこに入り込んでしまってるか。

port read のタイミングで読んだ値が安定するまで待つとか、 あるいは書き込みから十分長い時間 (1ms くらい) 待つなどとしても結果は変わらなかった。 てことは TCK のヒゲかなんか?

また、何度やっても同じ結果なので外来ノイズということはない。

100ohm 入りケーブル

iMPACT からは version 4 ケーブルとかなんとか。XPLA ISP ver 4.04 (isp404.exe) のマニュアルに書かれているケーブル。
cable connection

とりあえず直結ケーブルのプリンタ側を切って 100ohm を挟む。結果は変わらず。

ただ、このケーブルは各信号線が GND と撚ってある ── か少なくとも互い違いになっていることを想定してるようなので、 GND を各信号線に抱かせてみた。 具体的には

の 2 種類を作った。いずれもプリンタポート端は 100ohm が入っている。結果はというと、
Error:Device 1 TDO value is not equal, expected:00614093, actual:09249249
Device error:JTAG device ID is incorrect.

分かったような分からんよーな変化だが、ともかく変化。

ここまでテストしたケーブルは何れも全長 20cm 内外である。それでたかが GND と撚ったくらいで結果が変わるというのが ... いったいどんな信号が流れてんだか。

やっぱオシロ調達すべきかねぇ。正規の JTAG ケーブルとかも。 オシロ調達がめんどーだから NP1003 完成品買ったんだけどな。

ストローブピン

プリンタポートは本来ハンドシェイクして使うもんである。ゆえに strobe 信号を除けば、 立ち上り立ち下がりは極めていいかげんな信号でありうる。 というわけで、TCK を strobe に割り振ってみた。こういうときにピン配列をさくっと変えられるのが naxjp のいいところ、

... なんだが結果はビタ一文かわんなかった。メモのみ。

コンデンサ

naxjp のページの直結ケーブルの説明に:
「ノイズが気になるときにはTCKとGNDに100pFのコンデンサを入れると良い!」
とある。このコンデンサ、プリンタポート端に入れるのか、JTAG ピン側に入れるのか ...。 いや、分かってて書いてる訳だが。

ためしに NP1003 ボードの JTAG ピンの TCK 〜 GND 間にコンデンサ入れたらデータがまるで読めなくなった。 プリンタポート端に入れたからといって元々からなにかが改善されるということはなかったのだけど、 みごとなもんである (どこがや)。

もちろん XILINX の本来のケーブルもプリンタポート側(つーか、バッファ端) にコンデンサが入ってる。

デスクトップマシン

Thinkpad 240 以外のプリンタポートではどーか? ということで別の PC に繋いでみた。 ... そもそも TDO が帰ってこない。常時 H のまんま。 プリンタポートの設定がなんかおかしいか?

テストする時はカーネルモジュールの parport_pc ごと外してあるのでシステムが悪さしてる訳ではない。 とすると BIOS の設定 (確か ECP/EPP モードにしてあった) かね。このマシン、reboot する訳にはいかないので、 こちらではこれ以上テストできず。

なお、Thinkpad 240 のほうでは、uni-directional/bi-directonal, ECP, EPP と 4 つの BIOS 設定があるが、 このうち前 3 つでは結果は変わらなかった。EPP については未テスト (でも EPP にしたことによって動くようになる、とは思えないのでテストする気なし)。

なんかな〜 Thinkpad の printer port が簡易ケーブルに耐えられない、というオチがつきそうなのでどーにか調べたいんだがな。


[日記へ] [目次へ]