JTAG総合情報サイト>JTAGアドベントカレンダー>12月3日 データレジスタと命令レジスタ

12月3日 データレジスタと命令レジスタ

本日は、データレジスタと命令レジスタについてより詳しく見ていきたいと思います。

データレジスタ

データレジスタには、必須レジスタと、オプション・レジスタがあります。

オプション・レジスタにはさらに、標準のオプション・レジスタと、プライベートなオプション・レジスタがあります。その特徴を表に示します。

表1 JTAGデータレジスタの分類

 

1. 必須レジスタ

  • バウンダリ・スキャン・レジスタ(数十から数千bit)
  • バイパス・レジスタ(1bit)

2. オプションのレジスタ

(a) 標準的なオプション・レジスタ

  • IDCODE
  • USERCODE

(b) プライベートなオプション・レジスタ

  • デバイスプログラミング用
  • CPUデバッグ用
  • 仕様が公開されていないことが多い
  • FPGAでは自分でロジックを組んで作る

 

命令レジスタ

命令レジスタの基本は以下の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 (規格)

となっています。

 

このように、デバイスやファミリが違うと、命令コードやステータスレジスタの中身も全く異なります。