(57)【特許請求の範囲】
【請求項１】
データ処理装置であって、
対応するメモリアドレスによって識別された複数のメモリロケーションを含むメモリと、
命令に応答して、処理動作を実行するように構成された処理回路と、
前記処理回路によって実行された前記処理動作を示すトレースデータ要素のストリームを生成し、前記トレースデータ要素のストリームを出力するように構成されたトレース回路と、を備え、
前記トレース回路は、複数の参照アドレスを格納するように構成された複数の参照アドレスレジスタを含み、
前記トレース回路は、前記メモリアドレスに関連付けられた処理動作を実行するための命令を処理する前記処理回路に応答して、選択された参照アドレスレジスタとして前記複数の参照アドレスレジスタのうちの１つを選択し、
（ｉ）前記複数の参照アドレスレジスタのうちのどれが前記選択された参照アドレスレジスタであるかを示す第１の情報と、
（ｉｉ）トレースされるメモリアドレスと前記選択された参照アドレスレジスタに格納された選択された参照アドレスとの差を示す第２の情報と、を示すトレースデータ要素を生成および出力し、
前記トレース回路は、前記トレースデータ要素を生成後、前記トレースされるメモリアドレスに応じて、前記複数の参照アドレスレジスタのうちの少なくとも１つの前記参照アドレスを選択的に更新するための参照アドレス更新動作を実行するように構成され、
前記参照アドレス更新動作は、
（ａ）少なくとも１つの参照アドレスレジスタについて、前記対応する参照アドレスと前記トレースされるメモリアドレスとの間のアドレスの差が、所定の閾値を上回るかどうかを決定することと、
（ｂ）前記アドレスの差が、前記少なくとも１つの参照アドレスレジスタのそれぞれについて前記所定の閾値を上回る場合に、前記少なくとも１つの参照アドレスレジスタから選択された犠牲参照アドレスレジスタへ、前記トレースされるメモリアドレスを書き込むことを含み、
前記トレースデータ要素は、前記第２の情報を示すアドレス部分を含み、前記所定の閾値は、前記アドレス部分の最小サイズに対応する、データ処理装置。
【請求項２】
前記トレースデータ要素は、前記第１の情報を示すヘッダ部分と、前記第２の情報を示すアドレス部分とを含む、請求項１に記載のデータ処理装置。
【請求項３】
前記トレースされるメモリアドレスと、前記選択された参照アドレスとの間の前記差がゼロである場合、前記トレース回路は、前記アドレス部分を前記トレースデータ要素から省略する、請求項２に記載のデータ処理装置。
【請求項４】
前記トレース回路は、前記複数の参照アドレスレジスタに対応する複数の候補の第２の情報の値を決定するように構成され、各候補の第２の情報の値は、前記トレースされるメモリアドレスと、前記対応する参照アドレスレジスタに格納された前記参照アドレスとの差を示し、
前記トレース回路は、最も効率的な候補の第２の情報の値に対応する前記参照アドレスレジスタのうちの１つを、前記選択された参照アドレスレジスタとして選択し、かつ、前記最も効率的な候補の第２の情報の値に対応する前記第２の情報と共に、前記トレースデータ要素を生成するように構成される、請求項１に記載のデータ処理装置。
【請求項５】
前記最も効率的な候補の第２の情報の値は、前記対応する第２の情報が最小のビット数を使用して表すことができる、候補の第２の情報の値である、請求項４に記載のデータ処理装置。
【請求項６】
前記最も効率的な候補の第２の情報の値は、前記対応する第２の情報が、前記トレースデータ要素のストリーム内の前記トレースデータ要素に含まれる場合に、前記トレースデータ要素のストリーム内のトレースデータの合計量が最小になる、候補の第２の情報の値である、請求項４に記載のデータ処理装置。
【請求項７】
前記第２の情報は、前記選択された参照アドレスレジスタの前記選択された参照アドレスの対応する部分に対する異なるビット値を有する、前記トレースされるメモリアドレスの部分を示す、請求項１に記載のデータ処理装置。
【請求項８】
前記第２の情報は、前記トレースされるメモリアドレスと前記選択された参照アドレスとの間の数値の差を示す、請求項１に記載のデータ処理装置。
【請求項９】
前記参照アドレス更新動作は、前記トレースされるメモリアドレスを、前記複数の参照アドレスレジスタの犠牲参照アドレスレジスタへ書き込むことを含む、請求項１に記載のデータ処理装置。
【請求項１０】
前記トレース回路は、前記複数の参照アドレスレジスタのうちのどれが前記犠牲参照アドレスレジスタであるかを選択するために、犠牲選択動作を実行するように構成される、請求項９に記載のデータ処理装置。
【請求項１１】
前記トレース回路は、前記参照アドレス更新動作による更新から、少なくとも１つの参照アドレスレジスタを選択的に除外するように、ロックダウンシグナルに応答する、請求項１に記載のデータ処理装置。
【請求項１２】
前記複数の参照アドレスレジスタのうちの少なくとも１つは、事前定義された参照アドレスを格納するための固定の参照アドレスレジスタであり、前記固定の参照アドレスレジスタは、前記参照アドレス更新動作による更新から除外される、請求項１に記載のデータ処理装置。
【請求項１３】
前記複数の参照アドレスレジスタのうちの少なくとも１つは、前記メモリアドレスの関連付けられた範囲に関連付けられた範囲を限定した参照アドレスレジスタであり、前記範囲を限定した参照アドレスレジスタは、前記トレースされるメモリアドレスが前記メモリアドレスの前記関連付けられた範囲外である場合に、前記参照アドレス更新動作による更新から除外される、請求項１に記載のデータ処理装置。
【請求項１４】
前記複数の参照アドレスレジスタの少なくともサブセットは、参照アドレスパイプラインを形成するために結合されており、前記参照アドレス更新動作は、前記トレースされるメモリアドレスに応じて、前記参照アドレスパイプラインで前記参照アドレスを更新することを含む、請求項１に記載のデータ処理装置。
【請求項１５】
前記参照アドレスパイプラインは、Ｎ個の参照アドレスレジスタを含み、
前記参照アドレス更新動作は、前記参照アドレスパイプラインの１番目から（Ｎ−１）番目の参照アドレスレジスタ内の参照アドレスを、前記参照アドレスパイプラインの次の参照アドレスレジスタへシフトすることと、前記トレースされるメモリアドレスを、前記参照アドレスパイプラインの第１の参照アドレスレジスタへ書き込むことと、を含む、請求項１４に記載のデータ処理装置。
【請求項１６】
前記参照アドレスパイプラインは、Ｎ個の参照アドレスレジスタを含み、前記選択された参照アドレスレジスタは、１≦Ｍ≦Ｎである場合に、前記参照アドレスパイプラインのＭ番目の参照アドレスレジスタを含み、前記参照アドレス更新動作は、
Ｍ＞１の場合に、前記参照アドレスパイプラインの１番目から（Ｍ−１）番目の参照アドレスレジスタ内の参照アドレスを、前記参照アドレスパイプラインの次の参照アドレスレジスタへシフトすることと、
前記参照アドレスパイプラインの第１の参照アドレスレジスタへ、前記トレースされるメモリアドレスを書き込むことを含む、請求項１４に記載のデータ処理装置。
【請求項１７】
Ｍ＝１である場合に、前記参照アドレス更新動作は、さらに、
前記トレースされるメモリアドレスと前記第１の参照アドレスレジスタの前記参照アドレスとの差が、所定の閾値を上回るかどうかを決定することと、
前記差が、前記所定の閾値を上回る場合、前記参照アドレスパイプラインの前記第１の参照アドレスレジスタへ前記トレースされるメモリアドレスを書き込む前に、前記参照アドレスパイプラインの１番目から（Ｎ−１）番目の参照アドレスレジスタ内の参照アドレスを、前記参照アドレスパイプラインの次の参照アドレスレジスタへシフトすることと、を含む、請求項１６に記載のデータ処理装置。
【請求項１８】
前記トレース回路は、前記Ｎ個の参照アドレスレジスタに対応するＮ個の候補の第２の情報の値を決定するように構成され、各候補の第２の情報の値は、前記トレースされるメモリアドレスと、前記対応する参照アドレスレジスタに格納された前記参照アドレスとの差を示し、
前記トレース回路は、前記選択された参照アドレスレジスタとして、最も効率的な候補の第２の情報の値に対応する前記Ｎ個の参照アドレスレジスタのうちの１つを選択するように構成され、
前記対応する候補の第２の情報の値が同等に効率的である複数の参照アドレスレジスタが存在する場合、前記トレース回路は、前記選択された参照アドレスレジスタとして、前記参照アドレスパイプラインの最後に最も近い前記複数の参照アドレスレジスタのうちの１つを選択する、請求項１６に記載のデータ処理装置。
【請求項１９】
前記トレース回路は、前記複数の参照アドレスレジスタのそれぞれへのデフォルトの参照アドレスを格納するように、初期化事象に応答する、請求項１に記載のデータ処理装置。
【請求項２０】
前記初期化事象は、前記トレース回路が起動することである、請求項１９に記載のデータ処理装置。
【請求項２１】
前記初期化事象は、トレース同期化データ要素を生成および出力するために、前記トレース回路をトリガするためのトレース同期化事象である、請求項１９に記載のデータ処理装置。
【請求項２２】
前記処理回路は、複数の異なる種類のデータ処理命令に応答して、データ処理動作を実行するように構成され、
前記複数の種類のデータ処理命令のそれぞれについて、前記トレース回路は、前記トレース回路が、異なる種類のデータ処理命令を示すトレースデータ要素を生成するための同じ参照アドレスレジスタを利用するように、前記選択されたアドレスレジスタとして、前記複数の参照アドレスレジスタのうちのいずれかを選択するように構成される、請求項１に記載のデータ処理装置。
【請求項２３】
前記複数の種類のデータ処理命令は、
分岐命令と、
例外事象が発生した場合に実行中の命令と、
前記例外事象が発生した後に実行が方向付けられる命令と、
現在、前記処理回路によって実行中の命令と、
ロード命令と、
格納命令と、のうちの少なくとも２つを含む、請求項２２に記載のデータ処理装置。
【請求項２４】
データ処理装置であって、
データを格納するためのメモリ手段であって、対応するメモリアドレスによって識別された複数のメモリロケーションを含む、メモリ手段と、
命令に応答して、処理動作を実行するための処理手段と、
前記処理手段によって実行された前記処理動作を示すトレースデータ要素のストリームを生成し、前記トレースデータ要素のストリームを出力するためのトレース手段と、を備え、
前記トレース手段は、複数の参照アドレスを格納するための複数の参照アドレスレジスタ手段を含み、
前記トレース手段は、前記メモリアドレスに関連付けられた処理動作を実行するための命令を処理する前記処理手段に応答して、選択された参照アドレスレジスタ手段として前記複数の参照アドレスレジスタ手段のうちの１つを選択し、
（ｉ）前記複数の参照アドレスレジスタ手段のうちのどれが前記選択された参照アドレスレジスタ手段であるかを示す第１の情報と、
（ｉｉ）トレースされるメモリアドレスと前記選択された参照アドレスレジスタ手段に格納された選択された参照アドレスとの差を示す第２の情報と、を示すトレースデータ要素を生成および出力し、
前記トレース手段は、前記トレースデータ要素を生成後、前記トレースされるメモリアドレスに応じて、前記複数の参照アドレスレジスタのうちの少なくとも１つの前記参照アドレスを選択的に更新するための参照アドレス更新動作を実行するように構成され、
前記参照アドレス更新動作は、
（ａ）少なくとも１つの参照アドレスレジスタについて、前記対応する参照アドレスと前記トレースされるメモリアドレスとの間のアドレスの差が、所定の閾値を上回るかどうかを決定することと、
（ｂ）前記アドレスの差が、前記少なくとも１つの参照アドレスレジスタのそれぞれについて前記所定の閾値を上回る場合に、前記少なくとも１つの参照アドレスレジスタから選択された犠牲参照アドレスレジスタへ、前記トレースされるメモリアドレスを書き込むことを含み、
前記トレースデータ要素は、前記第２の情報を示すアドレス部分を含み、前記所定の閾値は、前記アドレス部分の最小サイズに対応する、データ処理装置。
【請求項２５】
対応するメモリアドレスによって識別された複数のメモリロケーションを含むメモリを含むデータ処理装置のためのデータ処理方法であって、前記方法は、
命令に応答して、処理動作を実行するステップと、
複数の参照アドレスレジスタに複数の参照アドレスを格納するステップと、
処理回路によって実行された前記処理動作を示すトレースデータ要素のストリームを生成するステップと、
前記トレースデータ要素のストリームを出力するステップと、を含み、
トレースデータ要素のストリームを生成する前記ステップは、メモリアドレスに関連付けられた処理動作のパフォーマンスに応答して、選択された参照アドレスレジスタとして前記複数の参照アドレスレジスタのうちの１つを選択し、
（ｉ）前記複数の参照アドレスレジスタのうちのどれが前記選択された参照アドレスレジスタであるかを示す第１の情報と、
（ｉｉ）トレースされるメモリアドレスと前記選択された参照アドレスレジスタに格納された選択された参照アドレスとの差を示す第２の情報と、を示すトレースデータ要素を生成および出力し、
前記トレースデータ要素を生成後、前記トレースされるメモリアドレスに応じて、前記複数の参照アドレスレジスタのうちの少なくとも１つの前記参照アドレスを選択的に更新するための参照アドレス更新動作が実行され、
前記参照アドレス更新動作は、
（ａ）少なくとも１つの参照アドレスレジスタについて、前記対応する参照アドレスと前記トレースされるメモリアドレスとの間のアドレスの差が、所定の閾値を上回るかどうかを決定することと、
（ｂ）前記アドレスの差が、前記少なくとも１つの参照アドレスレジスタのそれぞれについて前記所定の閾値を上回る場合に、前記少なくとも１つの参照アドレスレジスタから選択された犠牲参照アドレスレジスタへ、前記トレースされるメモリアドレスを書き込むことを含み、
前記トレースデータ要素は、前記第２の情報を示すアドレス部分を含み、前記所定の閾値は、前記アドレス部分の最小サイズに対応する、データ処理方法。
【請求項２６】
命令に応答して、処理装置によって実行された処理動作を監視するためのトレースユニットであって、前記処理装置は、対応するメモリアドレスによって識別された複数のメモリロケーションを含むメモリを含み、前記トレースユニットは、
前記処理装置によって実行された前記処理動作を示すトレースデータ要素のストリームを生成し、前記トレースデータ要素のストリームを出力するように構成されたトレース回路を含み、
前記トレース回路は、複数の参照アドレスを格納するように構成された複数の参照アドレスレジスタを含み、
前記トレース回路は、メモリアドレスに関連付けられた処理動作を実行するための命令を処理する前記処理装置に応答して、選択された参照アドレスレジスタとして前記複数の参照アドレスレジスタのうちの１つを選択し、
（ｉ）前記複数の参照アドレスレジスタのうちのどれが前記選択された参照アドレスレジスタであるかを示す第１の情報と、
（ｉｉ）前記トレースされるメモリアドレスと前記選択された参照アドレスレジスタに格納された選択された参照アドレスとの差を示す第２の情報と、を示すトレースデータ要素を生成および出力し、
前記トレース回路は、前記トレースデータ要素を生成後、前記トレースされるメモリアドレスに応じて、前記複数の参照アドレスレジスタのうちの少なくとも１つの前記参照アドレスを選択的に更新するための参照アドレス更新動作を実行するように構成され、
前記参照アドレス更新動作は、
（ａ）少なくとも１つの参照アドレスレジスタについて、前記対応する参照アドレスと前記トレースされるメモリアドレスとの間のアドレスの差が、所定の閾値を上回るかどうかを決定することと、
（ｂ）前記アドレスの差が、前記少なくとも１つの参照アドレスレジスタのそれぞれについて前記所定の閾値を上回る場合に、前記少なくとも１つの参照アドレスレジスタから選択された犠牲参照アドレスレジスタへ、前記トレースされるメモリアドレスを書き込むことを含み、
前記トレースデータ要素は、前記第２の情報を示すアドレス部分を含み、前記所定の閾値は、前記アドレス部分の最小サイズに対応する、トレースユニット。
【請求項２７】
命令に応答して、処理装置によって実行された処理動作を監視するためのトレースユニットであって、前記処理装置は、データを格納するためのメモリ手段を含み、前記メモリ手段は、対応するメモリアドレスによって識別された複数のメモリロケーションを含み、前記トレースユニットは、
前記処理装置によって実行された前記処理動作を示すトレースデータ要素のストリームを生成し、前記トレースデータ要素のストリームを出力するためのトレース手段を含み、
前記トレース手段は、複数の参照アドレスを格納するための複数の参照アドレスレジスタ手段を含み、
前記トレース手段は、メモリアドレスに関連付けられた処理動作を実行するための命令を処理する前記処理装置に応答して、選択された参照アドレスレジスタとして前記複数の参照アドレスレジスタのうちの１つを選択し、
（ｉ）前記複数の参照アドレスレジスタ手段のうちのどれが前記選択された参照アドレスレジスタ手段であるかを示す第１の情報と、
（ｉｉ）トレースされるメモリアドレスと前記選択された参照アドレスレジスタ手段に格納された選択された参照アドレスとの差を示す第２の情報と、を示すトレースデータ要素を生成および出力し、
前記トレース手段は、前記トレースデータ要素を生成後、前記トレースされるメモリアドレスに応じて、前記複数の参照アドレスレジスタのうちの少なくとも１つの前記参照アドレスを選択的に更新するための参照アドレス更新動作を実行するように構成され、
前記参照アドレス更新動作は、
（ａ）少なくとも１つの参照アドレスレジスタについて、前記対応する参照アドレスと前記トレースされるメモリアドレスとの間のアドレスの差が、所定の閾値を上回るかどうかを決定することと、
（ｂ）前記アドレスの差が、前記少なくとも１つの参照アドレスレジスタのそれぞれについて前記所定の閾値を上回る場合に、前記少なくとも１つの参照アドレスレジスタから選択された犠牲参照アドレスレジスタへ、前記トレースされるメモリアドレスを書き込むことを含み、
前記トレースデータ要素は、前記第２の情報を示すアドレス部分を含み、前記所定の閾値は、前記アドレス部分の最小サイズに対応する、トレースユニット。
【請求項２８】
命令に応答して、処理装置によって実行された処理動作を示すトレースデータ要素のストリームを分析するための診断装置であって、前記処理装置は、対応するメモリアドレスによって識別された複数のメモリロケーションを含むメモリを含み、前記診断装置は、
前記トレースデータ要素のストリームを受信するためのトレース入力と、
前記処理動作の処理結果を決定するために、前記トレースデータ要素のストリームを分析するように構成された診断回路と、を備え、
前記診断回路は、複数の参照アドレスを格納するように構成された複数の参照アドレスレジスタを含み、
前記診断回路は、前記メモリアドレスに関連付けられた処理動作を実行するための命令を処理する前記処理装置の指示に応答して、
（ａ）（ｉ）前記複数の参照アドレスレジスタのうちのいずれが選択された参照アドレスレジスタであるかを示す第１の情報と、（ｉｉ）前記トレースされるメモリアドレスと前記選択された参照アドレスレジスタに格納された選択された参照アドレスとの差を示す第２の情報と、を示すトレースデータ要素を、前記トレースデータ要素のストリームに配置するとともに、
（ｂ）前記第２の情報と前記選択された参照アドレスレジスタに格納された前記選択された参照アドレスとに応じて、前記トレースされるメモリアドレスを決定し
前記診断回路は、前記トレースされるメモリアドレスを決定した後に、前記トレースされるメモリアドレスに応じて、前記複数の参照アドレスレジスタのうちの１つの前記参照アドレスを選択的に更新するための参照アドレス更新動作を実行するように構成され、
前記参照アドレス更新動作は、
（ａ）少なくとも１つの参照アドレスレジスタについて、前記対応する参照アドレスと前記トレースされるメモリアドレスとの間のアドレスの差が、所定の閾値を上回るかどうかを決定することと、
（ｂ）前記アドレスの差が、前記少なくとも１つの参照アドレスレジスタのそれぞれについて前記所定の閾値を上回る場合に、前記少なくとも１つの参照アドレスレジスタから選択された犠牲参照アドレスレジスタへ、前記トレースされるメモリアドレスを書き込むことを含み、
前記トレースデータ要素は、前記第２の情報を示すアドレス部分を含み、前記所定の閾値は、前記アドレス部分の最小サイズに対応する、診断装置。
【請求項２９】
前記トレースデータ要素は、前記第１の情報を示すヘッダ部分と、前記第２の情報を示すアドレス部分とを含む、請求項２８に記載の診断装置。
【請求項３０】
前記トレースデータ要素が前記アドレス部分を含まない場合、前記診断回路は、前記選択された参照アドレスと同じになるように前記トレースされるメモリアドレスを決定する、請求項２９に記載の診断装置。
【請求項３１】
前記第２の情報は、前記選択された参照アドレスレジスタの前記選択された参照アドレスの対応する部分に対して異なるビット値を有する前記トレースされるメモリアドレスの部分を示し、
前記診断回路は、（ｉ）前記選択された参照アドレスのビット値で開始し、（ｉｉ）前記第２の情報によって示された前記トレースされるメモリアドレスの前記部分のビット値で、前記選択された参照アドレスの前記対応する部分のビット値を置換することによって、得られる値と等しいアドレス値を有するものとして、前記トレースされるメモリアドレスを決定するように構成される、請求項２８に記載の診断装置。
【請求項３２】
前記第２の情報は、前記トレースされるメモリアドレスと前記選択された参照アドレスとの間の数値の差を示し、
前記診断回路は、前記選択された参照アドレスに、前記第２の情報によって示された前記数値の差を追加することによって、前記トレースされるメモリアドレスを決定するように構成される、請求項２８に記載の診断装置。
【請求項３３】
前記参照アドレス更新動作は、前記トレースされるメモリアドレスを、前記複数の参照アドレスレジスタの犠牲参照アドレスレジスタへ書き込むことを含む、請求項２８に記載の診断装置。
【請求項３４】
前記診断回路は、前記複数の参照アドレスレジスタのうちのどれが前記犠牲参照アドレスレジスタであるかを選択するために、犠牲選択動作を実行するように構成される、請求項３３に記載の診断装置。
【請求項３５】
前記診断回路は、前記参照アドレス更新動作による更新から、少なくとも１つの参照アドレスレジスタを選択的に除外するように、ロックダウンシグナルに応答する、請求項２８に記載の診断装置。
【請求項３６】
前記複数の参照アドレスレジスタのうちの少なくとも１つは、事前定義された参照アドレスを格納するための固定の参照アドレスレジスタであり、前記固定の参照アドレスレジスタは、前記参照アドレス更新動作による更新から除外される、請求項２８に記載の診断装置。
【請求項３７】
前記複数の参照アドレスレジスタのうちの少なくとも１つは、前記メモリアドレスの関連付けられた範囲に関連付けられた範囲を限定した参照アドレスレジスタであり、前記範囲を限定した参照アドレスレジスタは、前記トレースされるメモリアドレスが前記メモリアドレスの前記関連付けられた範囲外である場合に、前記参照アドレス更新動作による更新から除外される、請求項２８に記載の診断装置。
【請求項３８】
前記複数の参照アドレスレジスタの少なくともサブセットは、参照アドレスパイプラインを形成するために結合されており、前記参照アドレス更新動作は、前記トレースされるメモリアドレスに応じて、前記参照アドレスパイプラインで前記参照アドレスを更新することを含む、請求項２８に記載の診断装置。
【請求項３９】
前記参照アドレスパイプラインは、Ｎ個の参照アドレスレジスタを含み、
前記参照アドレス更新動作は、前記参照アドレスパイプラインの１番目から（Ｎ−１）番目の参照アドレスレジスタ内の参照アドレスを、前記参照アドレスパイプラインの次の参照アドレスレジスタへシフトすることと、前記トレースされるメモリアドレスを、前記参照アドレスパイプラインの第１の参照アドレスレジスタへ格納することを含む、請求項３８に記載の診断装置。
【請求項４０】
前記参照アドレスパイプラインは、Ｎ個の参照アドレスレジスタを含み、前記選択された参照アドレスレジスタは、１≦Ｍ≦Ｎである場合に、前記参照アドレスパイプラインのＭ番目の参照アドレスレジスタを含み、前記参照アドレス更新動作は、
Ｍ＞１の場合に、前記参照アドレスパイプラインの１番目から（Ｍ−１）番目の参照アドレスレジスタ内の参照アドレスを、前記参照アドレスパイプラインの次の参照アドレスレジスタへシフトすることと、
前記参照アドレスパイプラインの第１の参照アドレスレジスタへ、前記トレースされるメモリアドレスを格納することを含む、請求項３８に記載の診断装置。
【請求項４１】
Ｍ＝１である場合に、前記参照アドレス更新動作は、さらに、
前記トレースされるメモリアドレスと前記第１の参照アドレスレジスタの前記参照アドレスとの差が、所定の閾値を上回るかどうかを決定することと、
前記差が、前記所定の閾値を上回る場合、前記参照アドレスパイプラインの前記第１の参照アドレスレジスタへ前記トレースされるメモリアドレスを書き込む前に、前記参照アドレスパイプラインの１番目から（Ｎ−１）番目の参照アドレスレジスタ内の参照アドレスを、前記参照アドレスパイプラインの次の参照アドレスレジスタへシフトすることを含む、請求項４０に記載の診断装置。
【請求項４２】
前記診断回路は、前記複数の参照アドレスレジスタのそれぞれへのデフォルトの参照アドレスを格納するように、初期化事象に応答する、請求項２８に記載の診断装置。
【請求項４３】
前記初期化事象は、前記診断回路が起動することである、請求項４２に記載の診断装置。
【請求項４４】
前記初期化事象は、前記トレースデータ要素のストリーム内のトレース同期化データ要素に応答する前記診断回路である、請求項４２に記載の診断装置。
【請求項４５】
命令に応答して、処理装置によって実行された処理動作を示すトレースデータ要素のストリームを分析するための診断装置であって、前記処理装置は、データを格納するためのメモリ手段を含み、前記メモリ手段は、対応するメモリアドレスによって識別された複数のメモリロケーションを含み、前記診断装置は、
前記トレースデータ要素のストリームを受信するためのトレース入力手段と、
前記処理動作の処理結果を決定するために、前記トレースデータ要素のストリームを分析するための診断手段と、を備え、
前記診断手段は、複数の参照アドレスを格納するための複数の参照アドレスレジスタ手段を含み、
前記診断手段は、メモリアドレスに関連付けられた処理動作を実行するための命令を処理する前記処理装置の指示に応答して、
（ａ）（ｉ）前記複数の参照アドレスレジスタ手段のうちのどれが選択された参照アドレスレジスタ手段であるかを示す第１の情報と、（ｉｉ）前記トレースされるメモリアドレスと前記選択された参照アドレスレジスタ手段に格納された選択された参照アドレスとの差を示す第２の情報と、を示すトレースデータ要素を、前記トレースデータ要素のストリームに配置するとともに、
（ｂ）前記第２の情報と前記選択された参照アドレスレジスタ手段に格納された前記選択された参照アドレスとに応じて、前記トレースされるメモリアドレスを決定し、
前記診断手段は、前記トレースされるメモリアドレスを決定した後に、前記トレースされるメモリアドレスに応じて、前記複数の参照アドレスレジスタのうちの１つの前記参照アドレスを選択的に更新するための参照アドレス更新動作を実行するように構成され、
前記参照アドレス更新動作は、
（ａ）少なくとも１つの参照アドレスレジスタについて、前記対応する参照アドレスと前記トレースされるメモリアドレスとの間のアドレスの差が、所定の閾値を上回るかどうかを決定することと、
（ｂ）前記アドレスの差が、前記少なくとも１つの参照アドレスレジスタのそれぞれについて前記所定の閾値を上回る場合に、前記少なくとも１つの参照アドレスレジスタから選択された犠牲参照アドレスレジスタへ、前記トレースされるメモリアドレスを書き込むことを含み、
前記トレースデータ要素は、前記第２の情報を示すアドレス部分を含み、前記所定の閾値は、前記アドレス部分の最小サイズに対応する、診断装置。
【請求項４６】
命令に応答して、処理装置によって実行された処理動作を示すトレースデータ要素のストリームを分析するための方法であって、前記処理装置は、対応するメモリアドレスによって識別された複数のメモリロケーションを含むメモリを含み、前記方法は、
前記トレースデータ要素のストリームを受信するステップと、
複数の参照アドレスレジスタに複数の参照アドレスを格納するステップと、
前記処理動作の処理結果を決定するために、前記トレースデータ要素のストリームを分析するステップと、を含み、
分析するステップは、トレースされるメモリアドレスに関連付けられた処理動作を実行するための命令を処理する前記処理装置の指示に応答して、
（ａ）（ｉ）前記複数の参照アドレスレジスタのうちのどれが選択された参照アドレスレジスタであるかを示す第１の情報と、（ｉｉ）前記トレースされるメモリアドレスと前記選択された参照アドレスレジスタに格納された選択された参照アドレスとの差を示す第２の情報と、を示すトレースデータ要素を、前記トレースデータ要素のストリームに配置することと、
（ｂ）前記第２の情報と前記選択された参照アドレスレジスタに格納された前記選択された参照アドレスとに応じて、前記トレースされるメモリアドレスを決定することを含み、
前記トレースされるメモリアドレスを決定した後に、前記トレースされるメモリアドレスに応じて、前記複数の参照アドレスレジスタのうちの１つの前記参照アドレスを選択的に更新するための参照アドレス更新動作が実行され、
前記参照アドレス更新動作は、
（ａ）少なくとも１つの参照アドレスレジスタについて、前記対応する参照アドレスと前記トレースされるメモリアドレスとの間のアドレスの差が、所定の閾値を上回るかどうかを決定することと、
（ｂ）前記アドレスの差が、前記少なくとも１つの参照アドレスレジスタのそれぞれについて前記所定の閾値を上回る場合に、前記少なくとも１つの参照アドレスレジスタから選択された犠牲参照アドレスレジスタへ、前記トレースされるメモリアドレスを書き込むことを含み、
前記トレースデータ要素は、前記第２の情報を示すアドレス部分を含み、前記所定の閾値は、前記アドレス部分の最小サイズに対応する、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理の分野に関する。より詳細には、本発明は、処理装置によって実行された処理動作を示すトレースデータの生成および分析に関する。
【背景技術】
【０００２】
データ処理システムにおいて、処理回路によって実行された処理動作を監視し、処理動作の特性を示すトレースデータを生成するために、トレース回路が提供される場合がある。次いで、生成されたトレースデータを診断装置によって分析し、処理動作の処理結果を決定することができる。トレースデータから導き出された情報は、例えば、診断またはデバッグ目的に有用であり得る。
【０００３】
時には、処理回路は、メモリアドレスに関連する処理動作を実行することができる。こうした場合、トレース回路は、トレースデータストリームに、メモリアドレスの指示を含むことが有用である可能性がある。例えば、命令アドレス、分岐ターゲットアドレス、またはロード／格納アドレスがトレースされてもよい。いくつかのトレース回路は、参照アドレスを格納するためのアドレスレジスタを維持する。アドレスがトレースストリーム内において出力されることが必要である場合、トレース回路は、アドレスレジスタ内に格納された参照アドレスの対応するビットと同じである場合、アドレスのより上位のビットを省略できる。対応する参照ビットと同じアドレスのビットを省略することにより、トレースデータの量は小さくなる。
【０００４】
別の種類のトレースユニットは、特定の種類の命令で使用されるアドレスレジスタ、例えば、現在実行されている命令の命令アドレスでのみ使用されるあるアドレスレジスタ、およびロード／格納命令によって使用されるロード／格納アドレスでのみ使用される別のアドレスレジスタを有してもよい。しかしながら、特定の種類の命令については、トレースユニットは、常に、同じアドレスレジスタを使用する。
【０００５】
本技術は、トレースデータストリーム内のアドレスのより大きな圧縮を提供できるトレースユニットを提供することを目的とする。
【発明の概要】
【課題を解決するための手段】
【０００６】
一態様から見ると、本発明は、データ処理装置であって、
対応するメモリアドレスによって識別された複数のメモリロケーションを含むメモリと、
命令に応答して、処理動作を実行するように構成された処理回路と、
前記処理回路によって実行された前記処理動作を示すトレースデータ要素のストリームを生成し、前記トレースデータ要素のストリームを出力するように構成されたトレース回路と、を備え、
前記トレース回路は、複数の参照アドレスを格納するように構成された複数の参照アドレスレジスタを含み、
前記トレース回路は、選択された参照アドレスレジスタとして前記複数の参照アドレスレジスタのうちの１つを選択し、
（ｉ）前記複数の参照アドレスレジスタのうちのどれが前記選択された参照アドレスレジスタであるかを示す第１の情報と、
（ｉｉ）関連付けられたメモリアドレスと前記選択された参照アドレスレジスタに格納された選択された参照アドレスとの差を示す第２の情報と、を示すトレースデータ要素を生成および出力するために、関連付けられたメモリアドレスに関連付けられた処理動作を実行するための命令を処理する処理回路に応答する、データ処理装置を提供する。
【０００７】
本技術は、処理動作を実行するための処理回路を有するデータ処理装置と、処理回路によって実行された処理動作を示すトレースデータ要素のストリームを生成および出力するためのトレース回路とを提供する。トレース回路は、複数の参照アドレスを格納するように構成された複数の参照アドレスレジスタを有する。処理回路が関連付けられたメモリアドレスに関連付けられた処理動作を実行するための命令を処理する場合、トレース回路は、選択された参照アドレスレジスタとして複数の参照アドレスレジスタのうちの１つのいずれかを選択し、複数の参照アドレスレジスタのどれが選択されたアドレスレジスタであるかを示す第１の情報、および関連付けられたメモリアドレスと、選択された参照アドレスレジスタの選択された参照アドレスとの差を示す第２の情報を示すトレースデータ要素を生成および出力する。
【０００８】
関連付けられたメモリアドレスと選択された参照アドレスとの差が小さければ小さいほど、関連付けられたメモリアドレスを表すために必要なトレースデータの量は小さくなる。トレース回路が、所与の関連付けられたメモリアドレスについて、複数のアドレスレジスタのいずれかを選択できるようにし、また、選択された参照アドレスレジスタが識別され、選択された参照アドレスと関連付けられたメモリアドレスとの差が示されるトレースデータ要素を生成することにより、複数の参照アドレスレジスタ内の参照アドレスのうちの１つが、関連付けられたメモリアドレスと一致する、または、関連付けられたメモリアドレスとわずかに異なる可能性が高くなる。このため、トレースデータが大きく圧縮される可能性が高くなり、従って、トレースデータを格納するためのトレースバッファがオーバーフローする、または生成されたトレースデータが利用可能なトレース帯域幅を超える可能性が低下する。
【０００９】
関連付けられたメモリアドレスが、選択された参照アドレスと完全に一致する場合、第２の情報は、関連付けられたメモリアドレスと選択された参照アドレスとの間でゼロの差を示すことに留意されたい。
【００１０】
トレースデータ要素は、多くの方法で第１の情報および第２の情報を符号化し得る。どの参照アドレスレジスタが選択された参照アドレスレジスタであるか、および、関連付けられたメモリアドレスと選択された参照アドレスとの差の両方を識別する単一のデータ値を含むトレースデータ要素を提供することが可能である。
【００１１】
しかしながら、一実施形態において、トレースデータ要素は、選択された参照アドレスレジスタを示す第１の情報を示すヘッダ部分、および関連付けられたメモリアドレスと選択された参照アドレスとの間のアドレスの差を示す第２の情報を示すアドレス部分を含み得る。
【００１２】
関連付けられたメモリアドレスが、選択された参照アドレスと完全に一致するケースを、多くの方法でトレースデータ要素において正確に符号化し得る。例えば、トレースデータ要素のアドレス部分を、関連付けられたメモリアドレスおよび選択された参照アドレスの間のゼロの差を示すゼロの値に設定し得る。あるいは、所定の識別子を、関連付けられたメモリアドレスおよび選択された参照アドレスの間の完全な一致が存在することを表すトレースデータ要素に含むことができる。
【００１３】
しかしながら、一実施形態において、トレース回路は、関連付けられたアドレスと選択された参照アドレスとの間の差がゼロである場合に、トレースデータ要素からアドレス部分を省略し得る。この場合、ヘッダ部分のみを含み、アドレス部分を含まないトレースデータ要素は、選択された参照アドレスと関連付けられたメモリアドレスとの間の完全な一致が存在する（つまり、アドレス部分の欠如は、関連付けられたメモリアドレスと選択された参照アドレスとの差がないことを示す第２の情報を伝える）ことを示すことができる。関連付けられたメモリアドレスおよび選択された参照アドレスの間の完全な一致が存在する場合に、アドレス部分を省略することで、トレースデータの量を小さくすることができる。
【００１４】
トレース回路は、多くの方法で選択された参照アドレスレジスタを選択するように構成され得る。一実施形態において、トレース回路は、それぞれの複数の参照アドレスレジスタに対応する複数の候補の第２の情報の値を決定するように構成され得る。各候補の第２の情報の値は、関連付けられたメモリアドレスとその候補の第２の情報の値に対応する参照アドレスレジスタに格納された参照アドレスとの間の差を示す。トレース回路は、選択された参照アドレスレジスタとして、最も効率的な候補の第２の情報の値に対応する参照アドレスレジスタを選択し得る。最も効率的な候補の第２の情報の値は、典型的には、トレースデータ要素の最も効率的な符号化を生じさせる値となる。複数の候補の第２の情報の値が同等に効率的である場合、これらの値のいずれか１つを、最も効率的な候補の第２の情報の値として選択し得る。次いで、トレース回路は、最も効率的な候補の第２の情報の値に対応する第２の情報を示すトレースデータ要素を生成し得る。選択された参照アドレスレジスタとして、最も効率的な候補の値に対応する参照アドレスレジスタを選択することにより、トレースデータを、より効率的に符号化できる。
【００１５】
一実施形態において、最も効率的な候補の第２の情報の値は、対応する第２の情報を提供するために、トレースデータ要素に含まれる。しかしながら、他の実施形態において、最も効率的な候補の第２の情報の値は、トレースデータ要素に常に含まれる必要はなく、時には、対応する第２の情報を示すために別の種類の情報がトレースデータ要素に含まれてもよい。例えば、関連付けられたメモリアドレスおよび選択された参照アドレスの間に完全な一致が存在する場合、最も効率的な候補の第２の情報は、ゼロの差を示し、こうして、対応する第２の情報を、上記のように完全な一致を示すアドレス情報の欠如により、ゼロビットを用いてトレースデータ要素に表し得る。
【００１６】
一例において、最も効率的な候補の第２の情報の値は、対応する第２の情報を最小のビットを用いて表すことができる候補の第２の情報の値である。トレースデータ要素において、より少ないビットを用いて表すことができる第２の情報を含むことにより、トレースデータの量を少なくすることができる。
【００１７】
あるいは、最も効率的な候補の第２の情報の値を、トレースデータ要素のストリーム内のトレースデータ要素に含む場合、対応する第２の情報が、トレースデータ要素のストリーム内のトレースデータの全ての最小の量となる候補の第２の情報の値として選択し得る。このため、選択された参照アドレスレジスタとして参照アドレスレジスタのうちの適した１つを選択することにより、トレースデータの合計量を減らすことができる。
【００１８】
第２の情報は、関連付けられたメモリアドレスと選択された参照アドレスとの間の差を異なる方法で示し得る。一実施形態において、第２の情報は、選択された参照アドレスレジスタの選択された参照アドレスの対応する部分に対して異なるビット値を有する関連付けられたメモリアドレスの部分を示してもよい。選択された参照アドレスの対応するビットに対して異なるビットを有する部分を示す第２の情報を提供し、関連付けられたメモリアドレスおよび選択された参照アドレスにおいて同じである共通の部分を省略することにより、第２の情報を、関連付けられたメモリアドレスよりも少ないビットを用いて表すことができる。
【００１９】
あるいは、第２の情報は、関連付けられたメモリアドレスと選択されたメモリアドレスとの間の数値の差を示し得る。この場合、トレース回路は、数値の差を生成するために、選択された参照アドレスから関連付けられたメモリアドレスを、または関連付けられたメモリアドレスから選択された参照アドレスを差し引くことにより、第２の情報を生成し得る。
【００２０】
トレース動作中に変化しない固定の参照アドレスを格納する参照アドレスレジスタを提供することが可能である。しかしながら、一実施形態において、トレースデータ要素を生成後に、関連付けられたメモリアドレスに応じて、複数の参照アドレスレジスタのうちの少なくとも１つの参照アドレスを選択的に更新するための参照アドレス更新動作を実行するために、トレース回路を構成してもよい。
【００２１】
本技術は、ある処理動作のための関連付けられたメモリアドレスが、１つ以上の以下の処理動作のための関連付けられたメモリアドレスと類似している可能性が大きいことを認識している。例えば、プログラム命令のループは、同じ送信先アドレスへ何度も分岐してもよく、または、一連のロード／格納動作は、隣接するメモリアドレスのブロック上で実行されてもよい。このため、トレース回路に、関連付けられたメモリアドレスに応じて、参照アドレスレジスタのうちの少なくとも１つの参照アドレスを更新する能力を与えることにより、以下の処理動作のための関連付けられたメモリアドレスが参照アドレスのうちの１つと同一または類似であるの可能性が高くなり、そのため、トレースデータの合計量を小さくできる可能性がある。
【００２２】
一実施形態において、参照アドレス更新動作は、複数の参照アドレスレジスタから選択された犠牲参照アドレスレジスタへ関連付けられたアドレスを書き込むことを含む。関連付けられたメモリアドレスは、次いで、トレースデータ要素を生成するために、以下の動作で使用可能な参照アドレスのうちの１つになる。関連付けられたメモリアドレスを用いて参照アドレスのうちの１つを更新することにより、以下の処理動作のための関連付けられたメモリアドレスと、参照アドレスのうちの１つとの差は小さい可能性がより大きくなる。
【００２３】
トレース回路において、各処理動作後、または各トレースデータ要素生成後に、参照アドレスレジスタを更新することは不要である。時により、トレース回路は、いかなる参照アドレスも更新しない場合がある。例えば、一実施形態において、参照アドレス更新動作は、
（ａ）少なくとも１つの参照アドレスレジスタについて、対応する参照アドレスと前記関連付けられたメモリアドレスとの間のアドレスの差が、所定の閾値を上回るかどうかを決定することと、
（ｂ）前記アドレスの差が前記少なくとも１つの参照アドレスレジスタのうちのそれぞれについて、前記所定の閾値を上回る場合に、前記少なくとも１つの参照アドレスレジスタから選択された犠牲参照アドレスレジスタへ、前記関連付けられたメモリアドレスを書き込むことと、を含む。
【００２４】
これによって、いずれかの所与の関連付けられたメモリアドレスが、参照アドレスのうちの１つとわずかに異なる可能性が高まるため、参照アドレスレジスタは、異なる範囲のメモリアドレススペースに、広く拡散された異なる参照アドレスを格納することが望ましい場合がある。同様の参照アドレス値が参照アドレスレジスタにあまりに多く格納されるのを防ぐために、トレース回路は、参照アドレスレジスタのうちの少なくとも１つについて、関連付けられたメモリアドレスと対応する参照アドレスとの間のアドレスの差が所定の閾値を上回るかどうかを決定し得る。次いで、トレース回路は、アドレスの差が所定の閾値を上回る場合に、関連付けられたメモリアドレスを犠牲参照アドレスレジスタに書き込み得る。アドレスの差が閾値を上回らない場合、これは、参照アドレスレジスタに既に格納された参照アドレスのうちの１つが、実質的に、参照アドレスレジスタへ格納された場合の関連付けられた参照アドレスがそうなるであろうと同程度、トレースデータの圧縮に有用であることを示すため、この場合、関連付けられたメモリアドレスによる参照アドレスレジスタの更新に関し、利点はほとんどない。そのため、この場合では、トレース回路は、関連付けられたメモリアドレスによって参照アドレスレジスタを更新しないように選択できる。
【００２５】
所与の関連付けられたメモリアドレスによって参照アドレスレジスタを更新するかどうかを決定するための閾値アドレスの差は、異なる方法で定義してもよい。例えば、所定の閾値は、参照アドレスの対応する部分とは異なる関連付けられたメモリアドレスの部分のための、閾値ビット数であってもよい。例えば、閾値ビット数が４ビットである場合、トレース回路は、関連付けられたメモリアドレスが４ビットよりも多く既存の参照アドレスのうちの１つと異なる場合に、関連付けられたメモリアドレスによって、参照アドレスのうちの１つを更新できる。あるいは、関連付けられたメモリアドレスと既存の参照アドレスとの間の数値の差が閾値よりも大きい場合に、関連付けられたメモリアドレスが参照アドレスレジスタのうちの１つに格納されるように、閾値アドレスの差を、数値の差として定義してもよい。
【００２６】
一実施形態において、所定の閾値は、第２の情報を示すためのアドレス部分の最小サイズに対応する。いくつかのトレース符号化スキームにおいて、第２の情報を示すためのアドレス部分は、最小サイズを有してもよい。関連付けられたメモリアドレスと既存の参照アドレスのうちの１つとの差が所定の閾値を上回らない（つまり、最小サイズのアドレス部分を用いて差を既に表すことができる）場合、参照アドレスとして関連付けられたメモリアドレスを使用することは、既存の参照アドレスを用いて既に達成できる以上に、トレースデータの量を低下させることはなく、そのため、関連付けられたメモリアドレスの参照アドレスレジスタへの書き込みにおいて、有利な点はほとんどない。所定の閾値が、関連付けられたメモリアドレスと参照アドレスとの間において変化する部分の閾値ビット数である場合、閾値は、アドレス部分の最小サイズのビット数に対応し得る。あるいは、所定の閾値が数値の差である場合、これは、アドレス部分の最小サイズを用いて表すことができる最大の正または負の値に対応する場合がある。例えば、最小サイズが６ビットである場合、およびアドレス部分が符号なしのバイナリ表現を用いる場合、閾値は、アドレス部分を用いて表すことが可能な最大の値である、６３という数値の差に対応する場合がある。あるいは、例えば、６ビットのアドレス部分が−３２〜３１の範囲の値を表せるように、アドレス差を、符号付きのバイナリ表現を用いて表し得る。この場合、所定の閾値は、負のアドレス差で３２、正のアドレス差で３１にできる。負の差の値について、差は、閾値よりもさらに負の値が大きい場合に、閾値を「上回る」と考えられ得る（つまり、その絶対値は閾値の絶対値よりも大きい、例えば、−３５という差は、−３２という閾値を「上回る」と考えられる）ことに留意されたい。
【００２７】
トレース回路は、参照アドレスレジスタのどれが、関連付けられたメモリアドレスが参照アドレス更新中に書き込まれる犠牲参照アドレスレジスタであるかを選択するために、犠牲選択動作を実行するように構成され得る。いずれかの参照アドレスが既に犠牲アドレスレジスタに格納されている場合、これは、関連付けられたメモリアドレスによって上書きされる。トレース回路は、いずれかの種類の犠牲選択動作、例えば、ランダム、使用頻度が最も低い（ＬＲＵ）またはラウンドロビンを使用し得る。例えば、レジスタは、最も最近に更新されたレジスタを示すポインタに関連付けられてもよく、ラウンドロビン犠牲選択スキームは、ポインタによって示されたレジスタの後続のレジスタの除去のために選択することにより、実装されてもよい。
【００２８】
一実施形態において、トレース回路は、参照アドレス更新動作による更新から少なくとも１つの参照アドレスレジスタを選択的に除外するために、ロックダウンシグナルに応答し得る。このため、ロックダウンシグナルは、これらのレジスタがそれらの現在の参照アドレスを格納し続けるように、所与のレジスタを動的に選択するように使用できる。例えば、特定のシーケンスのプログラム命令が、特定の関連付けられたメモリアドレスを何度も使用することである場合、および参照アドレスレジスタが、繰り返される関連付けられたメモリアドレスと類似の所与の参照アドレスを格納する場合、所与の参照アドレスが破棄または上書きされるべきではないことをトレース回路に通知するためにロックダウンシグナルを使用でき、これにより、トレースストリームを大幅に圧縮できる可能性が高まる。
【００２９】
参照アドレスレジスタの全てが更新可能である必要はない。一実施形態において、所定の参照アドレスを格納するための少なくとも１つの固定の参照アドレスレジスタが存在してもよい。次いで、固定の参照アドレスレジスタを、参照アドレス更新動作による更新から除外してもよい。例えば、プログラム命令に特定のメモリアドレスを頻繁に使用してもよいため、そのアドレスを格納する固定の参照アドレスレジスタを提供することが有益である可能性がある。
【００３０】
一実施形態において、参照アドレスレジスタのうちの少なくとも１つを、メモリアドレススペースの関連付けられた範囲のメモリアドレスに関連付けられた、範囲を限定された参照アドレスレジスタにしてもよい。トレース回路は、次いで、関連付けられたメモリアドレスがそのレジスタの関連付けられた範囲外である場合に、範囲が限定された参照アドレスレジスタを更新から除外してもよい。このため、範囲が限定された参照アドレスレジスタは、関連付けられた範囲内においてアドレスを格納するのみであってもよい。関連付けられた範囲は、連続するメモリ範囲である必要はないが、さらに、アドレスの複数の個別範囲を含んでもよい。一例において、異なる範囲が限定されたレジスタが異なるアドレス範囲にそれぞれ関連付けられて提供される場合に、関連付けられたメモリアドレスと参照アドレスのうちの１つとの間の小さな差が存在する可能性が高まるように、参照アドレスレジスタが、全メモリアドレススペース全体に分散される参照アドレスを格納することを確実にためにこれを使用できる。別の例において、参照アドレスレジスタは、関連付けられたメモリアドレスの少なくとも１つの範囲がいかなる参照アドレスレジスタへの書き込みから除外されるように、範囲を限定されてもよい。
【００３１】
一実施形態において、参照アドレスレジスタの少なくともサブセットは、参照アドレスパイプラインを形成するように結合されてもよく、参照アドレス更新動作は、関連付けられたメモリアドレスに応じて、パイプライン内のアドレスを更新することを含んでもよい。パイプラインは、より最近の関連付けられたアドレスの前に、より以前の関連付けられたアドレスが書き込まれるように、参照アドレスを更新するための便利なスキームを提供できる。パイプラインにおいて、参照アドレス更新動作は、パイプラインの参照アドレスレジスタの間で参照アドレスを選択的にシフトすることを含んでもよい。
【００３２】
一実施形態において、参照アドレスパイプラインは、Ｎ個の参照アドレスレジスタを含み、
前記参照アドレス更新動作は、前記参照アドレスパイプラインの１番目から（Ｎ−１）番目の参照アドレスレジスタ内の参照アドレスを、前記参照アドレスパイプラインの次の参照アドレスレジスタへシフトすること、および、前記関連付けられたメモリアドレスを、前記参照アドレスパイプラインの第１の参照アドレスレジスタへ書き込むことを含む。
【００３３】
この例では、パイプラインの第１の参照アドレスレジスタは、最も最近の関連付けられたメモリアドレスを含み、第２のアドレスレジスタは、第２の最も最近の関連付けられたメモリアドレス等を含む。パイプライン内のＮ番目のアドレスレジスタのコンテンツは、新しい関連付けられたメモリアドレスがパイプラインに追加されると失われる。（例えばプログラムループにおいて）命令ストリーム内で何度も同じ分岐送信先アドレスが生じる可能性があるため、この技術は命令アドレスにおいて得に有用であり、そのため、パイプラインがＮ個の最も最近の関連付けられたメモリアドレスに対応する参照アドレスを含むように構成することにより、関連付けられたメモリアドレスが、参照アドレスのうちの１つと完全に一致する可能性が高まる。
【００３４】
あるいは、参照アドレスパイプラインは、Ｎ個の参照アドレスレジスタを含んでもよく、選択された参照アドレスレジスタがパイプラインのＭ番目の参照アドレスレジスタである場合（１≦Ｍ≦Ｎである場合）、参照アドレス更新動作は、
Ｍ＞１の場合に、前記参照アドレスパイプラインの１番目から（Ｍ−１）番目の参照アドレスレジスタ内の参照アドレスを、前記参照アドレスパイプラインの次の参照アドレスレジスタへシフトすることと、
前記参照アドレスパイプラインの第１の参照アドレスレジスタへ、前記関連付けられたメモリアドレスを書き込むことを含んでもよい。
【００３５】
この場合、パイプラインの参照アドレスレジスタのどれが更新されるかは、どの参照アドレスレジスタが、トレースデータ要素を生成するための選択された参照アドレスレジスタとして使用されたかによる。Ｍ＞１の場合に、選択された参照アドレスレジスタに先行する参照アドレスレジスタ内の参照アドレスは、次のレジスタアドレスレジスタにシフトされ（このため選択された参照アドレスレジスタは、先行する参照アドレスレジスタの参照アドレス内で更新される）、次いで、関連付けられたメモリアドレスは、パイプラインの第１の参照アドレスレジスタに書き込まれる。この技術において、トレースデータ要素の生成に使用された参照アドレスが、パイプラインから除かれ、次いで、関連付けられたメモリアドレスと置換されるため、パイプライン内に複数の重複または類似のアドレスが存在する可能性が低下し、そのため、パイプライン内の参照アドレスがメモリスペース全体においてより均一に分散される。それにもかかわらず、関連付けられたメモリアドレスを第１の参照アドレスレジスタに追加することにより、より最近の関連付けられたメモリアドレスが、再び、パイプラインの最初となり、そのため、より以前の関連付けられたメモリアドレスよりも長期間、パイプラインに存在する。この技術は、特にデータアドレスについて有用であり得、この場合、参照アドレスの完全な一致の可能性は命令アドレスよりも低く、そのため、利用可能な参照アドレスの幅広い拡散を提供するために有用であり得る。
【００３６】
選択された参照アドレスレジスタがパイプラインの第１の参照アドレスレジスタ（つまりＭ＝１）である場合、パイプライン動作は、さらに、
前記関連付けられたメモリアドレスと前記第１の参照アドレスレジスタの参照アドレスとの差が、所定の閾値を上回るかどうかを決定することと、
前記差が、前記所定の閾値を上回る場合、前記参照アドレスパイプラインの前記第１の参照アドレスレジスタへ前記関連付けられたメモリアドレスを書き込む前に、前記参照アドレスパイプラインの次の参照アドレスレジスタへ、前記参照アドレスパイプラインの１番目から（Ｎ−１）番目の参照アドレスレジスタ内の参照アドレスをシフトすることを含んでもよい。
【００３７】
この技術は、再び、パイプラインへ同様のアドレス値をあまりに多く書き込むことが望ましくないことを認識している。Ｍ＝１であり、第１の参照アドレスと関連付けられたメモリアドレスとの差が所定の閾値を上回らない場合、パイプライン内の参照アドレスを全て上方にシフトし（ｓｈｉｆｔｉｎｇ  ｕｐ）、第１の参照アドレスレジスタへ関連付けられたメモリアドレスを書き込むことにより、パイプラインの最初の２つのレジスタに、２つの類似したアドレス値が生じる。従って、代わりに、トレース回路は、単に、関連付けられたメモリアドレスで、第１の参照アドレスレジスタのアドレスを置換する。一方で、Ｍ＝１であり、第１の参照アドレスと関連付けられたメモリアドレスとの差が所定の閾値を上回る場合、パイプライン内に両方のアドレスを提供することが有用であり、そのため、トレース回路は、パイプラインの一段上に参照アドレスをシフトし、次いで、関連付けられたメモリアドレスを第１の参照アドレスレジスタに書き込む。この技術により、アドレスレジスタ内の非常に類似のアドレス値を生じさせる、多すぎるパイプラインのシフトを生じさせずに、アドレスレジスタを投入する（ｐｏｐｕｌａｔｅｄ）ことが可能になる。再び、所定の閾値が上記のように最小アドレス部分のサイズに対応してもよく、参照アドレスの対応する部分に対して異なる関連付けられたメモリアドレスの部分の、数値の差の閾値または閾値ビット数として示されてもよい。
【００３８】
上述のように、トレース回路は、アドレスレジスタのどれが最も効率的な候補の第２の情報の値に対応するかに応じて、選択された参照アドレスレジスタを選択し得る。パイプラインの実施形態において、対応する候補の第２の情報の値が同等に効率的である複数の参照アドレスレジスタが存在する場合、トレース回路は、選択された参照アドレスレジスタとして、参照アドレスパイプラインの最後に最も近い複数の参照アドレスレジスタのうちの１つを選択し得る。同等に効率的な参照アドレスのうちの最も古いもの（つまり、参照アドレスは、将来的なアドレストレースについて有用である可能性が最も低い）がパイプラインから除去され、トレースデータを生成するために使用された後で、関連付けられたアドレスによって置換されることを確実にするため、これは有用である。
【００３９】
あるいは、対応する候補の第２の情報の値が同等に効率的である複数の参照アドレスレジスタが存在する場合、トレース回路は、選択された参照アドレスレジスタとして、複数の参照アドレスレジスタのうちのいずれか１つを選択し得る。
【００４０】
一実施形態において、トレース回路は、複数の参照アドレスレジスタのそれぞれにデフォルトの参照アドレスを格納するために、初期化事象に応答し得る。例えば、デフォルトの参照アドレスは、そのビットが全てゼロ値を有するアドレスにしてもよい。デフォルトの参照アドレスは、アドレスレジスタのそれぞれと同じである必要はない。
【００４１】
一実施形態において、トレース回路がトレースストリームの生成を開始する場合に、参照アドレスレジスタが、全て、公知のデフォルトの参照アドレス値を格納するように、初期化事象は、トレース回路が起動することである。このため、トレースストリームを分析する診断ユニットは、参照アドレスレジスタのコンテンツがトレースストリームの最初にあることを知ることができる。
【００４２】
さらに、初期化事象は、トレース同期化データ要素を生成および出力するために、トレース回路をトリガするためのトレース同期化事象であってもよい。典型的には、トレースストリームのトレースデータ要素の分析が、ストリームの以前のトレースデータ要素の分析に基づく（例えば、診断ユニットが、以前のトレースデータ要素から推測された処理結果に基づいて、参照アドレスレジスタのコンテンツを決定してもよい）ため、これは有用である。トレース同期化データ要素を生成および出力するために、トレース回路をトリガするためのトレース同期化事象を提供し、トレース同期化事象の発生時における参照アドレスレジスタの再初期化を行うことで、診断ユニットに、以前のトレースデータの知識を必要とせずに、診断ユニットがトレースストリームの分析を開始できるトレースストリーム内の参照ポイントが提供される。これは、診断ユニットは、トレースストリームの開始時において開始しなければならないのではなく、トレース同期化データ要素によって示された参照ポイントからトレースデータの分析を開始できることを意味する。
【００４３】
本技術において、処理回路は、複数の異なる種類のデータ処理命令に応答してデータ処理動作を実行するように構成されてもよく、これらの複数の種類のそれぞれについて、トレース回路が異なる種類のデータ処理命令を示すトレースデータ要素を示すための同じ参照アドレスレジスタを使用するように、トレース回路は、参照アドレスレジスタのいずれかを選択するように構成されてもよい。このため、選択された参照アドレスレジスタの選択は、データ処理命令の種類に依存しない。各アドレスレジスタは、いずれかの種類の命令に関連付けられたアドレスを保持してもよい。いずれの命令について、トレース回路は、選択されたレジスタとして選択参照アドレスレジスタのいずれかを選択する自由を有し、そのため、関連付けられたメモリアドレスと参照アドレスのうちの１つとに小さな差が存在する可能性が大きくなる。従って、いずれかの特定の種類の命令について単一のアドレスレジスタのみを提供する先行技術と比較して、トレースストリームが大幅に圧縮される可能性がある。複数の種類のデータ処理命令は、例えば、分岐命令、例外事象が発生した場合に実行される命令、例外事象が発生後に実行が方向付けられる命令、処理回路によって現在実行される命令、ロード命令および格納命令のうちの少なくとも２つを含んでもよい。
【００４４】
別の態様から見ると、本発明は、
データを格納するためのメモリ手段であって、対応するメモリアドレスによって識別された複数のメモリロケーションを含む、メモリ手段と、
命令に応答して、処理動作を実行するための処理手段と、
前記処理手段によって実行された前記処理動作を示すトレースデータ要素のストリームを生成し、前記トレースデータ要素のストリームを出力するためのトレース手段と、を備え、
前記トレース手段は、複数の参照アドレスを格納するための複数の参照アドレスレジスタ手段を含み、
前記トレース手段は、選択された参照アドレスレジスタ手段として前記複数の参照アドレスレジスタ手段のうちの１つを選択し、
（ｉ）前記複数の参照アドレスレジスタ手段のうちのどれが前記選択された参照アドレスレジスタ手段であるかを示す第１の情報と、
（ｉｉ）関連付けられたメモリアドレスと前記選択された参照アドレスレジスタ手段に格納された選択された参照アドレスとの差を示す第２の情報と、を示すトレースデータ要素を生成および出力するために、関連付けられたメモリアドレスに関連付けられた処理動作を実行するための命令を処理する前記処理手段に応答する、データ処理装置を提供する。
【００４５】
さらなる態様から見ると、本発明は、対応するメモリアドレスによって識別された複数のメモリロケーションを含むメモリを含むデータ処理装置のためのデータ処理方法であって、前記方法は、
命令に応答して、処理動作を実行するステップと、
複数の参照アドレスレジスタに複数の参照アドレスを格納するステップと、
前記処理回路によって実行された前記処理動作を示すトレースデータ要素のストリームを生成するステップと、
前記トレースデータ要素のストリームを出力するステップと、を含み、
トレースデータ要素のストリームを生成する前記ステップは、関連付けられたメモリアドレスに関連付けられた処理動作のパフォーマンスに応答して、選択された参照アドレスレジスタとして前記複数の参照アドレスレジスタのうちの１つを選択し、
（ｉ）前記複数の参照アドレスレジスタのうちのどれが前記選択された参照アドレスレジスタであるかを示す第１の情報と、
（ｉｉ）前記関連付けられたメモリアドレスと前記選択された参照アドレスレジスタに格納された選択された参照アドレスとの差を示す第２の情報と、を示すトレースデータ要素を生成および出力することを含む、データ処理方法を提供する。
【００４６】
さらに別の態様から見ると、本発明は、命令に応答して、処理装置によって実行された処理動作を監視するためのトレースユニットであって、前記処理装置は、対応するメモリアドレスによって識別された複数のメモリロケーションを含むメモリを含み、前記トレースユニットは、
前記処理装置によって実行された前記処理動作を示すトレースデータ要素のストリームを生成し、前記トレースデータ要素のストリームを出力するように構成されたトレース回路を含み、
前記トレース回路は、複数の参照アドレスを格納するように構成された複数の参照アドレスレジスタを含み、
前記トレース回路は、選択された参照アドレスレジスタとして前記複数の参照アドレスレジスタのうちの１つを選択し、
（ｉ）前記複数の参照アドレスレジスタのうちのどれが前記選択された参照アドレスレジスタであるかを示す第１の情報と、
（ｉｉ）前記関連付けられたメモリアドレスと前記選択された参照アドレスレジスタに格納された選択された参照アドレスとの差を示す第２の情報と、
を示すトレースデータ要素を生成および出力するために、関連付けられたメモリアドレスに関連付けられた処理動作を実行するための命令を処理する前記処理回路処理に応答する、トレースユニットを提供する。
【００４７】
さらなる態様から見ると、本発明は、命令に応答して、処理装置によって実行された処理動作を監視するためのトレースユニットであって、前記処理装置は、データを格納するためのメモリ手段を含み、前記メモリ手段は、対応するメモリアドレスによって識別された複数のメモリロケーションを含み、前記トレースユニットは、
前記処理装置によって実行された前記処理動作を示すトレースデータ要素のストリームを生成し、前記トレースデータ要素のストリームを出力するためのトレース手段を含み、
前記トレース手段は、複数の参照アドレスを格納するための複数の参照アドレスレジスタ手段を含み、
前記トレース手段は、選択された参照アドレスレジスタとして前記複数の参照アドレスレジスタのうちの１つを選択し、
（ｉ）前記複数の参照アドレスレジスタ手段のうちのどれが前記選択された参照アドレスレジスタ手段であるかを示す第１の情報と、
（ｉｉ）前記関連付けられたメモリアドレスと前記選択された参照アドレスレジスタ手段に格納された選択された参照アドレスとの差を示す第２の情報と、を示すトレースデータ要素を生成および出力するために、関連付けられたメモリアドレスに関連付けられた処理動作を実行するための命令を処理する前記処理装置に応答する、トレースユニットを提供する。
【００４８】
別の態様から見ると、本発明は、命令に応答して、処理装置によって実行された処理動作を示すトレースデータ要素のストリームを分析するための診断装置であって、前記処理装置は、対応するメモリアドレスによって識別された複数のメモリロケーションを含むメモリを含み、前記診断装置は、
前記トレースデータ要素のストリームを受信するためのトレース入力と、
前記処理動作の処理結果を決定するために、前記トレースデータ要素のストリームを分析するように構成された診断回路と、を備え、
前記診断回路は、複数の参照アドレスを格納するように構成された複数の参照アドレスレジスタを含み、
前記診断回路は、
（ａ）（ｉ）前記複数の参照アドレスレジスタのうちのいずれが選択された参照アドレスレジスタであるかを示す第１の情報と、（ｉｉ）前記関連付けられたメモリアドレスと前記選択された参照アドレスレジスタに格納された選択された参照アドレスとの差を示す第２の情報と、を示すトレースデータ要素を、前記トレースデータ要素のストリームに配置するために、および、
（ｂ）前記第２の情報と前記選択された参照アドレスレジスタに格納された前記選択された参照アドレスとに応じて、前記関連付けられたメモリアドレスを決定するために、関連付けられたメモリアドレスに関連付けられた処理動作を実行するための命令を処理する前記処理装置の指示に応答する、診断装置を提供する。
【００４９】
生成されたトレースデータ要素を分析するための診断装置は、処理装置のトレースユニット内のものに対応する参照アドレスレジスタを含んでもよい。トレースデータ要素の分析時において、診断回路は、処理装置によって命令が実行される指示へのアクセスを有する。処理装置が関連付けられたメモリアドレスに関連付けられた処理動作を実行するための命令を処理する指示に、診断回路が遭遇する場合、診断回路は、トレースデータ要素のストリームにおいて、対応するトレースデータ要素を配置できる。対応するトレースデータ要素は、トレースデータ要素を生成する場合にトレースユニットによって選択された選択参照アドレスレジスタを示す第１の情報、関連付けられたメモリアドレスと選択された参照アドレスレジスタに格納された選択された参照アドレスとの差を示す第２の情報を示す。次いで、診断回路は、第１の情報によって示された参照アドレスレジスタにアクセスし、第２の情報および参照アドレスレジスタに格納された選択参照アドレスに応じて、関連付けられたメモリアドレスを決定できる。このため、診断回路は、関連付けられたメモリアドレスを識別するために、トレースストリームを解凍できる。
【００５０】
再び、トレースデータ要素の種々の符号化を使用してもよいが、一実施形態において、トレースデータ要素は、第１の情報を示すヘッダ部分および第２の情報を示すアドレス部分を含んでもよい。トレースデータ要素がアドレス部分を含まないことがわかっている場合に、診断回路は、関連付けられたメモリアドレスが選択された参照アドレスと同じであると決定してもよい。このため、アドレス部分の欠如は、関連付けられたメモリアドレスおよび選択された参照アドレスの間の完全な一致が存在することを示唆する。
【００５１】
選択アドレスの対応する部分に対して異なるビット値を有する関連付けられたメモリアドレスの一部として、第２の情報が示される場合、診断回路は、（ｉ）前記選択された参照アドレスのビット値で開始し、（ｉｉ）前記第２の情報によって示された前記関連付けられたメモリアドレスの前記部分のビット値で、前記選択された参照アドレスの前記対応する部分のビット値を置換することによって、得られる値と等しいアドレス値を有するものとして、前記関連付けられたメモリアドレスを決定してもよい。診断回路は、実際にはステップ（ｉ）および（ｉｉ）を実行する必要はないが、ステップ（ｉ）および（ｉｉ）の実行によって得られた値に等しい値を有するアドレス値を生じさせる論理または演算動作のいずれかの組み合わせを実行してもよいことが理解されよう。
【００５２】
あるいは、第２の情報が、関連付けられたメモリアドレスと選択された参照アドレスとの間の数値の差を示す場合、診断回路は、選択された参照アドレスへその数値の差を加算することにより、関連付けられたメモリアドレスを決定してもよい。
【００５３】
診断回路は、関連付けられたメモリアドレスを決定した後に、トレースユニットに対応した方法で、参照アドレス更新動作を実行することにより、複数の参照アドレスレジスタのうちの１つの参照アドレスを選択的に更新してもよい。
【００５４】
参照アドレス更新動作は、前記関連付けられたメモリアドレスを、前記複数の参照アドレスレジスタの犠牲参照アドレスレジスタへ書き込むことを含んでもよい。
【００５５】
参照アドレス更新動作は、
（ａ）少なくとも１つの参照アドレスレジスタについて、前記対応する参照アドレスと前記関連付けられたメモリアドレスとの間のアドレスの差が、所定の閾値を上回るかどうかを決定することと、
（ｂ）前記アドレスの差が、前記少なくとも１つの参照アドレスレジスタのそれぞれについて前記所定の閾値を上回る場合に、前記少なくとも１つの参照アドレスレジスタから選択された犠牲参照アドレスレジスタへ、前記関連付けられたメモリアドレスを書き込むことを含んでもよい。
【００５６】
トレースデータ要素は、前記第２の情報を示すアドレス部分を含んでもよく、所定の閾値は、前記アドレス部分の最小サイズに対応してもよい。
【００５７】
診断回路は、前記複数の参照アドレスレジスタのうちのどれが前記犠牲参照アドレスレジスタであるかを選択するために、犠牲選択動作を実行するように構成されてもよい。
【００５８】
診断回路は、参照アドレス更新動作による更新から、少なくとも１つの参照アドレスレジスタを選択的に除外するように、ロックダウンシグナルに応答してもよい。
【００５９】
複数の参照アドレスレジスタのうちの少なくとも１つは、事前定義された参照アドレスを格納するための固定の参照アドレスレジスタにしてもよく、診断回路は、前記参照アドレス更新動作による更新から固定の参照アドレスレジスタを除外してもよい。
【００６０】
前記複数の参照アドレスレジスタのうちの少なくとも１つは、関連付けられた範囲の前記メモリアドレスに関連付けられた範囲を限定された参照アドレスレジスタにしてもよく、診断回路は、関連付けられたメモリアドレスが前記メモリアドレスの関連付けられた範囲外である場合に、範囲を限定した参照アドレスレジスタを、参照アドレス更新動作による更新から除外してもよい。
【００６１】
複数の参照アドレスレジスタの少なくともサブセットは、参照アドレスパイプラインを形成するために結合されてもよく、参照アドレス更新動作は、関連付けられたメモリアドレスに応じて、参照アドレスパイプラインで参照アドレスを更新することを含んでもよい。
【００６２】
参照アドレスパイプラインは、Ｎ個の参照アドレスレジスタを含んでもよく、
前記参照アドレス更新動作は、前記参照アドレスパイプラインの１番目から（Ｎ−１）番目の参照アドレスレジスタ内の参照アドレスを、前記参照アドレスパイプラインの次の参照アドレスレジスタへシフトすることと、前記関連付けられたメモリアドレスを、前記参照アドレスパイプラインの第１の参照アドレスレジスタへ格納することを含んでもよい。
【００６３】
参照アドレスパイプラインは、Ｎ個の参照アドレスレジスタを含んでもよく、選択された参照アドレスレジスタは、１≦Ｍ≦Ｎである場合に、前記参照アドレスパイプラインのＭ番目の参照アドレスレジスタを含んでもよく、参照アドレス更新動作は、
Ｍ＞１の場合に、前記参照アドレスパイプラインの１番目から（Ｍ−１）番目の参照アドレスレジスタ内の参照アドレスを、前記参照アドレスパイプラインの次の参照アドレスレジスタへシフトすることと、
前記参照アドレスパイプラインの第１の参照アドレスレジスタへ、前記関連付けられたメモリアドレスを格納することを含んでもよい。
【００６４】
Ｍ＝１である場合に、参照アドレス更新動作は、さらに、
前記関連付けられたメモリアドレスと前記第１の参照アドレスレジスタの参照アドレスとの差が、所定の閾値を上回るかどうかを決定することと、
前記差が、前記所定の閾値を上回る場合、前記参照アドレスパイプラインの前記第１の参照アドレスレジスタへ前記関連付けられたメモリアドレスを書き込む前に、前記参照アドレスパイプラインの１番目から（Ｎ−１）番目の参照アドレスレジスタ内の参照アドレスを、前記参照アドレスパイプラインの次の参照アドレスレジスタへシフトすることを含んでもよい。
【００６５】
再び、所定の閾値は、アドレス部分の最小サイズに対応してもよい。所定の閾値は、第１の参照アドレスレジスタの参照アドレスの対応する部分に対して異なる関連付けられたメモリアドレスの部分についての閾値ビット数であってもよい、または、閾値の数値の差であってもよい。
【００６６】
診断回路は、トレースユニットに対応するように、参照アドレスレジスタのそれぞれへデフォルトの参照アドレスを格納することにより、初期化事象に応答してもよい。初期化事象は、デフォルトの参照アドレスがトレースストリームの分析の開始時に使用されるように、トレースストリームの分析を開始するように作動される診断回路にしてもよい。さらに、初期化事象は、トレースデータ要素のストリーム内のトレース同期化データ要素に応答する診断回路にしてもよい。参照アドレスレジスタはトレース同期化データ要素において再初期化されるため、トレース同期化データ要素は、以前のトレースデータ要素から導き出された情報を必要とせずに、トレースデータ分析を開始できる参照ポイントを提供する。
【００６７】
別の態様から見ると、本発明は、命令に応答して、処理装置によって実行された処理動作を示すトレースデータ要素のストリームを分析するための診断装置であって、前記処理装置は、データを格納するためのメモリ手段を含み、前記メモリ手段は、対応するメモリアドレスによって識別された複数のメモリロケーションを含み、前記診断装置は、
前記トレースデータ要素のストリームを受信するためのトレース入力手段と、
前記処理動作の処理結果を決定するために、前記トレースデータ要素のストリームを分析するための診断手段と、を備え、
前記診断手段は、複数の参照アドレスを格納するための複数の参照アドレスレジスタ手段を含み、
前記診断手段は、
（ａ）（ｉ）前記複数の参照アドレスレジスタ手段のうちのどれが選択された参照アドレスレジスタ手段であるかを示す第１の情報と、（ｉｉ）前記関連付けられたメモリアドレスと前記選択された参照アドレスレジスタ手段に格納された選択された参照アドレスとの差を示す第２の情報と、を示すトレースデータ要素を、前記トレースデータ要素のストリームに配置するために、および、
（ｂ）前記第２の情報と前記選択された参照アドレスレジスタ手段に格納された前記選択された参照アドレスとに応じて、前記関連付けられたメモリアドレスを決定するために、関連付けられたメモリアドレスに関連付けられた処理動作を実行するための命令を処理する前記処理装置の指示に応答する、診断装置を提供する。
【００６８】
さらなる態様から見ると、本発明は、命令に応答して、処理装置によって実行された処理動作を示すトレースデータ要素のストリームを分析するための方法であって、前記処理装置は、対応するメモリアドレスによって識別された複数のメモリロケーションを含むメモリを含み、前記方法は、
前記トレースデータ要素のストリームを受信するステップと、
複数の参照アドレスレジスタに複数の参照アドレスを格納するステップと、
前記処理動作の処理結果を決定するために、前記トレースデータ要素のストリームを分析するステップと、を含み、
前記分析手段は、関連付けられたメモリアドレスに関連付けられた処理動作を実行するための命令を処理する前記処理装置の指示に応答して、
（ａ）（ｉ）前記複数の参照アドレスレジスタのうちのどれが選択された参照アドレスレジスタであるかを示す第１の情報と、（ｉｉ）前記関連付けられたメモリアドレスと前記選択された参照アドレスレジスタに格納された選択された参照アドレスとの差を示す第２の情報と、を示すトレースデータ要素を、前記トレースデータ要素のストリームに配置することと、
（ｂ）前記第２の情報と前記選択された参照アドレスレジスタに格納された前記選択された参照アドレスとに応じて、前記関連付けられたメモリアドレスを決定することを含む、方法を提供する。
【００６９】
本発明の上記および他の目的、特徴および利点は、添付の図面に関連して読まれるべき、例示的な実施形態の以下の詳細な説明から、明らかであろう。
【図面の簡単な説明】
【００７０】
【図１】処理装置、トレース回路および診断装置を概略的に示す図である。
【図２】関連付けられたアドレスと選択された参照アドレスとの間の差が、選択された参照アドレスの対応する部分に対して異なるビット値を有する関連付けられたアドレスの部分として示される、トレースデータ要素の生成を示す図である。
【図３】関連付けられたアドレスと選択された参照アドレスとの間の差が、関連付けられたアドレスと選択された参照アドレスとの間の数値の差として示される、トレースデータ要素の生成を示す図である。
【図４】トレースデータ要素において、関連付けられたメモリアドレスおよび選択された参照アドレスの間の完全な一致が存在することを示す異なる方法を示す図である。
【図５】トレースデータ要素を生成する方法を概略的に示す図である。
【図６】トレースデータ要素のストリームを分析する対応する方法を概略的に示す図である。
【図７】多数の参照アドレスレジスタを含む参照アドレスパイプラインを概略的に示す図である。
【図８】参照アドレスパイプライン内に参照アドレスレジスタを更新するための参照アドレス更新動作を概略的に示す図である。
【図９】パイプライン内の参照アドレスレジスタを、どのように処理動作のシーケンスによって使用される関連付けられたメモリアドレスに応答して更新できるかの例を示す表である。
【図１０】参照アドレスパイプラインの別の例を示す図である。
【図１１】図１０に図示される形式のパイプラインにおける参照アドレスの更新のための参照アドレス更新動作を示す図である。
【図１２】図１０および１１の例を用いて、どのように参照アドレスを更新し得るかの例を示す表である。
【図１３】参照アドレスレジスタ内の参照アドレスの更新の別の例を示す図である。
【図１４】固定の参照アドレスレジスタの使用を示す図である。
【図１５】範囲が限定された参照アドレスレジスタが、関連付けられたアドレス範囲にそれぞれ関連付けられる例を示す図である。
【図１６】ロックダウンシグナルに応答して、特定のアドレスレジスタを動的にロックダウンする技術を示す図である。
【発明を実施するための形態】
【００７１】
図１は、処理回路４、メモリシステム６、およびトレース回路８を含む処理装置２を概略的に示す。メモリシステム６は、処理回路４に代わって、データおよび／または命令を格納するための１つ以上のキャッシュユニットまたはメモリユニットを含む。処理回路４は、命令に応答して、処理動作を実行する。トレース回路８は、処理回路４によって実行される処理動作を示すトレースデータ要素のストリームを生成し、トレース出力ポート１０を介して、トレースデータ要素のストリームを出力する。
【００７２】
処理回路４、メモリシステム６およびトレース回路８は、必ずしも、同じ集積回路で提供される必要はない。例えば、トレース回路８は、いくつかの実施形態において、処理装置２の他の部分とは別々に提供される独立したトレースユニットとして提供され得る。
【００７３】
トレース回路８によって生成されたトレースデータ要素のストリームは、トレースストリームの分析のための診断装置２０によって受信されてもよい。トレースデータ要素は、トレース入力ポート２２において受信される。診断装置２０は、処理回路４によって実行される処理動作の処理結果を決定するために、トレースデータ要素を分析するための診断回路２４を有する。診断回路２４は、トレースデータが生成された時点において、処理回路４によってどの命令が実行されたかの指示へのアクセスを有する。この指示は、例えば、処理回路によってプログラム実行が開始されたメモリシステム６内のメモリアドレスの指示として、提供されてもよい。あるいは、トレース回路８は、トレースストリームにおいて、どの命令が実行されたかの指示を含むことができる。さらに、診断装置２０は、それ自体、処理回路４によって実行されたプログラムコピーを格納するためのメモリ（図１に図示せず）を含んでもよい。診断回路２４は、どの命令が実行されたか、および処理回路４によって実行された処理動作の結果を推察するために、トレースデータ要素によって提供された追加の情報の指示を使用する。トレースデータ要素は、処理装置２から診断装置２０へ直接出力される必要はないが、トレース回路８によってメモリデバイスに格納され、次いで、診断回路２４によって、メモリデバイスからアクセスされてもよい。診断装置２０は、例えば、トレースストリームを分析するようにプログラムされた汎用コンピュータにしてもよい。
【００７４】
トレース回路８は、２つ以上の参照アドレスを格納するための２つ以上の参照アドレスレジスタ３０−１を含む。トレース回路８が、関連付けられたメモリアドレスに関連付けられた処理動作を実行する処理回路４に応じて、トレースデータ要素を生成する場合、トレース回路８は、参照アドレスレジスタ３０−１のうちの１つを選択し、関連付けられたメモリアドレスと選択された参照アドレスレジスタの参照アドレスとの間の差を決定し、参照アドレスレジスタ３０−１のうちのどれが選択された参照アドレスレジスタであったかを示す第１の情報と、関連付けられたメモリアドレスと選択された参照アドレスレジスタの参照アドレスとの間差を、ある場合は示す、第２の情報とを示すトレースデータ要素を生成する。
【００７５】
診断装置２０は、参照アドレスレジスタ３０−２の対応するセットを有する。トレースストリームを分析する場合、診断回路２４は、トレースストリームが生成された時点でのトレース回路８の参照アドレスレジスタ３０−１内にあった参照アドレスに対応する参照アドレスを含むために、参照アドレスレジスタ３０−２を維持する。診断回路が、処理回路４が関連付けられたメモリアドレスに関連付けられた処理動作を実行したという指示に遭遇する場合、診断回路２４は、トレースストリームにおいて、その動作に対応するトレースデータ要素を配置する。診断回路２４は、参照アドレスレジスタ３０−２の間から選択された参照アドレスレジスタを決定するために、トレースデータ要素によって示された第１の情報を使用する。次いで、診断回路２４は、関連付けられたメモリアドレスと選択された参照アドレスレジスタの参照アドレスとの間の差がある場合にはそれを示す第２の情報に応じて、関連付けられたメモリアドレスの値を決定する。
【００７６】
トレース回路８内に２つ以上の参照アドレスレジスタ３０−１と、診断回路２４内に対応する参照アドレスレジスタ３０−２を提供することにより、関連付けられたメモリアドレスが参照アドレスレジスタ３０−１のうちの１つの参照アドレスと一致する、または参照アドレスのうちの１つと類似である可能性が高まるため、トレースデータを大幅に圧縮できる可能性が高まる。以下に、レジスタの両方のセットに共通する特徴を表すために、参照番号３０が、トレース回路８および診断回路２４の両方の参照アドレスレジスタを参照するために使用される。
【００７７】
概して、トレース回路８は、トレースデータ要素を生成するために用いられる場合に、選択された参照アドレスレジスタとして、トレースデータ要素の最も効率的な符号化を生じさせるレジスタ３０−１を選択する。これを行う１つの方法は、各参照アドレスレジスタ３０−１に対応する候補の値を決定することであり、各候補の値は、関連付けられたメモリアドレスとその参照アドレスレジスタ３０−１の対応する参照アドレスとの間の差を示す。次いで、トレース回路８は、選択された参照アドレスレジスタとして、最も効率的な候補の値に対応する参照アドレスレジスタ３０−１を選択できる。最も効率的な候補の値は、例えば、最小のビット数を用いて表すことができる値、またはトレースデータ要素に含まれる場合に、トレースストリーム内のトレースデータの最小の合計数を生じさせる値にしてもよい。トレースデータの最も効率的な符号化を生じさせる参照アドレスレジスタ３０−１を選択することにより、トレースデータの量を低減できる。トレース回路８は、トレースストリームを分析する場合に、診断装置２０がそのレジスタ３０−２からの対応する選択を行うことができるように、レジスタ３０−１が選択された診断装置２０へのシグナルへのトレースデータ要素において第１の情報を含む。
【００７８】
関連付けられたメモリアドレスと選択された参照アドレスとの差は、異なる方法で示し得る。図２は、参照アドレスの対応する部分に対する異なるビット値を有する関連付けられたメモリアドレスの部分として、差が示される例を示す。例えば、トレースデータ要素は、参照アドレスの対応する最下位のビットに対して異なる関連付けられたメモリアドレスの最下位のビットを示してもよく、一方で、参照アドレスの対応するビットと同じ関連付けられたメモリのより上位のビットを省略し得る。例えば、図２において、関連付けられたメモリアドレス０ｘ００００４０１２は、参照アドレスレジスタ０内の参照アドレス０ｘ００００００００とは、０ｘ４０１２の部分が異なる。
【００７９】
トレース回路８は、関連付けられたメモリアドレスを各参照アドレスレジスタ３０−１の参照アドレスと比較し、各参照アドレスレジスタについて候補の差の値を決定する。図２の例において、各候補の差の値は、対応する参照アドレスの対応する部分に対して異なる関連付けられたアドレスの部分を表す。次いで、例えば、最も少ないビットを有する候補の値または最も少ない量のトレースデータを生じさせる候補の値として、最も効率的な候補の値が決定される。次いで、選択された参照アドレスレジスタとして、対応する参照アドレスレジスタが選択される（図２の例において、その対応する候補の値は、最も効率的なトレース符号化を提供するため、参照アドレスレジスタ１が選択される）。参照アドレスレジスタ３０−１のどれが選択された参照アドレスレジスタであるかを示す第１の情報、および、最も効率的な候補の値に対応する第２の情報を含む、トレースデータ要素が生成される。
【００８０】
この例において、トレースデータ要素は、選択された参照アドレスレジスタを示すヘッダ部分４０と、差の値を示すアドレス部分４２とを含む。トレースデータ要素を分析する場合、診断装置２０は、ヘッダ部分４０によって識別される参照アドレスレジスタ３０−２の参照アドレスを用いて関連付けられたメモリアドレス、およびアドレス部分４２によって識別されるアドレスの差を決定できる。あるいは、選択されたアドレスレジスタおよび差の値がトレースデータ要素の共通部分において符号化される、トレース符号化を考案できた。
【００８１】
図３は、アドレス差が、関連付けられたメモリアドレスおよび参照アドレスの間の数値の差として示される別の実施形態を示す。この例において、トレース回路８は、参照アドレスレジスタ３０のそれぞれについて、候補の差の値を決定し、各候補の値は、関連付けられたメモリアドレスおよび参照アドレスのうちの一方を、他方から減算することによって得られる。次いで、最も効率的な候補の値を、最も少ないビットを用いて表すことができる、またはトレースデータの最も少ない量を生じさせる値として選択できる。次いで、対応する参照アドレスレジスタが、トレースデータ要素の生成において使用するために選択された参照アドレスレジスタとして選択される。再び、トレースデータ要素は、ヘッダ部分４０およびアドレス部分４２を含んでもよい、または、選択された参照アドレスレジスタを識別できる符号化、および共通の値を用いて示される差の値を有してもよい。
【００８２】
図３に示されるトレースデータ要素を分析する場合、診断回路２４は、トレースデータ要素のヘッダ部分によって識別される選択された参照アドレスレジスタ３０−２に格納されたアドレスへ、トレースデータ要素に示される差の値を追加することにより、関連付けられたメモリアドレスを決定できる。
【００８３】
時により、関連付けられたメモリアドレスは、参照アドレスのうちの１つと完全に一致し得る。この場合、トレースデータは、図４に示される例等、多くの方法で符号化され得る。例Ａにおいて、トレースデータ要素は、トレースデータ要素のアドレス部分をゼロの値に設定することにより、関連付けられたメモリアドレスおよび選択された参照アドレスレジスタの参照アドレスの間の完全な一致があることを示す。あるいは、例Ｂにおいて、アドレス部分は、完全な一致が存在することを示す識別コードに設定される。
【００８４】
図４の例Ｃに示されるように、完全な一致は、アドレス部分の欠如によって表すこともできる。この場合、ヘッダ部分のみを含むトレースデータ要素は、関連付けられたメモリアドレスが、ヘッダ部分において識別される参照アドレスレジスタの参照アドレスと同じであることを示すことができる。このため、例Ｃにおいて、第２の情報は、いずれかの特定のデータ値ではなく、アドレス部分の欠如によって伝達される。
【００８５】
図４の例Ｄに示されるように、選択された参照アドレスレジスタを識別するアドレスヘッダは、そのアドレスレジスタに格納されたアドレスとの完全な一致が存在することを示すように、修正することもできる。
【００８６】
このため、図４は、関連付けられたメモリアドレスと選択された参照アドレスとの間のゼロの差を多くの方法で示すことが可能であることを示す。各トレースデータ要素にとって、第１の情報および第２の情報を示すための別々の値を含むことは必要ではない。例えば、例ＣおよびＤにおいて、単一のデータ値は、選択された参照アドレスレジスタを識別する第１の情報、およびゼロの差が存在することを識別する第２の情報の両方を提供する。
【００８７】
典型的には、トレース回路８は、処理回路４によって使用されているアドレスに応じて、参照アドレスレジスタ３０−１に格納される参照アドレスを更新するように構成される。所与のプログラム命令シーケンスは、同じまたは類似のアドレスを何度も使用する可能性がある。例えば、命令のシーケンスは、同じ分岐送信先アドレスを繰り返し使用するように何度もループされてもよい、または、命令のシーケンスは、一連の隣接するメモリアドレスに関連付けられたロード／格納動作を生じさせてもよい。関連付けられたメモリアドレスに応じて参照アドレスレジスタ３０−１を選択的に更新することにより、その関連付けられたメモリアドレスは、以下の処理動作のための参照アドレスとして使用でき、そのため、以下の動作に関連付けられたアドレスが、参照アドレスのうちの１つと類似である可能性が高くなる。対応するように、診断回路２４は、トレースストリームから決定された関連付けられたメモリアドレスに基づいて、その参照アドレスレジスタ３０−２の参照アドレスを更新できる。
【００８８】
トレース回路８および診断回路２４は、各関連付けられたメモリアドレス３０によって参照アドレスレジスタを更新する必要がない。トレースストリームを使用可能なメモリスペースの特定のメモリ範囲に圧縮するための能力に集中するため、多数の同様のアドレスを、参照アドレスレジスタに追加することは望ましくない場合がある。その代わりに、メモリアドレススペース全体に分散された多くの参照アドレスによって、関連付けられたメモリアドレスと参照アドレスのうちの１つとの間の比較的小さい差が存在する可能性が高められ得る。従って、トレースデータ要素を生成後、トレース回路８は、一実施形態において、関連付けられたメモリアドレスを、アドレスレジスタ３０−１の既存の参照アドレスと比較するように構成されてもよく、次いで、関連付けられたメモリアドレスと既存の参照アドレスのうちの１つとの間の差が所定の閾値よりも大きくなる場合にのみ、参照アドレスレジスタ３０−１のうちの１つを、関連付けられたメモリアドレスで更新してもよい。診断回路２４は、さらに、同様の比較を実行してもよく、また、トレース回路８に対応するように、参照アドレスレジスタ３０−２を更新してもよい。
【００８９】
参照アドレスレジスタ３０のうちの１つを更新する価値があるかどうかを決定するための閾値を、多くの方法、例えば、参照アドレスの対応する部分に対して異なるビット値を有する関連付けられたメモリアドレスレジスタの部分についての閾値ビット数、または数値差の閾値として、決定してもよい。トレースデータ要素が、関連付けられたメモリアドレスと選択された参照アドレスとの差を示すためのアドレス部分４２を含む場合、閾値は、アドレス部分４２の最小サイズに対応してもよい。例えば、アドレス部分が、４ビットの最小サイズを有する場合、参照アドレスを、４ビット以下によって表すことができるアドレス差だけ、既存の参照アドレスのうちの１つとは異なる関連付けられたメモリアドレス（つまりアドレス差が、１５以下の数値を有する場合）によって更新することを避けることが望ましい場合がある。
【００９０】
トレース回路８および診断回路２４は、デフォルトの参照アドレス値を格納する参照アドレスレジスタ３０で初期化してもよい。例えば、デフォルトの値は、ゼロのアドレス値にすることができる。さらに、周期的に、トレース回路８は、デフォルトの値に参照アドレスレジスタ３０−１をリセットし、トレース同期化パケットを生成してもよい。次いで、診断装置２０は、その参照アドレスレジスタ３０−２をデフォルトの値にリセットすることにより、トレース同期化パケットに応答してもよい。同期化事象は、例えば、診断装置２０が、トレースストリームの開始時において分析を開始する必要があるのではなく、トレース同期化パケットによって示される中間点において、トレースストリームの分析を開始することを可能にする、周期的事象にしてもよい。
【００９１】
図５は、トレースデータ要素のストリームの生成方法を示す。ステップ５０において、処理装置２は、命令に応答して、処理動作の実行を開始する。トレース回路８は、どの命令が処理回路４によって実行中であるかを監視する。ステップ５２において、トレース回路８は、処理回路４が、トレースされる関連付けられたメモリアドレスに関連付けられた処理動作を実行するための命令を実行しているかどうかを決定する（トレースユニットは、関連付けられたメモリアドレスのサブセットのみをトレースしてもよい）。
【００９２】
現在の命令が、トレースされる関連付けられたメモリアドレスに関連付けられる場合、ステップ５４において、トレース回路８は、各参照アドレスレジスタ３０−１についての候補の第２の情報を決定する。候補の第２の情報は、例えば、図２および図３の例で示される形式の異なる差の値にしてもよい。ステップ５６において、トレース回路８は、候補の第２の情報の値の最も効率的なものを決定する。例えば、最も効率的な候補の第２の情報は、最小ビットを使用して表すことができる情報にしてもよい、または最小のトレースデータを生じさせる。次いで、ステップ５８において、トレース回路８は、選択された参照アドレスレジスタとして、最も効率的な候補の第２の情報に対応する参照アドレスレジスタ３０−１を選択する。ステップ６０において、トレース回路８は、第１の情報および第２の情報を示すトレースデータ要素を生成する。第１の情報は、どのアドレスレジスタ３０−１が選択された参照アドレスレジスタであるかを識別する。第２の情報は、最も効率的な候補の第２の情報に対応し、関連付けられたメモリアドレスと選択された参照アドレスレジスタに格納された参照アドレスとの間の差がある場合には示す。次いで、トレースデータ要素が、トレースストリームの一部として出力される。ステップ６２において、トレース回路８は、次いで、関連付けられたメモリアドレスに応じて、少なくとも１つの参照アドレスレジスタ３０−１を選択的に更新するための参照アドレス更新動作を実行する。参照アドレス更新動作は、以下に記載されるように、多くの形式にすることができる。
【００９３】
ステップ５２において、現在の命令が関連付けられたメモリアドレスに関連付けられた命令でないことが決定される場合、ステップ５４〜６２が省略される。トレース回路８は、トレースされるメモリアドレスに関連付けられていない命令の他の種類のトレース動作を実行してもよい。
【００９４】
ステップ６４において、トレース回路８は、処理回路４が別の命令を処理するかどうかを決定する。別の命令が存在する場合、方法はステップ５２に戻り、さらなる命令が存在しない場合、方法は、ステップ６６において終了する。
【００９５】
このため、図５の方法を実行することにより、トレース回路８は、処理回路４の動作を示すトレースデータ要素のストリームを出力できる。関連付けられたメモリアドレスがトレースされる場合、トレースデータ要素は、選択された参照アドレスレジスタのうちの１つ、および関連付けられたメモリアドレスと選択された参照アドレスレジスタのアドレスとの差を識別する。最も効率的な差の情報を提供できる参照アドレスレジスタを選択することにより、トレースデータの量を低減できる。
【００９６】
図６は、トレース回路８によって生成されたトレースデータ要素を分析するための対応する方法を示す。ステップ７０において、診断装置２０は、トレース回路８から直接、またはメモリあるいは分析されるまでトレースデータ要素を格納する他の格納デバイスから、トレースデータ要素のストリームを受信する。さらに、診断装置２０は、トレースストリームが生成された場合に処理回路４によってどのプログラム命令が実行されたかの指示へのアクセスを有する。ステップ７２において、診断回路２４は、トレースされる関連付けられたメモリアドレスに関連付けられた処理動作を実行するための命令を、処理回路４が実行したかどうかを決定する。かかる命令が存在する場合、ステップ７４において、診断回路２４は、その命令に関連付けられたトレースデータ要素を、トレースストリームに配置する。トレースデータ要素は、トレース回路８によって選択された選択参照アドレスレジスタを識別する第１の情報、および、関連付けられたメモリアドレスと選択された参照アドレスレジスタの参照アドレスとの差を示す第２の情報を含む。診断回路２４は、次いで、トレースデータ要素に示された第１の情報に対応するその参照アドレスレジスタ３０−２のうちの１つを選択する。ステップ７６において、診断回路２４は、トレースデータ要素に含まれる第２の情報に基づく関連付けられたメモリアドレス、および選択された参照アドレスレジスタ３０−２に格納された参照アドレスを決定する。このため、診断装置２０は、トレースデータ要素に含まれる第１および第２の情報から、関連付けられたメモリアドレスを再構成できる。ステップ７８において、診断装置２０は、図５のステップ６２に対応して、関連付けられたメモリアドレスに応じて、参照アドレスレジスタ３０−２の参照アドレスを選択的に更新するための参照アドレス更新動作を実行する。異なる参照更新の形式を以下に示す。図１０−１２に関して以下に記載される一例において、診断装置２０によって実行される参照アドレス更新動作は、どの参照アドレスレジスタ３０−２が選択された参照アドレスレジスタであるかに依存し（診断装置２０は、トレースデータ要素に示される第１の情報から、選択された参照アドレスレジスタを識別できる）、さらに、参照アドレスレジスタが更新される方法を制御する閾値の差の値に依存してもよい。
【００９７】
ステップ７２において、指示は、トレースされる関連付けられたメモリアドレスに関連付けられていない命令のものであり、ステップ７４〜７８は、診断回路２４によって省略される。診断回路２４は、こうした命令の他の種類のトレース分析を実行してもよい。
【００９８】
ステップ８０において、診断回路２４は、処理回路４によって実行された別の命令の指示が存在するかどうかを決定する。これ以上の命令が実行されていない場合、方法はステップ８２において終了し、一方で、そうではない場合には、新しい方法がステップ７２に戻る。
【００９９】
図５および６のステップ６２および７８で実行される参照アドレス更新動作の種々の例について説明する。図７の例において、参照アドレスレジスタ３０の少なくともいくつかが、参照アドレスパイプラインを形成するために構成される。パイプラインは、参照アドレスレジスタ３０の全てを含む必要はなく、いくつかの例において、レジスタ３０のサブセットのみを含んでもよい。トレースデータ要素を生成する場合、トレース回路８は、選択された参照アドレスレジスタとして、パイプラインにレジスタのいずれかを選択してもよい。参照アドレスのうちの１つを更新するために、関連付けられたメモリアドレスは、パイプライン内の第１の参照アドレスレジスタに書き込まれ、パイプライン内のアドレスは、パイプライン内の次のレジスタにシフトされる。パイプライン内のレジスタは、パイプラインからシフトされる。
【０１００】
図８は、図７のステップ６２および７８の参照アドレス更新動作を示す。パイプラインにはＮ個の参照アドレスレジスタが存在する。ステップ１００において、１番目から（Ｎ−１）番目の参照アドレスレジスタの参照アドレスは、パイプラインの次の参照アドレスレジスタにシフトされる。次いで、ステップ１０２において、関連付けられたメモリアドレスは、パイプラインの第１の参照アドレスレジスタに書き込まれる。このように、最も最近に関連付けられたメモリアドレスが常にパイプラインの最初にあり、パイプライン内の連続レジスタは、より以前に関連付けられたメモリアドレスを段階的に含む。
【０１０１】
図９は、２つのアドレスレジスタ、アドレスレジスタ０およびアドレスレジスタ１を含むパイプラインについて、この参照アドレス更新動作の一例を示す表を示す。図９は、一連の６つの関連付けられたメモリアドレスの６つのトレースデータ要素の生成を示す。
【０１０２】
両方のアドレスレジスタは、最初に、デフォルトのアドレス０ｘ００００００００を格納する。関連付けられたアドレス０ｘ０００００００１に応答して、これらのレジスタのうちの１つ（例：レジスタ０）が、選択された参照アドレスレジスタとして選択され、選択されたアドレスレジスタ、および選択されたアドレスレジスタのアドレスの対応する部分とは異なる関連付けられたメモリアドレスの部分を示す選択されたアドレス値０ｘ０１を示す、トレースデータ要素が生成される。次いで、関連付けられたメモリアドレスがアドレスレジスタ０に配置され、アドレスレジスタ０に格納される値がアドレスレジスタ１にシフトされる。
【０１０３】
同様に、図９の各ステップにおいて、最も効率的なトレースデータ要素を生じさせるアドレスレジスタが選択され、トレースデータ要素が選択されたアドレスレジスタを用いて生成され、次いで、関連付けられたメモリアドレスがパイプラインにシフトされる。例えば、図９のステップ４および５において、関連付けられたメモリアドレスは、アドレスレジスタ０に格納されるアドレスよりもアドレスレジスタ１に格納されるアドレスにより類似しているため、この場合、選択された参照アドレスとしてアドレスレジスタ１が選択される。
【０１０４】
診断回路２４がトレースストリームを分析する場合、トレース回路８内のレジスタ３０−１に対応するように診断回路２４のアドレスレジスタ３０−２にストアされた値が変化するように、トレース回路８と同様にアドレスレジスタ３０−２を更新する。
【０１０５】
図１０〜１２は、トレース回路８および診断回路２４によって使用される参照アドレスパイプラインの別の例を示す。再び、パイプラインは、Ｎ個の参照アドレスレジスタ３０を含む。この例において、パイプラインが更新される方法は、トレースデータ要素を生成するための選択された参照アドレスレジスタとしてどの参照アドレスレジスタが選択されたかに依存する。各参照アドレスレジスタ３０は、参照アドレスレジスタ３０が、パイプラインの先行するレジスタに格納されたアドレスによって更新されるかどうか（またはパイプラインの第１の参照アドレスレジスタの場合、関連付けられたメモリアドレスによって更新されるかどうか）を制御する対応するイネーブルシグナル１０５に関連付けられる。関連付けられたメモリアドレスがトレースされる場合、および選択された参照アドレスレジスタがパイプラインの第１の参照アドレスレジスタではない場合、選択された参照アドレスレジスタに対する第２の参照アドレスレジスタのためのイネーブルシグナルは、これらのレジスタがパイプラインの先行するレジスタに格納されたアドレスをキャプチャするように、「真」の値に設定される。選択された参照アドレスレジスタよりもパイプラインのさらに上である参照アドレスレジスタは、対応する参照アドレスが変化しないように、イネーブルシグナルを「偽」の値に設定する。第１の参照アドレスレジスタは、新しい関連付けられたメモリアドレスに選択的に更新される。
【０１０６】
例えば、図１０において、パイプライン内の４番目のアドレスレジスタは選択された参照アドレスレジスタである。この場合、パイプラインの２番目から４番目のレジスタ３０のイネーブルシグナルは、２番目から４番目のレジスタ３０が、１番目から３番目のレジスタ３０に以前に格納されたアドレスをそれぞれキャプチャするように、「真」の値に設定される。さらに、第１の参照アドレスレジスタのためのイネーブルシグナルは、第１の参照アドレスレジスタが関連付けられたメモリアドレスをキャプチャするように、「真」の値に設定される。対照的に、パイプライン内の５番目から７番目の参照アドレスレジスタは、これらのレジスタに格納されるアドレスが変化しないように、イネーブルシグナルを「偽」の値に設定する。
【０１０７】
図１０の例において、同等に効率的なトレースデータを生成するために１つよりも多いアドレスレジスタを使用できる場合、トレース回路８は、選択されたアドレスレジスタとして、パイプラインの最後に最も近いレジスタ（つまり、最も長い期間、パイプラインに存在するアドレス）を選択する。このため、最後のアドレスレジスタが優先され、以降、最後から２番目のレジスタ、最後から３番目のレジスタ、のようになる。これらのアドレスが同等に効率的なトレースデータを生成する場合に、より新しい参照アドレスにより古い参照アドレスを優先的に選択することで、トレース回路８は、パイプライン内の最も有用な参照アドレスを維持する傾向がある。
【０１０８】
パイプラインの第１の参照アドレスレジスタが、トレースデータ要素の生成に使用される選択された参照アドレスレジスタである場合、参照アドレスの更新のための特別のケースが存在し得る。この場合、トレース回路８または診断回路２４は、関連付けられたメモリアドレスと第１の参照アドレスレジスタの参照アドレスとの間の差を決定できる。この差が所与の閾値を上回らない場合、第１の参照アドレスレジスタは、他のアドレスレジスタを変化させないように更新される。一方で、差が閾値を上回る場合、パイプラインの最後から２番目のアドレスレジスタは、パイプラインの先行するレジスタに格納されるアドレスを用いてそれぞれ更新され、関連付けられた参照アドレスは、第１のアドレスレジスタに書き込まれる。この機構は、パイプラインシフトが多くなりすぎることで、全アドレスレジスタの値が類似しないようにすることにより、メモリスペースのアドレス範囲全体におけるアドレスのよりよい拡散を実現する。
【０１０９】
図１１は、アドレスレジスタのサブセットが、図１０に示されるように参照アドレスパイプラインを形成する場合に、図５および６のステップ６２および７８において実行され得る参照アドレス更新動作の一例を示す。ステップ１１０において、トレース回路８または診断回路２４は、パイプライン内のＮ個のレジスタのどれが選択された参照アドレスレジスタであるかを決定する。選択されたアドレスレジスタは、パイプラインのＭ番目のレジスタである（１≦Ｍ≦Ｎ）。トレース回路８または診断回路２４は、さらに、Ｍが１と等しいかどうかを決定する。
【０１１０】
Ｍが１と同等にない場合、ステップ１１２において、１番目から（Ｍ−１）番目の参照アドレスレジスタの参照アドレスは、パイプラインの次のレジスタにシフトされる。次いで、方法はステップ１１４に進み、ここで、関連付けられたメモリアドレスは、パイプライン内の第１のレジスタに書き込まれる。
【０１１１】
一方、Ｍ＝１の場合、ステップ１１６において、関連付けられたメモリアドレスとパイプライン内の第１のレジスタの参照アドレスとの間の差が、所与の閾値よりも大きいかどうかを決定する。差が閾値以下である場合、方法はステップ１１４に進み、ここで、関連付けられたメモリアドレスは、パイプラインの他のアドレスレジスタ内のアドレスを修正せずに、第１のアドレスレジスタに書き込まれる。ステップ１１６において、関連付けられたメモリアドレスと第１の参照アドレスとの間の差が閾値よりも大きい場合、ステップ１１８において、ステップ１１４において関連付けられたメモリアドレスを第１のレジスタに書き込む前に、パイプラインの１番目から（Ｎ−１）番目のレジスタの参照アドレスがパイプラインの次のレジスタにシフトされる。
【０１１２】
要するに、図１１の参照アドレス更新動作は、第１の参照アドレスレジスタ以外の参照アドレスレジスタを選択された参照アドレスレジスタとして使用する場合に、使用された参照アドレスがパイプラインから除去され、パイプラインのいずれかの先行するアドレスが一段上にシフトされ、関連付けられたメモリアドレスがパイプラインの１番目の段に追加されることを確実にする。この技術により、使用された参照アドレスが、関連付けられたメモリアドレスによって置換され、このため、複数の同様のアドレスがパイプラインに存在することを回避するが、それにもかかわらず、最も最近に追加された参照アドレスがより以前の参照アドレスよりも長い間パイプラインに保持されるように、関連付けられたメモリアドレスがパイプラインの最初に追加されることを確実にする。第１の参照アドレスレジスタが選択された参照アドレスレジスタである場合、パイプライン内のアドレスは、第１の参照アドレス値が、所定の量よりも多く、関連付けられたメモリアドレスとは異なる場合にのみ、一段上にシフトされる。これは、さらに、参照アドレスレジスタがいくつかの類似の参照アドレス値を含まないようにすることを確実にするために役立つ。
【０１１３】
図１２は、図１０および１１の技術を、２つの参照アドレスレジスタを有するパイプラインに適用する例を示す表を示す。この例において、トレースデータ要素のアドレスの最小サイズが８ビットである（つまり２つの１６進数の数字、例えば、０ｘ０１の値は、最小のアドレス部分サイズを有する）と想定される。従って、図１１のステップ１１６に使用される所定の閾値は、８ビットの最小サイズに対応する。閾値は、８ビットの閾値部分サイズ、または、２５５の閾値の数値の差（８ビットを使用して表すことができる最大の値）として指定され得る。
【０１１４】
図１２の最初の２つのステップにおいて、パイプラインの第１の参照アドレスレジスタ（参照アドレスレジスタ０）は、選択された参照アドレスレジスタであり、関連付けられたメモリアドレスとパイプライン内の第１の参照アドレスレジスタの選択された参照アドレスとの差は、（ステップ１の差０ｘ０１およびステップ２の０ｘ２１は、最小部分サイズを用いて表すことができるため）所定の閾値以下である。従って、ステップ１および２において、パイプライン内のアドレスは、一段上にシフトされない。代わりに、アドレスレジスタ０の参照アドレスは、図１１のステップ１１６および１１４の後に、関連付けられたメモリアドレスに上書きされる。
【０１１５】
しかしながら、図１２のステップ３において、参照アドレスレジスタ０は、選択された参照アドレスレジスタであり、関連付けられたメモリアドレスと参照アドレスレジスタ０の値との間の差０ｘ３０００００００は、閾値よりも大きいため、この場合、パイプラインの値は、図１１のステップ１１８に応じて一段上にシフトされ、関連付けられたメモリアドレスは、参照アドレスレジスタ０に書き込まれる。
【０１１６】
次いで、図１２のステップ４および５において、参照アドレスレジスタ１は、選択された参照アドレスレジスタである。この場合、参照アドレスレジスタ０に格納される値は、（図１１のステップ１１２に従い）参照アドレスレジスタ１に格納されるようにシフトされ、関連付けられたメモリアドレスは、（図１のステップ１１４に従い）参照アドレスレジスタ０に書き込まれる。
【０１１７】
図１２のステップ６において、第１のアドレスレジスタのアドレス値の対応する部分に対して異なる関連付けられたメモリアドレスの部分が０ｘ０８であるため、再び、パイプラインにはシフトが存在せず、これは、再び、８ビットの閾値部分サイズを超えない。
【０１１８】
図１２に示される各ステップにおいて、選択されたアドレスレジスタおよび関連付けられたメモリアドレスと選択されたアドレスレジスタ内のアドレス値との差を識別するトレースデータ要素が生成される。トレースデータの分析時、診断回路２４は、トレース回路８に対応するように、アドレスレジスタ内のアドレスを修正する。
【０１１９】
図９および１２の例は、関連付けられたアドレスと選択された参照アドレスとの間のアドレス差が、参照アドレスの対応する部分に対する異なるビット値を有する関連付けられたアドレスの部分によって示される場合を示すが、この技術は、トレースデータ要素が、関連付けられたアドレスおよび選択された参照アドレスのうちの一方を他方から減算することによって得られた数値の差の値として、アドレス差を示す場合にも適用できることが考えられよう。
【０１２０】
図１３は、参照アドレスレジスタ３０内で参照アドレスを更新する別の例を示す。図７および１０に示されるように、ある参照アドレスレジスタから別のものへとアドレスを物理的にシフトするのではなく、関連付けられたメモリアドレスを、他の参照アドレスレジスタを変化させずに、選択された犠牲参照アドレスレジスタへ書き込んでもよい。トレース回路８または診断回路２４は、犠牲参照アドレスレジスタ、例えば、使用頻度が最も低い、ラウンドロビン、またはランダムの犠牲選択アルゴリズムを選択するために、異なる種類の犠牲選択アルゴリズムを実行できる。
【０１２１】
例えば、アドレスレジスタ３０は、表またはキャッシュのような構造を形成すると考えられ得る。最も最近に更新されたレジスタを示すために、トレース回路８または診断回路２４によってポインタを維持できる。犠牲レジスタを選択する場合、トレース回路８または診断回路２４は、ポインタと共に現在示されているレジスタの後のレジスタを選択できる（表の最後のレジスタが、現在、ポインタと共に示されている場合、トレース回路８または診断回路２４は、表の第１のレジスタを選択できる）。トレース回路８または診断回路２４は、次いで、関連付けられたメモリアドレスによって、選択された犠牲レジスタを更新でき、新たに選択された犠牲レジスタを示すために、ポインタを修正できる。関連付けられたメモリアドレスが参照アドレスレジスタ３０へ書き込まれる毎に、この犠牲選択アルゴリズムを繰り返すことにより、トレース回路８または診断２４は、最も以前に更新されたアドレスレジスタが次に犠牲として選択されるように、周期シーケンスにおいてレジスタを更新する。
【０１２２】
関連付けられたメモリアドレスが、選択された犠牲参照アドレスレジスタに書き込まれる、図１３の実施形態は、多くの参照アドレスレジスタが存在する場合において、パイプライン実施形態よりも効率的であってもよい。
【０１２３】
図１４は、多数の更新可能な参照アドレスレジスタ１２０（図７〜１２に従うパイプラインの一部または図１３に示されるようにキャッシュ状の構造であってもよい）と共に、更新ができない少なくとも１つの固定の参照アドレスレジスタ１２２も存在する、別の例を示す。固定の参照アドレスレジスタ１２２は、事前定義された参照アドレス値を格納する。例えば、固定の参照アドレスレジスタは、所与のプログラム内において頻繁に使用されることがわかっているアドレスを格納するように構成できる。
【０１２４】
図１５は、参照アドレスレジスタのいくつかが、そのアドレス範囲内の関連付けられたメモリアドレスによってのみ更新できるように、特定のアドレス範囲に関連付けられる、別の例を示す。トレースされている関連付けられたメモリアドレスが特定のレジスタについて指定されたアドレスの範囲外である場合、そのレジスタは、レジスタ更新プロセスから除外される。これは、例えば、メモリスペースの異なる範囲に関連付けられた参照アドレスを幅広く選択できることを確実にするために使用できる。
【０１２５】
図１６は、トレース回路８および診断回路２４が更新されないように、特定のレジスタを動的にロックダウンするための外部ロックダウンシグナルに応答する、例を示す。例えば、ロックダウンされたレジスタは、図７〜１２に示されるように、パイプラインから除外されてもよい、または、犠牲選択アルゴリズムから除外されてもよい。このため、特定の参照アドレスレジスタ３０が、以下の命令セットのために有用であることが知られている参照アドレスを格納している場合、参照アドレスが参照アドレスレジスタ３０から取り除かれないように、ロックダウンシグナルを提供できる。
【０１２６】
診断回路２４が、トレース回路８に対応するように、そのレジスタ３０−２をロックできるようにするために、対応するロックダウンシグナルを、トレースデータ要素を分析する場合に、診断回路２４に提供し得る。あるいは、トレース回路８は、診断回路２４が、トレース回路のレジスタ３０−１へ対応するようにそのレジスタ３０−２をロックできるように、トレースストリームに、ロックダウンシグナルのどの値が使用されたかを示す情報を含み得る。
【０１２７】
参照アドレスレジスタを更新するための図７〜１６に示された種々の技術を、組み合わせて使用してもよい、例えば、固定の所定の値を格納するまたは特定の範囲のアドレスに関連付けられた少なくとも１つの他のレジスタがパイプライン内に提供された、レジスタのサブセットが存在し得ることが理解されよう。
【０１２８】
本発明の例示的な実施形態について、添付の図面を参照しながら本明細書に詳細に説明してきたが、本発明はこれらの正確な実施形態には制限されず、添付の特許請求の範囲に記載される本発明の範囲から逸脱せずに、当業者により、種々の変更および修正がなされ得ることを理解されたい。
【符号の説明】
【０１２９】
２  処理装置
４  処理回路
６  メモリシステム
８  トレース回路
１０  トレース出力ポート
２０  診断装置
２２  トレース入力ポート
２４  診断回路
【図１】
0005680511.tif 000002
【図２】
0005680511.tif 000003
【図３】
0005680511.tif 000004
【図４】
0005680511.tif 000005
【図５】
0005680511.tif 000006
【図６】
0005680511.tif 000007
【図７】
0005680511.tif 000008
【図８】
0005680511.tif 000009
【図９】
0005680511.tif 000010
【図１０】
0005680511.tif 000011
【図１１】
0005680511.tif 000012
【図１２】
0005680511.tif 000013
【図１３】
0005680511.tif 000014
【図１４】
0005680511.tif 000015
【図１５】
0005680511.tif 000016
【図１６】
0005680511.tif 000017