JPH1124959A - マイクロプロセッサのトレース情報出力方法 - Google Patents

マイクロプロセッサのトレース情報出力方法

Info

Publication number
JPH1124959A
JPH1124959A JP9176801A JP17680197A JPH1124959A JP H1124959 A JPH1124959 A JP H1124959A JP 9176801 A JP9176801 A JP 9176801A JP 17680197 A JP17680197 A JP 17680197A JP H1124959 A JPH1124959 A JP H1124959A
Authority
JP
Japan
Prior art keywords
trace
address
packet
access
debug
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP9176801A
Other languages
English (en)
Inventor
Noriyuki Nakamura
宣幸 中村
Tatsuo Yano
達男 矢野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hewlett Packard Japan Inc
Original Assignee
Hewlett Packard Japan Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hewlett Packard Japan Inc filed Critical Hewlett Packard Japan Inc
Priority to JP9176801A priority Critical patent/JPH1124959A/ja
Priority to EP98302523A priority patent/EP0869434A3/en
Publication of JPH1124959A publication Critical patent/JPH1124959A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【目的】実行アドレス、データ、プロセッサステータス
等のトレース情報を出力するマイクロプロセッサにおい
て、トレース情報の出力のためにウエイトがかかる可能
性を低減する。 【構成・動作】トレース情報を可変長のパケットの形態
で出力する。これにより、平均すると従来よりも短時間
で1つのトレース情報の送出を終了できるので、リアル
タイムトレースを行っている間にトレース情報のオーバ
ーランが起こる確率が減少する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、マイクロコンピュータ
を応用したシステムのデバッグを行なうためのトレース
情報の出力方法に関し、更に詳細には動作状態を表すト
レース情報を出力する機能を組み込んだマイクロプロセ
ッサにおけるトレース情報の出力方法に関する。
【0002】
【従来の技術】マイクロプロセッサを応用システムのデ
バッグに当たって、トレース情報、つまりプログラム実
行中のアドレス、データ、その他プロセッサの各種の状
態等の一連の情報を獲得することは重要である。特に、
トレース情報を獲得する際にマイクロプロセッサの動作
に影響を与えないこと、具体的にはマイクロプロセッサ
の動作への余分なウエイトの挿入等によって動作速度を
低下させない(リアルタイムトレース)ことが重要であ
る。従って、マイクロプロセッサの動作速度が向上して
いくにつれて、デバッグ時に外部にトレース情報の取得
用回路等を接続するという方式を取ることが困難になっ
ていくため、マイクロプロセッサ中にトレース情報を出
力する機能を組み込むことが提案されている。しかしな
がら、従来提案された構成では、以下の課題に示すよう
な点において必ずしも満足できるものではなかった。
【0003】
【発明が解決しようとする課題】プロセッサのコアクロ
ックの周波数は高速になってきているが、外部に入出力
できる周波数を同様に高速化することは困難になってき
ている。このため、プロセッサの性能を向上させる手法
として、プロセッサ内部は高い周波数で動作させ、外部
との入出力ピンの周波数はそれよりも低い動作周波数で
動作させることが多くなってきている。従って、プロセ
ッサのコアクロックの周波数と同一の周波数で出力する
必要のある従来の方式をこのようなプロセッサに適用す
ると、プロセッサ内部で多くのウエイトを挿入しない限
り、リアルタイムあるいはリアルタイムに近いトレース
を行うことができなかった。
【0004】また、プロセッサのコアクロックの周波数
と同一の周波数でトレース情報を出力できたとしても、
2命令以上同時発行するような機能拡張等の変更がなさ
れたプロセッサがプロセッサファミリに追加された場合
に、新たにステータスを追加したり変更したりしなけれ
ばならなかった。このように、上記のような場合や、新
たなプロセッサファミリに対応する度に、デバッグツー
ル(ハードウェア、ソフトウェア)も新たに設計しなけれ
ばならず、ツールの開発の効率も悪かった。
【0005】更に、従来の方式では、トレース情報の出
力に割り当てるピン数は、ステータス信号ピンとデータ
信号ピンの合計が4本あるいは8本等と多く、しかも本
数が固定であったため、チップの総ピン数及びパッケー
ジサイズに制約を与えていた。
【0006】プログラムにはある程度の局所性があるた
め、例外あるいは分岐時の分岐先アドレスは、前回の分
岐先アドレス等の最近得られたアドレス情報と比較する
とその上位ビットが変化しないことが多い。しかし、従
来の方式では分岐先アドレスを出力するに当たっては、
そのアドレス全体または予め設定されたビット数を下位
ビットから出力するだけであった。分岐先アドレス全体
の出力の場合は、上位ビットが変化しない場合には冗長
な(不要な)データまでもが出力されてしまう。また、予
め設定されたビット数を下位ビットから出力する場合に
は、上位ビットが変化する分岐の場合にその上位ビット
を判断することができなかった。
【0007】従って、本発明は、上述の欠点を解決する
ために、プロセッサのアーキテクチャに依存しない出力
方式で、プロセッサコアの動作周波数に依存しない周波
数での出力を可能とし、できる限り少ないピン数で出力
し、そのピン数にも自由度があり、また多くの場合にリ
アルタイムトレースを行うことのできるマイクロプロセ
ッサのトレース情報の出力方法を提供することを目的と
する。
【0008】
【課題を解決するための手段】本願発明のトレース情報
の出力方法においては、トレース情報を出力できるマイ
クロプロセッサにおいて、トレース情報を可変長のビッ
ト列で構成されるパケットとして出力することにより、
上記目的を達成している。
【0009】
【実施例】
<1.1.デバッグ・ポート> <1.1.1 必須デバッグ・ポート>必須デバッグ・ポート
に関しては、JTAG(Joint Test Action Groupによって提
案されたボードやICのテスト等を目的とするインター
フェース規格;これは当業者には周知の事項であるため
ここではこれ以上説明しないが、詳細はIEEE Std1149.1
-1990 (IEEE Standard Test Access Port and Boundary
-Scan Architecture)を参照のこと)実装をデフォルトと
して使用する。 TCLK 入力 TMS 入力 TDI 入力 TDO 出力
【0010】<1.1.2 任意選択のデバッグ・ポート>以
下の信号は任意選択である。 TRST L 入力 RMODE/BKTGIO_L 入出力
【0011】<1.1.3 RMODE/BKTGIO_L>このピンは2つ
の機能、すなわちBKTGIO_LおよびRMODEを有する。JTAG-
Test-Logic-Reset controller stateでは、このピンはR
MODEとして働く。このピンは、他の状態ではBKTGIO_Lと
して働く。
【0012】<1.1.3.1 RMODE>RMODEはリセット・モー
ドを表す。デバッグ・モジュールは、TAPコントローラ
がTest-Logic-Reset controller stateのときに初期化
される。このピンは、デバッグ・リセット設定の初期値
を選択する。デバッグ・リセットは、プロセッサへのリ
セット入力である。この効果は、ターゲット・システム
からのリセット入力と同じである。
【0013】RMODE入力のレベルに応じて、デバッグ・
リセット設定は、JTAG Test-Logic-Reset controller s
tateでは以下のように初期化される。 ロー:デバッグ・リセット設定をイネーブルする。デバ
ッグ・モジュールは、デバッグ・リセットが要求される
ように初期化される。 ハイ:デバッグ・リセット設定をディスエーブルする。
デバッグ・モジュールは、デバッグ・リセットが要求さ
れないように初期化される。
【0014】この信号は、ターゲット・システム上のRO
M内のブート・プログラムが初期開発段階で不完全なも
のである場合、電力投入時にターゲット・システムが予
想されない状態で動作するのを回避するために必要であ
る。ツールは、接続されると、ターゲット・システムの
電力投入時にこの信号をローにドライブする。プロセッ
サは、ターゲット・システムからのリセット入力が解除
された後でもリセットされたままでいることができる。
【0015】ツールが接続されていないときにRMODEピ
ンのレベルがハイになるように、チップにはプルアップ
抵抗が必要である。RMODEがハイである場合、プロセッ
サの活動に対するデバッグ・モジュールの影響はないは
ずである。
【0016】<1.1.3.2 BKTGIO_L>RMODE/BKTGIO_L信号
は、Test-Logic-Reset controller state以外のコント
ローラ状態ではBKTGIO_Lとして働く。双方向信号BKTGIO
_Lは主として、外部機器からのトリガ入力によってプロ
セッサ実行を中止し、あるいは指定された事象で外部機
器をトリガするために使用される。この信号は、デバッ
グ・モジュール・リセットによってディスエーブルされ
る。
【0017】この信号を出力向けに構成する場合、この
信号は以下の条件でローにドライブされる。 − プロセッサがデバッグ・モードである。 − トレース・トリガ条件が満たされている。
【0018】これらの2つの条件は、個別に、信号をド
ライブするようにもまたドライブしないようにも構成す
ることができる。
【0019】ブレーク出力 図1(A)に示すように、この信号は、プロセッサがデバ
ッグ・モードの間、ローにドライブされる。
【0020】トリガ出力 図1(B)に示すように、この信号は、ハードウェア・ブ
レークポイント条件が満たされたときにローにドライブ
(パルス状に)される。
【0021】この信号を入力向けに構成する場合、デバ
ッグ・モジュールが、信号のレベルがハイからローに変
化したときに以下のように動作する。
【0022】− プロセッサを中止してデバッグ・モー
ドにする。 − N-Traceのトリガ・パケットを生成する。
【0023】これらの2つの活動は、個別に、それが起
こるようにも起こらないようにも構成することができ
る。
【0024】ブレーク入力 BKTGIO_L入力の立ち下がりエッジでユーザ・プログラム
実行にブレークをかける。デバッグ・モードにあるとき
にこのエッジが入力された場合、プロセッサが正常モー
ドに戻るまで保留される。(図2(A)参照)
【0025】トリガ入力 この機能は、オプションのN-traceを実装しない場合は
必要とされない。この機能は、BKTGIO_L入力の立ち下が
りエッジでN-trace MATCHパケットを生成する。デバッ
グ・モードにあるときにこのエッジが入力された場合で
も、ただちにMATCHパケットが出力される。(図2(B)参
照)
【0026】<1.1.4 デバッグ・モジュールの初期化>
前述の<RMODE>で説明したように、デバッグ・モジュ
ールはTest-Logic-Reset controller stateで初期化さ
れる。デバッグ・モジュールは、初期化後のデバッグ・
リセットの機能を除いてプロセッサの活動に影響を与え
ない。
【0027】<1.2.JTAGを介して制御されるデバッグ
機能> <1.2.1 JTAG命令>デバッグ・モジュールのほぼすべて
のデバッグ機能はJTAGを介して制御される。デバッグ・
モジュールを制御するにはJTAGプライベート命令を実装
しなければならない。プロセッサの識別情報を得るには
JTAGオプション命令のIDCODEも実装しなければならな
い。
【0028】a) JTAG IDCODEを実装しなければならな
い。 b) デバッグ・ツールのためにいくつかのJTAGプライベ
ート命令を実装しなければならない。
【0029】以下のようにしてもよい。 c) IDCODE命令およびJTAGプライベート命令の命令レジ
スタ長およびビット割り当ては、各プロセッサ・ファミ
リごとに異なるものであってよい。
【0030】<1.2.2 device identification register
>この必須のdevice identification registerは、ユー
ザの最小限の助けでツールを構成するために使用され
る。電力投入後に、ツールは、このレジスタを読み取る
ことによって、プロセッサがサポートされているかどう
かを判定する。サポートされている場合、ツールはこの
レジスタの値に応じてツール自体を構成する。
【0031】a) プロセッサ内のdevice identification
registerの値は、同じプロセッサ・ファミリ間で何ら
かの共通の特性を持っていなければならない。
【0032】以下のようにしてもよい。 b) 実装オプションの詳細を伝えるためにJTAGを介して
アクセスできる別のレジスタを設けることができる。
【0033】<1.2.3 デバッグ・モジュールの初期化>
この必須機能は、Test-Logic-Reset controller state
に入らずにデバッグ・モジュールを初期化するために使
用される。このリセットでは、デバッグ・リセット設定
は初期化されず、前の設定を保持する。
【0034】a) すべてのデバッグ機能は、デバッグ・
リセットの場合を除いて初期化しディスエーブルしなけ
ればならない。 b) デバッグ・リセット設定は変更してはならない。
【0035】<1.2.4 BKTGIO_L/RMODE信号の構成> <1.2.4.1 BKTGIO_L/RMODE実装フラグ>この必須機能
は、BKTGIO_L/RMODE信号が実装されているかどうかを知
るために使用される。
【0036】a) BKTGIO_L/RMODE信号が存在するかどう
かが何らかの方法で分からなければならない。 以下のことを推奨する。 b) この信号が存在するかどうかをデバッグに関するJTA
Gプライベート命令によって選択されるtest data regis
ter内のビットによって知ることを推奨する。
【0037】以下のようにしてもよい。 c) test data register内のビットではなくdevice iden
tification registerの値を使用して、この存在がわか
るようにしてもよい。ツールは、サポートされているす
べてのプロセッサのIDのリストを持っていなければなら
ず、どのプロセッサがBKTGIO_L/RMODEピンを有するかが
分からなければならない。
【0038】<1.2.4.2 BKTGIO_L信号設定>BKTGIO_L信
号がある場合には必須であるこの機能は、BKTGIO_L信号
を構成するために使用される。
【0039】a) デバッグ・モジュールがイネーブルさ
れている場合、イネーブルまたはディスエーブル、方向
(入力または出力)、機能(ブレークまたはトリガ、あ
るいはその両方)はどの状態でも構成可能でなければな
らない。 b) BKTGIO_L信号は、デバッグ・モジュール・リセット
によって初期化されなければならない(ディスエーブ
ル、入力)。
【0040】<1.2.5 N-traceの構成> <1.2.5.1 N-trace実装フラグ>この必須機能は、N-tra
ceが実装されているかどうかを知るために使用される。
【0041】a) N-trace機能が存在するかどうかが何ら
かの方法で分からなければならない。
【0042】以下のことを推奨する。 b) この信号が存在するかどうかを、デバッグに関するJ
TAGプライベート命令によって選択されるtest data reg
ister内のビットによって知ることを推奨する。
【0043】以下のようにしてもよい。 c) test data register内のビットではなくdevice iden
tification registerの値を使用して、この存在を分か
るようにしてもよい。ツールは、サポートされているす
べてのプロセッサのIDのリストを持っていなければなら
ず、どのプロセッサがN-traceポートを有するかが分か
らなければならない。
【0044】<1.2.5.2 N-traceイネーブル/ディスエ
ーブル>N-traceが存在する場合には必須のこの機能
は、N-trace機能をイネーブルまたはディスエーブルす
るために使用される。
【0045】a) デバッグ・モジュールがイネーブルさ
れている場合、イネーブルまたはディスエーブルはどの
状態でも構成可能でなければならない。 b) N-traceは、デバッグ・モジュール・リセットによっ
て初期化(ディスエーブル)されなければならない。
【0046】<1.2.6 実行制御> <1.2.6.1 デバッグ・モードおよびノーマル・モード>
デバッグ・モードおよびノーマル・モードを以下のよう
に定義する。
【0047】ノーマル・モード:このモードでは、プロ
セッサは、ユーザ・プログラムを実行し、あるいはリセ
ットされる(デバッグ・リセットを含む)。 デバッグ・モード:このモードでは、プロセッサはユー
ザ・プログラムの実行を停止する。
【0048】<1.2.6.2 デバッグ・リセット>この必須
機能は、デバッグ・ツールからのプロセッサ・リセット
信号を入力するために使用される(ターゲット・システ
ムからのリセットと同様に動作する)。
【0049】a) デバッグ・リセットは、プロセッサが
どのような状態であっても、プロセッサ・リセットを強
制的に実行、解除できなければならない。 b) このリセットは、ターゲット・システムからのリセ
ットと同じ効果を有する。 c) JTAG Test-Logic-Reset controller stateでは、こ
の設定はRMODE信号に応じて初期化される。RMODEは、ロ
ーである場合にはデバッグ・リセットを要求する。そう
でない場合は、デバッグ・リセットを要求せず、プロセ
ッサは、ターゲット・システムがリセット入力をドライ
ブしていない場合はリセットされない。JTAG Test-Logi
c-Reset controller stateが終了した後、ツールはJTAG
を介して設定を変更する。 d) この設定をデバッグ・モジュール初期化によって変
更してはならない。
【0050】<1.2.6.3 デバッグ・ブレーク>この必須
機能は、ユーザ・プログラムの実行とは非同期的にプロ
セッサをデバッグ・モードにするブレークを要求するた
めに使用される。
【0051】a) ブレークが要求されたとき、プロセッ
サはユーザ・プログラムの実行をできるだけ早くブレー
クしなければならない。 b) ブレークの後、プロセッサは指令されるまでデバッ
グ・モードに留まらなければならない。 c) 要求が成功したか、それとも失敗したかが分からな
ければならない。 d) ブレークが失敗した場合、デバッグ・モジュール初
期化によって要求がクリアされなければならない。
【0052】<1.2.6.4 デバッグリセットからのブレー
ク>この必須機能は、ユーザ・プログラムを実行せずに
デバッグ・リセットを解除した後にデバッグ・モードに
入るために使用される。
【0053】a) ツールがデバッグ・リセットを解除し
たとき、プロセッサはデバッグ・モードに入らなければ
ならない。 b) ターゲット・システムまたはプロセッサに対する予
想されない影響を回避するために、プロセッサは(命令
取り出しなどのために)ターゲット・システム・メモリ
にアクセスしてはならず、デバッグ・リセットからデバ
ッグ・モードへの遷移時にユーザ・プログラム命令を実
行してはならない。 c) 要求が成功したか、それとも失敗したかが分からな
ければならない。 d) ブレークが失敗した場合、デバッグ・モジュール初
期化によって要求がクリアされなければならない。
【0054】<1.2.6.5 ユーザ・プログラムの実行の再
開>この必須機能は、デバッグ・モードを終了しユーザ
・プログラムの実行を再開するために使用される。
【0055】a) プロセッサは、要求に応じてデバッグ
・モードを終了しなければならない。 b) プロセッサは、デバッグ・モードを終了した後で、
ブレークの直前の状態からユーザ・プログラムの実行を
再開しなければならない(ツールが、レジスタの内容の
修正などのユーザ要求に応答して状態を変更している場
合を除く)。 c) 要求が成功したか、それとも失敗したかが分からな
ければならない。 d) ブレークが失敗した場合、デバッグ・モジュール初
期化によって要求がクリアされなければならない。
【0056】<1.2.6.6 ユーザ・リセット入力からのユ
ーザ・プログラムの実行>この必須機能は、ターゲット
・リセット入力に対して同期的にリセット・ハンドラか
らユーザ・プログラムを開始するために使用される。
【0057】a) プロセッサは、ユーザ・プログラムを
実行せずにプロセッサ・リセット入力を待たなければな
らない。 b) プロセッサ・リセット入力の後、プロセッサは、プ
ロセッサの通常の動作と同じ動作としてユーザ・プログ
ラムを開始しなければならない。 c) 要求が成功したか、それとも失敗したかが分からな
ければならない。 d) ブレークが失敗した場合、デバッグ・モジュール初
期化によって要求がクリアされなければならない。 e) ターゲット・リセット入力が受信されたかどうかが
分からなければならない。 f) デバッグ・モジュール初期化によってモードがクリ
アされなければならない。
【0058】<1.2.6.7 電力投入からのユーザ・プログ
ラムの実行>この任意選択機能は、ターゲット電力投入
リセットに同期してリセット・ハンドラからユーザ・プ
ログラムを開始するために使用される。電力投入直後な
ので、ツールのほぼすべての機能はデバッグ・リセット
またはデバッグ・ブレークが入るまで動作しない。 a) プロセッサは、ユーザ・プログラムを実行せずに電
力投入リセットを待たなければならない。 b) 電力投入リセット入力の後、プロセッサは、プロセ
ッサの通常の動作と同じ動作としてユーザ・プログラム
を開始しなければならない。 c) プロセッサは、デバッグ・リセットまたはデバッグ
・ブレークに応答しなければならない。 d) N-traceおよびハードウェア・ブレークポイントは、
最初のデバッグ・リセットまたはデバッグ・ブレークの
前のノーマル・モードで構成可能でなければならない。 e) デバッグ・リセットまたはデバッグ・ブレークの
後、ツールのすべての機能が使用可能でなければならな
い。
【0059】<1.2.6.8 ソフトウェア・ブレークポイン
ト>この必須機能は、指定されたアドレスにある命令が
実行される直前にユーザ・プログラムの実行にブレーク
をかけるために使用される。プロセッサは、ソフトウェ
ア・ブレークポイント命令と呼ばれる特殊な命令を実行
したときにブレークがかかってデバッグ・モードにな
る。これは、指定されたアドレスにある命令をソフトウ
ェア・ブレークポイント命令で置き換えることによって
実現されるので、一度に設定できるブレークポイントの
数に制限はない。しかし、メモリがRAMでない場合には
設定できない。
【0060】a) 命令の置換は、すくなくともデバッグ
・モードで実行できなければならない。 b) プロセッサは、ソフトウェア・ブレークポイント命
令を実行するとき、次の命令を実行する前にブレークが
かからなければならない。 c) ブレークの後、プロセッサは、終了するよう命令さ
れるまでデバッグ・モードのままでいなければならな
い。 d) ソフトウェア・ブレークポイントがブレークを行わ
せたアドレスが分からなければならない。 e) プロセッサは、ソフトウェア・ブレークポイントを
最初の命令で置き換えた後にプログラムの実行を正しく
再開できなければならない。 f) ソフトウェア・ブレークポイント命令の長さは、最
も短い命令の長さと同じでなければならない。 g) ブレークが成功したか、それとも失敗したかが分か
らなければならない。 h) ブレークが失敗した場合、デバッグ・モジュール初
期化によって要求がクリアされなければならない。
【0061】以下のことを推奨する。 i) デバッグ・モジュールが、ノーマル・モードおよび
デバッグ・リセットならびにデバッグ・モードで命令を
置き換える機能を有することを推奨する。 j) ソフトウェア・ブレークポイント命令を公表しては
ならず、またデバッグのために表だって予約してもいけ
ない。 k) ブレークが起こったたとき、プログラム・カウンタ
は、そのソフトウェア・ブレークポイント命令が置かれ
ているアドレスを指し示さなければならない。
【0062】<1.2.6.9 シングルステップ・ブレーク>
この必須機能は、ユーザ・プログラムの実行をステップ
毎に実行する(一度に1つだけ命令を実行する)ために
使用される。単一ステップ・モードにおいてプロセッサ
がデバッグ・モードを終了してユーザプログラムへ移行
する場合には、ユーザ・プログラムの1つの命令を実行
した後にブレークがかかってデバッグ・モードに入る。
【0063】a) シングルステップ・モード設定は、デ
バッグ・モードで変更(イネーブル/ディスエーブル)
可能でなければならない。 b) プロセッサは、ユーザ・プログラムの1つの命令を実
行したあとにデバッグ・モードにならなければならな
い。 c) ブレークの後、プロセッサは、終了するよう命令さ
れるまでデバッグ・モードのままでなければならない。 d) ステップ動作中に実行された命令(そのアドレスお
よび命令カウント)が分からなければならない。 e) プロセッサは、プログラムの実行を正しく再開でき
なければならない。 g) ブレークが成功したか、それとも失敗したかが分か
らなければならない。 h) ブレークが失敗した場合、デバッグ・モジュール初
期化によって未処理の要求がクリアされなければならな
い。
【0064】以下のようにしてもよい。 i) プログラムの実行を正しく再開するために、ステッ
プ動作中に複数の命令を実行してもよい。たとえば、プ
ロセッサが遅延分岐命令を有する場合にこのようにする
ことができる。
【0065】<1.2.6.10 ハードウェア・ブレークポイ
ント>この機能は、指定されたプロセッサ内部条件を検
出することによってユーザ・プログラムの実行にブレー
クをかけるために使用される。この仕様では、以下のタ
イプのハードウェア・ブレークポイントが定義される。
【0066】命令アドレス・ブレークポイント:プロセ
ッサは、指定されたアドレスにある命令を実行する前に
ユーザ・プログラムの実行にブレークをかける。ソフト
ウェア・ブレークポイントとは異なり、このブレークポ
イントは、RAM内以外の命令に設定することもできる。
データ・アクセス・ブレークポイント:プロセッサは、
メモリの指定されたアドレスに指定されたデータでアク
セスするときにユーザ・プログラムの実行にブレークを
かける。
【0067】また、ハードウェア・ブレークポイント
は、指定されたプロセッサ内部条件で外部機器およびN-
traceをトリガ/トレースするために使用することがで
きる。さらに、N-traceは、データ・アクセス・ブレー
クポイントで指定されたメモリ・アクセスに使用される
アドレスおよびデータを出力することができる。
【0068】a) ハードウェア・ブレークポイント設定
は、プロセッサがデバッグ・モードであるか、それとも
ノーマル・モードであるかにかかわらずに変更可能でな
ければならない。 b) ノーマル・モードでは、設定の変更時にユーザ・プ
ログラムの実行に影響を与えてはならない(すなわち、
一時的にでも停止してはならない)。 c) 各ハードウェア・ブレークポイントは個別に構成可
能でなければならない。ここで構成するとは、ブレーク
するかどうか、トリガを出力するかどうか、MATCHパケ
ットを出力するかどうかなどが含まれる。 d) ブレークの後、プロセッサは、(ブレークがイネー
ブルされている場合に)デバッグ・モードのままでなけ
ればならない。 e) (ブレークがイネーブルされている場合に)どのハ
ードウェア・ブレークポイントによってブレークが行わ
れたかが分からなければならない。 f) プロセッサは、(ブレークがイネーブルされている
場合に)プログラムの実行を正しく再開できなければな
らない。 g) (ブレークがイネーブルされている場合に)ブレー
クが成功したか、それとも失敗したかが分からなければ
ならない。 h) (ブレークがイネーブルされている場合に)ブレー
クが失敗した場合、デバッグ・モジュール初期化によっ
て未処理の要求がクリアされなければならない。 i) 実装オプション(チャネルの数など)が分からなけ
ればならない。
【0069】<1.2.6.11 命令アドレス・ブレークポイ
ント(ハードウェア・ブレークポイント)>この必須機
能は、指定されたアドレスにある命令が実行される前に
ユーザ・プログラムの実行を中止するために使用され
る。ソフトウェア・ブレークポイントとは異なり、この
ブレークポイントは、RAM内以外の命令に設定すること
もできる。これは、指定されたアドレスにある命令が実
行されたことを検出する(がユーザ・プログラムの実行
にはブレークをかけない)ときにも使用される。
【0070】a) この機能は、「ハードウェア・ブレー
クポイント」の節で説明した規則に従わなければならな
い。 b) プロセッサは、(ブレークがイネーブルされている
場合に)ブレークポイントが設定された命令を実行する
前にブレークを起こさなければならない。 c) アドレスは、最も小さな命令の分解能で指定できな
ければならない。 d) デバッグ・モジュールは、ユーザ・プログラム・コ
ードがROM内に存在する場合に最低限の実行制御機能を
サポートするために、少なくとも1つの命令アドレス・
ブレークポイントを持っていなければならない。 e) ブレークポイントは、ユーザ・プログラム・コード
が存在するいかなるアドレスにも設定できなければなら
ない。 f) (ブレークがイネーブルされている場合に)アドレ
ス・ブレークポイントがブレークを行わせたアドレスが
分からなければならない。
【0071】以下のことを推奨する。 g) プログラム・カウンタは、ブレークポイントがヒッ
トしたアドレスを指し示すべきである。
【0072】以下のことは任意選択である。 e) アドレス比較はマスク機能またはレンジ機能を有す
ることができる。
【0073】アドレス・マスクまたはレンジ
【0074】プログラムが、指定されたアドレス・ブロ
ックから出たこと、あるいは指定されたアドレス・ブロ
ックに入ったことを検出するために使用される。このた
め、マスクは下位アドレス・ビットのみに有効になるよ
うにすることができる。以下の2つのオプションが選択
可能である。(1)アドレスが範囲内であるときにブレ
ークポイントがヒットする。(2)アドレスが範囲外で
あるときにブレークポイントがヒットする。
【0075】<1.2.6.12 データ・アクセス・ブレーク
ポイント(ハードウェア・ブレークポイント)>この任
意選択機能は、指定されたアドレスへのデータ・アクセ
ス(変数または入出力)時にユーザ・プログラムの実行
にブレークをかけるために使用される。この機能は、指
定されたアドレスへのデータ・アクセスを検出する
(が、ユーザ・プログラムの実行にはブレークをかけな
い)ときにも使用される。N-traceは、データ・アクセ
ス・ブレークポイントで指定されたデータ・アクセスに
使用されたデータを出力することができる。この機能
は、C言語レベルのデバッグで、固定メモリ・ロケーシ
ョンまたは入出力に存在する指定された変数(グローバ
ル変数または静的変数)へのアクセスを検出するために
使用することができる。
【0076】a) この機能は、「ハードウェア・ブレー
クポイント」の節で説明した規則に従わなければならな
い。 b) プロセッサが分離された入出力空間を有する場合、
比較のためにメモリ空間または入出力空間を選択するス
イッチがなければならない。 c) プロセッサは、(ブレークがイネーブルされている
場合に)ブレークポイントが設定されたメモリまたは入
出力にアクセスすることによってブレークしなければら
ない。 d) アドレスは、少なくとも、最も小さなデータの分解
能に指定できなければならない。 e) アクセス・タイプは、読取りまたは書込み、あるい
はその両方から選択できなければならない。 f) ブレークポイントは、ユーザ・プログラムがデータ
操作のためにアクセスするいかなるアドレスにも設定し
できなければならない。
【0077】以下のことは任意選択である。 g) アドレス比較は、マスク機能またはレンジ機能を有
することができる。 h) データ比較を行うことができる。 i) データ比較はマスク機能またはレンジ機能を有する
ことができる。 j) メモリおよび入出力だけでなくそれ以外の資源タイ
プも指定できてよい。
【0078】アドレス・マスクまたはレンジ プログラムが、指定されたアドレス・ブロックの内外の
メモリまたは入出力位置へのアクセスを検出するために
使用される。たとえば、この機能は、不当なメモリ・ブ
ロックがアクセスされたときにユーザ・プログラムの実
行にブレークをかけ、あるいはN-traceを使用して、指
定された入出力ブロックへのデータ・アクセスをトレー
スする。このため、マスクは下位連続アドレス・ビット
のみに有効になるようにすることができる。以下の2つ
のオプションが選択可能である。 (1)アドレスが範囲内であるときにブレークポイント
がヒットする。(2)アドレスが範囲外であるときにブ
レークポイントがヒットする。
【0079】データ比較 指定されたデータへのアクセスを検出するために使用さ
れる。たとえば、この機能は、ユーザ・プログラムの実
行を中止し、あるいは指定された変数の内容が指定され
た値になったときにN-traceをトリガする。
【0080】データ・マスクまたはレンジ メモリや入出力へのデータアクセスが設定された範囲に
入っていたり、特定のパターンにマッチする場合に、そ
れを検出するのに使用される。たとえば、この機能は、
指定された変数の指定されたビットが指定された値にな
ったときにN-traceをトリガする。このため、マスクは
各ビットに個別に指定できなければならない。以下の2
つのオプションが選択可能である。(1)アドレスが範
囲内であるときにブレークポイントがヒットする。
(2)アドレスが範囲外であるときにブレークポイント
がヒットする。
【0081】資源タイプ メモリまたは入出力以外のプロセッサ資源へのアクセス
を検出するために使用される。可能なプロセッサ資源
は、オンチップ・キャッシュ、オンチップTLB、レジス
タ(コプロセッサのレジスタを含む)である。
【0082】<1.2.6.13 デバッグ・モード・フラグ>
この必須機能は、プロセッサがデバッグ・モードである
か、それともノーマル・モードであるかを調べるために
使用される。これを使用することによって、ツールは、
ブレークが行われたことを検出し、あるいはノーマル・
モードでは許容されないデバッグ機能が実行可能かどう
かを知ることができる。
【0083】a) このフラグは、プロセッサがデバッグ
・モードであるか、それともノーマル・モードであるか
を示さなければならない。 b) このフラグは、プロセッサがデバッグ・モードであ
るか、それともノーマル・モードであるかにかかわらず
にアクセス可能でなければならない。
【0084】<1.2.6.14 ブレーク原因フラグ>この必
須機能は、ブレークの原因を調べるために使用される。
ツールは、ブレークの原因に応じてブレークの後に必要
な後処理を実行する。
【0085】a) このフラグは、ブレークの実行毎に更
新しなければならない。 b) このフラグは、デバッグ・モードでアクセス可能で
なければならない。 c) 複数のブレーク原因によってブレークが要求された
場合、すべての原因を示さなければならない。
【0086】<1.2.7 プロセッサ・ステータス> <1.2.7.1 プロセッサ・ステータス・フラグ>この必須
機能は、現在のプロセッサ・ステータスを調べるために
使用される。これを使用することによって、ツールは、
ある種のプロセッサ・ステータスで失敗するコマンドの
送信を回避することができ、あるいはデバッグ機能の要
求が拒否された場合に失敗の原因を知る。これは、現在
のプロセッサ・ステータスをユーザに伝えるときにも使
用される。
【0087】a) このフラグは、プロセッサ・ステータ
スが変化するたびに更新しなければならない。 b) このフラグは、プロセッサがデバッグ・モードであ
るか、それともノーマル・モードであるかにかかわらず
にアクセス可能でなければならない。 c) デバッグ機能が失敗するすべてのプロセッサ・ステ
ータスを示さなければならない。
【0088】以下のことを推奨する。 d) 以下の優先順位で1つのプロセッサ・ステータスのみ
を示すことができる。
【0089】<1.2.7.2 バスのハングアップ時のアドレ
ス>この任意選択機能は、ready応答がないためにバス
・サイクルがハングアップしたときのアドレスを調べる
ために使用される。
【0090】<1.2.8 メモリおよび入出力アクセス>ツ
ール側からのメモリまたは入出力アクセス機能には3つ
の要件がある。 ・デバッグ・モードでのメモリまたは入出力への通常の
アクセス(必須) ・メモリまたは入出力へのクイック・アクセス(任意選
択) ・メモリへの高速プログラム・ダウンロード(任意選
択)
【0091】<1.2.8.1 デバッグ・モードでのメモリま
たは入出力への通常のアクセス>この必須機能は、デバ
ッグ・モードでメモリまたは入出力にアクセスするため
に使用される。ツールは、変数(ローカル変数を含む)
および入出力を表示し修正することができる。これは、
ソフトウェア・ブレークポイントを設定または除去する
ときに使用することもできる。
【0092】a) 変数読取り/書込みおよびソフトウェ
ア・ブレークポイント設定/除去を使用するには、メモ
リまたは入出力がアクセス可能でなければならない。 b) プロセッサがアクセスできるアドレスにあるいかな
るメモリまたは入出力に対してもアクセス可能でなけれ
ばならない。 c) アクセスが完了したかどうかと、成功したか、それ
とも失敗したかが分からなければならない。 d) アクセスが例外(たとえば、バス・エラー)を発生
させようとしている場合、例外を発生させてはならず、
そのアクセスが異常終了することとその理由が分からな
ければならない。 e) アクセスが完了しない場合、影響を最小限に抑えな
ければならない。たとえば、応答がないためにバス・サ
イクルがハングアップした(無限待機)場合、ツールは
バス・サイクルを中止できなければならない。 f) アクセスは、失敗した場合、デバッグ・モジュール
初期化によって初期化されなければならない。 g) プロセッサが特権モードとユーザ・モードを有する
場合でも、モードにかかわらずにメモリおよび入出力に
アクセスできなければならない。
【0093】以下のようにしてもよい。 h) ノーマル・モードまたはプロセッサ・リセット(デ
バッグ・リセットを含む)時にアクセスできる必要はな
い。
【0094】<1.2.8.2 メモリまたは入出力へのクイッ
ク・アクセス>この任意選択機能は、メモリまたは入出
力に迅速にアクセスするために使用される。その主要な
目的は、ユーザがユーザ・プログラムの実行に干渉せず
にグローバル変数、または静的変数、または入出力を監
視できるようにすることである。
【0095】a) メモリまたは入出力のアクセスは、ユ
ーザ・プログラムの実行を停止してはならず、あるいは
ユーザ・プログラムの実行を停止する場合は非常に短い
時間だけにしなければならない。 b) メモリまたは入出力のアクセスは、プロセッサがデ
バッグ・モードであるか、それともノーマル・モードで
あるかにかかわらずに行われなければならない。 c) アクセスが完了したかどうかと、成功したかそれと
も失敗したかが分からなければならない。 d) ユーザ・プログラムがデータ操作のためにアクセス
するいかなるアドレスにあるメモリまたは入出力に対し
てもアクセスできなければならない。 e) アクセスが例外(たとえば、バス・エラー)を発生
させようとしている場合、例外を発生させてはならず、
そのアクセスが異常終了することとその理由が分からな
ければならない。 f) アクセスが完了しない場合、影響を最小限に抑えな
ければならない。たとえば、応答がないためにバス・サ
イクルがハングアップ(無限待機)した場合、バス・サ
イクルを中止できなければならない。 g) アクセスが失敗した場合、それはデバッグ・モジュ
ール初期化によって初期化されなければならない。 h) プロセッサが特権モードとユーザ・モードを有する
場合でも、モードにかかわらずにメモリおよび入出力に
アクセスできなければならない。
【0096】以下のようにしてもよい。 i) プロセッサ・リセット(デバッグ・リセットを含
む)時にクイック・アクセスを実行できる必要はない。 j) 読取りアクセスしかサポートできなくてもよい。
【0097】以下のことを推奨する。 k) アクセスの方式が通常のアクセスと同じであること
を推奨する。
【0098】<1.2.8.3 メモリへの高速プログラム・ダ
ウンロード>この任意選択機能は、ユーザ・プログラム
をメモリにダウンロードするために使用される。
【0099】a) メモリ・ブロックへの書込みは高速で
なければならない。 b) ユーザ・プログラムが存在するアドレスにあるいか
なるメモリに対しても書込み可能でなければならない。 c) アクセスが完了したかどうかと、成功したか、それ
とも失敗したかが分からなければならない。 d) アクセスが例外(たとえば、バス・エラー)を発生
させようとしている場合、例外を発生させてはならず、
そのアクセスが異常終了することとその理由が分からな
ければならない。 e) アクセスが完了しない場合、影響を最小限に抑えな
ければならない。たとえば、応答がないためにバス・サ
イクルがハングアップ(無限待機)した場合、ツールは
バス・サイクルを中止できなければならない。 f) アクセスが失敗した場合、それはデバッグ・モジュ
ール初期化によって初期化されなければならない。 g) プロセッサが特権モードとユーザ・モードを有する
場合でも、モードにかかわらずにメモリにアクセスでき
なければならない。
【0100】以下のようにしてもよい。 h) ノーマル・モードまたはプロセッサ・リセット(デ
バッグ・リセットを含む)時に高速ダウンロードを実行
できる必要はない。
【0101】以下のことを推奨する。 i) アクセスの方式が通常のアクセスと同じであること
を推奨する。
【0102】<1.2.8.4 レジスタ・アクセス>この必須
機能は、デバッグ・モードでレジスタにアクセスするた
めに使用される。ツールはレジスタを表示し変更するこ
とができる。
【0102】a) ユーザ・プログラムによって使用され
るすべてのプロセッサ・レジスタはデバッグ・モードで
アクセスできなければならない。 b) アクセスが成功したか、それとも失敗したかが分か
らなければならない。 c) アクセスが失敗した場合、デバッグ・モジュール初
期化によって要求がクリアされなければならない。 d) デバッグ・モードでも活動状態であるいくつかの関
数を制御するレジスタに対する変更をただちに有効にし
なければならない(たとえば、オンチップ周辺レジス
タ)。 e) プロセッサが特権モードとユーザ・モードを有する
場合でも、モードにかかわらずにレジスタにアクセスで
きなければならない。
【0103】以下のようにしてもよい。 f) 読取り専用レジスタは書込みができなくてもよい。
書込み専用レジスタは読取りができなくてもよい。
【0104】<1.3.標準実装方法> <1.3.1 JTAGデバッグ命令>JTAG任意選択命令のIDCODE
を実装しなければならない。 IDCODE device identification
register
【0105】以下の命令も、デバッグ用のJTAGプラ
イベート命令として定義されている。 DM_SYSTEM デバッグ・モジュール・システム・レジ
スタを選択する。 DM_CONTROL デバッグ・モジュール制御レジスタを選
択する。 DM_RADDR デバッグ・モジュール資源アクセス・ア
ドレス・レジスタを選択する。 DM_RDATA デバッグ・モジュール資源アクセス・デ
ータ・レジスタを選択する。
【0106】JTAGプライベート命令が選択するtest dat
a registerの詳細を以下に説明する。
【0107】<1.3.2 IDCODEレジスタ>このレジスタの
構成を図3に示す。
【0108】デバイスがデバッグ・モジュールを有する
かどうかとを示す関数debug_module_exist()と、各製造
業者ごとのプロセッサ・ファミリIDコードを示す関数pr
ocessor_family_id()がある。デバッグ・ツールは、製
造業者から与えられた関数を使用することによってこれ
らを判定することができる。たとえば、ツールが、部品
番号が0x123?(ここで?は当該桁の数値が何でもよいこ
とを示す)であるプロセッサ・ファミリをサポートし、
バージョンのMSBが、デバイスがデバッグ・モジュール
を有するかどうかを示す場合、これらの関数はC言語風
に表記すれば以下のとおりである。 processor_family_id(part_no, version) = (part_no &
0xfff0);debug_module_exist(part_no, version) = pr
ocessor_family_id(part_no) == 0x1230 && (version &
0x8);
【0109】<1.3.3 デバッグ・モジュール・システム
・レジスタ> DINIT デバッグ・モジュールを初期化する(R/W)。 1:デバッグ・モジュールをリセット(初期化)する。 0:デバッグ・モジュールのリセットを解除する。 Test-Logic-Reset controller stateではデフォルトと
して1になる。
【0110】BKTGIO BKTGIO_L/RMODE信号実装(R) 1:実装している。 0:実装していない。
【0111】BKTGIODIR BKTGIO_Lの方向(R/W) 1:入力 0:出力 デバッグ・モジュール初期化ではデフォルトとして1に
なる。
【0112】BKTGIOBEN BKTGIO_Lブレーク・イネー
ブル(R/W) 1:プロセッサ・ブレーク時にトリガをドライブし、あ
るいはBKTGIO_L入力時にプロセッサをトリガすることを
イネーブルする。 0:ディスエーブル デバッグ・モジュール初期化時にはデフォルトとして0
になる。
【0113】BKTGIOTEN BKTGIO_Lトリガ・イネーブ
ル(R/W) 1:N-Traceトリガ時にトリガをドライブし、あるいはBK
TGIO_L入力時にN-Traceをトリガすることをイネーブル
する。 0:ディスエーブル デバッグ・モジュール初期化時にはデフォルトとして0
になる。
【0114】NTRACE N-trace実装(R) 1:実装している。 0:実装していない。
【0115】NTRACEEN N-traceイネーブル(R/W) 1:イネーブル 0:ディスエーブル デバッグ・モジュール初期化時にはデフォルトとして0
になる。
【0116】<1.3.4 デバッグ制御レジスタ> RESET デバッグ・リセット(R/W) 1:デバッグ・リセットを要求する。 0:デバッグ・リセットを解除する。 RMODEが存在する場合、Test-Logic-Reset controller s
tateではデフォルトとしてRMODEのレベルに従う。RMODE
が存在しない場合、Test-Logic-Reset controller stat
eではデフォルトとして0になる。
【0117】BREAK ブレーク要求(R/W) 書込み1:ブレークを要求するコマンド 書込み0:動作なし 読取り1:コマンドが完了しない(依然としてブレーク
を要求している)。 読取り0:ブレークが完了した。 このビットは、ブレークが完了したときにクリアされ
る。デバッグ・モジュール初期化時にデフォルトとして
0になる。
【0118】EXIT デバッグ・モードから脱出する
(R/W) 書込み1:デバッグ・モードを離脱するコマンド 書込み0:動作なし 読取り1:コマンドが完了していない(依然としてデバ
ッグ・モードである)。 読取り0:コマンドが完了した。 ノーマル・モードへに脱出した直後にブレークが行われ
た場合であっても、このビットはコマンドが完了したと
きにクリアされる。 − 再び脱出するのを回避するため。 − ツールがデバッグ・モード・フラグによってノーマ
ル・モードを検出できない場合に新しいブレークを検出
するため。 デバッグ・モジュール初期化時にデフォルトとして0に
なる。
【0119】MRST デバッグ・モードでユーザ・リセ
ットをマスクする(R/W)。 1:デバッグ・モードでターゲット・リセット入力を無
視(マスク)する。 0:デバッグ・モードでターゲット・リセット入力を受
け入れる。 デバッグ・モジュール初期化時にデフォルトとして0に
なる。
【0120】MNMI ユーザNMIのマスク(R/W) 1:NMIの発生を抑制する。 0:NMIの発生を抑制しない。 NMIがエッジ検知入力であると仮定する。未処理のNMIが
発生するのは、ビットがクリアされたときである。デバ
ッグ・モジュール初期化時にデフォルトとして0にな
る。
【0121】MINT ユーザ割り込みのマスク(R/W) 1:ユーザ割り込み入力を無視する。 0:ユーザ割り込み入力を受け入れる。 デバッグ・モジュール初期化時にデフォルトとして0に
なる。
【0122】STEP シングルステップ・ブレーク(R/
W) 1:シングルステップ・ブレーク(シングルステップ・
モード)をイネーブルする。 0:シングルステップ・ブレークをディスエーブルす
る。 デバッグ・モジュール初期化時にデフォルトとして0に
なる。
【0123】DBM デバッグ・モードまたはノーマル
・モードを示す(R)。 1:デバッグ・モード 0:ノーマル・モード
【0124】BRKCAUSE ブレーク原因(R)。これは
複数のビットからなる。各ブレーク原因ごとに1つのビ
ットが割り当てられ、ブレークが生起したときに対応す
るビットがセットされる。ブレークが複数のブレーク原
因によって生起した場合、複数のビットがセットされ
る。 ビットの割り当ては以下のように定義される。 ビット0:外部ブレーク ビット1:シングルステップ ビット2:ソフトウェア・ブレークポイント ビット3:BREAK ビット4:RESETからのブレーク ビット5:命令アドレス・ブレークポイント ビット6:データ・アクセス・ブレークポイント
【0125】CPUSTAT プロセッサ・ステータス
(R)。プロセッサ・ステータスは以下のようにコード
化される。
【0126】ACTFLG_CLK プロセッサ・クロック活動
状態フラグ(R/W)。ACTFLG_CLKビットは、クロック活
動を示す。デバッグ・ツールは、ターゲット・システム
・ボードからプロセッサにクロックが供給されていない
ことを検出することができる。 書込み1:動作なし 書込み0:活動状態フラグをクリアする。 読取り1:クロックは活動状態である。 読取り0:クロックは非活動状態である。 このフラグは、クロック上の何らかの活動があるときに
セットされる。このフラグがクリアされるのは、デバッ
グ・ツールがこのビットに0を書き込んだときである。
【0127】ACTFLG_BUS バス・サイクル活動状態フラ
グ(R/W)。ACTFLG/BUSビットはバス活動を示す。 書込み1:動作なし 書込み0:活動状態フラグをクリアする。 読取り1:バス・サイクルは活動状態である。 読取り0:フラグがクリアされてからバス・サイクルは
実行されていない。 このフラグは、バス上の何らかの活動があるときにセッ
トされる。このフラグがクリアされるのは、デバッグ・
ツールがこのビットに1を書き込んだときである。
【0128】<1.3.5 資源アクセス>以下の資源に同様
にアクセスすることができる。 − ユーザ・メモリ − ユーザ・レジスタ − デバッグ・レジスタ(ハードウェア・ブレークポイ
ントなど)
【0129】以下のレジスタは、ユーザ資源にアクセス
するために使用される。 DM_RADDR デバッグ・モジュール資源アクセス・アドレ
ス・レジスタを選択する。 DM_RDATA デバッグ・モジュール資源アクセス・データ
・レジスタを選択する。
【0130】DM_RADDRは以下のビットからなる。 ADDR アクセスすべき資源のアドレス RW 読取り/書込み ADDRINC アドレス増分 TYPE アクセスすべき資源のタイプ(メモリ、入出
力、レジスタなど) ASID アドレス空間ID(プロセスID) MMUE MMUイネーブル/ディスエーブル CACHEE キャッシュ・イネーブル/ディスエーブル OPSIZE 動作サイズ
【0131】DM_RDATAは以下のビットからなる。 DATA 読取り/書込みされるデータ START/BUSY プロセッサ資源アクセスを開始する。アク
セスが行われたときにクリアされる。 ABORT/ERR 現在のアクセスを中止する。アクセス中に
エラーが発生したときにセットされる。
【0132】資源アクセスは以下のシーケンスを用いて
行うことができる。 読取りアクセス 1)以下のパラメータをレジスタに設定する。 ADDR 読み取るべきメモリ・アドレス(ユーザ・メモ
リ)またはレジスタ番号(ユーザ・レジスタまたはデバ
ッグ・レジスタ)を設定する。 RW 読取りアクセスでは1に設定する。 TYPE 資源のタイプ(ユーザ・メモリ、またはユーザ
・レジスタ、またはデバッグ・レジスタ)を設定する。 ASID (ユーザ・メモリにアクセスしているとき)プ
ロセッサがMMUを備えている場合はプロセスIDを設定す
る。 MMUE (ユーザ・メモリにアクセスしているとき)プ
ロセッサがMMUを備えている場合はアクセスをMMUを通し
て行うべきかどうかを選択する。 CACHEE (ユーザ・メモリにアクセスしているとき)プ
ロセッサがキャッシュを備えている場合はアクセスをキ
ャッシュを通して行うべきかどうかを選択する。 OPSIZE 8ビット、16ビット、32ビットなどから動作サ
イズを設定する。 ADDRINC メモリまたはレジスタのブロックにアクセスし
ているときにアドレス増分を設定する。 2)START/BUSYを1に設定してアクセスを開始する。 3)START/BUSYが0にクリアされるまで待つ。ABORT/ERR
は、アクセスが正常に終了したかどうかを示す。 ABORT/ERR -------- 0 アクセスが正常に終了した。DATAは、アクセスによ
って検索されたデータを含む。 1 アクセスがエラーと共に終了した。 START/BUSYが長い間クリアされない場合、アクセスがハ
ングアップすることがある。この場合、ABORT/ERRを1に
設定してアクセスを中止すべきである。 4)START/BUSYを1に設定し、引き続き次の位置にアクセ
スする。
【0133】書込みアクセス 1)以下のパラメータをレジスタに設定する。 ADDR 書き込むべきメモリ・アドレス(ユーザ・メモ
リ)またはレジスタ番号(ユーザ・レジスタまたはデバ
ッグ・レジスタ)を設定する。 RW 書込みアクセスでは0にクリアする。 TYPE 資源のタイプ(ユーザ・メモリ、またはユーザ
・レジスタ、またはデバッグ・レジスタ)を設定する。 ASID (ユーザ・メモリにアクセスしているとき)プ
ロセッサがMMUを備えている場合はプロセスIDを設定す
る。 MMUE (ユーザ・メモリにアクセスしているとき)プ
ロセッサがMMUを備えている場合はアクセスをMMUを通し
て行うべきかどうかを選択する。 CACHEE (ユーザ・メモリにアクセスしているとき)プ
ロセッサがキャッシュを備えている場合に、アクセスを
キャッシュ経由で行うべきかどうかを選択する。 OPSIZE 8ビット、16ビット、32ビットなどから動作サ
イズを設定する。 ADDRINC メモリまたはレジスタのブロックにアクセスし
ているときにアドレス増分を設定する。 DATA 書き込むべきデータを設定する。 2)START/BUSYを1に設定してアクセスを開始する。 3)START/BUSYが0にクリアされるまで待つ。ABORT/ERR
は、アクセスが正常に終了したかどうかを示す。 ABORT/ERR --------- 0 アクセスが正常に終了した。 1 アクセスがエラーと共に終了した。 START/BUSYが長い間クリアされない場合、アクセスがハ
ングアップすることがある。この場合、ABORT/ERRを1に
設定してアクセスを中止すべきである。 4)START/BUSYを1に設定し、引き続き次の位置にアクセ
スする。
【0134】<1.3.5.1 プロセッサがキャッシュおよび
MMUを備えている場合>プロセッサがキャッシュおよびM
MUを備えている場合、ユーザ・メモリ・アクセスは、キ
ャッシュおよびMMUを通して行うべきである。キャッシ
ュとMMUの各々についてイネーブルするかそれともディ
スエーブルするかを選択できるようにする必要がある。
キャッシュの特定のエントリを無効化できるようにする
必要もある。通常、ユーザは論理アドレスを指定する。
MMUを使用する場合、ユーザは論理アドレスとアドレス
空間ID(プロセスID)の両方を指定すべきである。
【0135】通常のアクセス データ・キャッシュとメイン・メモリとの間の一貫性を
維持するには、キャッシュをイネーブルしなければなら
ない。ツールは、命令キャッシュにあるメモリの内容を
変更する場合、命令キャッシュの対応するエントリを無
効化すべきである。ソフトウェア・ブレークポイントの
設定は好例である。逆に、TLBミスを回避するにはMMUを
ディスエーブルしなければならない。ユーザ・インタフ
ェースまたはデバッガは、オブジェクト・モジュールに
記憶されているシンボル情報を使用して論理アドレスを
物理アドレスに変換できなければならない。ある種のデ
バッガは、MMUの現在の設定を通じてメモリにアクセス
するためにMMUをオンのままにしておくことができる。
【0136】クイック・アクセス データ・キャッシュとメイン・メモリとの間の一貫性を
維持するには、キャッシュをイネーブルしなければなら
ない。逆に、TLBミスを回避するにはMMUをディスエーブ
ルしなければならない。ユーザ・インタフェースまたは
デバッガは、オブジェクト・モジュールに記憶されてい
るシンボル情報を使用して論理アドレスを物理アドレス
に変換できなければならない。
【0137】高速ダウンロード キャッシュはディスエーブルし無効化しなければならな
い。プログラムはメイン・メモリにロードしなければな
らない。ユーザ・インタフェースまたはデバッガは、オ
ブジェクト・モジュールに記憶されているシンボル情報
を使用して論理アドレスを物理アドレスに変換できなけ
ればならない。
【0138】3.6 命令アドレス・ブレークポイント ハードウェア・ブレークポイントは、「資源アクセス」
方式を通じてアクセスすべきである。すくなくとも1つ
の命令アドレス・ブレークポイントが必要である。命令
アドレス・ブレークポイントは主として、システムがRO
Mベースであるときのブレークポイントとして使用され
る(したがって、ソフトウェア・ブレークポイントを使
用することはできない)。命令アドレス・ブレークポイ
ントはトレースをトリガするときにも使用される。条件
が合致した場合の動作は「ブレーク」、「トリガ」、
「両方」、「なし」から選択可能でなければならない。
【0139】<1.3.6.1 命令アドレス・ブレークポイン
ト・レジスタ>以下のレジスタは、命令アドレス・ブレ
ークポイントを設定するために使用される。
【0140】
【0141】IBAn 命令アドレス・ブレーク・アドレス
・レジスタn 命令アドレス・ブレークポイントのアドレスを記憶す
る。指定されたアドレスに記憶された命令が実行された
ときに、条件が満たされる。命令アドレスの分解能は、
命令の最小長でなければならない。
【0142】IBCn 命令アドレス・ブレーク制御レジス
タn BE ブレーク・イネーブル。条件が満たされたときにユ
ーザ・プログラムを中止する。指定されたアドレスに記
憶された命令が実行されてはならない。 TE トリガ・イネーブル 条件が満たされたときにBKTGIO_Lに対するトリガを出力
する。ブレークが起こってもトリガが出力される。N-tr
aceが実装されている場合、N-traceパケットを出力する
条件を指定するビットがさらに必要である。
【0143】アドレス・マスク アドレス・マスク用に以下のレジスタが追加される。
【0144】IBAMn 命令アドレス・ブレーク・アドレ
ス・マスク・レジスタ IBAn用のビット・マスク。このレジスタのビットが1で
ある場合、IBAnの対応するビットは比較されない。すべ
てのビットをマスクする必要はない。そのような場合、
下位ビットをマスクすべきである。さらに、1マスク・
ビットで複数のビットをマスクすることが受け入れられ
る。この例として、4ビットごとのマスク・ビットや、
下位16ビットに関するマスク・ビットや、下位24ビット
に関するマスク・ビットが挙げられる。(LSBの)いく
つのビットをバイナリでマスクするかを指定することも
受け入れられる。
【0145】IBCnに以下のビットが追加される。 IBCn 命令アドレス・ブレーク制御レジスタ INV 0−条件が合致したときにブレークポイントがヒットする。 1−条件が合致しないときにブレークポイントがヒットする。
【0146】アドレス範囲 アドレスを「レンジ」によって比較する場合、IBAでは
なく以下のレジスタが使用される。 IBALn 命令アドレス・ブレーク・アドレス・ロー・レ
ジスタ IBAHn 命令アドレス・ブレーク・アドレス・ハイ・レ
ジスタ アドレスがIBALnないしIBAHnの範囲内(両方の境界、す
なわちIBALnおよびIBAHnを含む)である場合、アドレス
が合致する。
【0147】IBCnに以下のビットが追加される。 IBCn 命令アドレス・ブレーク制御レジスタ INV 0−条件が合致したときにブレークポイントがヒットする。 1−条件が合致しないときにブレークポイントがヒットする。
【0148】<1.3.6.2 ブレークポイントの作用>BE
(ブレーク・イネーブル)ビットをセットした場合、ブ
レークは、指定されたアドレスの命令が実行される前に
行われなければならない。プログラム・カウンタはその
命令を指し示すべきである。その場合、ツールは命令ブ
レークポイントをリセットし、ユーザ・プログラムに現
在のプログラム・カウンタから実行させる。ユーザ・プ
ログラムは作業を再開できなければならない。分岐遅延
スロットにあるブレークポイントまたはオーバラン・ブ
レーク・ステータス(命令が実行された後にブレークが
行われるケース)には特別な注意を払うべきである。命
令が実行されていない場合には、ブレークが起こっては
ならない。この例には、分岐や、例外や、前の命令での
ブレークが挙げられる。
【0149】<1.3.6.3 プロセッサがキャッシュとMMU
を備えている場合>設定アドレスは論理的なものでなけ
ればならない。論理アドレスだけでなくアドレス空間ID
も指定する方法があるべきである。アドレス空間IDは、
IBCnの以下のビットに指定される。 ASID アドレス空間ID ASIDM 1−ASIDがマスクされる。
【0150】<1.3.7 データ・アクセス・ブレークポイ
ント>ハードウェア・ブレークポイントは、「資源アク
セス」方式を通じてアクセス可能であるべきである。ハ
ードウェア・ブレークポイントは、ユーザ・プログラム
が、指定されたデータを含む指定されたアドレスにアク
セスしたときにユーザ・プログラムを中止するために使
用される。読取りや書込みなどのアクセス・タイプも指
定すべきである。ハードウェア・ブレークポイントはト
レースをトリガするときにも使用される。条件が合致し
た場合の動作は「ブレーク」、「トリガ」、「両方」、
「なし」から選択できなければならない。
【0151】<1.3.7.1 データ・アクセス・ブレークポ
イント・レジスタ>データ・アクセス・ブレークポイン
トを設定するには以下のレジスタが使用される。 DBAn データ・アクセス・ブレーク・アドレス・レジス
タn 指定されたアドレスがアクセスされたときに条件が満た
される。 DBDn データ・アクセス・ブレーク・データ・レジスタn 読み取られあるいは書き込まれたデータが、指定された
データに等しいときに条件が満たされる。 DBCn データ・アクセス・ブレーク制御レジスタn MEM メモリ 条件はメモリ・アクセス・サイクルでしか満たされな
い。 IO 入出力アクセス 条件は入出力アクセス・サイクルでしか満たされない。 DBE データ比較器バイト・イネーブル ビット長はプロセッサのデータ・ワードのバイト数に等
しい。各ビットはプロセッサのバイト・イネーブルに対
応する。これらのビットをセットすると、プロセッサが
対応するデータ・バイトをイネーブルしていない場合は
データ条件が満たされない。 BEA アドレス合致時のブレーク・イネーブル アドレス条件が満たされたときにユーザ・プログラムに
ブレークをかける。 BED データ合致時のブレーク・イネーブル データ条件が満たされたときにユーザ・プログラムにブ
レークをかける。BEAビットとBEDビットの両方をセット
した場合、両方の条件が満たされたときにブレークが要
求される。両方ともクリアした場合、比較器の結果にか
かわらずにブレークが要求される。 BERD 読取りアクセス ブレーク条件は読取りサイクルでしか満たされない。 BEWR 書込みアクセス ブレーク条件は書込みサイクルでしか満たされない。BE
RDビットとBEWRビットの両方をセットした場合、アクセ
ス・タイプにかかわらずにブレークが要求される。両方
ともクリアした場合、ブレークは要求されない。 TEA アドレス合致時のトリガ・イネーブル アドレス条件が満たされたときにBKTGIO_Lに対するトリ
ガを出力する。ブレークが行われる場合でもトリガが出
力される。 TED データ合致時のトリガ・イネーブル データ条件が満たされたときにBKTGIO_Lに対するトリガ
を出力する。ブレークが行われる場合でもトリガが出力
される。TEAビットとTEDビットの両方をセットした場
合、両方の条件が満たされたときにトリガが出力され
る。両方ともクリアした場合、比較器の結果にかかわら
ずにトリガが出力される。 TERD 読取りアクセス トリガ条件は読取りサイクルでしか満たされない。 TEWR 書込みアクセス トリガ条件は書込みサイクルでしか満たされない。TERD
ビットとTEWRビットの両方をセットした場合、アクセス
・タイプにかかわらずにトリガが出力される。両方とも
クリアした場合、トリガは出力されない。N-traceが実
装されている場合、N-traceパケットを出力する条件を
指定するビットがさらに必要である。
【0152】アドレス・マスク アドレス・マスク用に以下のレジスタが追加される。 DBAMn データ・アクセス・ブレーク・アドレス・マス
ク・レジスタ DBAn用のビット・マスク。このレジスタのビットが1で
ある場合、DBAnの対応するビットは比較されない。すべ
てのビットをマスクする必要はない。そのような場合、
下位ビットをマスクすべきである。さらに、1マスク・
ビットで複数のビットをマスクすることが受け入れられ
る。この例として、4ビットごとのマスク・ビットや、
下位16ビットに関するマスク・ビットや、下位24ビット
に関するマスク・ビットが挙げられる。(LSBの)いく
つのビットをバイナリでマスクするかを指定することも
受け入れられる。 DBCn データ・アクセス・ブレーク制御レジスタ AINV 0−条件が合致したときにブレークポイントがヒットする。 1−条件が合致しないときにブレークポイントがヒットする。
【0153】アドレス範囲 アドレスを「レンジ」によって比較する場合、DBAでは
なく以下のレジスタが使用される。 DBALn データ・アクセス・ブレーク・アドレス・ロー
・レジスタ DBAHn データ・アクセス・ブレーク・アドレス・ハイ
・レジスタ アドレスがDBALnないしDBAHnの範囲内(両方の境界、す
なわちDBALnおよびDBAHnを含む)である場合、アドレス
が合致する。DBCnに以下のビットが追加される。 DBCn データ・アクセス・ブレーク制御レジスタ AINV 0−条件が合致したときにブレークポイントがヒットする。 1−条件が合致しないときにブレークポイントがヒットする。
【0154】データ・マスク データ・マスク用に以下のレジスタが追加される。 DBDMn データ・アクセス・ブレーク・データ・マスク
・レジスタ DBDn用のビット・マスク。このレジスタのビットが1で
ある場合、DBDnの対応するビットは比較されない。DBDn
のあらゆる単一ビットをマスクする必要がある。DBCに
以下のビットが追加される。 DBCn データ・アクセス・ブレーク制御レジスタ DINV 0−条件が合致したときにブレークポイントがヒットする。 1−条件が合致しないときにブレークポイントがヒットする。
【0155】<1.3.7.2 ブレークポイントの作用>ブレ
ークの後、ツールはデータ・アクセス・ブレークポイン
トをリセットし、ユーザ・プログラムに現在のプログラ
ム・カウンタから実行させる。ユーザ・プログラムは作
業を再開できなければならない。データ・アクセス・サ
イクルを実施させる命令が実行される時間と実際にブレ
ークが行われる時間との間にある時間間隔が存在するこ
とがある。この時間間隔中に命令が実行されてもよい。
【0156】<1.3.7.3 プロセッサがキャッシュとMMU
を備えている場合>設定アドレスは論理的なものでなけ
ればならない。論理アドレスだけでなくアドレス空間ID
も指定する方法があるべきである。アドレス空間IDは、
DBCnの以下のビットに指定される。 ASID アドレス空間ID ASIDM 1−ASIDがマスクされる。
【0157】<1.4.レベル2標準>レベル1標準が適用
できない場合、以下の仕様に従うべきである。 <1.4.1 モニタ>直接JTAGを通じてレジスタや、メモリ
や、キャッシュなどのユーザ資源にアクセスすることが
困難であるときの代替策はモニタ・プログラムを実行す
ることである。モニタを使用する場合は以下にリストし
たオプションのうちの1つを選択すること。
【0158】<1.4.1.1 モニタ・プログラムが内部バッ
ファの数ワードに対して実行される場合>2つのJTAG命
令を追加すべきである。一方の命令では、MON_INST、MO
N_DATAACC、MON_INSTEXECがアクセスされる。他方の命
令では、MON_DATAがアクセスされる。 MON_INST モニタ命令レジスタ プロセッサは、デバッグ・モードのときにこのレジスタ
から命令を取り出す。 MON_DATA モニタ・データ・レジスタ デバッグ・モードでは、MON_DATAACCビットが1に設定さ
れている場合、ロード/ストア命令時にプロセッサがこ
のレジスタ内のデータにアクセスする。MON_DATAACCが0
にクリアされている場合、プロセッサは通常のユーザ・
メモリにアクセスする。 MON_DATAACC モニタ・データ・アクセス・フラグ プロセッサがデバッグ・モードである間、ロード/スト
ア命令がMON_DATAにアクセスするか、それともユーザ・
メモリにアクセスするかを示す。 MON_INSTEXEC モニタ・プログラムの実行 このビットに1を書き込むと、プロセッサはMON_INSTレ
ジスタから命令を取り出し実行する。プロセッサは、命
令の実行を終了したときにこのビットはクリアすべきで
ある。0を書き込むと無視される。
【0159】<1.4.1.2 モニタ・プログラムが専用モニ
タ・メモリに配置されている場合>モニタがROM上に配
置されている場合、データ・アクセス用のレジスタが必
要である。あるいはユーザRAMの一部をモニタ用に使用
しなければならない。モニタをRAM上に配置する場合、
モニタをダウンロードする機能がなければならない。
【0160】<1.4.1.3 モニタ・プログラムのロード>
プロセッサ・リセット中にモニタをロードできない場
合、モニタがリセット後の最初のブレークの後に動作す
るのを妨げる機能がなければならない。
【0161】<1.4.1.4 ユーザ・プログラムへのリター
ン>モニタ・プログラムを使用する際、レベル1標準に
記載したのとは異なり、EXITビットに1を書き込むので
はなく、特殊な命令(リターン命令)によってユーザ・
プログラムに戻ることができる。この場合、ユーザ・プ
ログラムが実行されているかどうかを判定するRUNFLAG
ビットを(EXITの代わりに)用意すべきである。 RUNFLAG ユーザ・プログラムが実行されたかどうかを
判定するために使用される。ユーザ・プログラムが実行
されたときにセットされる。0を書き込むとクリアされ
る。1を書き込むと無視される。デバッグ・ツールは、
ノーマル・モードに戻る前にこのビットをクリアする。
RUNFLAGが設定されているとき、BRKCAUSEを読み取るこ
とによってブレークの原因が検査される。
【0162】<1.4.2 クイック・アクセス>MMUの内部
にクイック・アクセス機構を挿入することが困難である
場合には、2つの方法がある。すなわち、この機構をMMU
とキャッシュの間に挿入し(方法2)、あるいはキャッ
シュの外側に挿入することができる(方法3)。クイッ
ク・アクセスはDMA状の機構によって行われる。ユーザ
・プログラムに対するこの機構の影響を最小限に抑えて
静的変数または入出力にアクセスすることができる。コ
ードのダウンロードも高速化する。DMA状の機構を、図
4の(1)ないし(3)の3つの位置のうちの1つでプロセッサ
のバスに接続することができる。
【0163】<1.4.2.1 方法(1)>方法(1)を強く推
奨する。方法(2)または(3)を使用する場合、いくつ
かの制限がある。
【0164】<1.4.2.2 方法(2)>メモリがクイック
・アクセスによってアクセスされるとき、現在のMMU設
定を参照することは不可能である。
【0165】<1.4.2.3 方法(3)>高速ダウンロード
は、デバッグ・モードでリセットの直後に行われる(キ
ャッシュもリセットされる)。したがって、方法(3)
はコードのダウンロードに有用である。ただし、以下の
制限が適用される。キャッシュがライトバック・キャッ
シュである場合、メイン・メモリの内容とキャッシュの
内容が異なることがある。したがって、クイック・アク
セスによるライトバック・キャッシュ領域からの読取り
はサポートされない。キャッシュ・スヌーピングがサポ
ートされず、メイン・メモリに何らかのデータが書き込
まれる場合、キャッシュの内容はメイン・メモリとは異
なるものになる。したがって、スヌーピングがサポート
されない場合、キャッシュ領域への書込みはサポートで
きない。通常のメモリ・アクセス(クイック・アクセス
ではない)はデバッグ・モードで行われる。ツールは、
書込みサイクル時にライトバックを実行することも、あ
るいは読取りサイクル時にエントリを無効化することも
できる。したがって、前述の問題は解決する。
【0166】<1.4.2.4 クイック・アクセスがサポート
されない場合>すべてのメモリ・アクセスはモニタによ
って実行される。したがって、クイック・アクセスも高
速ダウンロードもサポートされない。
【0167】以下ではN-trace部について説明する。 <2.1.トレース・ポート>図5にトレースポートの信
号を示す。 TRCCLK 出力 トレース出力用のクロック TRCEND 出力 トレース・データの終了ビット
を示す。 TRCDATA[n-1:0] 出力 トレース・データ出力
【0168】「n」が大きければ大きいほど、オーバフ
ローの可能性が低くなる。各トレース・パケットのビッ
ト長は可変である。TRCEND信号は、デバッグ・モジュー
ルがTRCDATAピンからのトレース・パケットの出力を終
了した時点を示す。これは、TRCDATA上には常に何らか
のパケットがあることを意味する。出力すべき他のトレ
ース・データがないとき、パケットは、「NOP」と呼ば
れる空パケットであってよい。図5(B)に示すように、
2本あるいはもっと多くのピンをTRCDATAに割り当てて
よい。
【0169】<2.2.トレース・パケット・ビット長を
最小限に抑えるには>各トレース・パケットのサイズは
できるだけ小さくすべきである。何らかの方法で補間で
きるビットは省略すべきである。最初の数ビットでパケ
ットのタイプを判定することができ、TRCENDによってパ
ケットの終わりを知ることができるので、各パケットの
いくつかの後続ビットを削除することができる。
【0170】以下の2つの方法は有効であるが、簡単で
容易に実施できるので、これらの方法を使用する。 a) すべて零である後続ビットを抑制する。 b) 前のパケットと同じ値を有する後続ビットを抑制す
る。 TPCパケットには(b)を使用し、他のパケットには
(a)を使用する(パケットについては後で定義す
る)。
【0171】(a)の例 図6(A)に示すように、「1、0、0、1、1、0、0、0」と
いう8ビット・パケットの最後の3ビットを削除すること
ができる。TRCDATAが2ビットである場合、図6(B)に示
すように、最後の2ビットのみを削除することができ
る。
【0172】(b)の例 図7(A)に示すように、34ビット・パケットの「パケッ
トY」を出力する予定であり、同じタイプの前のパケッ
トが「パケットX」であると仮定すると、図中のインジ
ケータ(縦棒シンボル「|」)の後のビットを出力する
必要はない。TRCDATA[1]の最後のビットが「1」であり
「0」ではないことに留意されたい。
【0173】この例では、最初の4ビット(0、1、0、
0)は、パケットのタイプを示す。パケットが同じタイ
プの前にパケットに完全に合致する場合でも(「パケッ
トX」が「パケットY」と同一である場合)、最初の4ビ
ットを出力すべきである。しかし、この場合も方法
(1)を適用することによってこのパケットの最後の2ビ
ットを削除することができる。結局、図8に示すよう
に、最初の2ビットを出力するだけでよい。
【0174】 <2.3.トレース・パケット定義> 略号 コード -------- ---------------- NSEQ<seq#> 1,<seq#> TPC <program_counter> 0,1,0,0, <program_counter> TPCM 0,1,0,1 EXP <exp_id> 0,1,1,0, <exp_id> LSEQ 0,1,1,1 MATCH <match_info> 0,0,1,1, <match_info> DATA <type>,<data> 0,0,1,0, <type>,<data> OVF 0,0,0,1 NOP 0
【0175】<2.3.1 非順次実行> 略号 NSEQ <seq#> コード 1,<seq#>
【0176】このパケットは、分岐または例外が発生し
たときに出力される。
【0177】<seq#>は、この事象またはLSEQ(長い順次
実行)の前回の発生からこの事象の現在の発生まで命令
が順次実行される間のプログラム・カウンタ増分であ
る。<seq#>の単位は、プログラム・カウンタ増分の最小
数であるべきである。<seq#>は、バイナリ・フォーマッ
トで最下位ビット(LSB)から出力される。零の上位ビ
ットを出力する必要はない。
【0178】 上の例中で「^」を付加されたビットは出力する必要は
ない。
【0179】このパケット(およびLSEQパケット)は、
前の分岐の分岐先アドレスと現在の分岐の分岐元アドレ
スとの間のプログラム・カウンタ距離を示すので、以下
のことに留意すべきである。
【0180】− プロセッサが命令をスキップするがプ
ログラムの流れは変更しないとき、スキップされた命令
をカウントすべきである。一例は、MIPS R3000シリーズ
・プロセッサのbranch likely命令が選択されない場合
である。 − 逆に、分岐遅延スロット内の命令はカウントしては
ならない。分岐命令を逆アセンブルすることによって、
そのような命令が実行されたかどうかを判定することが
できる。
【0181】<2.3.2 分岐先PC> 略号 TPC <program_counter> コード 0,1,0,0,<program_counter>
【0182】<program_counter>は、バイナリ・フォー
マットで最下位ビット(LSB)から出力される。前の分
岐先PCと同じ上位ビットを出力する必要はない。常に固
定されるビットの部分も出力する必要はない(たとえ
ば、MIPS R3000シリーズ・プロセッサのプログラム・カ
ウンタのビット1および0)。プロセッサがMMU(メモリ
管理装置)を備えている場合、<program_counter>は論
理アドレスであるべきである。例を以下の表に示す。
【0183】
【表1】 以前の ターゲット <program_counter> <program_counter> コード --------- -------- ---------------------------------- bfc00000 bfc00328 0100010100110000000000001111111101 ^^^^^^^^^^^^^^^^^^^^^^ bfc00328 bfc00208 0100010000010000000000001111111101 ^^^^^^^^^^^^^^^^^^^^^^^ bfc00208 00000000 0100000000000000000000000000000000 (注)下に^が付されたビットは出力する必要がない
【0184】このパケットは以下の状況で出力される。 − 間接ジャンプが選択されたとき、このパケットはNSE
Qパケットの後に出力すべきである。本書での間接ジャ
ンプ命令の定義は、分岐またはジャンプを実行させる命
令であり、分岐先アドレスをその命令コードから復号す
ることはできない。たとえば、レジスタ間接ジャンプ
(MIPS R3000シリーズ・プロセッサの「jr$31」など)
やサブルーチンからのリターン(Motorola CPU32プロセ
ッサの「rts」など)など。 − プログラムカウンタを非順次に変化させる例外また
は事象が発生したときは、EXPパケットの後にこのパケ
ットを出力すべきである。 − 直接ジャンプが行われるときに内部N-traceバッファ
が空であるときは、このパケットを出力すべきである。
これは、逆アセンブルがTPCパケットからしか開始でき
ないからである。トレース・リストの第1行とそのトレ
ース・リスト内の第1のTPCパケットとの間に記憶された
状態を逆アセンブルすることはできない。N-traceは、
前のTPCパケットの<program_counter>が記憶されている
レジスタのすべてのビットを(零に)クリアすべきであ
る。
【0185】複数のTRCDATAピンがある場合、余分なビ
ットに関しては意味のある値(零ではない)を出力すべ
きである。たとえば、2本のTRCDATAピンがある場合、上
記のコードの例で第2の分岐に関して「0101000001」
(「0101000000」ではない)が出力される。
【0186】<2.3.3 例外> 略号 EXP <exp_id> コード 0,1,1,0,<exp_id>
【0187】このパケットが出力されるのは、プロセッ
サ内で例外または特殊なイベントが発生したときであ
る。
【0188】<exp_id>は、例外またはイベントのタイプ
を示す。<exp_id>のビット割り当ては、プロセッサ・フ
ァミリに依存する。<exp_id>はバイナリ・フォーマット
で最下位ビット(LSB)から出力される。それ以上の上
位ビットが全てゼロである場合、それらのビットを出力
する必要はない。
【0189】このパケットは、プロセッサが例外を生成
したときにNSEQパケットの後に出力される。例外ハンド
ラのアドレスが<exp_id>からは分からない場合、EXPパ
ケットの後にTPCパケットを出力すべきである。イベン
トの例は、割り込み、プロセスID変更、バス解放、スリ
ープ・モードの開始などがあり得る。
【0190】<2.3.4 トリガまたはハードウェア・ブレ
ークポイントの合致、あるいはその両方> 略号 MATCH <match_info> コード 0,0,1,1,<match_info>
【0191】このパケットが出力されるのは、オンチッ
プ・ハードウェア・ブレークポイント・ヒットや外部ト
リガ入力など、ユーザが指定したイベントが発生したと
きである。<match_info>のビット割り当てはプロセッサ
・ファミリに依存する。<match_info>は、イベントのタ
イプおよびチャネル番号(イベントがハードウェア・ブ
レークポイントである場合)を示す情報を含むべきであ
る。また、<match_info>は、イベントの詳細を示す追加
情報を含むことができる。MATCHパケットは、N-traceパ
ケットを取り込むデバッグ・ツールをトリガするために
使用されるので、トレース・バッファがオーバフローし
ている間でもMATCHパケットが失われてはならない。以
下に<match_info>の例を示す。
【0192】<2.3.4.1 <match_info>の例><match_inf
o>の最初の2ビットはイベントのタイプを示す。後続の
ビットはこのタイプに依存する。 <bptype> イベントのタイプ ------- ----------- 0,0 外部トリガ入力 0,1 命令アドレス・ブレークポイント 1,0 データ・アクセス・ブレークポイント 1,1 予約
【0193】外部トリガ入力 略号 MATCH Extrg コード 0,0,1,1,0,0
【0194】命令アドレス・ブレークポイント 略号 MATCH Exec,<bplist> コード 0,0,1,1,0,1, <bplist>
【0195】<bplist>は、命令アドレス・ブレークポイ
ントのどのチャネルにヒットしたかを示す。<bplist>
は、命令アドレス・ブレークポイントの数と同じ数のビ
ットを有する。ブレークポイントのチャネル「n」にヒ
ットすると、<bplist>のビット「n」がセットされる。2
つ以上のビットがセットされた場合、2つ以上の条件が
同時に満たされたことを意味する。
【0196】データ・アクセス・ブレークポイント 略号 MATCH Acc, <bplist>,<rw>,[1, <addr>] コード 0,0,1,1,1,0, <bplist>,<rw>,[1, <addr>]
【0197】<bplist>は、データ・アクセス・ブレーク
ポイントのどのチャネルにヒットしたかを示す。<bplis
t>は、データ・アクセス・ブレークポイントの数と同じ
数のビットを有する。ブレークポイントのチャネル
「n」にヒットすると、<bplist>のビット「n」がセット
される。2つ以上のビットがセットされた場合、2つ以上
の条件が同時に満たされたことを意味する。<rw>は、1
ビット長であり、アクセス・サイクルのアクセス・タイ
プを示す。 <rw> ---- -------------- 1 読取りサイクル 0 書込みサイクル
【0198】データ・アクセス・ブレークポイントがア
ドレス・マスクを用いて設定されているとき、ブレーク
ポイントのチャネルからアドレスを判定することはでき
ない。この場合、厳密なアドレスを判定するには、追加
情報、すなわちデータ・アクセス・サイクルのアドレス
(<addr>)が有用である。<addr>が出力されるのは、デ
ータ・アクセス・ブレークポイントのアドレス出力イネ
ーブル・ビットの「MAOE」がセットされた場合である。
一般に、アドレス・マスクは、アドレスの上位ビットで
はなく下位ビットをマスクするために使用される。パケ
ットのビット長を最小限を抑えるために、<addr>は、ア
ドレス・マスクとの論理和であるアドレスであるべきで
ある。 <addr> = <data access address> & <address mask reg
ister> <address mask register>のビットが設定されていると
き、比較器は、対応する<data access address>ビット
を比較しない。完全なアドレスは、マスクされたアドレ
スの値およびブレークポイント・チャネル番号から得る
ことができる。多数のデータ・アクセス・ブレークポイ
ントがヒットし、アドレスを出力するためにイネーブル
されたとき、ブレーク・チャネル番号が最低のアドレス
・マスクを使ってそのアドレスがマスクされる。アクセ
ス・サイクルで使用されたデータを示すには、DATAパケ
ットを後に続けることができる。
【0199】<2.3.5 データ・アクセス出力> 略号 DATA <type>,<data> コード 0,0,1,0,<type>,<data>
【0200】このパケットは、事前に設定された条件が
満たされたときにデータ・アクセス・サイクルを出力す
るために使用される。<type>は、どんなタイプのデータ
が出力されるかを示す。ビット長および値の意味はプロ
セッサ・ファミリに依存する。<data>は、データ・アク
セス・サイクルのデータである。ビット長は可変であ
る。
【0201】データ・アクセス・ブレークポイントにヒ
ットし、データ出力ビットがイネーブルされたときに、
MATCHパケットに続いてDATAパケットを出力すべきであ
る。上位ビット側のビットがゼロならそれらを出力する
必要はない。以下に<type>および<data>の例を示す。
【0202】<2.3.5.1 <type>および<data>の例> <type> <type>は、プロセッサのバイト・イネーブル信号を表
す。32ビット・プロセッサでは、<type>のビット長は4
ビット(BE[3:0])である。<type>は、バイト・イネー
ブル0(BE[0])から出力される。 <data> <data>のビット長は、データ・アクセス・サイクルの動
作サイズに依存する。たとえば、バイト・アクセス・サ
イクルの場合、長さは8ビットになる。<data>はバイナ
リ・フォーマットで最大ビット(LSB)から出力され
る。
【0203】<2.3.6 オーバフロー> 略号 OVF コード 0,0,0,1
【0204】オンチップ・トレース・バッファがオーバ
フローすると、バッファへの入力は、バッファ内のすべ
てのパケットが出力されるまで中断される。OVFパケッ
トは、トレース・バッファに最後に残ったパケットの後
に続くべきである。オーバフローのために入力が中断さ
れている間にMATCHパケット出力の条件が満たされた場
合、OVFパケットの後も依然としてMATCHパケットを出力
すべきである。MATCHパケットは、ユーザが指定したイ
ベントを検出するために使用されるので、失われてはな
らない。オーバフロー中に発生する他のパケットは失わ
れてもよい。
【0205】<2.3.7 長い順次実行> 略号 LSEQ コード 0,1,1,1
【0206】このパケットは、NSEQコード用のカウンタ
のビットの数を制限するために用意されている。このパ
ケットは、最大数の順次命令が実行されたときに出力さ
れる。そのような最大数は、本仕様では指定されず、プ
ロセッサ・ファミリに依存させることができる。
【0207】<2.3.8 出力すべきデータがない> 略号 NOP コード 0
【0208】このパケットは、出力すべき他のデータが
ない場合に出力される。
【0209】<2.3.9 小型パケット>当然のことなが
ら、このN-trace仕様を実装するには2組のバッファが必
要である。この一方は、イベントの「タイプ」を記憶す
るものである。これを「メイン・バッファ」と呼ぶ。他
方は、<program_counter>、<exp_id>、<data>などの
「データ」を記憶するものである。これを「データ・バ
ッファ」と呼ぶ。「データ・バッファ」のビット幅は
「メイン・バッファ」のビット幅よりも長い。「データ
・バッファ」の深さは、「メイン・バッファ」の深さよ
りも浅い。したがって、「データ・バッファ」が満杯の
とき、「メイン・バッファ」はまだ満杯ではない可能性
が高い。そうである場合、イベントの「データ」を省略
して、依然としてイベントの「タイプ」を出力すること
ができる。 <exp_id>を含まないEXPパケット <addr>を含まないMATCHパケット <data>および<type>を含まないDATAパケット
【0210】TPCパケットでは、他のパケットを定義す
る必要がある。 略号 TPCM コード 0,1,0,1
【0211】<2.4.トレース・モード>限られたトレ
ース・ピンおよびバッファを最も効果的に使用するため
に様々な任意選択のトレース・モードがあるべきであ
る。
【0212】<2.4.1 リアルタイム/非リアルタイム・
トレース>リアルタイム・トレース・モードでは、プロ
セッサはN-traceからの制約なしにユーザ・プログラム
を実行する。オンチップN-Traceバッファがオーバフロ
ーするとOVFパケットが生成される。例外的なケースで
は、正しいトレースに必要なある種のトレース情報が失
われることがある。
【0213】非リアルタイム・トレース・モードでは、
オンチップN-Traceバッファがオーバフローする前にプ
ロセッサのパイプラインが停止する。これによって完全
なトレースが確保されるが、プロセッサのユーザ・プロ
グラムの実行が減速する。
【0214】<2.4.2 TPCパケット>TPCパケットは、分
岐のタイプに応じて選択的に出力されるべきである。TP
Cパケットを出力する4つのレベルがある。
【0215】レベル0:TPCの抑制 このレベルでは、TPCパケットは出力されない。これ
は、データ・アクセス・トレースしか必要でない場合に
有用である。
【0216】レベル1:例外および間接ジャンプ時のTPC
パケット 例外および間接ジャンプが発生したときにTPCパケット
が出力される。これはノーマル・モードである。完全な
プログラム・フローのトレースにかなり近い。
【0217】レベル2:特殊命令時のTPCパケット このレベルでは、特殊命令時に常にTPCパケットが生成
される。このモードは、特殊命令が「関数間」ジャンプ
である場合に特に有用である。たとえば、この範疇には
Jump-and-link命令およびReturn命令を含めるべきであ
る。それによってプログラム・フローを関数レベルでト
レースすることができる(関数呼出し履歴など)。
【0218】レベル3:例外およびジャンプ時のTPCパケ
ット いかなる例外またはいかなるジャンプが発生したときに
もTPCパケットが出力される。このレベルでは、直接ジ
ャンプを逆アセンブルしなくてもプログラム・カウンタ
を再構築することができるので、トレースは常に正し
い。レベル0ないし2では、システム・クラッシュのため
にプログラム・コードが破壊された場合にプログラム・
カウンタを再構築することはできない。
【0219】<2.4.3 その他のパケット>EXPパケッ
ト、NSEQパケット、LSEQパケットを選択的にイネーブル
またはディスエーブルすべきである。これは、TPCパケ
ットのレベル3またはレベル0に対応する。
【0220】<2.5.デバッグ・レジスタ>デバッグ・
レジスタは、N-trace設定を制御する。デバッグ・レジ
スタは、N-wire「資源アクセス」方式によってアクセス
される。このレジスタにアクセスすることがプロセッサ
のユーザ・プログラムの実行に影響を与えてはならな
い。
【0221】<2.5.1 N-traceシステム・レジスタ>TRC
SYSデバッグ・レジスタは、N-Traceを制御するために使
用される。
【0222】TRCSYS(N-Traceシステム・レジスタ) ID N-Trace実装ID(R) プロセッサ・ファミリ依存オプションを識別する。 NDATAPIN N-Traceピン構成(R) TRCDATAピンの数 OVF N-Traceオーバフロー・ステータス(R/W) このビットは、トレース・バッファがオーバフローした
ときにセットされる。 TGIN N-Trace入力ステータス(R/W) このビットは、外部トリガが検出されたときにセットさ
れる。 RESET N-Traceをリセットする(W). N-Traceをリセットする。 このビットがセットされた場合、N-Traceが初期化さ
れ、トレース・パケットは生成されない(NOPパケット
が出力される)。N-Traceリセット時には、トレース・
バッファおよびMO1(MATCHパケット一度出力)状態がク
リアされる。前の<program_counter>の値は、次のTPCパ
ケットを短くするために使用されるが、この値を初期化
すべきである。N-Traceリセット時にすべてのトレース
設定を変更することができる。このビットをクリアした
ときに、プロセッサ活動に応じてトレース・パケットが
生成されるべきである。 CLKDIV クロック周波数のトレース(W) TRCCLK周波数を変更する。このビットは、この周波数を
N-Traceアナライザに適応させるために使用される。こ
れは、コア・クロック周波数を分割することによって選
択される。 MODE モード構成のトレース(W) ビット0 リアルタイム・トレースまたは非リアルタ
イム・トレース ビット2, 1 TPCパケット出力レベルを選択する。 ビット3 EXPパケットを抑制する。 ビット4 NSEQパケットおよびLSEQパケットを抑制す
る。
【0223】<2.5.2 ハードウェア・ブレークポイント
・レジスタ>ハードウェア・ブレークポイントに関する
デバッグ・レジスタは、MATCHパケットおよびDATAパケ
ットを出力する条件を指定するために使用される。各ハ
ードウェア・ブレークポイント・チャネルごとに以下の
レジスタを準備すべきである。
【0224】<2.5.2.1 命令アドレス・ブレークポイン
ト> IBA 命令アドレス・ブレークポイント・アドレス・レ
ジスタ IBAM 命令アドレス・ブレークポイント・アドレス・マ
スク・レジスタ IBC 命令アドレス・ブレークポイント制御レジスタ INV 比較器反転 比較器の結果を反転させる。命令アドレスがIBAレジス
タおよびIBAMレジスタに合致しないときに条件が満たさ
れる。 ME MATCHパケット・イネーブル 条件が満たされたときにN-trace上でMATCHパケットを出
力する。 MO1 MATCHパケット一度出力 N-traceリセット以後、条件が初めて発生したときに1度
だけMATCHパケットを出力する。
【0225】<2.5.2.2 データ・アクセス・ブレークポ
イント> DBA データ・アクセス・ブレークポイント・アドレス
・レジスタ DBAM データ・アクセス・ブレークポイント・アドレス
・マスク・レジスタ DBD データ・アクセス・ブレークポイント・データ・
レジスタ DBDM データ・アクセス・ブレークポイント・データ・
マスク・レジスタ DBC データ・アクセス・ブレークポイント制御レジス
タ AINV アドレス比較器反転 アドレス比較器の結果を反転させる。アクセス・アドレ
スがDBAレジスタおよびDBAMレジスタに合致しないとき
に条件が満たされる。 DINV データ比較器反転 データ比較器の結果を反転させる。アクセス・データが
DBDレジスタおよびDBDMレジスタに合致しないときに条
件が満たされる。 DBE データ比較器バイト・イネーブル ビット長は、プロセッサのデータ・ワードのバイト数に
等しい。各ビットは、プロセッサのバイト・イネーブル
に対応する。このビットがセットされると、プロセッサ
が対応するデータ・バイトをイネーブルしていない場
合、データ条件は満たされない。 MEA アドレス合致時のMATCHパケット・イネーブル 条件が満たされたときにN-trace上でMATCHパケットを出
力する。 MED データ合致時のMATCHパケット・イネーブル 条件が満たされたときにN-trace上でMATCHパケットを出
力する。MEAビットとMEDビットの両方をセットした場
合、両方の条件が満たされたときにMATCHパケットが出
力される。両方ともクリアした場合、比較器の結果にか
かわらずにMATCHパケットが出力される。 MERD 読取りアクセス 条件は、読取りサイクルでしか満たされない。 MEWR 書込みアクセス 条件は、書込みサイクルでしか満たされない。MERDビッ
トとMEWRビットの両方をセットした場合、アクセス・タ
イプにかかわらずにMATCHパケットが出力される。両方
ともクリアした場合、MATCHパケットは出力されない。 MO1 MATCHパケット一度出力 N-traceリセット以後、条件が初めて発生したときに1度
だけMATCHパケットを出力する。 MAOE MATCHパケット・アドレス出力イネーブル MATCHパケットにアクセス・アドレス情報を追加する。 AINVビットをイネーブルした場合、<addr>はDBAMレジス
タでマスクされた値であってはならない。<addr>は単な
るアクセス・アドレスであるべきである。 DEA アドレス合致時のDATAパケット・イネーブル アドレス条件が満たされたときにN-trace上でDATAパケ
ットを出力する。 DED データ合致時のDATAパケット・イネーブル 条件が満たされたときにN-trace上でDATAパケットを出
力する。DEAビットとDEDビットの両方をセットした場
合、両方の条件が満たされたときにDATAパケットが出力
される。両方ともクリアした場合、比較器の結果にかか
わらずにDATAパケットが出力される。 DERD 読取りアクセス 条件は、読取りサイクルでしか満たされない。 DEWR 書込みアクセス 条件は、書込みサイクルでしか満たされない。DERDビッ
トとDEWRビットの両方をセットした場合、アクセス・タ
イプにかかわらずにDATAパケットが出力される。両方と
もクリアした場合、DATAパケットは出力されない。
【0226】<2.6.トレース・パケットの使用法> <2.6.1 プログラム・カウンタ・フローのトレース>NS
EQパケット、LSEQパケット、TPCパケット、EXPパケット
を使用して分岐履歴をトレースすることができる。ユー
ザは、以下から分岐履歴のレベルを選択することができ
る。 − ある関数から別の関数への分岐(関数フロー) − すべての分岐(フル・プログラム・カウンタ・フロ
ー)
【0227】<2.6.1.1 関数フロー>関数呼出し履歴ト
レースは、TPCパケットおよびEXPパケットを取り込むこ
とによって行われる。TPC出力モードはレベル2に設定す
べきである。
【0228】TPCパケットの<program_counter>は、関数
の入力のアドレスである場合、その関数が呼び出される
ことを示す。また、前のTPCパケットの<program_counte
r>が呼出し側のアドレス範囲内にあるので、前のTPCパ
ケットによって呼出し側を判定することができる。
【0229】<2.6.1.2 フル・プログラム・カウンタ・
フロー>フル・プログラム・カウンタ・フローのトレー
スは、NSEQパケット、LSEQパケット、TPCパケット、EXP
パケットを取り込むことによって行われる。TPC出力モ
ードは、レベル1に設定すべきである。
【0230】プログラム・カウンタの再構築 どこで分岐が行われ(分岐命令の位置)、分岐の分岐先
はどこか(分岐先アドレス)を知ることによって、プロ
グラム・カウンタを再構築することができる。このプロ
トコルでは、プログラム・カウンタの再構築は、TPCパ
ケットからしか開始できない。
【0231】以下に、プログラム・フローがどのように
再構築されるかを示す。 1)第1のTPCパケットを探索する。 2)トレース・リストの終わりの方へ向かってNSEQパケ
ットを探索する。NSEQ<seq#>パケットが見つかった場
合、そこでジャンプまたは分岐が行われている。ジャン
プ命令または分岐命令の位置は、前の分岐先アドレスに
<seq#>を加えることによって知ることができる。 3)その後にTPCパケットが続く場合、このパケットから
新しい分岐先アドレスを知ることができる。そうでない
場合、ジャンプ命令または分岐命令をディスアセンブル
することによって分岐先アドレスをデコードすることが
できる。 4)(2)から(4)までを繰り返す。
【0232】フル・プログラム・カウンタ・フロー・ト
レース出力の例 ここでは例としてMIPS R3000シリーズ・プロセッサを使
用している。
【0233】
【表2】 [表2] このリストの先頭よりも前に: −TPCレジスタには'000028b4'が入っている −チップ上トレース・バッファは空である −命令'000028b4'から'000028dc'が逐次的に実行される +--- TRCEND | +- TRCDATA | | 0 1 (1) NSEQ: 00000009 000028d8: (1,2) bne $14, $0, 0x000028b4 0 1 000028dc: nop 0 0 000028b4: addu $25, $4, $0 0 0 000028b8: addiu $4, $4, 0x0001 1 1 000028bc: addu $24, $5, $0 0 0 (2) TPC: 000028b4(0 bit) 000028c0: addiu $5, $5, 0x0001 0 1 000028c4: lb $15, 0x0000($24) 0 0 000028c8: nop 1 0 000028cc: sb $15, 0x0000($25) 1 0 (3) NOP 000028d0: lb $14, 0x0000($5) 1 0 NOP 000028d4: nop 1 0 NOP 000028d8: bne $14, $0, 0x000028b4 1 0 NOP 000028dc: nop 1 0 NOP 000028e0: sb $0, 0x0000($4) 1 0 NOP 000028e4: addu $2, $3, $0 (表3へ続く)
【0234】
【表3】 [表3(前半)] 0 1 (4) NSEQ: 0000000d 000028e8: (4,5) jr $31 0 1 000028ec: nop 0 0 000020cc: lui $10, 0x0000 0 1 000020d0: addiu $10, $10, 0x48c0 1 1 000020d4: addiu $11, $10, 0x065c 1 0 (5) TPC: 000020cc(10bit) 000020d8: ori $8, $0, 0x000a 0 1 000020dc: sw $8, 0x0000($11) 0 0 000020e0: ori $19, $0, 0x000a 0 0 000020e4: ori $18, $0, 0x0001 0 1 000020e8: (6) j 0x000022a4 0 1 000020ec: nop 0 0 000022a4: slt $14, $19, $18 0 0 000022a8: (7) beq $14, $0, 0x000020f0
【表4】 [表3(後半)] 0 1 000022ac: nop 0 1 000020f0: (8) jal 0x000024b4 0 0 000020f4: nop 0 0 000024b4: ori $8, $0, 0x0041 0 0 000024b8: sb $8, 0x8021($28) 1 0 000024bc: sw $0, 0x8024($28) 0 1 (6) NSEQ: 00000007 000024c0:(9,10) jr $31 0 1 000024c4: nop 0 1 000020f8: jal 0x00002484 1 1 000020fc: nop 0 1 (7) NSEQ: 00000001 00002484: lb $25, 0x8021($28) 1 1 00002488: nop 1 1 (8) NSEQ: 00000000 0000248c: xori $24, $25, 0x0041 0 1 (9) NSEQ: 00000003 00002490: sltiu $3, $24, 0x0001 0 1 00002494: lw $15, 0x8024($28) 1 1 00002498: nop 0 0(10) TPC: 000020f8(4 bit) 0000249c: or $15, $15, $3 0 1 000024a0: sw $15, 0x8024($28) 0 0 000024a4: ori $8, $0, 0x0042 0 0 000024a8: sb $8, 0x8020($28) 0 1 000024ac: jr $31 0 1 000024b0: nop 0 1 00002100: ori $8, $0, 0x0002 1 1 00002104: sw $8, 0x0060($29)
【0235】(1)リストの1番上にある分岐の前に、9
つの命令(000028b4ないし000028d4)が順次実行されて
いる(すなわち、ある位置から000028b4へジャンプが行
われ、それ以後000028b4まで分岐は行われていない)。
したがって、「NSEQ 9」コードが出力される。 (2)オンチップ・トレース・バッファが空であるた
め、分岐の分岐先アドレスが出力される。分岐先アドレ
スは前と同じであり、したがって「0100」のみが出力さ
れる(プログラム・カウンタ用のビットなし)。 (3)オンチップ・トレース・バッファが空になるのでN
OPが出力される。 (4)間接ジャンプの分岐先アドレスが出力される。 (5)前のTPCとは異なる下位10ビットが出力される。 (6)(5)でTPCが出力される間にジャンプが行われ
る。コード「NSEQ7」の出力は、(5)の出力が完了する
まで遅延される。 (7)分岐が行われるが、「NSEQ1」出力も遅延される。 (8)Jump and Linkが行われるが、「NSEQ0」出力も遅
延される。 (9)Jump Registerが行われるが、「NSEQ3」出力も遅
延される。 (10)Jump Registerの場合は、間接ジャンプなので、
トレース・バッファが空でないときでもTPCが出力され
る。これは、このリスト内のバッファ使用度のピークで
ある(4つのパケットがバッファされる)。
【0236】<2.6.2 ユーザ指定イベントの検出>ユー
ザ指定イベントが検出されるとMATCHパケットが出力さ
れる。
【0237】<2.6.2.1 イベント時のN-traceアナライ
ザのトリガ>MATCHパケットは、パケットを取り込むN-t
raceアナライザをトリガするために使用される。アナラ
イザは、MATCHパケットを検出することによって特定の
イベントの前後にプロセッサ活動を取り込むことができ
る。第2のイベントおよびその後のイベントを無視する
にはMO1(イベントの第1回目の発生時にのみMATCHパケ
ットを出力する)をイネーブルすべきである。
【0238】<2.6.2.2 イベントの発生の検出>MATCH
パケットの別の使用法は、イベントの発生を検出するこ
とである。MATCHパケットは以下のために使用すること
もできる。 − プログラム・カウンタ・トレースと混合する。 − アクセス・アドレス − いくつかのイベントをカウントする。 − イベントの間隔を測定する。
【0239】プログラム・カウンタ・フロー・トレース
との混合 MATCHパケットをプログラム・カウンタ・フロー・パケ
ットと共にトレースする場合、プロセッサがイベントを
発生させた命令アドレス範囲を求めることができる。ア
ドレス範囲の精度はどのレベルの分岐情報をトレースし
ているか(フル・プログラム・カウンタ・フローまたは
関数フロー)に依存する。これは、データ・アクセスを
イベントとして使用する場合に特に有用である。たとえ
ば、関数フローを用いてトレースを行うと、前のTPCパ
ケットは、データ・アクセスを行う関数を示す。
【0240】アクセス・アドレス アドレス・マスクを使用してデータ・アクセス・ブレー
クポイントを指定すると、マスクされたアドレス・ビッ
トはブレークポイント・チャネル番号(<bplist>)から
は分からない。MATCHパケット仕様の例と同様に、デー
タ・アクセス時にMATCHパケットにアドレス(<addr>)
を付加することができる。これは、正確なアドレスを知
る必要があるときに有用である。
【0241】いくつかのイベントのカウント MATCHパケットをカウントすることによって、指定され
たイベントをカウントすることができる。
【0242】イベントの間隔の測定 1つのMATCHパケットと他のパケットとの間隔を測定す
ることができる。バッファリングのために、イベントの
発生からそれに対応するMATCHパケットまで時間遅延が
発生する。他のパケットがバッファされない場合、遅延
は最小限になり固定されるので、他のパケットを抑制し
て間隔をより正確なものにすべきである。
【0243】<2.6.3 データ・アクセス・サイクル・ト
レース>MATCHパケットおよびDATAパケットを使用し
て、プロセッサ・データ・アクセス・サイクルをトレー
スすることができる。トレース・バッファ深さおよびTR
CDATAピン・カウントが限られるので、すべてのデータ
・アクセス・サイクルを出力することは不可能である。
データ・アクセス・サイクルを選択的に出力するには、
データ・アクセス・ブレークポイントを使用する。パケ
ット仕様の例では、MATCHパケットを使用して、データ
・アクセス・サイクルが実行されたこと、そのアクセス
・タイプおよびアドレスが示される。DATAパケットは、
アクセス・サイズおよびデータを示すために使用され
る。
【0244】<2.7.デバッグ・モードでのN-trace動作
>プロセッサがデバッグ・モードのとき、プロセッサ活
動によってトレース・パケットが生成されてはならな
い。デバッグ・モードではNOPパケットを連続的に出力
すべきである。
【0245】<2.7.1 デバッグ・モードへの遷移時>デ
バッグ例外の原因が外部トリガ入力またはハードウェア
・ブレークポイントである場合、パケット・イネーブル
・ビットに従ってMATCHパケットおよびDATAパケットを
出力すべきである。デバッグ例外が発生したときは、NS
EQパケットおよびEXPパケットを出力すべきである。ト
レース・バッファに残っている他のパケットは、これら
のNSEQパケットおよびEXPパケットよりも前に出力すべ
きである。
【0246】<2.7.2 ノーマル・モードへの遷移時>プ
ロセッサがデバッグ・モードを終了するときは、ユーザ
・プログラムの実行が再開する命令アドレスを示すTPC
パケットを生成すべきである。
【0247】<2.7.3 ツールのデバッギングのために>
デバッグ・ツールの開発をしやすくするために、デバッ
グ・モード中でもトレース・パケットを出力するよう
な、特殊なトレース・モードを用意することが望ましい
モニタプログラム自身をデバッグする際に有用である。
【図面の簡単な説明】
【図1】ブレーク出力及びトリガ出力を説明するタイミ
ング・チャート。
【図2】ブレーク入力及びトリガ入力を説明するタイミ
ング・チャート。
【図3】IDCODEレジスタの構成を示す図。
【図4】クイック・アクセス機構を挿入できる位置を説
明する図。
【図5】トレースポートの信号を示すタイミング・チャ
ート。
【図6】トレース・パケット・ビット長を短くする方法
を説明する図。
【図7】トレース・パケット・ビット長を短くする方法
を説明する図。
【図8】トレース・パケット・ビット長を短くする方法
を説明する図。

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】トレース情報を出力できるマイクロプロセ
    ッサにおいて、 前記トレース情報を可変長のビット列で構成されるパケ
    ットとして出力することを特徴とするマイクロプロセッ
    サのトレース情報出力方法。
