« Mobile JTAG Cable高速化 | トップページ | JTAGロジアナ改良中 »

2005.05.28

VR4131とN-Wire、MIPSとEJTAG

MIPS命令互換のCPUには、NECのVR4131という64ビットの組み込み用CPUがあります。
MIPSのCPUをJTAGでデバッグする仕様といえばEJTAGですが、最近、EJTAGのルーチンを開発中だったので、VR4131でもJTAGデバッグができないか試してみました。
使用したボードは(有)ハンブルソフト殿のN-Cardです。

vr4131

VR4131をはじめとして、NECのVRシリーズにはJTAGの信号を利用したN-Wireというデバッグ方法があります。これがEJTAGと似ていればいいのですが・・・。さっそく開発中のEJTAGデバッガにつないでみましたが、全く認識しません。やはり、N-WireとEJTAGは根本的に違うようです。

N-Wireには、JTAGでいうところのTDI,TMS,TCK,TDO,TRSTなどの他に、NWIREENとBKTGIOという信号があります。Googleで調べると、NWIREENはN-Wireを使うときにはHにしておくとのこと。BKTGIOはよくわかりませんが、入出力双方向とのことです。おそらくCPUをブレークさせたい時やCPUがブレークしたことを知るための兼用の信号でしょうか。とりあえずプルアップ。信号の接続は問題ないようです。

JTAGでのレジスタの実際の操作の仕方ですが、N-Wireについては公開されている情報が何もないので、力技で調べてみることにしました。

まず、IR(命令レジスタ)の長さがわからなければどうしょうもありません。TAPをShift-IRステートに遷移させて、適当なデータをTDIから流してみると、TDOから8ビット遅れて出てきます。IRの長さは8ビットといっていいでしょう。しかも、IRの初期値は00000001なので、ラッキーなことにこの点はJTAGに準拠しています。

IRが8ビットとわかったので、IRに0x00~0xFFまでを順番に入れていって、DRの値を読んでみます。DRは32ビットくらいを仮定しておけばよいでしょう。

何らかのデータが出てきたものは、
IR      DR
0x04 0x00430C83
0x08 0x00000102
0x09 0x000040CC
0x0a 0x00300000
0x10 0x7000003E
0x11 0x7000003E
・・・
0x17 0x7000003E

これらの値にどんな意味があるのかは全くわかりませんが、上の表の0x000040CCは動作中に60CCになったり変化します。
また、IR=0x01ではDRに1ビットのレジスタが選択されます。このあたりの意味もわかりません。

ちょっとした発見は、リセット後、IRに0x0aを入れてDRに0x00000000を書くとリセットがかかるようです。その後でDRに0x00000001を書いて0x00000000を書くと再度リセットがかかります。
IR=0x0Aでは制御レジスタか何かが選択されるようで、そのbit0はリセット信号なのでしょう。
しかもTDIから入ったデータは32ビット遅れてTDOから出てくるので、このDRの長さは32ビットと推定されます。

また、IR=0xFF(BYPASS)で1ビットのバイパスレジスタが接続されるようにもなりましたが、IR=0x00(EXTEST)を行ってもバウンダリスキャンレジスタらしきものは見当たりません。残念ながらVR4131はバウンダリスキャンには対応していなさそうです。

N-WireとEJTAGは全くの別物であることがわかったことが今回の発見です。N-Wireについてはこれ以上深追いせずに、また機会があった時に試してみることにしましょう。

※この記事の内容は無保証ですのでご注意ください。

|

« Mobile JTAG Cable高速化 | トップページ | JTAGロジアナ改良中 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« Mobile JTAG Cable高速化 | トップページ | JTAGロジアナ改良中 »