MITOUJTAGとは何か
製品について
ご購入を検討中の方へ
サポート
JTAGについて
JTAG技術サービス(有料)
JTAG開発日記
JTAGを熱く語る

12月3日 データレジスタと命令レジスタ
本日は、データレジスタと命令レジスタについてより詳しく見ていきたいと思います。
データレジスタ
データレジスタには、必須レジスタと、オプション・レジスタがあります。
オプション・レジスタにはさらに、標準のオプション・レジスタと、プライベートなオプション・レジスタがあります。その特徴を表に示します。
表1 JTAGデータレジスタの分類
1. 必須レジスタ
2. オプションのレジスタ (a) 標準的なオプション・レジスタ
(b) プライベートなオプション・レジスタ
|
命令レジスタ
命令レジスタの基本は以下の3つです
- 命令レジスタに値を書き込むと、TAPにコマンドを与えることができます。
- 命令レジスタの値を読み出すと、そのデバイスのTAPのステータスが読み出されます。
- TAPに与えられたコマンドは、ICのテスト回路に直接的に何らかの信号を与えるとともに、データ系のシフトレジスタにどのデータ系レジスタが選択されるかを決定します。
命令はICの設計者が自由に決めてよいのですが、命令レジスタのすべてのビットが'1'である命令はBYPASS命令と決まっています。
これは、詳細不明なデバイスにはすべて'1'を書き込んで安全な状態にできるようにするためです。
もちろん、規格に違反してそうなっていないデバイスも存在します。
あえて規格に反したデバイスを作っているのか、メーカの技術者が知らないだけなのか。
命令の具体例
例えば、Spartan-6 FPGAでは31種類の命令が公開されていますが、一例をあげると以下のようなものがあります。BYPASS命令がちゃんと111111になっています。
表2 Spartan-6 命令コード (一部抜粋)
JTAG命令 | 命令コード |
---|---|
SAMPLE |
000001 (0x01) |
EXTEST |
001111 (0x0F) |
CFG_IN |
000101 (0x05) |
ISC_ENABLE |
010000 (0x10) |
IDCODE |
001001 (0x09) |
USER1 |
000010 (0x02) |
USER2 |
000011 (0x03) |
USER3 |
011010 (0x1A) |
USER4 |
011011 (0x1B) |
BYPASS |
111111 (0x3F) |
次にALTERA(Intel) MAX10では、IRの長さは10bitで、10種類の命令が公開されています。おそらく実際にはこれ以上にたくさんのプライベート命令があるのでしょう。
表2 MAX10 命令コード
JTAG命令 | 命令コード |
---|---|
SAMPLE/PRELOAD |
0000000101 (0x005) |
EXTEST |
0000001111 (0x00f) |
IDCODE |
0000000110 (0x006) |
USERCODE |
0000000101 (0x050) |
CLAMP |
0000001010 (0x00a) |
HIGHZ |
0000001011 (0x00b) |
PRIVATE |
1001000000 (0x240) 1000110000 (0x230) 1011100000 (0x2e0) 1000110001 (0x231) |
CONFIG_IO |
0000001101 (0x00d) |
BYPASS |
1111111111 (0x3ff) |
ステータスレジスタ
データレジスタから読み出される値は、データレジスタの機能ごとのキャプチャ値でした。この値は前回、データレジスタに与えた値かもしれません。
命令レジスタをスキャンして読み出される値は、前回与えた命令ではなく、命令コードとは無関係なステータスとなります。
ステータスは、下位2ビットが"01"と定められているほかは、設計者の自由です。そのICのセキュリティ状態や、デバッグモード/通常モードの区別、書き込み済み/ブランクといった状態が設定されることが多いようです。
ステータスレジスタの具体例
Spartan-6ではステータスレジスタの長さは6bitで、
- Bit 5 : DONEが解放
- Bit 4 : house-cleaning完了
- Bit 3 : ISC_Enabled
- Bit 2 : ISC_Done
- Bit 1 : 0 (規格)
- Bit 0 : 1 (規格)
となっています。実際にISC_ENABLE命令を与えた後はbit3が1になります。
MAX10ではステータスレジスタの長さは10bitで、
- Bit 9 : 0 (固定値)
- Bit 8 : 1 (固定値)
- Bit 7 : 0 (固定値)
- Bit 6 : 1 (固定値)
- Bit 5 : 0 (固定値)
- Bit 4 : 1 (固定値)
- Bit 3 : 0 (固定値)
- Bit 2 : コンフィグ完了
- Bit 1 : 0 (規格)
- Bit 0 : 1 (規格)
となっています。
このように、デバイスやファミリが違うと、命令コードやステータスレジスタの中身も全く異なります。