JP9176801A 1997-03-31 1997-07-02 マイクロプロセッサのトレース情報出力方法 Pending JPH1124959A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP9176801A JPH1124959A (ja) 1997-07-02 1997-07-02 マイクロプロセッサのトレース情報出力方法
EP98302523A EP0869434A3 (en) 1997-03-31 1998-03-31 Method for outputting trace information of a microprocessor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP9176801A JPH1124959A (ja) 1997-07-02 1997-07-02 マイクロプロセッサのトレース情報出力方法

Publications (1)

Publication Number Publication Date
JPH1124959A true JPH1124959A (ja) 1999-01-29

Family

ID=16020087

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9176801A Pending JPH1124959A (ja) 1997-03-31 1997-07-02 マイクロプロセッサのトレース情報出力方法

Country Status (1)

Country Link
JP (1) JPH1124959A (ja)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002304310A (ja) * 2001-04-06 2002-10-18 Fujitsu Ltd 半導体集積回路
US6961872B2 (en) 2001-09-03 2005-11-01 Renesas Technology Corp. Microcomputer and debugging system
US7234068B2 (en) 2003-08-19 2007-06-19 Kabushiki Kaisha Toshiba Trace data and power measurement data matching apparatus and method that adds synchronization markers
JP2007537547A (ja) * 2004-05-11 2007-12-20 クゥアルコム・インコーポレイテッド 複数のメモリを有した集積回路のためのデータトレースの圧縮
JP2009259289A (ja) * 2009-08-07 2009-11-05 Stmicroelectronics Sa マイクロプロセッサのモニタ回路により伝送されるメッセージの時間的相関
US7818620B2 (en) 2006-08-01 2010-10-19 Hitachi, Ltd. Program failure analysis system, failure analysis method, and emulator device
JP2011519100A (ja) * 2008-04-28 2011-06-30 イマジネイション テクノロジーズ リミテッド パイプライン型アーキテクチャを有するデータプロセッサ内のトレースデータを与えるシステム
JP2015516100A (ja) * 2012-05-07 2015-06-04 マイクロチップ テクノロジー インコーポレイテッドMicrochip Technology Incorporated 命令トレース能力を有するプロセッサデバイス
US20180054374A1 (en) * 2016-08-19 2018-02-22 Andes Technology Corporation Trace information encoding apparatus, encoding method thereof, and readable computer medium

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002304310A (ja) * 2001-04-06 2002-10-18 Fujitsu Ltd 半導体集積回路
US6961872B2 (en) 2001-09-03 2005-11-01 Renesas Technology Corp. Microcomputer and debugging system
US7234068B2 (en) 2003-08-19 2007-06-19 Kabushiki Kaisha Toshiba Trace data and power measurement data matching apparatus and method that adds synchronization markers
JP2007537547A (ja) * 2004-05-11 2007-12-20 クゥアルコム・インコーポレイテッド 複数のメモリを有した集積回路のためのデータトレースの圧縮
JP4885849B2 (ja) * 2004-05-11 2012-02-29 クゥアルコム・インコーポレイテッド 複数のメモリを有した集積回路のためのデータトレースの圧縮
US7818620B2 (en) 2006-08-01 2010-10-19 Hitachi, Ltd. Program failure analysis system, failure analysis method, and emulator device
JP2011519100A (ja) * 2008-04-28 2011-06-30 イマジネイション テクノロジーズ リミテッド パイプライン型アーキテクチャを有するデータプロセッサ内のトレースデータを与えるシステム
US9720695B2 (en) 2008-04-28 2017-08-01 Imagination Technologies Limited System for providing trace data in a data processor having a pipelined architecture
JP2009259289A (ja) * 2009-08-07 2009-11-05 Stmicroelectronics Sa マイクロプロセッサのモニタ回路により伝送されるメッセージの時間的相関
JP2015516100A (ja) * 2012-05-07 2015-06-04 マイクロチップ テクノロジー インコーポレイテッドMicrochip Technology Incorporated 命令トレース能力を有するプロセッサデバイス
US20180054374A1 (en) * 2016-08-19 2018-02-22 Andes Technology Corporation Trace information encoding apparatus, encoding method thereof, and readable computer medium
JP2018028888A (ja) * 2016-08-19 2018-02-22 晶心科技股▲ふん▼有限公司Andes Technology Corporation 追跡情報符号化装置、その符号化方法、および読み取り可能なコンピュータ媒体

