(57)【要約】【課題】データ処理装置に含まれる部品をトレースする場合のトレース要素生成のためのトレースモジュールを提供する。【解決手段】本トレースモジュールは、データ処理装置の１または複数の部品からアーキテクチャ・ステート・サブセットの変化を示す入力信号の受信に応じて、その変化を示す複数のトレース要素を生成し、トレース要素の受け手がアーキテクチャ・ステートのサブセットを後で再構築できるようにするトレース生成ユニットと、先に生成されたトレース要素からアーキテクチャ・ステートを同定するトレース生成ユニットが管理するテーブルとを含む。トレース生成ユニットはテーブルを参照することによってアーキテクチャ・ステートの変化が受け手によって導出できるかどうかを判断することができるため、受け手によって導出できないアーキテクチャ・ステートの変化に関するトレース要素だけを生成すればよい。【選択図】　　　図２
2004038981.tif 000002
【特許請求の範囲】
【請求項１】
トレースモジュールであって、前記トレースモジュールがつながれているデータ処理装置のアーキテクチャ・ステートのサブセットにおける変化をトレースするように動作し：
トレース生成ユニットであって、前記データ処理装置の１または複数の部品からアーキテクチャ・ステートの前記サブセットにおける変化を示す入力信号を受信し、１または複数の前記入力信号から、前記変化を示す複数のトレース要素を生成し、それによって前記トレース要素の受け手がアーキテクチャ・ステートの前記サブセットを後で再構築することを可能とするトレース生成ユニット；および
先に生成されたトレース要素から導出できるアーキテクチャ・ステートを同定するための、前記トレース生成ユニットが管理するテーブルであって、前記トレース生成ユニットが前記テーブルを参照することによって前記トレース生成時にどのトレース要素を生成するかを決定するテーブル；
を含むトレースモジュール。
【請求項２】
請求項１に記載のトレースモジュールであって、アーキテクチャ・ステートの前記サブセットにはアーキテクチャ・ステートの複数の項目が含まれており、前記テーブルはアーキテクチャ・ステートの各項目に付随して１または複数のエントリを有しており、前記トレース生成ユニットは、アーキテクチャ・ステートの前記項目が前記受け手によって導出可能なときは、各エントリ中に表示を行なうように動作するトレースモジュール。
【請求項３】
請求項２に記載のトレースモジュールであって、１または複数の前記入力信号の受信に応答して、前記トレース生成ユニットが、アーキテクチャ・ステートの１つの項目に付随する各エントリ中に表示がなされているかどうかを判断することによって、アーキテクチャ・ステートのその項目の前記変化を前記受け手が導出できるかどうかを判断するように動作するトレースモジュール。
【請求項４】
請求項２に記載のトレースモジュールであって、１または複数の前記入力信号の受信に応答して、前記トレース生成ユニットが、アーキテクチャ・ステートの１つの項目に前記変化をもたらすために用いられたアーキテクチャ・ステートの複数項目に付随する各エントリ中に表示がなされているかどうかを判断することによって、アーキテクチャ・ステートのその項目の前記変化を前記受け手が導出できるかどうかを判断するトレースモジュール。
【請求項５】
請求項２に記載のトレースモジュールであって、前記トレース生成ユニットが、前記受け手が導出できないアーキテクチャ・ステートの前記項目の前記変化を示す複数のトレース要素を生成し、またアーキテクチャ・ステートのその項目に付随する各エントリ中に表示を行なうように動作するトレースモジュール。
【請求項６】
請求項１に記載のトレースモジュールであって、アーキテクチャ・ステートの各項目が１つのアーキテクチャ・ステート値を有しており、また前記トレース生成ユニットが前記アーキテクチャ・ステート値の前記変化を示す複数のトレース要素を生成するように動作するトレースモジュール。
【請求項７】
請求項６に記載のトレースモジュールであって、前記アーキテクチャ・ステート値の前記変化がアーキテクチャ・ステートの前記項目に新しい値を取らせ、前記トレース生成ユニットは、前記新しい値が前記受け手によって導出できないときには、前記新しい値を示す複数のトレース要素を生成し、またアーキテクチャ・ステートのその項目に付随する各エントリ中に表示を行なうように動作するトレースモジュール。
【請求項８】
請求項１に記載のトレースモジュールであって、アーキテクチャ・ステートの前記サブセットが複数のレジスタの内容を含み、前記テーブルが前記複数のレジスタの各々に付随して１つのレジスタ・エントリを有しているトレースモジュール。
【請求項９】
請求項８に記載のトレースモジュールであって、１つのレジスタの内容が新しい値へ変化したことを示す入力信号に応答して、前記トレース生成ユニットが、前記新しい値が前記受け手によって導出できるときは、そのレジスタに付随する各エントリ中に表示を行なうように動作するトレースモジュール。
【請求項１０】
請求項８に記載のトレースモジュールであって、１つのレジスタの内容が新しい値へ変化したことを示す入力信号に応答して、前記トレース生成ユニットが、前記新しい値が前記受け手によって導出できないときは、前記新しい値を示す複数のトレース要素を生成し、またそのレジスタに付随する各エントリ中に表示を行なうように動作するトレースモジュール。
【請求項１１】
請求項８に記載のトレースモジュールであって、前記複数のレジスタが複数のソースレジスタおよび複数のあて先レジスタを含んでおり、１つのあて先レジスタの内容が１または複数の前記ソースレジスタの内容に依存して新しい値へ変化したことを示す入力信号に応答して、前記トレース生成ユニットが、前記新しい値が前記受け手によって導出できないときは、前記新しい値を示す複数のトレース要素を生成し、また前記あて先レジスタに付随する各エントリ中に表示を行なうように動作するトレースモジュール。
【請求項１２】
請求項８に記載のトレースモジュールであって、前記複数のレジスタが複数のソースレジスタおよび複数のあて先レジスタを含んでおり、１つのあて先レジスタの内容が１または複数の前記ソースレジスタの内容に依存して新しい値へ変化したことを示す入力信号に応答して、前記トレース生成ユニットが、前記新しい値が前記受け手によって導出できるときは、前記あて先レジスタに付随する各エントリ中に表示を行なうように動作するトレースモジュール。
【請求項１３】
請求項８に記載のトレースモジュールであって、前記複数のレジスタが複数のあて先レジスタを含んでおり、前記アーキテクチャ・ステートが更に複数のメモリアドレスの内容を含んでおり、１つのあて先レジスタの内容が１または複数の前記メモリアドレスの内容に依存して新しい値へ変化したことを示す入力信号に応答して、前記トレース生成ユニットが、前記１または複数のメモリアドレスが前記受け手によって導出できないときは、前記１または複数のメモリアドレスを示す複数のトレース要素を生成し、また前記１または複数のメモリアドレスに付随する各エントリ中に表示を行なうように動作するトレースモジュール。
【請求項１４】
請求項８に記載のトレースモジュールであって、前記複数のレジスタが複数のあて先レジスタを含んでおり、前記アーキテクチャ・ステートが更に複数のメモリアドレスの内容を含んでおり、あて先レジスタの内容が１または複数の前記メモリアドレスの内容に依存して新しい値へ変化したことを示す入力信号に応答して、前記トレース生成ユニットが、前記新しい値が前記受け手によって導出できるときは、前記１または複数のメモリアドレスに付随する各エントリ中に表示を行なうように動作するトレースモジュール。
【請求項１５】
請求項１に記載のトレースモジュールであって、アーキテクチャ・ステートの前記サブセットには複数のメモリアドレスの内容が含まれており、前記テーブルが前記複数のメモリアドレスの各々に付随して１つのアドレス・エントリを有しているトレースモジュール。
【請求項１６】
請求項１５に記載のトレースモジュールであって、１つのメモリアドレスの内容が新しい値へ変化したことを示す入力信号に応答して、前記トレース生成ユニットが、前記新しい値が前記受け手によって導出できるときは、そのメモリアドレスに付随する各アドレス・エントリ中に表示を行なうように動作するトレースモジュール。
【請求項１７】
請求項１５に記載のトレースモジュールであって、１つのメモリアドレスの内容が新しい値に変化したことを示す入力信号に応答して、前記トレース生成ユニットが、前記新しい値が前記受け手によって導出できないときは、前記新しい値を示す複数のトレース要素を生成し、またそのメモリアドレスに付随する各アドレス・エントリ中に表示を行なうように動作するトレースモジュール。
【請求項１８】
請求項１５に記載のトレースモジュールであって、１つのメモリアドレスの内容が１または複数のレジスタに依存して新しい値へ変化したことを示す入力信号に応答して、前記トレース生成ユニットが、前記新しい値が前記受け手によって導出できるときは、そのメモリアドレスに付随する各アドレス・エントリ中に表示を行なうように動作するトレースモジュール。
【請求項１９】
請求項１５に記載のトレースモジュールであって、１つのメモリアドレスの内容が１または複数のレジスタに依存して新しい値へ変化したことを示す入力信号に応答して、前記トレース生成ユニットが、前記新しい値が前記受け手によって導出できないときは、前記新しい値を示す複数のトレース要素を生成し、またそのメモリアドレスに付随する各アドレス・エントリ中に表示を行なうように動作するトレースモジュール。
【請求項２０】
請求項１９に記載のトレースモジュールであって、１つのメモリアドレスの内容が新しい値へ変化したことを示す入力信号に応答して、前記トレース生成ユニットが、前記メモリアドレスが前記受け手によって導出できないときは、前記メモリアドレスを示す複数のトレース要素を生成し、またそのメモリアドレスを与える各レジスタ・エントリ中に表示を行なうように動作するトレースモジュール。
【請求項２１】
請求項１５に記載のトレースモジュールであって、前記テーブルが１または複数のテーブルを含んでおり、各テーブルがベースメモリアドレスに付随する１つのベースアドレス・エントリと、前記ベースアドレスから論理的にオフセットされたメモリアドレスのレンジの各々に付随する１つのアドレス・エントリとを含んでおり、前記トレース生成ユニットが、１つのメモリアドレスの内容が新しい値に変化したことを示す入力信号に応答して、前記メモリアドレスが前記レンジのうちの１つに含まれるかどうかを判断し、もしそうであれば、そのメモリアドレスに付随する前記アドレス・エントリ中に表示を行なうように動作するトレースモジュール。
【請求項２２】
請求項２１に記載のトレースモジュールであって、前記トレース生成ユニットが、１つのメモリアドレスの内容が新しい値に変化したことを示す入力信号に応答して、前記メモリアドレスが前記レンジのうちの１つに含まれるかどうかを判断し、もしそうでなければ、前記テーブルの１つの中のすべてのエントリをクリアし、そのテーブルのベースアドレス・エントリを更新し、前記新しい値を示す複数のトレース要素を生成して、前記メモリアドレスに付随する前記アドレス・エントリ中に表示を行なうように動作するトレースモジュール。
【請求項２３】
請求項２２に記載のトレースモジュールであって、前記ベースアドレス・エントリが論理メモリアドレスの少なくとも一部を記憶するように構成されているトレースモジュール。
【請求項２４】
請求項１に記載のトレースモジュールであって、前記テーブル中のエントリが定期的にクリアされるトレースモジュール。
【請求項２５】
請求項１に記載のトレースモジュールであって、前記トレース生成ユニットが、実行されている命令を示す命令トレース要素を生成するように動作するトレースモジュール。
【請求項２６】
請求項１に記載のトレースモジュールであって、アーキテクチャ・ステートの前記サブセットにおける前記変化が前記データ処理装置による１つのシーケンス外命令の実行を引き起こすようになっており、また前記トレース生成ユニットは実行すべき前記シーケンス外命令を示す分岐トレース要素を生成するように動作するトレースモジュール。
【請求項２７】
請求項１に記載のトレースモジュールであって、前記受け手がトレース解析ツールであり、前記テーブルが前記トレース解析ツールによって導出可能なアーキテクチャ・ステートの前記サブセットを指定するトレースモジュール。
【請求項２８】
請求項２７に記載のトレースモジュールであって、前記トレース解析ツールに対して、前記データ処理装置によって実行すべきシーケンシャル命令の表示が与えられるトレースモジュール。
【請求項２９】
請求項２８に記載のトレースモジュールであって、各々のシーケンシャル命令がそれに付随して１つのアドレスを有しており、前記トレース生成ユニットが、前記データ処理装置に前記シーケンス外命令を実行させるアーキテクチャ・ステートの前記項目における前記変化をもたらすために用いられたアーキテクチャ・ステートの複数項目に付随する各エントリ中に表示がなされているかどうかを判断することによって、前記シーケンス外命令のアドレスが前記トレース解析ツールによって導出できるかどうかを判断するように動作するトレースモジュール。
【請求項３０】
請求項２８に記載のトレースモジュールであって、前記テーブルが、前記データ処理装置によって実行すべき前記シーケンシャル命令を指定するトレースモジュール。
【請求項３１】
請求項３０に記載のトレースモジュールであって、前記トレース生成ユニットが、実行されている命令を示す前記入力信号に応答して、前記トレース解析ツールが前記テーブルを参照することによって実行される前記命令を決定できるかどうかを判断し、前記命令が前記トレース解析ツールによって導出できないときは、前記命令を示す複数のトレース要素を生成するように動作するトレースモジュール。
【請求項３２】
トレースモジュールであって、前記トレースモジュールがつながれているデータ処理装置のプログラムカウンタ値の変化をトレースするように動作し、前記データ処理装置は命令のシーケンスを実行するように構成されており、前記プログラムカウンタ値は前記データ処理装置によって実行すべき次の命令を示しており、前記トレースモジュールは：
トレース生成ユニットであって、前記データ処理装置の１または複数の部品から、実行されている現在の命令を示す入力信号を受信し、前記入力信号から、前記現在の命令に付随するデータを示すデータトレース要素およびプログラムカウンタ値の前記変化を示す分岐トレース要素を選択的に生成するように動作するトレース生成ユニット；および
前記現在の命令が前記プログラムカウンタ値に非シーケンシャルな変化をもたらす間接的分岐命令である場合は、前記トレース生成ユニットは前記データトレース要素あるいは前記分岐トレース要素のいずれかの生成を抑制するように動作するが、プログラムカウンタ値の前記変化は生成されたトレース要素から導出可能であるため、前記トレース要素の受け手は生成されたトレース要素からプログラムカウンタ値の前記変化を後で再構築することができるようになり、前記データ処理装置によって実行すべき前記次の命令を決定することができる；
を含むトレースモジュール。
【請求項３３】
請求項３２に記載のトレースモジュールであって、前記トレース生成ユニットが前記データトレース要素の生成を抑制するように動作し、プログラムカウンタ値の前記変化が前記分岐トレース要素から前記受け手によって導出できるトレースモジュール。
【請求項３４】
請求項３２に記載のトレースモジュールであって、前記トレース生成ユニットが前記分岐トレース要素の生成を抑制するように動作し、プログラムカウンタ値の前記変化が前記データトレース要素から前記受け手によって導出できるトレースモジュール。
【請求項３５】
請求項３２に記載のトレースモジュールであって：
プログラムカウンタ値の前記変化が先に生成されたトレース要素から導出できるかどうかを指定するために、前記トレース生成ユニットによって管理されるテーブルであって、前記トレース生成ユニットが前記テーブルを参照することによって、前記トレース生成時にどのトレース要素を生成すべきか決定するテーブル；
を含むトレースモジュール。
【請求項３６】
請求項３５に記載のトレースモジュールであって、前記トレース生成ユニットが、プログラムカウンタ値の前記変化が前記受け手によって導出できると判断されたときは、前記データトレース要素および前記分岐トレース要素の生成を抑制するように動作するトレースモジュール。
【請求項３７】
請求項３２に記載のトレースモジュールであって、前記トレース生成ユニットが、前記抑制を表示するプレースホルダを生成するように動作するトレースモジュール。
【請求項３８】
請求項３２に記載のトレースモジュールであって、前記トレース生成ユニットが、前記入力信号の受信に応答して、前記データ処理装置によって命令が実行されていることを示す命令トレースを生成するトレースモジュール。
【請求項３９】
請求項１に記載の前記トレースモジュールを含むデータ処理装置。
【請求項４０】
データ処理装置のアーキテクチャ・ステートのサブセットにおける変化をトレースする方法であって：
前記データ処理装置の１または複数の部品から、アーキテクチャ・ステートの前記サブセットにおける変化を示す入力信号を受信する工程；
先に生成されたトレース要素から導出可能なアーキテクチャ・ステートを同定するテーブルを参照することによって、生成すべきトレース要素を決定する工程；および
前記変化を示す複数のトレース要素を生成して、前記トレース要素の受け手が後でアーキテクチャ・ステートの前記サブセットを再構築できるようにする工程；
を含む方法。
【請求項４１】
請求項４０に記載の方法であって、アーキテクチャ・ステートの前記サブセットがアーキテクチャ・ステートの複数の項目を含んでおり、前記テーブルがアーキテクチャ・ステートの各項目に付随して１または複数のエントリを有しており、前記方法が：
アーキテクチャ・ステートの前記項目が前記受け手によって導出できるときは、各エントリ中に表示を行なう工程；
を含む方法。
【請求項４２】
請求項４１に記載の方法であって、前記決定工程が：
アーキテクチャ・ステートのその項目に付随する各エントリ中に表示がなされているかどうかを判断する工程；
を含んでいる方法。
【請求項４３】
請求項４１に記載の方法であって、前記決定工程が：
アーキテクチャ・ステートの前記項目に前記変化をもたらすために用いられたアーキテクチャ・ステートの複数項目に付随する各エントリ中に表示がなされているかどうかを判断する工程；
を含んでいる方法。
【請求項４４】
請求項４１に記載の方法であって、前記生成工程が：
アーキテクチャ・ステートの前記項目の前記変化が前記受け手によって導出できないことを示す複数のトレース要素を生成する工程を含んでおり、前記方法が：
アーキテクチャ・ステートのその項目に付随する各エントリ中に表示を行なう工程；
を含む方法。
【請求項４５】
請求項４０に記載の方法であって、アーキテクチャ・ステートの各項目がアーキテクチャ・ステート値を含んでおり、前記生成工程が：
前記アーキテクチャ・ステート値の前記変化を示す複数のトレース要素を生成する工程；
を含んでいる方法。
【請求項４６】
請求項４５に記載の方法であって、前記アーキテクチャ・ステート値の前記変化がアーキテクチャ・ステートの前記項目に新しい値をもたらし、前記生成工程が：
前記新しい値が前記受け手によって導出できないときは、前記新しい値を示す複数のトレース要素を生成する工程を含んでおり、前記方法が：
アーキテクチャ・ステートのその項目に付随する各エントリ中に表示を行なう工程；
を含む方法。
【請求項４７】
請求項４０に記載の方法であって、アーキテクチャ・ステートの前記サブセットが複数のレジスタの内容を含んでおり、前記テーブルが前記複数のレジスタの各々に付随して１つのレジスタ・エントリを有している方法。
【請求項４８】
請求項４７に記載の方法であって、前記受信工程が：
１つのレジスタの内容が新しい値に変化したことを示す入力信号を受信する工程を含んでおり、前記方法が：
前記新しい値が前記受け手によって導出できるときは、そのレジスタに付随する各エントリ中に表示を行なう工程；
を含む方法。
【請求項４９】
請求項４７に記載の方法であって、前記受信工程が：
１つのレジスタの内容が新しい値に変化したことを示す入力信号を受信する工程を含んでおり、前記生成工程が：
前記新しい値が前記受け手によって導出できないときは、前記新しい値を示す複数のトレース要素を生成する工程を含んでおり、前記方法が：
そのレジスタに付随する各エントリ中に表示を行なう工程；
を含む方法。
【請求項５０】
請求項４７に記載の方法であって、前記複数のレジスタが複数のソースレジスタおよび複数のあて先レジスタを含んでおり、前記受信工程が：
１つのあて先レジスタの内容が１または複数の前記ソースレジスタの値に依存して新しい値に変化したことを示す入力信号を受信する工程を含んでおり、前記生成工程が：
前記新しい値が前記受け手によって導出できないときは、前記新しい値を示す複数のトレース要素を生成する工程を含んでおり、前記方法が：
前記あて先レジスタに付随する各エントリ中に表示を行なう工程；
を含む方法。
【請求項５１】
請求項４７に記載の方法であって、前記複数のレジスタが複数のソースレジスタおよび複数のあて先レジスタを含んでおり、前記受信工程が：
１つのあて先レジスタの内容が１または複数の前記ソースレジスタの値に依存して新しい値に変化したことを示す入力信号を受信する工程を含んでおり、前記方法が：
前記新しい値が前記受け手によって導出できるときは、前記あて先レジスタに付随する各エントリ中に表示を行なう工程；
を含む方法。
【請求項５２】
請求項４０に記載の方法であって、アーキテクチャ・ステートの前記サブセットが複数のメモリアドレスの内容を含んでおり、前記テーブルが前記複数のメモリアドレスの各々に付随して１つのアドレス・エントリを有している方法。
【請求項５３】
請求項５２に記載の方法であって、前記受信工程が：
１つのメモリアドレスの内容が新しい値に変化したことを示す入力信号を受信する工程を含んでおり、前記方法が：
前記新しい値が前記受け手によって導出できるときは、前記メモリアドレスに付随する各アドレス・エントリ中に表示を行なう工程；
を含む方法。
【請求項５４】
請求項５２に記載の方法であって、前記受信工程が：
１つのメモリアドレスの内容が新しい値に変化したことを示す入力信号を受信する工程を含んでおり、前記生成工程が：
前記新しい値が前記受け手によって導出できないときは、前記新しい値を示す複数のトレース要素を生成する工程を含んでおり、前記方法が：
そのメモリアドレスに付随する各アドレス・エントリ中に表示を行なう工程；を含む方法。
【請求項５５】
請求項５２に記載の方法であって、前記テーブルが１または複数のテーブルを含んでおり、各テーブルがベースメモリアドレスに付随するベースアドレス・エントリと、前記ベースアドレスから論理的にオフセットされたメモリアドレスレンジの各々に付随する１つのアドレス・エントリとを有しており、前記受信工程が：
１つのメモリアドレスの内容が新しい値に変化したことを示す入力信号を受信する工程を含んでおり、前記決定工程が：
前記メモリアドレスが前記レンジの１つに含まれるかどうかを判断する工程を含んでおり、もしそうであれば、前記方法が：
そのメモリアドレスに付随する各アドレス・エントリ中に表示を行なう工程；を含む方法。
【請求項５６】
請求項５５に記載の方法であって、前記受信工程が：
１つのメモリアドレスの内容が新しい値に変化したことを示す入力信号を受信する工程を含んでおり、前記決定工程が：
前記メモリアドレスが前記レンジの１つに含まれるかどうかを判断する工程を含んでおり、もしそうでなければ、前記方法が：
前記複数テーブルのうちの１つのテーブルのすべてのアドレス・エントリをクリアする工程；および
前記複数テーブルのうちの前記１つのテーブルの前記ベースアドレス・エントリを更新する工程を含んでおり、前記生成工程が：
前記新しい値を示す複数のトレース要素を生成する工程を含んでおり、前記方法が：
前記メモリアドレスに付随する各アドレス・エントリ中に表示を行なう工程；を含む方法。
【請求項５７】
請求項４０に記載の方法であって、更に：
実行されている命令を示す命令トレース要素を生成する工程；
を含む方法。
【請求項５８】
請求項４０に記載の方法であって、アーキテクチャ・ステートの前記サブセットにおける前記変化が前記データ処理装置によるシーケンス外命令の実行を引き起こすようになっており、前記方法が：
実行すべき前記シーケンス外命令を示すトレース要素を生成する工程；
を含む方法。
【請求項５９】
請求項４０に記載の方法であって、前記受け手がトレース解析ツールであり、前記テーブルが前記トレース解析ツールによって導出できるアーキテクチャ・ステートの前記サブセットを同定する方法。
【請求項６０】
請求項５９に記載の方法であって：
前記トレース解析ツールに対して、前記データ処理装置が実行すべきシーケンシャル命令を示す工程；
を含む方法。
【請求項６１】
請求項６０に記載の方法であって、各々のシーケンシャル命令がそれに付随して１つのアドレスを有しており、前記決定工程が：
前記シーケンス外命令のアドレスが、前記データ処理装置に前記シーケンス外命令を実行させる原因となったアーキテクチャ・ステートの前記項目の前記変化をもたらすために用いられたアーキテクチャ・ステートの複数項目に付随する各エントリ中に表示がなされているかどうかを判断することによって、前記トレース解析ツールによって導出できるかどうかを判断する工程；
を含んでいる方法。
【請求項６２】
請求項６０に記載の方法であって、前記テーブルは前記データ処理装置が実行すべきシーケンシャル命令の前記表示を同定するようになっており、前記方法が：
実行されている命令を示す入力信号を受信する工程；
実行されている命令を示す前記入力信号に応答して、前記トレース解析ツールが前記テーブルを参照することによって、実行されている前記命令を決定することができるかどうかを判断する工程を含み、もしそうでなければ：
前記命令が前記トレース解析ツールによって導出できないときは、前記命令を示す複数のトレース要素を生成する工程；
を含む方法。
【請求項６３】
データ処理装置のプログラムカウンタ値の変化をトレースする方法であって、前記データ処理装置は命令のシーケンスを実行するように構成されており、前記プログラムカウンタ値は前記データ処理装置が実行すべき次の命令を示しており、前記方法が：
前記データ処理装置の１または複数の部品から、実行されている現在の命令を示す入力信号を受信する工程；
前記入力信号から、前記現在の命令に付随するデータを示すデータトレース要素と、プログラムカウンタ値の前記変化を示す分岐トレース要素とを選択的に生成する工程；および
前記現在の命令が前記プログラムカウンタ値に非シーケンシャルな変化をもたらす間接的分岐命令である場合には、前記データトレース要素または前記分岐トレース要素のいずれかの生成を抑制する工程であって、プログラムカウンタ値の前記変化が、生成されたトレース要素から導出できる工程；
を含む方法。
【請求項６４】
請求項６３に記載の方法であって、前記抑制工程が：
前記データトレース要素の生成を抑制する工程であって、プログラムカウンタ値の前記変化が、前記分岐トレース要素から受け手によって導出できる工程；
を含んでいる方法。
【請求項６５】
請求項６３に記載の方法であって、前記抑制工程が：
前記分岐トレース要素の生成を抑制する工程であって、プログラムカウンタ値の前記変化が、前記データトレース要素から受け手によって導出できる工程；
を含んでいる方法。
【請求項６６】
請求項６３に記載の方法であって：
プログラムカウンタ値の前記変化が、先に生成されたトレース要素から導出できるかどうかを示すテーブルを参照することによって、どのトレース要素を生成すべきかを決定する工程；
を含む方法。
【請求項６７】
請求項６６に記載の方法であって、前記抑制工程が：
プログラムカウンタ値の前記変化が、前記受け手によって導出できると判断されたときは、前記データトレース要素および前記分岐トレース要素の生成を抑制する工程；
を含んでいる方法。
【請求項６８】
請求項６３に記載の方法であって：
前記抑制を示すプレースホルダを生成する工程；
を含む方法。
【請求項６９】
請求項６３に記載の方法であって：
前記入力信号の受信に応答して、前記データ処理装置によって命令が実行されていることを示す命令トレースを生成する工程；
を含む方法。
【請求項７０】
コンピュータが読み出し可能なメディア上に記録されたコンピュータプログラム製品であって、コンピュータ上で実行されるときに、請求項４０に記載の方法の工程を実行するコンピュータプログラム製品。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、その振る舞いをトレースしようとする１または複数の部品を含むデータ処理装置内でのトレース要素（ｔｒａｃｅ　ｅｌｅｍｅｎｔ）生成に関する。
【０００２】
【従来の技術】
データ処理システムの活動をトレースすることによって、そのシステム内でのステップ毎の活動を表すデータを含むトレース要素のストリームを生成することはシステム開発において非常に有用なツールである。しかし、プロセッサコアが益々埋め込み式に向かう一般的な傾向に伴って、外部からアクセスできるピンを通してプロセッサコアのアーキテクチャ・ステート（ＡＳ：Ａｒｃｈｉｔｅｃｔｕｒａｌ　Ｓｔａｔｅ）（例えば、レジスタの内容、特定のメモリ場所に記憶された値、あるいは各種バス、パス、ライン、フラグ、あるいはプロセッサコア内またはプロセッサコアがつながれているモジュールの状態）をトレースすることは益々困難になっている。従って、トレースデータを捕らえて解析するためのオフチップでのトレース機構のほかに、多量のトレース機能がオンチップに配置されるようになっている。そのようなオンチップのトレース機構の一例は、英国、ケンブリッジのＡＲＭリミテッド社によって提供されるエンベッデド・トレース・マクロセル（ＥＴＭ：Ｅｍｂｅｄｄｅｄ　Ｔｒａｃｅ　Ｍａｃｒｏｃｅｌｌ）（Ｒ）および関連する各種ＡＲＭ（Ｒ）プロセッサである。
【０００３】
そのようなトレース機構は、トレースしようとするデータ処理システムの活動を表すトレース要素のストリームを実時間で生成する。このトレース・ストリームは、後でそのデータ処理システムによって実行される処理命令のシーケンスをデバッグするために使用することができる。
【０００４】
特別なレジスタ、メモリアドレス、あるいはデータ値にアクセスした時点でトレースをスタートさせたり、あるいは停止させたりするなど、トレース動作を制御するために役立つトリガポイント設定機能を含むトレース機構を提供することについては既知である。そのような機構はシステムの特定部分を診断したり、振る舞いのタイプを診断したりするのに非常に有効である。
【０００５】
典型的には、トレースが最初にトリガされたときに、再構成すべきアーキテクチャ・ステートのすべての項目に関する値が複数のトレース要素としてトレースされる。
【０００６】
典型的には、ＥＴＭ（Ｒ）によって生成されるトレース要素のストリームは、後での解析のために出力される前にバッファに収納される。そのようなトレースバッファは有限の情報記憶容量を持ち、バッファに入れる要素を受信するために有限の帯域幅を持つ専用のデータバスを必要とする。トレースバッファは一般にラップアラウンド式に情報を記憶するように構成される。すなわち、トレースバッファが満杯になると、新しいデータが、そこに記憶されている最も古いデータを上書きするように構成されるのが普通である。専用のデータバスの帯域幅がトレースバッファへ情報を記憶する速度を制限することが分かった。
【０００７】
典型的には、トレース解析ツールが備えられ、それは必要に応じて、例えば、トレースが完了した時点でトレースバッファからトレース要素を受信する。それに従って、トレース解析ツールはトレースバッファに記憶されていたトレース要素のストリームを用いて、プロセッサコアのアーキテクチャ・ステートの重要部品を再構成することができる。従って、トレース解析ツールはトレース要素に基づいてプロセッサコアの振る舞いを再構築することができる。
【０００８】
【発明の解決しようとする課題】
データ処理システムがパワーおよび複雑度を高めるにつれて、アーキテクチャ・ステートの量およびその変化速度も増大すると考えられる。従って、アーキテクチャ・ステートを信頼性高く再構築するために、トレースすべきトレース要素は非常に多量になるであろうことは理解されよう。
【０００９】
しかし、バッファに入れるべきトレース要素を受信するバスは有限の帯域幅を持ち、またトレースバッファは有限の容量を持つという問題がある。すなわち、バッファに入れられるトレース要素の量、従って再構築できるアーキテクチャ・ステートの量は制限される。
【００１０】
このことから、バッファに入れるトレース要素を受信するために有限の帯域幅が与えられ、有限の大きさのトレースバッファが与えられたときに、再構築できるアーキテクチャ・ステートの量を増やすことが望まれる。
【００１１】
【課題を解決するための手段】
第１の態様から見ると、本発明はトレースモジュールを提供し、それはそのトレースモジュールがつながるデータ処理装置のアーキテクチャ・ステートのサブセットにおける変化をトレースするように動作し、そのトレースモジュールは：データ処理装置の１または複数の部品から、アーキテクチャ・ステートのサブセットにおける変化を示す入力信号を受信し、それら１または複数の入力信号から、その変化を示す複数のトレース要素を生成して、そのトレース要素の受け手（ｒｅｃｉｐｉｅｎｔ）が後でアーキテクチャ・ステートのサブセットを再構築することを許可するように動作するトレース生成ユニット；およびトレース生成ユニットが管理するテーブルであって、先に生成されたトレース要素から導出されるアーキテクチャ・ステートを同定するテーブルを含み、トレース生成ユニットはこのテーブルを参照することによって、トレース生成時に生成すべきトレース要素を決定する。
【００１２】
トレースが始まる時点でアーキテクチャ・ステートのすべての項目についてトレース要素を生成する必要がないように、また受け手によって導出できないアーキテクチャ・ステートの変化のみをトレースするようにすれば、任意の時点で生成すべきアーキテクチャ・ステートの量は従来のやり方と比べて大幅に削減される。
【００１３】
先に生成されたトレース要素から導出できるアーキテクチャ・ステートを同定するテーブルを設けることによって、生成する必要のあるトレース要素の数は大幅に削減される。この削減は、受け手に対して既に提供されているアーキテクチャ・ステートの記録をテーブルが提供するために達成できる。受け手に対して既に提供されているアーキテクチャ・ステートを知ることによって、トレース生成ユニットはアーキテクチャ・ステートの変化が受け手によって導出あるいは推測できるかどうかを決定することができる。従って、トレース生成ユニットは、テーブルを参照し、受け手によって導出できないアーキテクチャ・ステートの変化に関連するトレース要素のみを生成すればよい。このことから、受け手がアーキテクチャ・ステートの変化を導出、推測、あるいは計算できるとトレース生成ユニットが判断したときは、それらの変化に関連するトレース要素は生成する必要がないようになる。
【００１４】
生成する必要のあるトレース要素の数を削減することによって、トレース生成ユニットと、トレース要素を記憶するためのバッファとの間の帯域幅制限は緩和される。更に、トレース要素の数を削減できるため、トレースバッファの大きさの制限も緩和され、同じ帯域幅でトレースできるアーキテクチャ・ステートの量は増大する。トレースできるアーキテクチャ・ステートの量が増大すれば、より複雑なデータ処理システムの動作も同じ帯域幅を用いて信頼性高く再構築できるようになることは理解されよう。
【００１５】
アーキテクチャ・ステートの変化に関連する情報をトレース生成ユニットに提供する入力信号は任意の適当な形で構わないことを理解されよう。更に、トレース要素は、受け手が後でその変化を再構築することのできるようにアーキテクチャ・ステートの変化を示す任意の適当な形を取ることができることも理解されよう。更に、テーブルは、トレース生成ユニットがトレース生成時にどのトレース要素を生成すべきかを決めることができる任意の構成で構わないことを理解されよう。
【００１６】
好適な構成において、このテーブルはトレースの開始時にクリアされ、その後は定期的にクリアされる。このことは、トレースにおいて何らかの破壊が発生するか、あるいはトレースの最初の部分が、例えばその最初の部分を上書きするラップアラウンドがトレースバッファ中で発生することによって失われた場合に、トレースの一部分のみが失われるのであって、後続のトレースはトレース解析ツールによって導出できることを保証する。
【００１７】
好ましくは、アーキテクチャ・ステートのサブセットにはアーキテクチャ・ステートの複数の項目が含まれ、またテーブルにはアーキテクチャ・ステートの各項目に関連する１または複数のエントリが含まれ、トレース生成ユニットはアーキテクチャ・ステートのその項目が受け手によって導出できるときに、各々のエントリ中に表示を行なうように動作する。
【００１８】
各項目はアーキテクチャ・ステートのサブセットの一部に対応する。アーキテクチャ・ステートを項目化することによってテーブルの管理が容易になる。アーキテクチャ・ステートの各項目に対して複数のエントリを設けることができるが、各項目はそれに付随して１つのエントリのみを有するほうが好ましい。アーキテクチャ・ステートの項目が受け手によって導出できるときは、それらの項目に付随するエントリに対して表示がなされる。この表示は任意の適当な形のものでよく、例えば、単一ビット値によって、論理‘０’がその項目が受け手によって導出できないことを示し、論理‘１’がその項目が受け手によって導出できることを示すようにしてもよい。理解されるように、そのような表示を行なうことは、比較的直接的な処理であり、このような形のテーブルを管理するために要するオーバーヘッドは比較的小さい。
【００１９】
好ましくは、１または複数の入力信号の受信に応答して、トレース生成ユニットは、アーキテクチャ・ステートの１つの項目に関連する各エントリにおいて表示が行われているかどうかを判断して、アーキテクチャ・ステートのその項目における変化が受け手によって導出できるかどうかを判断するように動作する。
【００２０】
このことから、テーブルの簡単な検索によって、トレース生成ユニットはアーキテクチャ・ステートの変化が受け手によって導出できるかどうかを簡単に判断することが可能となる。
【００２１】
好ましくは、１または複数の入力信号の受信に応答して、トレース生成ユニットは、アーキテクチャ・ステートの項目中に変化を引き起こすために用いられるアーキテクチャ・ステートの項目に関連する各エントリにおいて表示が行われているかどうかを判断して、アーキテクチャ・ステートのその項目における変化が受け手によって導出できるかどうかを判断するように動作する。
【００２２】
従って、アーキテクチャ・ステートが受け手によって直接的に導出できない場合でも、トレース生成ユニットは、その変化を引き起こすために用いられたアーキテクチャ・ステートの項目がそれ自身、導出可能であるかどうかを判断することによって、その変化が導出できるかどうかを決定することができる。例えば、もしアーキテクチャ・ステートＡがアーキテクチャ・ステートＢおよびＣに基づいて変化するとして、Ａに関連するエントリ中に何も表示がなされなかったためＡが導出できなくても、ＢおよびＣに関連するエントリ中に表示がなされていれば、トレース生成ユニットはアーキテクチャ・ステートＡの変化が受け手によって導出可能であると判断することができる。多くのデータ処理装置では、アーキテクチャ・ステート中の大多数の変化がアーキテクチャ・ステートのその他の項目に依存するため、この方法は生成すべきトレース要素の数を劇的に削減することができることを理解されよう。生成すべきトレース要素の数を更に削減できれば、トレース生成ユニットとバッファとの間の帯域幅制約は更に緩和される。アーキテクチャ・ステートの１つの項目が導出できるという表示を変化の発生前に与えることは、必ずしも変化が発生した後でアーキテクチャ・ステートのこの変化が導出できることを保証しないことは理解されよう。それは、アーキテクチャ・ステートの項目が導出できるかどうかの判断は、その変化に影響する項目が導出できるかどうかの確定に依存するからである。このことを説明するために、上述の例に戻って、Ａが導出可能であるという表示がなされた場合、ＢおよびＣについては表示がなされなければ、Ａは導出可能ではなく、Ａの変化についてトレース要素を生成する必要がある。これは、Ａの過去の知識は関係なく、それはＢおよびＣに依存して不確定なやり方で変化するためである。
【００２３】
好ましくは、トレース生成ユニットは、受け手によって導出できないアーキテクチャ・ステートの項目の変化を示す複数のトレース要素を生成するように、またアーキテクチャ・ステートのその項目に付随する各エントリに表示を行なうように動作する。
【００２４】
このことから、受け手がアーキテクチャ・ステートの変化を導出できないだろうと判断された場合には、トレース生成ユニットはその変化を示す１または複数のトレース要素を生成する。理解されるように、トレース要素は受け手がその変化を決定できるような任意の適当な形を取ることができる。トレース生成ユニットはまた、変化を起こしたアーキテクチャ・ステートの項目に関するテーブルのエントリ中に、アーキテクチャ・ステートのその項目が今や受け手によって導出可能であることを示す表示を行なうことは理解されよう。
【００２５】
更に、特定の状況では、アーキテクチャ・ステートの項目に変化を引き起こすために用いられたアーキテクチャ・ステートの項目に関連するエントリを導出可能としてマークすることが行なわれよう。例えば、もしアーキテクチャ・ステートＤがＥにコピーされ、Ｄが導出不可であれば、Ｅへの変化を示すトレース要素が生成されて、前と同じように、Ｅに関連するテーブルのエントリはＥが導出可能であることを示すように更新される。しかし、そのときは、Ｄに関連するテーブル中のエントリもまた更新されて、ＥがＤから推定されるのと同じように、ＤもＥから影響されるので、Ｄが導出可能であると表示されることも理解されよう。
【００２６】
好ましくは、アーキテクチャ・ステートの各項目はアーキテクチャ・ステート値を有し、トレース生成ユニットはアーキテクチャ・ステート値の変化を示す複数のトレース要素を生成する。
【００２７】
好ましくは、アーキテクチャ・ステート値の変化はアーキテクチャ・ステートの項目に新しい値を持たせ、トレース生成ユニットは、その新しい値が受け手によって導出できない場合にはその新しい値を示す複数のトレース要素を生成し、またアーキテクチャ・ステートのその項目に付随する各エントリ中に表示を行なう。
【００２８】
データ処理装置のアーキテクチャ・ステートは、例えば、レジスタ、メモリ、フリップフロップ、フラグ、バスおよび個別ラインの状態、あるいは装置内の個別ユニット、例えばプロセッサコア、バスインタフェースユニット、キャッシュ、デバッグ、解析あるいはプロファイルロジック等のモードあるいは状態の値を含んでいる。
【００２９】
好適な実施の形態では、アーキテクチャ・ステートのサブセットは、複数のレジスタの内容を含み、またテーブルはその複数のレジスタの各々に付随するレジスタ・エントリを有する。
【００３０】
従って、テーブルは、内容が受け手によって導出可能なレジスタを表示する。
【００３１】
好ましくは、１つのレジスタの内容が新しい値に変化したことを示す入力信号に応答して、トレース生成ユニットは、その新しい値が受け手によって導出可能である場合には、そのレジスタに付随する各エントリ中に表示を行なうように動作する。
【００３２】
そのレジスタ値の変化は、レジスタそれ自身の内容、１または複数のその他のレジスタの内容、あるいは１または複数のメモリ場所に記憶された内容に依存する。レジスタ値の変化が１または複数のメモリ場所の内容に依存する場合には、好適な実施の形態では、そのメモリ場所を示す１つのトレース要素が生成される。
【００３３】
好ましくは、１つのレジスタの内容の新しい値への変化を示す入力信号に応答して、トレース生成ユニットは、その新しい値が受け手によって導出できない場合には、その新しい値を示す複数のトレース要素を生成し、またそのレジスタに付随する各エントリ中に表示を行なうように動作する。
【００３４】
従って、受け手はレジスタの新しい値の表示を与えられ、テーブルはそのレジスタの値が今や受け手によって導出可能であることを示すように更新される。
【００３５】
好ましくは、複数のレジスタは複数のソースレジスタ（Ｓｏｕｒｃｅ　Ｒｅｇｉｓｔｅｒ）および複数のあて先レジスタ（Ｄｅｓｔｉｎａｔｉｏｎ　Ｒｅｇｉｓｔｅｒ）を含み、１つのあて先レジスタの内容が１または複数のソースレジスタの内容に依存して新しい値に変化したことを示す入力信号に応答して、トレース生成ユニットは、その新しい値が受け手によって導出できない場合には、その新しい値を示す複数のトレース要素を生成し、またそのあて先レジスタに付随する各エントリ中に表示を行なうように動作する。
【００３６】
従って、１つのレジスタのその内容が受け手によって直接的に導出できなくても、トレース生成ユニットは、それらレジスタの値あるいは変化を起こしたアーキテクチャ・ステートの値が導出可能であるかどうかを判断することによって、その新しい値が導出できるかどうかを判断することができる。例えば、Ｒ４←Ｒ２＋Ｒ３（すなわち、レジスタＲ２に含まれる値をレジスタＲ３に含まれる値に加えて、その結果をレジスタＲ４に置く）という操作を考えよう。もしテーブルが、レジスタＲ２とＲ３の値がどちらも受け手によって導出できないことを示していれば、受け手に対してＲ４の結果の値を提供するトレース要素が生成され、またテーブルにはレジスタＲ４の値が受け手によって導出可能であると注釈が加えられる。更に、あて先レジスタの新しい値がその他のアーキテクチャ・ステートに依存する状況では、トレース生成ユニットは、そのアーキテクチャ・ステートに付随するテーブル・エントリ、例えば、１または複数のメモリアドレスやレジスタに付随するテーブル・エントリ中に表示がなされているかどうかを判断することによって、その他のアーキテクチャ・ステートの値が導出可能であるかどうかを判断し、その新しい値が導出できるかどうかを決めることができることを理解されよう。
【００３７】
好ましくは、複数のレジスタは複数のソースレジスタおよび複数のあて先レジスタを含み、１つのあて先レジスタの内容が１または複数のソースレジスタの内容に依存して新しい値に変化したことを示す入力信号に応答して、トレース生成ユニットは、その新しい値が受け手によって導出可能な場合には、そのあて先レジスタに付随する各エントリ中に表示を行なうように動作する。
【００３８】
従って、上と同じ例示的実施例を用いると、もしテーブルがレジスタＲ２およびＲ３の値がどちらも受け手によって導出可能であることを示していれば、トレース要素を生成する必要はなく、テーブルにはレジスタＲ４の値が受け手によって導出可能であると注釈が加えられる。同じように、そのあて先レジスタの新しい値がその他のアーキテクチャ・ステートに依存する状況では、もしテーブルがそのアーキテクチャ・ステートの値が受け手によって導出可能であることを示していれば、トレース要素を生成する必要はなく、テーブルにはそのあて先レジスタの値が受け手によって導出可能であると注釈が加えられる。
【００３９】
好ましくは、複数のレジスタは複数のあて先レジスタを含み、アーキテクチャ・ステートが更に複数のメモリアドレスの内容を含んでおり、１つのあて先レジスタの内容が１または複数のメモリアドレスの内容に依存して新しい値に変化したことを示す入力信号に応答して、トレース生成ユニットは、その１または複数のメモリアドレスが受け手によって導出できない場合には、その１または複数のメモリアドレスを示す複数のトレース要素を生成し、またその１または複数のメモリアドレスに付随する各エントリ中に表示を行なうように動作する。
【００４０】
従って、トレースされる新しい値に加えて、その新しい値を含むアドレスもまたトレースされ、そのアドレスの内容が今や導出可能であることを示す表示が行なわれる。
【００４１】
別の例では、複数のレジスタは複数のあて先レジスタを含み、アーキテクチャ・ステートが更に複数のメモリアドレスの内容を含んでおり、１つのあて先レジスタの内容が１または複数のメモリアドレスの内容に依存して新しい値に変化したことを示す入力信号に応答して、トレース生成ユニットは、その新しい値が受け手によって導出可能な場合には、その１または複数のメモリアドレスに付随する各エントリ中に表示を行なうように動作する。
【００４２】
好適な実施の形態では、アーキテクチャ・ステートのサブセットには複数のメモリアドレスの内容が含まれ、テーブルはその複数のメモリアドレスの各々に付随するアドレス・エントリを有する。
【００４３】
従って、テーブルは、受け手によって導出可能な値を有するそれらのメモリアドレスの表示を与える。テーブルは、値が受け手によって導出可能なメモリアドレスのみを示すように構成できることを理解されよう。あるいは、テーブルは、値が受け手によって導出可能なメモリアドレスおよびレジスタ、あるいはその他のアーキテクチャ・ステートを示すように構成することができる。
【００４４】
好ましくは、１つのメモリアドレスの内容が新しい値に変化したことを示す入力信号に応答して、トレース生成ユニットは、その新しい値が受け手によって導出可能である場合には、そのメモリアドレスに付随する各アドレス・エントリ中に表示を行なうように動作する。
【００４５】
そのメモリのその値の変化はメモリアドレスそれ自身の内容、１または複数のその他のメモリアドレスの内容、あるいは１または複数のレジスタに記憶された内容に依存することを理解されよう。
【００４６】
更に、１つのメモリアドレスの内容が新しい値に変化したことを示す入力信号に応答して、トレース生成ユニットは、その新しい値が受け手によって導出できない場合には、その新しい値を示す複数のトレース要素を生成し、またそのメモリアドレスに付随する各アドレス・エントリ中に表示を行なうように動作することが好ましい。
【００４７】
従って、受け手にはそのメモリアドレスの新しい値が表示され、テーブルはそのアドレスの値が今や受け手によって導出可能であることを示すように更新される。
【００４８】
好ましくは、１つのメモリアドレスの内容が１または複数のレジスタに依存して新しい値に変化したことを示す入力信号に応答して、トレース生成ユニットは、その新しい値が受け手によって導出可能である場合には、そのメモリアドレスに付随する各アドレス・エントリ中に表示を行なうように動作する。
【００４９】
好ましくは、１つのメモリアドレスの内容が１または複数のレジスタの内容に依存して新しい値に変化したことを示す入力信号に応答して、トレース生成ユニットは、その新しい値が受け手によって導出できない場合には、その新しい値を示す複数のトレース要素を生成し、またそのメモリアドレスに付随する各アドレス・エントリ中に表示を行なうように動作する。
【００５０】
好ましくは、１つのメモリアドレスの内容が新しい値に変化したことを示す入力信号に応答して、トレース生成ユニットは、そのメモリアドレスが受け手によって導出できない場合には、そのメモリアドレスを示す複数のトレース要素を生成し、またそのメモリアドレスを与える各レジスタ・エントリ中に表示を与えるように動作する。
【００５１】
好適な実施の形態では、テーブルは１または複数のテーブルを含み、各テーブルはベースメモリアドレスに付随するベースアドレス・エントリと、ベースアドレスから論理的にオフセットされたメモリアドレスのレンジの各々に付随するアドレス・エントリとを有し、トレース生成ユニットは、メモリアドレスの内容が新しい値に変化したことを示す入力信号に応答して、そのメモリアドレスがレンジのうちの１つに含まれるかどうかを判断し、およびもしそうであれば、そのメモリアドレスに付随するアドレス・エントリ中に表示を行なうように動作する。
【００５２】
ベースアドレスと、ベースアドレスからオフセットしたメモリアドレスレンジとが与えられると、論理メモリアドレスを指定するビット数を少なくすることができ、ひいてはテーブルの大きさを縮小することができて有利である。例えば、メモリが２ｎ個のエントリあるいは論理アドレスを有すると仮定しよう。もしテーブルにそれらのエントリの各々が導出可能であるかどうかの表示が与えられるとすると、テーブルは更に２ｎ個のエントリを必要とすることは明らかである。しかし、プロセッサ演算の与えられたシーケンスに起因するメモリアクセスの発生は、メモリの特定のサブセットあるいはレンジ内に限られる場合が多い。従って、テーブルは、メモリアドレスのレンジの各々に付随して１つのアドレス・エントリを提供するように構成される。メモリ全体のアドレスを指定できるようにするために、ベースアドレスも与えられて、レンジはこのベースアドレスからオフセットされている。上の例の戻ると、メモリが２ｎ個のアドレスを有すると仮定して、テーブルには２ｎ／４個のエントリを含む１つのレンジが与えられる。これらのエントリの各々はｎ／４ビットを用いて指定でき、メモリ全体でアドレスを指定するためには、３ｎ／４ビットを有するベースアドレスを与える必要がある。テーブルおよびレンジの大きさは特定の実施用途に合わせて選択できることを理解されよう。
【００５３】
好ましくは、トレース生成ユニットは、１つのメモリアドレスの内容が新しい値に変化したことを示す入力信号に応答して、そのメモリアドレスがレンジの１つに含まれるかどうかを判断し、もしそうでなければ、テーブルの１つの中のすべてのアドレス・エントリをクリアし、そのテーブルのベースアドレス・エントリを更新して、その新しい値を示す複数のトレース要素を生成し、またそのメモリアドレスに付随するアドレス・エントリ中に表示を行なうように動作する。
【００５４】
従って、現時点でテーブルによってカバーされているレンジの外のメモリアドレスに記憶された値に変化が生じたときは、値が変化したメモリアドレスが、テーブルによって提供されるレンジに含まれるように新しいベースアドレスが選ばれる。更に、アドレスに付随するすべてのエントリはクリアされることが好ましい。これは、それらのエントリが今や、受け手が値を導出できないアドレスに関連しているためである。またトレース要素の生成に続いて、値が変化したメモリアドレスに付随するアドレス・エントリ中に、その値が受け手によって導出可能であるという表示が行なわれる。テーブルを１つだけ提供することもできるが、それ以外に複数のテーブルを設けても構わないことは理解されよう。それらの各テーブルは１つのベースアドレスを有し、メモリの異なる領域をカバーする。そのような構成は、トレースされる動作がメモリの異なる部分への分岐やそこからの戻りを含む場合に特に有用である。
【００５５】
好ましくは、ベースアドレス・エントリは論理メモリアドレスの少なくとも一部を記憶するように構成される。
【００５６】
従って、任意の論理メモリアドレスに対して、ベースアドレスビットが論理メモリアドレスの最上位ビット（ＭＳＢ）を形成し、アドレス・エントリ・ビットが論理メモリアドレスの最下位ビット（ＬＳＢ）を形成するように構成することができる。あるいは、ベースアドレスは、スタックポインタレジスタの内容によって参照される論理メモリアドレスのＭＳＢを含むことができる。ある種のデータ処理装置では、スタックポインタレジスタの使用が、ベースアドレスのための効率のよい場所を表すよい手段となることを理解されよう。
【００５７】
好適な実施の形態では、前記テーブル中のエントリは定期的にクリアされる。
【００５８】
上で説明したように、このことはトレース中で発生する可能性のある破壊の影響を改善する助けとなる。
【００５９】
好適な実施の形態では、トレース生成ユニットは、実行される命令を示す命令トレース要素を生成するように動作する。
【００６０】
命令トレース要素は受け手に対してデータ処理装置によって実行される命令、例えば、分岐やデータ処理演算などに関する情報を提供する。受け手に対して命令トレースを提供することによって、任意の特定の時刻にどの命令が実行されるか、ひいては任意のトレース要素がどのアーキテクチャ・ステートに関連するかを受け手が決定する手助けとなり、アーキテクチャ・ステートの再構築が更に容易になる。
【００６１】
好ましくは、アーキテクチャ・ステートのサブセットにおける変化はデータ処理装置に対してシーケンス外の命令を実行させ、トレース生成ユニットは、実行すべきシーケンス外命令を示すトレース要素を生成するように動作する。
【００６２】
従って、例えば分岐を引き起こす命令を実行する場合、受け手には、受信されるトレース要素を解釈する手助けとするために、命令のシーケンス中のどの命令を次に実行すべきかの表示が与えられる。
【００６３】
好適な実施の形態では、受け手はトレース解析ツールであり、テーブルはトレース解析ツールによって導出可能なアーキテクチャ・ステートのサブセットを同定する。
【００６４】
好ましくは、トレース解析ツールにはデータ処理装置が実行すべきシーケンシャル命令が示される。
【００６５】
トレース解析ツールに対して、データ処理装置が実行する命令、例えばオペコード（ｏｐｃｏｄｅ）に関する情報を提供することによって、アーキテクチャ・ステートを再構築する場合に、トレース生成ユニットによって与えられるトレース要素の解釈が簡単になる。このように、トレース解析ツールはプロセッサコアの動作を効率的にモデル化することを理解されよう。従って、例えば、トレース解析ツールが１または複数のトレース要素を受信して、更にアーキテクチャ・ステートＡ、Ｂ、およびＣを含み、アーキテクチャ・ステートＤに変化をもたらす命令が実行されるという表示が与えられれば、トレース解析ツールはそれらのトレース要素がアーキテクチャ・ステートＤの変化に関連することを導出することができる。
【００６６】
好ましくは、各々のシーケンシャル命令はそれらに付随して１つのアドレスを有し、トレース生成ユニットは、データ処理装置にシーケンス外命令を実行させたアーキテクチャ・ステートのその項目に変化を引き起こすために用いられたアーキテクチャ・ステートの複数項目に付随する各エントリ中に表示がなされているかどうかを判断して、シーケンス外命令のアドレスがトレース解析ツールによって導出可能かどうかを判断するように動作する。
【００６７】
このことから、もしトレース解析ツールがシーケンス外命令のアドレスを導出可能であれば、次に実行すべき命令のアドレスを示すトレース要素を生成する必要はない。
【００６８】
好ましくは、テーブルはデータ処理装置によって実行すべきシーケンシャル命令の表示を同定する。
【００６９】
上で述べたように、実行すべきシーケンシャル命令の表示を同定するテーブルは、別になった１または複数のテーブルで構わないことを理解されよう。更に、上で述べたように、テーブルはデータ処理装置によって実行すべきオペコードを含むことが好ましい。
【００７０】
好ましくは、トレース生成ユニットは、実行される命令を示す入力信号に応答して、トレース解析ツールがテーブルを参照することによって実行すべき命令を決定できるかどうかを判断し、またその命令がトレース解析ツールによって導出できない場合には、その命令を示す複数のトレース要素を生成するように動作する。
【００７１】
典型的には、間接的分岐（間接的分岐というのは、データ処理装置によって実行される命令シーケンス中の分岐であり、従来の分岐命令の発行によって発生するのではなく、例えば、ロード命令や移動命令によってプログラムカウンタを操作するときに発生する）の結果、次に実行すべき命令のアドレスを決めるためにデータ処理装置によって用いられるレジスタへの変化が発生するときは（例えば、いわゆるプログラムカウンタ）、データトレースが発行され、分岐トレースが発行されるであろうことは理解されよう。データトレースは、ロードや移動命令に付随するデータ（例えば、オペランドデータ、結果のデータ等）をトレースすることを望むために生成するのが普通である。分岐トレースもまた、命令の結果として分岐が発生すると決定されたために発生するのであって、次に実行すべき命令のアドレス（すなわち、新しいプログラムカウンタ値）を表示する。
【００７２】
本発明の第２の態様に従えばトレースモジュールが提供される。このトレースモジュールは、それがつながれているデータ処理装置のプログラムカウンタ値における変化をトレースするように動作する。データ処理装置は命令のシーケンスを実行するように構成され、プログラムカウンタ値はデータ処理装置が実行すべき次の命令を示している。トレースモジュールは：データ処理装置の１または複数の部品から、実行される現在の命令を示す入力信号を受信し、その入力信号から、現在の命令に付随するデータを示すデータトレース要素およびプログラムカウンタ値の変化を示す分岐トレース要素を選択的に生成するトレース生成ユニットを含んでおり、また現在の命令がプログラムカウンタ値に非シーケンシャルな変化を引き起こす間接的分岐命令である場合には、前記トレース生成ユニットは、データトレース要素または分岐トレース要素のいずれかの生成を抑制するように動作し、プログラムカウンタ値の変化は、生成されたトレース要素から導出可能であり、それによって、プログラムカウンタ値の変化は、データ処理装置によって実行すべき次の命令を決めるために生成されたトレース要素から、トレース要素の受け手によって後で再構築できるようになっている。
【００７３】
プログラムカウンタ値の変化がデータトレースあるいは分岐トレースのいずれかによって導出可能であることが分かれば、それらのトレースのうちの片方は抑制しても構わないので、生成されるトレースの量を削減することができる。特に、データトレース要素は結果のデータを同定するので、間接的分岐命令の場合は、これが新しいプログラムカウンタを同定することになり、データトレース要素はそれ自身で、新しいプログラムカウンタ値の導出を可能にする。
【００７４】
プログラムカウンタに記憶されている値を知ることは、受け手がデータ処理装置が実行すべき次の命令を決めることを可能にすることは理解されよう。更に、いわゆるパイプライン式データ処理装置では、プログラムカウンタが、任意の特別なパイプラインステージへロードあるいは通過させる次の命令（例えば、フェッチ、デコード、実行、あるいはライトバックステージの任意のもの）を参照するか、あるいは例えばプリフェッチやその他のユニットによってフェッチすべき次の命令を参照することも理解されよう。
【００７５】
好ましくは、トレース生成ユニットはデータトレース要素の生成を抑制することができ、プログラムカウンタ値の変化は受け手によって分岐トレース要素から導出できる。
【００７６】
従って、データトレース要素を生成する必要はない。それはこの情報が、新しいプログラムカウンタ値（すなわち、間接的分岐命令の結果データ）の表示を与える分岐トレース要素によって複製されるためである。データトレース要素を抑制することによって、トレースすべきデータ量が削減されることは理解されよう。
【００７７】
あるいは、トレース生成ユニットは分岐トレース要素の生成を抑制することができ、プログラムカウンタ値の変化は受け手によってデータトレース要素から導出できる。
【００７８】
従って、分岐トレース要素を生成する必要はない。それはこの情報が、プログラムカウンタの値の変化を表示するデータトレース要素によって複製されるためである。分岐トレース要素を抑制することによって、トレースすべきデータ量が削減されることは理解されよう。
【００７９】
好ましくは、トレース生成ユニットが管理するテーブルが設けられて、プログラムカウンタ値の変化が、先に生成されたトレース要素から導出可能かどうかを同定する。トレース生成ユニットはこのテーブルを参照しながら、トレース生成時に、生成すべきトレース要素を決定する。
【００８０】
プログラムカウンタ値の変化が、先に生成されたトレース要素から導出できるかどうかを同定するテーブルを設けることによって、生成する必要のあるトレース要素の数を大幅に削減できる。この削減が達成されるのは、そのテーブルが、変更されたプログラムカウンタ値が既に受け手に提供されているかどうかの記録を提供するためである。プログラムカウンタ値が既に受け手に提供されているかどうかを知ることによって、トレース生成ユニットはプログラムカウンタ値の変化が受け手によって導出、推測できるかどうかを判断できる。従って、トレース生成ユニットはテーブルを参照することができて、受け手によって導出できないプログラムカウンタ値の変化に関連するトレース要素のみを生成する必要がある。このことから、もしトレース生成ユニットが、受け手がプログラムカウンタ値を導出、推測、あるいは計算できると判断したときは、それらの変化に関連するトレース要素は生成する必要がなく、トレース要素の複製は回避できる。
【００８１】
好ましくは、トレース生成ユニットは、プログラムカウンタ値の変化が受け手によって導出可能であると判断されたときは、データトレース要素および分岐トレース要素の生成を抑制するように動作する。
【００８２】
従って、プログラムカウンタの値の変化および、実行すべき次の命令のアドレスが導出できると判断されたときは、データトレース要素と分岐トレース要素の両方とも抑制される。これはこの情報を受け手が導出できるからである。データトレース要素および分岐トレース要素の両方の生成を抑制することによって、生成されるトレースの量を大幅に削減できることを理解されよう。
【００８３】
好ましくは、トレース生成ユニットは抑制を指示するプレースホルダ（Ｐｌａｃｅｈｏｌｄｅｒ）を生成するように動作する。
【００８４】
プレースホルダを提供することによって、実行すべき次の命令のアドレスが導出できるため、抑制を行なったことを受け手に対して都合よく表示することができる。
【００８５】
好ましくは、トレース生成ユニットは、命令がデータ処理装置によって実行されていることを示す入力信号の受信に応答して、命令トレースを生成する。
【００８６】
命令が実行されていることを示すことによって、プログラムカウンタ値の変更が推測できる。これは、命令が実行されるたびに、通常はプログラムカウンタは予め定められた値、例えば、‘ｍ’ビットだけ増分されて、プログラムカウンタはメモリ中の次のシーケンシャル命令のアドレスを指すようになるからである。プログラムカウンタが増分されたことを示すために必要なデータ量は、項目の値が変更されたとしてプログラムカウンタを同定し、次にその新しい値を同定するために要するデータよりも大幅に少ないことは理解されよう。
【００８７】
本発明の第３の態様に従えば、本発明の第１および第２の態様に従うトレースモジュールを含むデータ処理装置が提供される。
【００８８】
本発明の第４の態様に従えば、データ処理装置のアーキテクチャ・ステートのサブセットにおける変化をトレースする方法が提供される。本方法は：前記データ処理装置の１または複数の部品から、アーキテクチャ・ステートの前記サブセットにおける変化を示す入力信号を受信する工程；先に生成されたトレース要素から導出できるアーキテクチャ・ステートを同定するテーブルを参照することによって、生成すべきトレース要素を決定する工程；および前記変化を示す複数のトレース要素を生成して、前記トレース要素の受け手が後でアーキテクチャ・ステートの前記サブセットを再構築できるようにする工程を含む。
【００８９】
本発明の第５の態様に従えば、データ処理装置のプログラムカウンタ値の変化をトレースする方法が提供される。データ処理装置は命令のシーケンスを実行するように構成されており、プログラムカウンタ値はデータ処理装置が実行すべき次の命令を示している。本方法は：前記データ処理装置の１または複数の部品から、実行されている現在の命令を示す入力信号を受信する工程；前記入力信号から、現在の命令に付随するデータを示すデータトレース要素およびプログラムカウンタ値の変化を示す分岐トレース要素を選択的に生成する工程；および現在の命令が、プログラムカウンタ値に非シーケンシャルな変化をもたらす間接的分岐命令である場合は、データトレース要素あるいは分岐トレース要素のいずれかの生成を抑制する工程を含み、プログラムカウンタ値の変化は生成されたトレース要素から導出できるようになっている。
【００９０】
本発明の第６の態様に従えば、コンピュータの読出し可能なメディア上に記録されたコンピュータプログラム製品であって、コンピュータ上で実行されたときに、本発明の第４および第５の態様の工程を実行するコンピュータプログラム製品が提供される。
【００９１】
【実施例】
図１はオンチップ型トレースモジュールを提供するデータ処理装置２を模式的に示す。集積回路４はマイクロプロセッサコア６、キャッシュメモリ８、オンチップ型トレースモジュール１０、およびオンチップ型トレースバッファ１２を含む。この例示的実施の形態はいずれもオンチップ型のトレースモジュール１０とトレースバッファ１２とを示しているが、トレースモジュールおよび／またはトレースバッファを別に設けて、集積回路４あるいはプロセッサコア６とつなぐようにもできることを理解されよう。
【００９２】
データ処理装置２はそれに付随してアーキテクチャ・ステートを有する。典型的には、いくつかのアーキテクチャ・ステートはプロセッサコア６が実行する各命令に関連する。その他のアーキテクチャ・ステートはプロセッサコアあるいは、プロセッサコア６またはデータ処理装置２がつながれているその他のモジュールやユニットの全体としての動作あるいは状態に関連しよう。そのようなアーキテクチャ・ステートにはレジスタの内容、特別なメモリ場所に記憶された値、あるいは各種のバス、パス、ライン、フラグ、あるいはデータ処理装置２内のモジュールや、データ処理装置２がつながれているモジュールの状態が含まれる。
【００９３】
汎用コンピュータ１６がオンチップ型トレースモジュール１０およびオンチップ型トレースバッファ１２へつながれている。汎用コンピュータ１６は、トレース解析ツールとして動作し、そこで実行されるソフトウエアの制御下で、複数のトレース要素を含むトレースデータのストリームを復元する。それらのトレース要素は次にトレース解析ツールによって解析される。トレース要素はデータ処理装置２のアーキテクチャ・ステートを再構築するために用いられる情報を提供する。データ処理装置２のアーキテクチャ・ステートを再構築することによって、データ処理装置２内のステップごとの活動が決定できて、それを活用して、データ処理装置２によって実行される処理命令のシーケンスをデバッグすることができる。トレース解析ツールには、データ処理装置２のアーキテクチャ・ステートを再構築するときに参照する、プロセッサコア６によって実行される命令シーケンスを予め提供しておくほうが好ましい。
【００９４】
集積回路４は外部メモリ１４へつながれ、後者はキャッシュメモリ８内でキャッシュミスが発生したときにアクセスされる。それは、プロセッサコア６が動作中に、外部メモリ１４中に実際に存在するスペースよりも多くのデータ処理命令およびデータにアクセスする必要がある場合にしばしば発生する。例えば、外部メモリ１４が１ＭＢの容量を有するとしよう。このとき、プロセッサコア６が３２ビットのメモリアドレスを指定することが可能であれば、４ＧＢの命令およびデータを指定することが可能となる。従って、プロセッサコア６によって必要とされる命令およびデータのすべてが外部記憶１８、例えばハードディスクに記憶される。次に、プロセッサコア６が特別な動作状態において動作するようになって、その動作状態のための関連する命令およびデータが外部メモリ１４へロードされる。キャッシュメモリ８、外部メモリ１４、および外部記憶１８の内容および状態は、プロセッサコア６の動作を正確に再構築するためにしばしばトレースする必要のあるアーキテクチャ・ステートの項目である。
【００９５】
プロセッサコア６内部には、一時的にデータを記憶するための複数のレジスタを含むレジスタバンク２０が設けられる。算術および論理ユニット（ＡＬＵ）２２もまた、レジスタの内容に対して各種の算術および論理演算を実行するために設けられる。ＡＬＵ２２による演算の後で、演算結果はバス２４を介してレジスタバンク２０へ循環して戻されるか、あるいはバス２６を通ってキャッシュ８へ記憶される。レジスタバンク２０の内容および状態、あるいはＡＬＵ２２または内部あるいは外部バスの状態もまた、アーキテクチャ・ステートの項目であり、プロセッサコア６の動作を正確に再構築するためにトレースする必要がしばしばある。
【００９６】
図２は図１のオンチップ型トレースモジュール１０内に設けられた部品をより詳細に示すブロック図である。オンチップ型トレースモジュール１０は、プロセッサコア６によって実行される処理を示すデータをパス１０５上で受信するように配置されている。図１を参照すると、これは、コアからバス２８を通って直接受信される付加的な制御型のデータと一緒に（これらはまた、その命令アドレスがインデックスされているという表示とか、或る命令が何らかの理由でそれの条件コードで失敗したという表示など、データ処理装置２のアーキテクチャ・ステートの表示を与える）、プロセッサコア６、キャッシュ８、およびオンチップ型トレースモジュール１０を接続しているバス２４および２６から受信されよう（そのようなデータは、例えば、プロセッサコア６に対して与えられる命令および／またはデータ、およびプロセッサコア６のＡＬＵ２２によって生成されるデータなどのように、データ処理装置２のアーキテクチャ・ステートを表示する）。当業者には理解されるように、いくつかの実施の形態では、両タイプのデータを、トレースモジュール１０とプロセッサコア６との間の単一バス（多重バス２４、２６、２８等の代わりの）を通ってトレースモジュール１０へ送ることもできる。
【００９７】
同期ロジック１００は入力信号を、オンチップ型トレースモジュール１０内で使用するのにより適した内部向けの信号へ変換するように構成されている。これらの内部向け信号は次にトリガ１１０およびトレース生成ロジック１２０へ送られる。しかし、理解されるように、トリガ１１０およびトレース生成ロジック１２０は同じ信号を受信する必要はない。基本的に、トリガ１１０は、例えば、命令アドレス、データ値、レジスタアクセス、あるいは何らかのその他アーキテクチャ・ステートの発生のようなトリガ可能な事象に関連するデータを受信する必要がある。トレース生成ロジック１２０は、トリガ１１０によって発行されるイネーブル信号に依存して、トレースする必要のある任意のデータを受信する必要がある。トレース生成ロジック１２０は更に、汎用コンピュータ１６からパス１２５上にコンフィギュレーション情報を受信するように構成されており、後者の内容は必要に応じて、オンチップ型トレースモジュール１０の部品によって読み出すことができる。
【００９８】
トリガ１１０がトレース・ストリームを生成すべき事象を検出するときは常に、それはトレース生成ロジック１２０に対してパス１２５上へイネーブル信号を送信して、トレースのオンおよびオフを行なう。トレース生成ロジック１２０はそれに従って反応し、必要なトレース要素をＦＩＦＯ１３０に対してパス１４５および１５５上へ出力する。パス１３５上へは、例えば命令のみのトレース、命令およびデータのトレース等、トレースすべき信号タイプを指定する多様なイネーブル信号が提供されるであろうことを理解されよう。
【００９９】
典型的には、トレース生成ロジック１２０によって生成されるトレース信号あるいはトレース要素は、高優先度または低優先度のいずれかに分類される。この分類はトレース生成ブロック１２０内で管理されることが好ましく、予め定義したり、ユーザがプログラムしたりする。図２に示す好適な実施の形態では、高優先度のトレース要素は、例えば分岐アドレスに関連するトレース信号のように命令トレースに関するものであり、他方、低優先度のトレース要素は、データトレースに関連するものである。そのような低優先度のトレース要素は同期を外すことなしに失われてもよい。ＦＩＦＯ１３０からトレース生成ロジック１２０によって受信される信号が存在しないときは、トレース生成ロジックは、トリガ１１０からパス１３５上で受信されるイネーブル信号に依存して、ＦＩＦＯ１３０に対して適当なトレースデータを出力するように構成されよう。この結果、例えば、命令トレース要素がパス１４５上へ発行され、データトレース要素がパス１５５上へ発行される。当業者には明らかなように、図２には明確な２つのパスが示されているが、命令トレースおよびデータトレースの両信号は典型的にはトレース生成ロジック１２０とＦＩＦＯ１３０との間で接続を共有することができる。
【０１００】
命令のトレースに加えてデータをトレースするときには、パス１５５上へ発行されるデータトレース要素は、トレース生成ロジック１２０からＦＩＦＯ１３０へのトレースポート帯域幅の大部分を使用することができることが分かった。次にトレース要素は狭い出力トレースポートを通って、ＦＩＦＯ１３０からトレースバッファ１２へパス１５０を通って流れ出す。典型的には、トレースバッファへ向かってパス１５０上へ発行されるすべてのトレース要素には、その出力トレースが有効であるか否かを表示するトレース有効信号がパス１４０上に伴う。トレース有効信号は、関連するトレースモジュールがそのクロックサイクルにおいて発行すべきトレースデータを持たないときは、無効にセットされるのが一般的である。
【０１０１】
ＦＩＦＯ１３０からの出力帯域幅は典型的には入力帯域幅よりも小さいため、例えば、トレース生成ブロック１２０によって発行されるトレースデータが持続的バーストを起こすときなどにＦＩＦＯ１３０がオーバフローする可能性がある。一例として、入力トレースポートはトレースバッファへの出力トレースポートよりも４−５倍広くできる。
【０１０２】
この問題点を緩和するために探求された１つの既知の方法は、逆にオンチップ型トレースモジュール１０からプロセッサコア６へＦＩＦＯフル信号を発行することによって、一時的にプロセッサコア６を休止させて、ＦＩＦＯ１３０内のトレース要素のレベルが下がるのを待つものであった。しかし、固有の待ち時間やその他の問題から、この方法は信頼性に欠けることが判明した。その理由は、ＦＩＦＯフル信号の発行と、プロセッサコア６の休止との期間に、コア６が休止するまで活動の結果として更に多くのトレース要素が発行されて、いずれにしてもＦＩＦＯ１３０がオーバフローする傾向を示すことがしばしば見受けられたためである。
【０１０３】
この問題点を緩和する別の方法は、係属中の米国特許出願第１０／２０６，８２９号（２００２年７月２９日付け出願、また２００２年６月７日出願の英国特許出願第０２１３１４９．８号を優先権主張）に述べられているが、抑制信号が用いられており、それをＦＩＦＯ１３０がパス１６０を通って直接トレース生成ロジック１２０へ発行するようになっている。好ましくは、ＦＩＦＯ１３０の満杯度が予め定められた抑制レベルに到達すると、ＦＩＦＯ１３０がトレース生成ロジック１２０に対して抑制信号を発行して、抑制信号がアサートされている間は、トレース生成ロジック１２０がパス１５５上へデータトレース要素の発行を停止するように構成される。これは、データトレース要素が失われることを意味するが、それらは低優先度のトレース要素と見られており、同期化情報を失うことなく失われてもよい。更に、データトレースは高優先度の命令トレースよりも広い帯域幅を使用するのが一般的であるため、データトレースの抑制は、ＦＩＦＯ１３０が満杯になるのを回避するのにしばしば十分であることが分かった。
【０１０４】
ＦＩＦＯ１３０内のトレース要素の量がその後予め定められたリスタートレベルまで低下すると、ＦＩＦＯ１３０は抑制信号のアサートを中止し、それによってトレース生成ブロック１２０がパス１５５上へデータトレース要素の発行を再開するように構成される。
【０１０５】
予め定められる抑制レベルおよび予め定められるリスタートレベルは実施の形態に依存して選ぶことができることを理解されよう。しかし、一例として、６０バイトのＦＩＦＯでは、予め定められる抑制レベルは４５バイトに設定できよう（すなわち、ＦＩＦＯが７５％満杯のとき）。また予め定められるリスタートレベルは、抑制信号のアサート停止された後で、直ちに抑制信号の再アサートを必要としないように、ＦＩＦＯ内に記憶されるトレース要素の量を増やす余裕がいくらか残っていることを保証するために、４５バイトよりも少し低い値に設定されよう。
【０１０６】
抑制信号の発行時に単にデータトレース要素を破棄する動作のみで常にＦＩＦＯ１３０のオーバフローを回避できるわけではないため、ＦＩＦＯ１３０はそれが満杯になったときに、パス１７０上へオーバフロー信号を発行できるようになっていて、それによってトレース生成ロジック１２０はそのオーバフロー信号がアサート停止されるまではすべてのトレース要素の発行を停止する。そのようなシナリオでは、高優先度と低優先度の両方のトレースデータが失われることが明らかなため、抑制信号を発行する予め定められた抑制レベルを適当に選ぶことによって、オーバフロー信号を発行する必要のある場合が非常に稀であるように配慮されている。
【０１０７】
あるいは、トレース生成ロジック１２０に対して抑制信号を発行することに加えて、ＦＩＦＯ１３０は抑制信号がアサートされた後で、命令トレース要素を記憶するだけの付加的な内部工程を取るようになっている（これによって、抑制信号発行とその抑制信号に対するトレース生成ロジック１２０の応答との間の待ち時間をなくする）。
【０１０８】
これらの方法はすべて、データの生成を抑制または停止させるか、あるいは或る要素は失うことを許しながらＦＩＦＯ１３０中でのオーバフローの効果を最小に留めようとするものであることを理解されよう。更に、トレース要素を失うことは望ましくはないし、或る状況では、プロセッサを停止させることがその動作に悪影響を及ぼし、エラーや故障を覆い隠す可能性があることも理解されよう。
【０１０９】
しかし、本発明の実施の形態では更に、ともかく生成されるトレース要素の量が低下すれば、トレース生成ロジック１２０のオーバフロー流出の可能性は少なくなると見ている。従って、本発明の実施の形態は、トレース要素それ自体にある程度の冗長性があって、もしその冗長性を除去すれば生成するトレース要素の量を減らすことができると理解している。
【０１１０】
この冗長性は、例えば、先に生成したトレース要素を繰り返すことで発生する。そのような繰り返しは、例えば、アーキテクチャ・ステートを含むトレース要素が発行され、特にアーキテクチャ・ステートが変化していないのにそれに続いてトレース要素が発行されるような場合に発生する。アーキテクチャ・ステートが変化していなければ、本発明の実施の形態は、それが先に生成されたトレース要素から導出、推測、あるいは暗示されると理解している。このことから、アーキテクチャ・ステートを導出することによって、そのような先に生成されたトレース要素の繰り返しは解消でき、それによってトレース生成ロジック１２０が生成するトレース要素の量を削減できる。
【０１１１】
更に、冗長性は、例えば、変化に応答して生成されたトレース要素が決定できたはずのものであった場合に発生し得る。そのような決定は、例えば、アーキテクチャ・ステートの変化に関する情報を含むトレース要素を発行することになって、その変化を引き起こすために使用されたアーキテクチャ・ステートが先に生成されたトレース要素中に提供されている場合に可能である。アーキテクチャ・ステートが先に生成されたトレース要素に依存することが分かれば、それをそれら先に生成されたトレース要素から決定または計算することができるはずである。このことから、決定可能なトレース要素の生成は回避できて、それによってトレース生成ロジック１２０が生成するトレース要素量を更に削減できる。
【０１１２】
このように、トレース生成ロジック１２０が生成するトレース要素の量は、トレース解析ツールによって導出できないものに限ることができる。上述のように、アーキテクチャ・ステートは、それが先にトレース生成ロジック１２０によって発行されたトレース要素中に与えられているか、あるいはそれら先に生成されたトレース要素から導出できれば、トレース解析ツールによって導出できるであろうことを理解されよう。
【０１１３】
トレース生成ロジック１２０が、アーキテクチャ・ステートの変化がトレース解析ツールによって導出できるかどうかを判断できるようにするために、トレース生成ロジック１２０は、それに対してトレース要素が提供されたアーキテクチャ・ステートの記録を管理する。この例示的な実施の形態では、この記録は複数のテーブル１８０の形で提供される。テーブル１８０にはレジスタテーブル、メモリテーブル、および命令メモリテーブルが含まれる。更に、複数のレジスタテーブル、メモリテーブル、および命令メモリテーブルを設けることもできる。複数のメモリテーブルを設けることは、サブルーチンやその他の命令シーケンスを実行することによって、メモリの特別な領域への分岐が発生する場合や多重スタックが生成される場合に特に適している。しかし、この記録は任意の適当な形を取ることができ、１つのテーブルだけでもよいことは理解されよう。
【０１１４】
テーブルにはトレースすべきアーキテクチャ・ステートの各項目について１つのエントリが設けられる。以下でより詳細に説明するように、アーキテクチャ・ステートのその項目の値がトレース解析ツールによって導出可能であると判断されたときは、そのエントリに対して表示がなされる。従って、変化が発生すると、トレース生成ロジック１２０はそれらのエントリを参照して、アーキテクチャ・ステートのどの項目が導出できないので、それらの項目についてトレース要素を生成しなければならないかを決めることができる。
【０１１５】
図３Ａ〜３Ｅは、トレース要素を生成する場合にオンチップ型トレースモジュール１０によって実行される処理工程をテーブル１８０を使って示している。ここに述べる処理はトリガ可能な事象が発生したことを想定しており、トリガ１１０がトレース生成ロジック１２０を許可してトレース要素を生成させること、またトレース解析ツールに記憶された基準オペコード（ｒｅｆｅｒｅｎｃｅ　ｏｐｃｏｄｅ）中のその位置にある命令がプロセッサコア６によって実行される命令と同期していることを仮定している。この例示的実施の形態でトレースされるアーキテクチャ・ステートはレジスタおよびメモリアドレスだけを含むようになっているが、任意のアーキテクチャ・ステートをトレースできることを理解されよう。
【０１１６】
図３Ａは全体構成を示しているが、トレース要素の生成時に、一旦許可されればトレース生成ロジック１２０が取る主要な工程を示している。プロセッサコア６によって実行される命令を示すデータの受信に応答して取られる主要な工程が示されており、それらには命令トレースの生成、およびそれに続く分岐命令のトレースおよびデータトレースを含む実行工程が含まれる。
【０１１７】
処理は工程Ｓ１０から始まり、工程Ｓ２０へ進む。
【０１１８】
工程Ｓ２０では、トレース生成ロジック１２０はプロセッサコア６によって命令実行が表示されるのを待つ。
【０１１９】
一旦その表示が受信されると、処理は工程Ｓ２２へ進み、テーブルの定期的なクリーニングを行なうオプションのルーチンが実行されよう。先に述べたように、このようなテーブルの定期的クリーニングは、もし何らかのトレース破壊が発生しても、トレースの一部だけの損失で済むことを保証する。もし破壊が発生すれば、トレース生成ロジック１２０は或るアーキテクチャ・ステートはトレース解析ツールによって導出できると仮定するが、トレース解析ツールがトレース要素を受信しないか、あるいはトレース要素が何らかの理由で破壊されているために、必ずしもそのようにならない。テーブルをクリアすることによってその処理が等価的にリセットされるため、トレース解析ツールが導出できるアーキテクチャ・ステートはないと考えられる。従って、後続の変化がトレースされ、テーブルはそれに従って更新される。もしテーブルの定期的なクリアを実行するのであれば、処理は工程Ｓ２４へ進み、テーブル中のエントリがクリアされる。すべてのテーブルのすべてのエントリをクリアするか、あるいは異なる時点に異なるテーブル、あるいはテーブルの一部をクリアすることによって、生成する必要のあるトレース要素の数を減らすことができることは理解されよう。
【０１２０】
次に処理は工程Ｓ３０へ進み、ＦＩＦＯ１３０に対して命令トレース要素が発行される。命令トレース要素は、プロセッサコア６によって処理されているオペコードと、トレース解析ツールに記憶されている基準オペコードとの間に同期が保たれていることを保証する。命令トレースは最も単純な形において、プロセッサコア６がその命令が何であるかについての情報を必ずしも提供することなく、次の命令へ移行したことを表示するだけである。
【０１２１】
その後、以下の図３Ｅを参照しながら説明するように、必要に応じてオペコードのトレースを含むオプションのシーケンスが実行されよう。
【０１２２】
工程Ｓ４０では、実行されている命令がいわゆる間接的分岐に関連するかどうかが判断される。間接的分岐というのは、プロセッサコア６によって実行される命令シーケンス中の分岐であって、従来のように分岐命令の発行の結果として発生するのではなく、例えばプログラムカウンタの操作によって発生する分岐であることを理解されよう。
【０１２３】
分岐トレース
その命令が間接的分岐に関連するときは、間接的分岐に関連する一連の工程（Ｓ５０，Ｓ６０，Ｓ９０，Ｓ８０）が実行される。そうでなければ、処理は工程Ｓ７０へ進む。間接的分岐はアーキテクチャ・ステートの何らかの他の部品を参照しながらプログラムカウンタ（ｐｃ）を修正し、オペコードから類推することが不可能な行き先を与える命令である。例えば、命令Ｂ＃２０（すなわち、プログラムカウンタの内容に対して即値“２０”を加算する）は直接的分岐の例である。というのは、行き先がオペコードから直接導出できるからである。他方、命令ＡＤＤ　ｐｃ，ｐｃ，ｒ１（すなわち、プログラムカウンタに対してレジスタｒ１の内容を加えて、結果をプログラムカウンタに記憶する）は間接的分岐の例である。というのは、行き先がオペコードから直接には導出できず、レジスタｒ１の内容に依存するからである。ｐｃは単なる１つのアーキテクチャ・ステートの項目であり、それがトレース解析ツールによって導出可能ならその値はトレースする必要がないことを理解されよう。しかし、ｐｃは正しい同期化を保証するためにはトレース解析ツールによって導出できる必要のあるアーキテクチャ・ステートの１項目であることも理解されよう。
【０１２４】
もしも命令が間接的分岐に関連していれば、工程Ｓ５０において、その間接的分岐がｐｃへのロード（すなわち、値をプログラムカウンタにロードされたメモリからのアクセス）を含むかどうかが判断される。
【０１２５】
もし間接的分岐がｐｃへのロードを含めば、処理は工程Ｓ６０へ進み、アクセスされるメモリ場所のアドレスに対するテーブル・エントリ中に、そのメモリ場所に記憶された値がトレース解析ツールによって導出できることを示す表示がなされているかどうかを判断する。アクセスされるメモリ場所は、間接的分岐が行なわれるべきアドレスを示す値を提供する。もしテーブル中に表示がなされていれば、トレース要素を生成する必要はなく、処理は工程Ｓ７０へ進む。もしテーブル中に表示がなければ、工程Ｓ６５において、データ転送に付随するデータが受信されるまで処理は停止し、その後、工程Ｓ８０において、特別なアドレスへの分岐が発生したことを示す命令トレースが発行されて、処理は工程Ｓ７０へ進む。
【０１２６】
その代わり、もし間接的分岐がｐｃへのロードを含まなければ（すなわち、命令がメモリからのアクセスを含まず、その代わりに１または複数のレジスタへのアクセスを含む場合）、処理は工程Ｓ９０へ進み、アクセスされるソースレジスタ（単数または複数）に関するテーブル・エントリ中に、そのソースレジスタ（単数または複数）の値がトレース解析ツールによって導出可能であるという表示がなされているかどうかが判断される。ソースレジスタ（単数または複数）は分岐を行なうべき先のアドレスを指定する値を提供する。もしそのような表示がテーブル中になされていれば、トレース要素を生成する必要はなく、処理は工程Ｓ７０へ進む。もしテーブル中に表示がなければ、工程Ｓ８０において特別なアドレスへの間接的分岐が発生したことを示す命令トレースが発行され、処理は工程Ｓ７０へ進む。
【０１２７】
上で述べたように、もし工程Ｓ４０において命令が間接的分岐に関連しないことが判明すれば、処理は直接、工程Ｓ７０へ進む。
【０１２８】
従って、直接的分岐に関しては工程Ｓ３０のように命令トレースだけを生成すればよい。それは、トレース解析ツール中の基準オペコードがプロセッサコア６が実行すべき次の命令を指定し、それからプログラムカウンタの値を導出することができ、同期の維持が保証されるためである。
【０１２９】
更にデータをトレースするときは、ロード、ストア、あるいはデータ処理などの命令に付随する、データトレースに関連する一連の工程（Ｓ１００，Ｓ１１０，および図３Ｂ，３Ｃ，および３Ｄ）が実行される。
【０１３０】
データトレース
工程Ｓ７０においてトレースすべきデータがあるかどうかが判断される。これは、例えばデータ転送のように、命令がプログラムカウンタ以外のアーキテクチャ・ステート、あるいはプログラムカウンタも含むその他のアーキテクチャ・ステートを修飾あるいは変更するためである。それ以上にデータをトレースする必要がない場合には、処理は工程Ｓ２０へ戻る。もしトレースすべき更なるデータがあれば、処理は工程Ｓ１００へ進み、そこでそのデータ転送に付随するデータが受信されるまで処理は停止する。一旦そのデータが受信されれば、処理は工程Ｓ１１０へ進む。
【０１３１】
工程Ｓ１１０では、データ転送のタイプが判定される。
【０１３２】
工程Ｓ１１０において、もしそのデータ転送がロード命令（すなわち、レジスタ中へ記憶すべきメモリからのアクセス）に関連していると判断されれば、図３Ｂに示すように処理は工程Ｓ１２０へ進む。
【０１３３】
工程Ｓ１１０において、もしもそのデータ転送がデータ処理命令（すなわち、１または複数のソースレジスタに含まれる値に対する演算であり、その結果はあて先レジスタに記憶される）に関連していると判断されれば、図３Ｃに示すように処理は工程Ｓ２３０へ進む。
【０１３４】
工程Ｓ１１０において、もしもそのデータ転送がストア命令（すなわち、メモリに記憶すべきレジスタからのアクセス）に関連していると判断されれば、図３Ｄに示すように処理は工程Ｓ２６０へ進む。
【０１３５】
ロード命令
図３Ｂはロード命令をトレースするための処理工程を示している。
【０１３６】
工程Ｓ１２０において、アクセスすべきメモリ中のアドレスに対応する値を含むレジスタの内容を、そのレジスタに付随するレジスタテーブル・エントリ中に表示がなされているかどうかを判断することによって、トレース解析ツールが導出できるかどうかが判断される。ある種の複雑なアドレッシングモードでは、そこからメモリのアドレスを取り出すレジスタ（単数または複数）はトレース解析ツールによって導出可能でなければならないことを理解されよう。
【０１３７】
そのレジスタに付随するレジスタテーブル・エントリ中に表示がなされていないため、レジスタ内容が導出できないと判断されたときは、処理は工程Ｓ１３０へ進む。工程Ｓ１３０において、アドレストレースが発行され、処理は工程Ｓ１４０へ進む。工程Ｓ１４０では、アクセスすべきメモリ中のアドレスに対応する値を含むレジスタに付随するレジスタテーブル・エントリが更新されて、そのレジスタの内容がトレース解析ツールによって導出可能であると表示される。しかし上で述べたように、例えば、多重レジスタを使用するようなある種の複雑なアドレッシングモードでは、レジスタ（単数または複数）の内容を決定あるいは推測すらできない場合があり、そのときは付随するレジスタテーブル・エントリに対してそのような表示を行なうことはない。
【０１３８】
そのレジスタに付随するレジスタテーブル・エントリに表示がなされているため、そのレジスタの内容を導出できると判断された場合には、アドレストレースは不要であり、処理は工程Ｓ１５０へ進む。
【０１３９】
工程Ｓ１５０では、アクセスすべきメモリアドレスの内容を、そのメモリアドレスに付随するメモリテーブル・エントリ中に表示がなされているかどうかを判断することによって、トレース解析ツールが導出できるかどうかが判断される。
【０１４０】
アクセスすべきメモリアドレスの内容が、そのメモリアドレスに付随するメモリテーブル・エントリ中に表示がないため、導出できないと判断された場合は、処理は工程Ｓ１６０へ進む。
【０１４１】
工程Ｓ１６０では、ロード命令が、間接的分岐を生ずるプログラムカウンタへのロードであるかどうかが判断される。
【０１４２】
もしもそのロード命令が間接的分岐をもたらすと判断されれば、トレース要素を生成する必要はなく（トレース要素は既に工程Ｓ８０で生成されているため）、処理は工程Ｓ１７０へ進む。
【０１４３】
もしロード命令が間接的分岐を引き起こさないと判断されれば、アクセスすべきメモリアドレスの内容を示すデータトレース要素が工程Ｓ１８０で発行されて、処理は工程Ｓ１７０へ進む。
【０１４４】
工程Ｓ１７０では、アクセスすべきメモリアドレスがメモリテーブルの現在のレンジに含まれるかどうかが判断される。
【０１４５】
もしアクセスすべきメモリアドレスがメモリテーブルの現在のレンジに含まれないと判断されれば、工程Ｓ１９０およびＳ２００においてメモリテーブルのレンジが調整される。工程Ｓ１９０では、メモリテーブルのすべてのエントリがクリアされ、工程Ｓ２００ではメモリテーブルのメモリベースアドレスが更新されて、処理は工程Ｓ２１０へ進む。メモリベースアドレスの更新例は以下の図４Ａおよび図４Ｂを参照しながら、より詳細に説明する。
【０１４６】
アクセスすべきメモリアドレスがメモリテーブルの現在のレンジに含まれると判断された場合は、処理は工程Ｓ２１０へ進む。
【０１４７】
工程Ｓ２１０では、アクセスすべきメモリアドレスに付随するメモリテーブル中のエントリが更新され、このメモリアドレスの内容がトレース解析ツールによって導出可能であることが表示されて、処理は工程Ｓ２２０へ進む。
【０１４８】
しかし、もしも工程Ｓ１５０で、アクセスすべきメモリアドレスの内容が、そのメモリアドレスに付随するメモリテーブル・エントリに表示がなされているため、導出可能であると判断されれば、トレース要素を生成する必要はなく、処理は直接、工程Ｓ２２０へ進む。
【０１４９】
工程Ｓ２２０では、その中へデータをロードすべきレジスタに付随するレジスタテーブル中のエントリが更新され、このレジスタの内容がトレース解析ツールによって導出できることが表示されて、処理は工程Ｓ２０へ戻る。
【０１５０】
データ処理命令
図３Ｃはデータ処理命令をトレースするための処理工程を示す。
【０１５１】
工程Ｓ２３０では、ソースレジスタ（単数または複数）の値（単数または複数）を、各々のソースレジスタに付随するレジスタテーブル・エントリ中に表示がなされているかどうかを判断することによって、トレース解析ツールが導出できるかどうかが判断される。
【０１５２】
もし、ソースレジスタ（単数または複数）の値が、それらのソースレジスタに付随するレジスタテーブル・エントリ中に表示がなされていないために導出できないと判断されれば、処理は工程Ｓ２３５へ進む。
【０１５３】
工程Ｓ２３５では、データ処理命令が、間接的分岐を引き起こすプログラムカウンタの操作を含むかどうかが判断される。
【０１５４】
もしデータ処理命令の結果、間接的分岐が発生すると判断されれば、トレース要素を生成する必要はなく（トレース要素は既に工程Ｓ８０で生成されているはず）、処理は工程Ｓ２５０へ進む。
【０１５５】
もしもデータ処理命令が間接的分岐を引き起こさないと判断されれば、工程Ｓ２４０においてあて先レジスタの新しい値を指定するトレース要素（単数または複数）が生成され、処理は工程Ｓ２５０へ進む。
【０１５６】
しかし、もし工程Ｓ２３０でソースレジスタ（単数または複数）の値が、それらのソースレジスタに付随するレジスタテーブル・エントリ中に表示がなされているため、導出可能であると判断されれば、トレース要素を生成する必要はなく、処理は工程Ｓ２５０へ進む。
【０１５７】
工程Ｓ２５０では、あて先レジスタに付随するレジスタテーブル中のエントリが更新され、このレジスタの内容がトレース解析ツールによって導出できることが表示され、処理は工程Ｓ２０へ戻る。
【０１５８】
ストア命令
図３Ｄはストア命令をトレースするための処理工程を示す。
【０１５９】
工程Ｓ２６０では、その中にデータを記憶しようとするメモリ中のアドレスに対応する値を含むレジスタの内容を、そのレジスタに付随するレジスタテーブル・エントリ中に表示がなされているかどうかを判断することによって、トレース解析ツールが導出できるかどうかが判断される。ある種の複雑なアドレッシングモードに関しては、そこからメモリ中のアドレスを取り出すレジスタ（単数または複数）はトレース解析ツールによって導出可能でなければならないことを理解されよう。
【０１６０】
そのレジスタの内容が、そのレジスタに付随するレジスタテーブル・エントリ中に表示がなされていないため、導出できないと判断された場合には、処理は工程Ｓ２７０へ進む。工程Ｓ２７０では、アドレストレースが発行されて、処理は工程Ｓ２８０へ進む。工程Ｓ２８０では、その中へデータを記憶しようとするメモリアドレスに対応する値を含むレジスタに付随するレジスタテーブル・エントリが更新され、そのレジスタの内容がトレース解析ツールによって導出できることが表示されて、処理は工程Ｓ２９０へ進む。しかし、上で述べたように、例えば、多重レジスタを採用するようなある種の複雑なアドレッシングモードでは、レジスタ（単数または複数）の内容を決定あるいは推測さえできない場合があり、その場合には付随するレジスタテーブル・エントリに対してそのような表示は行なわれない。
【０１６１】
レジスタの内容が、そのレジスタに付随するレジスタテーブル・エントリ中に表示がなされていることから、導出できると判断された場合は、アドレストレースは不要であり、処理は直接、工程Ｓ２９０へ進む。
【０１６２】
工程Ｓ２９０では、ソースレジスタの値を、そのレジスタに付随するレジスタテーブル・エントリ中に表示がなされているかどうかを判断することによって、トレース解析ツールが導出できるかどうかが判断される。
【０１６３】
もしソースレジスタの値が、そのソースレジスタに付随するレジスタテーブル・エントリ中に表示がなされていない理由で、導出できないと判断されれば、処理は工程Ｓ３００へ進む。工程Ｓ３００では、ソースレジスタの値を表示するトレース要素が生成されて、処理は工程Ｓ３１０へ進む。工程Ｓ３１０では、ソースレジスタに付随するレジスタテーブル中のエントリが更新され、このレジスタの内容がトレース解析ツールによって導出可能であることが示されて、処理は工程Ｓ３２０へ進む。
【０１６４】
しかしもしも工程Ｓ２９０において、ソースレジスタに付随するレジスタテーブル・エントリ中に表示がなされていることから、そのソースレジスタの値が導出できると判断されれば、トレース要素の生成は不要であり、処理は工程Ｓ３２０へ進む。
【０１６５】
工程Ｓ３２０では、その中にデータを記憶しようとするメモリアドレスが、メモリテーブルの現在のレンジに含まれるかどうかが判断される。
【０１６６】
もしそのメモリアドレスがメモリテーブルの現在のレンジに含まれないと判断されれば、工程Ｓ３３０およびＳ３４０においてメモリテーブルのレンジが調整される。工程Ｓ３３０では、そのメモリテーブル中のすべてのエントリがクリアされ、工程Ｓ３４０では、そのメモリテーブルのメモリベースアドレスが更新されて、処理は工程Ｓ３５０へ進む。
【０１６７】
しかしもし工程Ｓ３２０において、その中にデータを記憶しようとするメモリアドレスがメモリテーブルの現在のレンジに含まれると判断されれば、処理は直接、工程Ｓ３５０へ進む。
【０１６８】
工程Ｓ３５０では、その中にデータを記憶しようとするメモリアドレスに付随するメモリテーブル中のエントリが更新され、このメモリアドレスの内容がトレース解析ツールによって導出できることが表示されて、処理は工程Ｓ２０へ戻る。
【０１６９】
オペコードトレース
図３Ｅはオペコードのトレースに関連するオプションの一連の工程を示す。上で述べたように、トレース解析ツールは基準オペコードを記憶するが、オペコードは、データ処理装置２のアーキテクチャ・ステートを再構築するためにトレース生成ロジックによって生成されるトレース要素を解読するために用いられる。トレース解析ツール内のオペコード中の場所は、プロセッサコア６によって実行される命令と同期する。プロセッサコア６によって実行される命令がトレース解析ツールの基準オペコード内に含まれていなければ、図３Ｅに示す工程はそのオペコードのトレースを許可するのが有利である。
【０１７０】
典型的には、トレース解析ツールに含まれる基準オペコードを表示するために別の命令メモリテーブルが用意される。これは、命令とデータとはメモリの異なる部分に常駐するのが普通だからである。しかし、特定のメモリアドレスがトレース解析ツールによって導出できるかどうかを表示するために用いられるのと同じテーブルを同様に利用できることも理解されよう。
【０１７１】
従って、工程Ｓ３６０では、プロセッサコア６によって処理されている命令を、その命令のメモリアドレスに付随する命令メモリテーブル・エントリ中に表示がなされているかどうかを判断することによって、トレース解析ツールが導出できるかどうかが判断される。
【０１７２】
もし工程Ｓ３６０において、その命令のメモリアドレスに付随する命令メモリテーブル・エントリ中に表示がなされていない理由で、その命令が導出できないと判断されれば、処理は工程Ｓ３７０へ進む。工程Ｓ３７０では、プロセッサコア６によって処理されている命令を示すトレース要素が生成され、処理は工程Ｓ３８０へ進む。
【０１７３】
工程Ｓ３８０では、その命令のメモリアドレスが、命令メモリテーブルの現在のレンジに含まれるかどうかが判断される。
【０１７４】
もしも工程Ｓ３８０で、その命令のメモリアドレスが命令メモリテーブルの現在のレンジに含まれないと判断されれば、工程Ｓ３９０およびＳ４００において命令メモリテーブルのレンジが調整される。工程Ｓ３９０では、その命令メモリテーブルのすべてのエントリがクリアされ、工程Ｓ４００ではその命令メモリテーブルのメモリベースアドレスが更新されて、処理は工程Ｓ４１０へ進む。
【０１７５】
もし工程Ｓ３８０で、その命令のメモリアドレスが命令メモリテーブルの現在のレンジに含まれると判断されれば、処理は工程Ｓ４１０へ進む。
【０１７６】
工程Ｓ４１０では、その命令のメモリアドレスに付随する命令メモリテーブル中のエントリが更新され、この命令がトレース解析ツールによって導出できることが示されて、処理は工程Ｓ４０へ進む。
【０１７７】
しかし、工程Ｓ３６０でその命令のメモリアドレスに付随する命令メモリテーブル・エントリ中に表示がなされていることから、その命令が導出できると判断されたときは、処理は直接、工程Ｓ４０へ進む。
【０１７８】
図４Ａおよび４Ｂは、プロセッサコアによって実行される命令の例を、オンチップ型トレースモジュール１０のトレース生成ロジック１２０によって生成される付随トレース要素およびテーブル・エントリと一緒に示している。
【０１７９】
次のように仮定する。すなわち、トリガ可能な事象が発生したこと、トリガ１１０によってトレース生成ロジック１２０がトレース要素の生成を許可されたこと、およびトレース解析ツールに記憶されている基準オペコード中のその場所にある命令は、プロセッサコア６によって実行されている命令と同期していること。更に、次のように仮定する。すべての命令はトレース解析ツールによって導出可能であり、オペコードのトレースは必要ない。更に、レジスタ、メモリ、およびオペコードの各テーブルが別々に設けられている。
【０１８０】
トレースが発行される場合は、それはそれのタイプ、位置、および任意の関連する値やパラメータが、既知のトレースプロトコルに類似した方法で同定できるように表現されることが仮定されている。そのようなプロトコルでは、トレースが関連するアーキテクチャ・ステート変化が導出できるためトレースが抑制された場所に、プレースホルダを挿入する必要がある。
【０１８１】
工程Ｓ２０では、トレース生成ロジック１２０は命令が受信されるのを待つ。
【０１８２】
命令あるいはオペコードＬＤＲ　ｒ１，［ｒ０］（すなわち、ｒ０の内容によって参照されるメモリアドレスに記憶されている値をｒ１にロードする）が受信される（図４Ａに１ａで示すように）。
【０１８３】
工程Ｓ２２では、テーブルをクリアすべきかどうかが決められる。典型的には、クリアはトリガ可能な事象の後で行なわれ、それ以降は定期的にクリアが行なわれる。例えば、命令を‘ｎ’回実行するごとに、クリアを行なうようにしてもよい。この場合には、レジスタテーブルおよびメモリテーブルをクリアすべきかどうか決定され、工程Ｓ２４においてそれらのテーブルのエントリがクリアされる（しかし、必要に応じて、すべてのテーブルをクリアあるいはリセットすることもできることは理解されよう）。
【０１８４】
工程Ｓ３０では、プロセッサコア６とトレース解析ツールとの間でオペコード同期を保つために、命令トレースが発行される（図４Ａに１ｂで示すように）。例示の目的で、レジスタｒ０は値“００００２０００”を含み、メモリアドレス“００００２０００”には値“ａａ”が記憶されていると仮定している。
【０１８５】
工程Ｓ４０では、命令が間接的分岐に関連しないと判断され、工程Ｓ７０では命令がその代わりにデータ転送に関連していると判断され、また工程Ｓ１００ではトレース生成ロジック１２０はメモリからアクセスされるデータの指示が受信されるのを待つ。
【０１８６】
工程Ｓ１１０では、命令がロード命令であると判断され、処理は工程Ｓ１２０へ進む。
【０１８７】
すべてのレジスタがクリアされたので、レジスタｒ０のレジスタ・エントリにはこのレジスタの内容がトレース解析ツールによって導出可能であるという表示は存在せず、ｒ０の内容、すなわち値“００００２０００”が工程Ｓ１３０でトレースされる（図４Ａに１ｃで示すように）。その後、ｒ０に付随するレジスタテーブル中のエントリがセットされる（図４Ａに１ｄで示すように）。これはこのレジスタの内容が今やトレース解析ツールによって導出できるからである。
【０１８８】
すべてのメモリテーブルがクリアされたため、メモリアドレス“００００２０００”に対するメモリ・エントリには、このアドレスの内容がトレース解析ツールによって導出可能であるという表示はない。次に、ロード命令は間接的分岐ではないため、メモリアドレス“００００２０００”の内容、すなわち、値“ａａ”が工程Ｓ１８０でトレースされる（図４Ａに１ｅで示すように）。
【０１８９】
すべてのメモリテーブルがクリアされたため、工程Ｓ１７０では、メモリアドレス“００００２０００”はメモリテーブルのレンジに含まれないと判断されて、工程Ｓ２００ではメモリベースアドレスが更新される（図４Ａに１ｆで示すように）。メモリベースアドレスはこのアドレスの５個の最上位ビット（ＭＳＢ）を記憶し、工程Ｓ２１０では、このメモリアドレスに付随するメモリテーブル中のエントリが更新され（図４Ａに１ｇで示すように）、このメモリアドレスの内容がトレース解析ツールによって導出可能であることが表示される。
【０１９０】
工程Ｓ２２０では、レジスタｒ１の内容、すなわち値“ａａ”が今やトレース解析ツールによって導出できるため、ｒ１に付随するエントリがレジスタテーブル中で更新され（図４Ａに１ｈで示すように）、処理は工程Ｓ２０へ戻って、次の命令を待つ。
【０１９１】
次に、命令あるいはオペコードＡＤＤ　ｒ２，ｒ１，＃１（すなわち、ソースレジスタｒ１に記憶されている値に対して即値“１”を加えて、その結果をあて先レジスタｒ２に記憶する）が受信される（図４Ａに２ａで示すように）。工程Ｓ２２では、レジスタテーブルおよびメモリテーブルをクリアしないことが決定され、工程Ｓ３０ではプロセッサコア６とトレース解析ツールとの間でオペコード同期を保つために、命令トレースが発行される（図４Ａに２ｂで示すように）。
【０１９２】
工程Ｓ４０では、その命令が間接的分岐に関連しないと判断され、工程Ｓ７０ではその命令が代わりにデータ転送に関連すると判断され、更に工程Ｓ１００ではトレース生成ロジック１２０はメモリからアクセスされるデータの指示が受信されるのを待つ。
【０１９３】
工程Ｓ１１０では、この命令がデータ処理命令であると判断され、処理は工程Ｓ２３０へ進む。
【０１９４】
工程Ｓ２３０では、レジスタテーブルのｒ１に付随するエントリ中に表示がなされているため、ソースレジスタの内容がトレース解析ツールによって導出できると判断される。従って、ｒ２の内容を示すトレース要素を生成する必要はない。その代わり、ｒ２に付随するレジスタテーブル中のエントリが工程Ｓ２５０で単に更新される（図４Ａに２ｃで示すように）。これはこのレジスタの内容がトレース解析ツールによって導出できるからである。処理は工程Ｓ２０へ戻り、次の命令を待つ。
【０１９５】
次に、命令あるいはオペコードＡＤＤ　ｒ４，ｒ２，ｒ３（すなわち、ソースレジスタｒ２に記憶されている値を、ソースレジスタｒ３に記憶されている値に加えて、その結果をあて先レジスタｒ４に記憶する）が受信される（図４Ａに３ａで示すように）。工程Ｓ２２では、レジスタテーブルおよびメモリテーブルをクリアしないことが決められ、工程Ｓ３０では、プロセッサコア６とトレース解析ツールとの間でオペコード同期を保つために命令トレースが発行される（図４Ａに３ｂで示すように）。
【０１９６】
工程Ｓ４０では、その命令が間接的分岐に関連しないと判断され、工程Ｓ７０ではその命令が代わりにデータ転送に関連すると判断され、工程Ｓ１００ではトレース生成ロジック１２０はメモリからアクセスされるデータの指示が受信されるのを待つ。
【０１９７】
工程Ｓ１１０では、その命令がデータ処理命令であると判断され、処理は工程Ｓ２３０へ進む。
【０１９８】
工程Ｓ２３０では、レジスタテーブルのｒ３に関連するエントリ中に表示がなされていないことから、両ソースレジスタの内容はトレース解析ツールによって導出できないと判断される。工程Ｓ２３５では、その命令がプログラムカウンタを含んでおらず、従って間接的分岐を含まないと判断される。従って、ｒ４中に記憶すべき内容を示すトレース要素が工程Ｓ２４０で生成され（図４Ａに３ｃで示すように）、ｒ４に付随するレジスタテーブル中のエントリが工程Ｓ２５０で更新される（図４Ａに３ｄで示すように）。これはこのレジスタの内容がトレース解析ツールによって導出できるためであり、処理は工程Ｓ２０へ戻って、次の命令を待つ。
【０１９９】
次に、命令あるいはオペコードＳＴＲ　ｒ４，［ｒ０＋＃４］（すなわち、メモリアドレスｒ０に記憶されている値に対して即値“４”を加えることによって得られるメモリアドレスに、ソースレジスタｒ４の内容を記憶する）が受信される（図４Ａに４ａで示すように）。工程Ｓ２２では、レジスタテーブルおよびメモリテーブルをクリアしないことが決められ、工程Ｓ３０ではプロセッサコア６とトレース解析ツールとの間でオペコード同期を保つために、命令トレースが発行される（図４Ａに４ｂで示すように）。
【０２００】
工程Ｓ４０では、その命令が間接的分岐に関連しないと判断され、工程Ｓ７０ではその命令が代わりにデータ転送に関連すると判断され、更に工程Ｓ１００では、メモリからアクセスされるデータの指示が受信されるのを待つ必要がないので、トレース生成ロジック１２０の処理は工程Ｓ１１０へ進む。
【０２０１】
工程Ｓ１１０では、その命令がストア命令であると判断され、処理は工程Ｓ２６０へ進む。
【０２０２】
工程Ｓ２６０では、レジスタの内容がメモリアドレス（ｒ０）を含むと判断され、工程Ｓ２９０ではレジスタテーブルのｒ０およびｒ４に付随するエントリに表示がなされていることから、ソースレジスタ（ｒ４）の内容が両方ともトレース解析ツールによって導出できると判断される。従って、メモリアドレス“００００２０００”に記憶すべき内容を示すトレース要素を生成する必要はない。
【０２０３】
更に、アドレス“００００２００４”がメモリテーブルのレンジに含まれると判断されるため、アドレス“００００２００４”に付随するメモリテーブル中のエントリが工程Ｓ３５０で単に更新される（図４Ａに４ｃで示すように）。これはこのメモリアドレスの内容がトレース解析ツールによって導出できるからであり、処理は工程Ｓ２０へ戻って、次の命令を待つ。
【０２０４】
次に、命令あるいはオペコードＳＴＲ　ｒ５，［ｒ０］（すなわち、メモリアドレスレジスタｒ０に記憶された値を有するメモリアドレス中へ、ソースレジスタｒ５の内容を記憶する）が受信される（図４Ｂに５ａで示すように）。工程Ｓ２２では、レジスタテーブルおよびメモリテーブルはクリアしないと決定され、工程Ｓ３０ではプロセッサコア６とトレース解析ツールとの間でオペコード同期を保つために命令トレースが発行される（図４Ｂに５ｂで示すように）。
【０２０５】
工程Ｓ４０ではその命令が間接的分岐に関連しないと判断され、工程Ｓ７０ではその命令が代わりにデータ転送に関連すると判断され、工程Ｓ１００ではメモリからアクセスされるデータの指示が受信されるのを待つ必要がないため、トレース生成ロジック１２０の処理は工程Ｓ１１０へ進む。
【０２０６】
工程Ｓ１１０ではその命令がストア命令であると判断され、処理は工程Ｓ２６０へ進む。
【０２０７】
工程Ｓ２６０では、メモリアドレス（ｒ０）を含むレジスタの内容が、レジスタテーブルのｒ０に付随するエントリ中に表示がなされていることから、トレース解析ツールによって導出できると判断される。従って、ｒ０の内容を示すトレース要素を生成する必要はない。
【０２０８】
工程Ｓ２９０では、ソースレジスタ（ｒ５）の内容が、レジスタテーブルのｒ５に付随するエントリ中に表示がなされていないことから、トレース解析ツールによって導出できないと判断される。従って、工程Ｓ３００では、ｒ５の内容、すなわち、値“ｃｃ”を示すトレース要素が生成され（図４Ｂに５ｃで示すように）、ｒ５に関連するレジスタテーブル中のエントリが工程Ｓ３１０で更新され、このレジスタの内容がトレース解析ツールによって導出可能であると表示される（図４Ｂに５ｄで示すように）。
【０２０９】
更に、工程Ｓ３２０ではアドレス“００００２０００”がメモリテーブルのレンジに含まれると判断されるため、そのアドレス“００００２０００”に付随するメモリテーブル中のエントリは、このメモリアドレスの内容がトレース解析ツールによって導出できるため、工程Ｓ３５０で単に更新されるだけであり（このメモリアドレスに対するエントリが既にセットされているため明らかな変化はないが）、処理は工程Ｓ２０へ戻って、次の命令を待つ。
【０２１０】
次に、命令あるいはオペコードＭＯＶ　ｐｃ，ｒ６（すなわち、プログラムカウンタの値を、ソースレジスタｒ６に記憶されている値に変更する）が受信される（図４Ｂに６ａで示すように）。工程Ｓ２２では、レジスタテーブルおよびメモリテーブルをクリアすべきでないことが決定され、工程Ｓ３０ではプロセッサコア６とトレース解析ツールとの間でオペコード同期を保つために命令トレースが発行される（図４Ｂに６ｂで示すように）。
【０２１１】
工程Ｓ４０では、その命令が間接的分岐に関連すると判断され、工程Ｓ５０ではその間接的分岐がメモリからプログラムカウンタへのロードを含まないことが判断され、工程Ｓ９０では、ソースレジスタ（ｒ６）の内容が、レジスタテーブルのｒ６に付随するエントリ中に表示がなされていないことから、トレース解析ツールによって導出できないと判断される。従って、工程Ｓ８０で、ｒ６の内容、すなわち値“ｄｄ”によって指定されるメモリアドレスへの分岐を示すトレース要素が生成される（図４Ｂに６ｃで示すように）。プログラムカウンタに記憶されている値の変化を指定する分岐命令トレースが生成されたので、レジスタｒ６の内容のデータトレースの実行を抑制することができ、処理は工程Ｓ７０を経て工程Ｓ２０へ戻り、次の命令を待つ。別の工程として、レジスタｒ６の内容を推定することが可能であり、レジスタテーブルのｒ６に付随するエントリを更新できることを理解されよう。
【０２１２】
次に、命令あるいはオペコードＭＯＶ　ｐｃ，ｒ１（すなわち、プログラムカウンタの値を、ソースレジスタｒ１に記憶されている値に変更する）が受信される（図４Ｂに７ａで示すように）。工程Ｓ２２では、レジスタテーブルおよびメモリテーブルをクリアすべきでないことが決定され、工程Ｓ３０ではプロセッサコア６とトレース解析ツールとの間でオペコード同期を保つために命令トレースが発行される（図４Ｂに７ｂで示すように）。
【０２１３】
工程Ｓ４０では、その命令が間接的分岐に関連すると判断され、工程Ｓ５０ではその間接的分岐がメモリからプログラムカウンタへのロードを含まないと判断され、工程Ｓ９０では、ソースレジスタ（ｒ１）の内容が、レジスタテーブルのｒ１に付随するエントリ中に表示がなされていることから、トレース解析ツールによって導出できると判断される。従って、ｒ１の内容によって指定されるメモリアドレスへの分岐を示すトレース要素は、プログラムカウンタ中の値の変化が推測できるため、生成する必要はない。従って、データトレースおよび分岐命令トレースは抑制され、処理は工程Ｓ７０を経て工程Ｓ２０へ戻り、次の命令を待つ。前に述べたように、抑制が発生したことをトレース解析ツールに対して示すためにプレースホルダを出力することも可能である。
【０２１４】
次に、命令あるいはオペコードＬＤＲ　ｒ２，［ｒ０＋＃４］（すなわち、ｒ０の内容に対して即値“４”を加えることによって参照されるメモリアドレスに記憶されている値を、ｒ２へロードする）が受信される（図４Ｂに８ａで示すように）。工程Ｓ２２では、レジスタテーブルおよびメモリテーブルをクリアすべきでないと決定され、工程Ｓ３０ではプロセッサコア６とトレース解析ツールとの間でオペコード同期を保つために命令トレースが発行される（図４Ｂに８ｂで示すように）。
【０２１５】
工程Ｓ４０ではその命令が間接的分岐に関連しないと判断され、工程Ｓ７０ではその命令が代わりにデータ転送に関連すると判断され、工程Ｓ１００ではトレース生成ロジック１２０はメモリからアクセスされるデータの指示が受信されるのを待つ。
【０２１６】
工程Ｓ１１０ではその命令がロード命令であると判断され、処理は工程Ｓ１２０へ進む。
【０２１７】
工程Ｓ１２０では、メモリアドレス（ｒ０）を含むレジスタが、レジスタｒ０に関するレジスタ・エントリ中に表示がなされていることから、トレース解析ツールによって導出できると判断される。従って、ｒ０の値はトレースする必要がなく、処理は直接、工程Ｓ１５０へ進む。
【０２１８】
工程Ｓ１５０では、ソースメモリアドレス（００００２００４）の内容が、メモリアドレス“００００２００４”に対するメモリ・エントリ中に表示がなされていることから、トレース解析ツールによって導出できると判断される。従って、メモリアドレス“００００２００４”の内容の値、すなわち“ｂｂ”はトレースする必要がなく、処理は直接、Ｓ２２０へ進む。
【０２１９】
工程Ｓ２２０では、アドレス“００００２００４”に付随するメモリテーブル中のエントリが更新され（このメモリアドレスに対するエントリは既にセットされているため変化は明らかではないが）、処理は工程Ｓ２０へ戻って、次の命令を待つ。
【０２２０】
次に、命令あるいはオペコードＬＤＲ　ｐｃ，［ｒ０−＃４］（すなわち、ｒ０の内容から即値“４”を差し引くことによって参照されるメモリアドレスに記憶されている値を、プログラムカウンタへロードする）が受信される（図４Ｂに９ａで示すように）。工程Ｓ２２では、レジスタテーブルおよびメモリテーブルをクリアすべきでないと決定され、工程Ｓ３０ではプロセッサコア６とトレース解析ツールとの間でオペコード同期を保つために命令トレースが発行される（図４Ｂに９ｂで示すように）。
【０２２１】
工程Ｓ４０ではその命令が間接的分岐に関連すると判断され、工程Ｓ５０ではその命令がプログラムカウンタへのロードを含むと判断され、工程Ｓ６０ではソースアドレス（００００１ｆｆｃ）がメモリテーブル中にないことが、そのアドレスに付随するエントリ中に表示がなされていないことから判断される。従って、工程Ｓ６５では、処理はそのロードに付随するデータが受信されるまで休止し、工程Ｓ８０ではアドレス“ｅｅ”への分岐を示すトレース要素（図４Ｂに９ｃで示すように）が発行されて、処理は工程Ｓ７０へ進む。
【０２２２】
工程Ｓ７０では、その命令がデータ転送に関連すると判断され、工程Ｓ１００ではトレース生成ロジック１２０はメモリからアクセスされるデータの指示が受信されるのを待つ。
【０２２３】
工程Ｓ１１０ではその命令がロード命令であると判断され、処理は工程Ｓ１２０へ進む。
【０２２４】
工程Ｓ１２０では、メモリアドレス（ｒ０）を含むレジスタが、レジスタｒ０に関するレジスタ・エントリ中に表示がなされていることから、トレース解析ツールによって導出できると判断される。従って、ｒ０の値はトレースする必要がなく、処理は直接、工程Ｓ１５０へ進む。
【０２２５】
工程Ｓ１５０では、ソースメモリアドレス（００００１ｆｆｃ）の内容を、メモリアドレス“００００１ｆｆｃ”に対するメモリ・エントリ中に表示がなされていないことから、トレース解析ツールが導出できないと判断される。
【０２２６】
工程Ｓ１６０では、その命令がプログラムカウンタへのロードを含むことから、その命令が間接的分岐であると判断され、従って、ソースアドレス（００００１ｆｆｃ）の内容、すなわち値“ｅｅ”が既に工程Ｓ８０においてトレースされていることから、データトレースは不要であると判断される。このことから、ソースアドレス（００００１ｆｆｃ）の内容のデータトレース実行が抑制できて、処理は工程Ｓ１７０進む。
【０２２７】
工程Ｓ１７０では、メモリアドレス“００００１ｆｆｃ”がメモリテーブルのレンジに含まれないと判断される。従って、工程Ｓ１９０で、メモリテーブルがクリアされ（図４Ｂに９ｄで示すように）、工程Ｓ２００ではメモリベースアドレスが“００００１ｘｘｘ”へ更新され（図４Ｂに９ｅで示すように）、工程Ｓ２１０ではメモリアドレス（すなわち、“００００１ｆｆｃ”）に付随するメモリテーブル中のエントリが、このメモリアドレスの内容がトレース解析ツールによって導出できると表示されるように更新される（図４Ｂに９ｆで示すように）。あるいは、先に述べたように、別のテーブルを用意して、そのベースアドレスを“００００１ｘｘｘ”にセットするか、あるいは既存のメモリテーブルを、メモリテーブルのレンジ外のメモリアドレスへ複数回の引き続くアクセスが行なわれるときだけクリアするように構成することでテーブルの安定性を向上させることもできる。
【０２２８】
工程Ｓ２２０では、プログラムカウンタレジスタに付随するエントリがレジスタテーブル中で更新され（プログラムカウンタの値は命令トレースを用いて常に導出できるため、変化は気づかれないため示されていない）、処理は工程Ｓ２０へ戻って、次の命令を待つ。
【０２２９】
例示の目的で、上にあげた例は、アーキテクチャ・ステートの１つの項目における変化をトレースするような単純な命令に関するものであったが、アーキテクチャ・ステートの複数の項目における変化をトレースする必要があるようなより複雑な命令のトレースであっても同様に実行できることを理解されよう。例えば、複雑な命令を単純な命令の集合と考えることができ、各々の単純な命令によって、トレースすべきアーキテクチャ・ステートの１つの項目中に変化が引き起こされる場合である。あるいは、トレースする必要のないアーキテクチャ・ステートの各項目の変化に対しては、プレースホルダを設けることができる。
【０２３０】
このことを示すために、命令あるいはオペコードＬＤＭ　ｒ０｛ｒ１−ｒ４｝（すなわち、ｒ０の内容によって参照されるメモリアドレスに記憶されている値をｒ１へロードする、ｒ０の内容に対して即値＃４（あるいはその他の定数）を加えることによって参照されるメモリアドレスに記憶されている値をｒ２へロードする、ｒ０の内容に対して即値＃８を加えることによって参照されるメモリアドレスに記憶されている値をｒ３へロードする、ｒ０の内容に対して即値＃１２を加えることによって参照されるメモリアドレスに記憶されている値をｒ４へロードする）の例について考えよう。
【０２３１】
ここで、例示の目的で次のように仮定する。レジスタｒ０の内容は導出可能であること、レジスタｒ０の内容によって参照されるメモリアドレスの内容は導出可能であること、レジスタｒ０の内容に対して即値＃１２を加えることによって参照されるメモリアドレスの内容は導出可能であること。しかしまた、次のようにも仮定する。レジスタｒ０の内容に対して即値＃４を加えることによって参照されるメモリアドレスの内容は導出できないこと、レジスタｒ０の内容に対して即値＃８を加えることによって参照されるメモリアドレスの内容は導出できないこと。
【０２３２】
この例で、命令が次のような簡単な一連の命令：ＬＤＲ　ｒ１，［ｒ０］；ＬＤＲ　ｒ２，［ｒ０，＃４］；ＬＤＲ　ｒ３，［ｒ０，＃８］；およびＬＤＲ　ｒ４，［ｒ０，＃１２］で表される場合には、次のようなトレース要素が生成される。
【０２３３】
ＬＤＲ　ｒ１，［ｒ０］については、命令トレースが発行され、データトレースは発行されない。それはレジスタｒ０の内容によって参照されるメモリアドレスの内容が導出可能だからである。
【０２３４】
ＬＤＲ　ｒ２，［ｒ０，＃４］については、命令トレースが発行され、レジスタｒ０の内容に対して即値＃４を加えることによって参照されるメモリアドレスの内容を示すデータトレースが発行される。それはこのメモリアドレスの内容が導出できないためである。
【０２３５】
ＬＤＲ　ｒ３，［ｒ０，＃８］については、命令トレースが発行され、レジスタｒ０の内容に対して即値＃８を加えることによって参照されるメモリアドレスの内容を示すデータトレースが発行される。それはこのメモリアドレスの内容が導出できないためである。
【０２３６】
ＬＤＲ　ｒ４，［ｒ０，＃１２］については、命令トレースが発行され、データトレースは発行されない。それはレジスタｒ０の内容に対して即値＃８を加えることよって参照されるメモリアドレスの内容が導出可能だからである。
【０２３７】
プレースホルダを採用する別の例では、単一の命令トレースが発行されて、データトレースは、プレースホルダ、データトレース、データトレース、プレースホルダの形を取る。最初のプレースホルダの発行は、レジスタｒ０の内容によって参照されるメモリアドレスの内容が導出できることをトレース解析ツールに対して示す。最初のデータトレースはレジスタｒ０の内容に対して即値＃４を加えることによって参照されるメモリアドレスの内容を示し、そのメモリアドレスの内容が導出できないため発行される。第２のデータトレースはレジスタｒ０の内容に対して即値＃８を加えることによって参照されるメモリアドレスの内容を示し、そのメモリアドレスの内容が導出できないため発行される。２番目のプレースホルダの発行は、レジスタｒ０の内容に対して即値＃１２を加えることよって参照されるメモリアドレスの内容が導出できることをトレース解析ツールに対して示す。
【０２３８】
本発明の特定の実施の形態についてこれまで説明してきたが、本発明はそれらに限定されないこと、また本発明のスコープ内で多くの修正および追加を行い得ることを理解されよう。例えば、本発明のスコープから外れることなく、特許請求の範囲の独立項の特徴点を従属項の特徴点と多様に組み合わせることができる。
【図面の簡単な説明】
【図１】本発明の実施の形態に従うデータ処理装置。
【図２】図１のオンチップ型トレースモジュールの特徴的機能。
【図３Ａ】オンチップ型トレースモジュールによって実行される処理工程。
【図３Ｂ】オンチップ型トレースモジュールによって実行される処理工程。
【図３Ｃ】オンチップ型トレースモジュールによって実行される処理工程。
【図３Ｄ】オンチップ型トレースモジュールによって実行される処理工程。
【図３Ｅ】オンチップ型トレースモジュールによって実行される処理工程。
【図４Ａ】プロセッサコアによって実行される命令の例を、オンチップ型トレースモジュールによって生成される関連トレース要素およびテーブル・エントリと一緒に示す表。
【図４Ｂ】プロセッサコアによって実行される命令の例を、オンチップ型トレースモジュールによって生成される関連トレース要素およびテーブル・エントリと一緒に示す表。
【符号の説明】
２　データ処理装置
４　集積回路
６　マイクロプロセッサコア
８　キャッシュメモリ
１０　オンチップ型トレースモジュール
１２　オンチップ型トレースバッファ
１４　外部メモリ
１６　汎用コンピュータ（トレース解析ツール）
１８　外部記憶
２０　レジスタバンク
２２　ＡＬＵ
２４，２６，２８　バス
１００　同期ロジック
１１０　トリガ
１２０　トレース生成ユニット
１２５，１３５，１４０，１４５，１５０，１５５，１６０，１７０　パス
１３０　ＦＩＦＯ
１８０　テーブル
【図１】
2004038981.tif 000003
【図２】
2004038981.tif 000004
【図３Ａ】
2004038981.tif 000005
【図３Ｂ】
2004038981.tif 000006
【図３Ｃ】
2004038981.tif 000007
【図３Ｄ】
2004038981.tif 000008
【図３Ｅ】
2004038981.tif 000009
【図４Ａ】
2004038981.tif 000010
【図４Ｂ】
2004038981.tif 000011
【外国語明細書】
2004038981.tif 000012
2004038981.tif 000013
2004038981.tif 000014
2004038981.tif 000015
2004038981.tif 000016
2004038981.tif 000017
2004038981.tif 000018
2004038981.tif 000019
2004038981.tif 000020
2004038981.tif 000021
2004038981.tif 000022
2004038981.tif 000023
2004038981.tif 000024
2004038981.tif 000025
2004038981.tif 000026
2004038981.tif 000027
2004038981.tif 000028
2004038981.tif 000029
2004038981.tif 000030
2004038981.tif 000031
2004038981.tif 000032
2004038981.tif 000033
2004038981.tif 000034
2004038981.tif 000035
2004038981.tif 000036
2004038981.tif 000037
2004038981.tif 000038
2004038981.tif 000039
2004038981.tif 000040
2004038981.tif 000041
2004038981.tif 000042
2004038981.tif 000043
2004038981.tif 000044
2004038981.tif 000045
2004038981.tif 000046
2004038981.tif 000047
2004038981.tif 000048
2004038981.tif 000049
2004038981.tif 000050
2004038981.tif 000051
2004038981.tif 000052
2004038981.tif 000053
2004038981.tif 000054
2004038981.tif 000055
2004038981.tif 000056
2004038981.tif 000057
2004038981.tif 000058
2004038981.tif 000059
2004038981.tif 000060
2004038981.tif 000061
2004038981.tif 000062
2004038981.tif 000063
2004038981.tif 000064
2004038981.tif 000065
2004038981.tif 000066
2004038981.tif 000067
2004038981.tif 000068
2004038981.tif 000069
2004038981.tif 000070
2004038981.tif 000071
2004038981.tif 000072
2004038981.tif 000073
2004038981.tif 000074
2004038981.tif 000075
2004038981.tif 000076
2004038981.tif 000077