Similar Documents

Publication Publication Date Title
JP4475734B2 (ja) データ処理装置及びデータ処理方法
US6145123A (en) Trace on/off with breakpoint register
JP3846939B2 (ja) データプロセッサ
US5978902A (en) Debug interface including operating system access of a serial/parallel debug port
JP4190114B2 (ja) マイクロコンピュータ
EP0391173B1 (en) Debug peripheral for microcomputers, microprocessors and core processor integrated circuits and system using the same
US6321329B1 (en) Executing debug instructions
US6009270A (en) Trace synchronization in a processor
US7412630B2 (en) Trace control from hardware and software
KR100517679B1 (ko) 컴팩트한 트레이스 기록 기억장치를 포함하는 디버그 인터페이스
US8185879B2 (en) External trace synchronization via periodic sampling
US7178133B1 (en) Trace control based on a characteristic of a processor&#39;s operating state
US6052774A (en) Apparatus and method for identifying exception routines indicated by instruction address issued with an instruction fetch command
US6343358B1 (en) Executing multiple debug instructions
US7181728B1 (en) User controlled trace records
EP0645705A1 (en) Testing and monitoring of programmed devices
EP0652516A1 (en) Integrated microprocessor
WO1998021653A9 (en) Virtual monitor debugging method and apparatus
US20060225050A1 (en) Dynamic selection of a compression algorithm for trace data
WO1998021653A1 (en) Virtual monitor debugging method and apparatus
JPH09128265A (ja) データ処理システム
JPH09114697A (ja) データプロセッサ
JPH09218803A (ja) データプロセッサ
EP0869434A2 (en) Method for outputting trace information of a microprocessor
US20140344621A1 (en) Diagnosing code using single step execution