(57)【特許請求の範囲】
【請求項１】
デバッグトリガを受信するように構成されており、対応するデバッグトリガまたは一連のデバッグトリガが発生するという条件で、プログラムされた動作を開始するように構成されている、集中型のモジュールを備え、
前記プログラムされた動作は、前記モジュールにフィードバックするメイン動作およびパイプライン型の事前選択動作の一つである、
集積回路（ＩＣ）。
【請求項２】
前記モジュールは、プロセッサコア、異なるデバッギングモジュール、ノースブリッジまたは他のソケットのうち少なくとも１つからデバッグトリガを受信するように構成されている、請求項１に記載のＩＣ。
【請求項３】
前記モジュールは、クロックを停止すること、デバッグモードに入ること、デバッグクロストリガを発行すること、デバッグトレースデータを記憶構造に記憶することを開始若しくは停止すること、デバッグ状態に移行すること、カウンタをインクリメント、デクリメント若しくはクリアすること、あるいはレジスタ内のフラグをセット若しくはクリアすることのうち少なくとも１つをトリガするように構成されている、請求項１に記載のＩＣ。
【請求項４】
前記モジュールは、メタベクトルを保持するためのレジスタを含み、
前記メタベクトルは、デバッグトリガを選択するためのトリガフィールドと、前記選択されたデバッグトリガのブール組み合わせを組み合わせるための置換フィールドと、動作フィールドとを含み、前記置換フィールドによって定義された条件が満たされたことを条件として、前記動作フィールドによって定義された動作がトリガされるように構成されている、請求項１に記載のＩＣ。
【請求項５】
前記デバッグトリガは、カウンタがマッチ値に合致する場合に生成されるカウントマッチトリガと、クロックカウントがマッチ値に合致する場合に生成されるクロックカウントマッチトリガと、前記モジュールとマイクロコードとの間の通信のためのレジスタ内のフラグビットと、ランダムイベントジェネレータによって生成されるランダムイベント信号と、パフォーマンスモニタ信号と、中断と、エラーと、ブレイクポイントと、デバッグバス上のデータの論理または算術比較に基づいて生成されるデバッグデータベースのトリガと、デバッグバスから選択されるビットであるデバッグデータベースのトリガと、のうち少なくとも１つを含む、請求項１に記載のＩＣ。
【請求項６】
前記デバッグトリガは、マイクロコードによって生成される、請求項１に記載のＩＣ。
【請求項７】
前記モジュールは、デバッグデータを受信し、前記デバッグデータを記憶構造に供給するように構成されている、請求項１に記載のＩＣ。
【請求項８】
前記記憶構造は、前記ＩＣ上のキャッシュ、またはコア内、ノースブリッジ内、サウスブリッジ内、グラフィックスプロセッシングユニット（ＧＰＵ）内、中央処理装置（ＣＰＵ）内若しくはオフチップのデータ記憶装置である、請求項７に記載のＩＣ。
【請求項９】
前記モジュールは、前記デバッグデータへのフィルタ機能を実行するように構成されている、請求項７に記載のＩＣ。
【請求項１０】
前記モジュールは、前記モジュールの動作を制御する、制御および状態レジスタを含む、請求項１に記載のＩＣ。
【請求項１１】
前記制御および状態レジスタは、電力消費を節約するように前記モジュールの電力状態を制御するための低電力ビットを含む、請求項１０に記載のＩＣ。
【請求項１２】
集中型のデバッグモジュールを用いて集積回路（ＩＣ）をデバッグする方法であって、
前記モジュールが、
デバッグトリガを受信するステップと、
対応するデバッグトリガまたは一連のデバッグトリガが発生するという条件で、プログラムされた動作を開始するステップと、
を実行し、
前記プログラムされた動作は、前記モジュールにフィードバックするメイン動作およびパイプライン型の事前選択動作の一つである、方法。
【請求項１３】
前記デバッグトリガは、プロセッサコア、異なるデバッギングモジュール、ノースブリッジまたは他のソケットのうち少なくとも１つから受信される、請求項１２に記載の方法。
【請求項１４】
前記プログラムされた動作は、クロックを停止するステップ、デバッグモードに入るステップ、デバッグクロストリガを発行するステップ、デバッグトレースデータを記憶構造に記憶することを開始若しくは停止するステップ、デバッグ状態に移行するステップ、カウンタをインクリメント、デクリメント若しくはクリアするステップ、あるいはレジスタ内のフラグをセット若しくはクリアするステップのうち少なくとも１つを含む、請求項１２に記載の方法。
【請求項１５】
前記デバッグトリガは、カウンタがマッチ値に合致する場合に生成されるカウントマッチトリガと、クロックカウントがマッチ値に合致する場合に生成されるクロックカウントマッチトリガと、前記モジュールとマイクロコードとの間の通信のためのレジスタ内のフラグビットと、ランダムイベントジェネレータによって生成されるランダムイベント信号と、パフォーマンスモニタ信号と、中断と、エラーと、ブレイクポイントと、デバッグバス上のデータの論理または算術比較に基づいて生成されるデバッグデータベースのトリガと、デバッグバスから選択されるビットであるデバッグデータベースのトリガと、のうち少なくとも１つを含む、請求項１２に記載の方法。
【請求項１６】
前記デバッグトリガは、マイクロコードによって生成される、請求項１２に記載の方法。
【請求項１７】
デバッグデータを記憶構造に記憶するステップをさらに含む、請求項１２に記載の方法。
【請求項１８】
前記デバッグデータを記憶する前に、前記デバッグデータへのフィルタ機能を実行するステップをさらに含む、請求項１７に記載の方法。
【請求項１９】
デバッグトリガを受信するように構成されており、対応するデバッグトリガまたは一連のデバッグトリガが発生するという条件で、プログラムされた動作を開始するように構成されている、集中型のモジュールの構造を記述するためのコードを記憶し、前記プログラムされた動作は、前記モジュールにフィードバックするメイン動作およびパイプライン型の事前選択動作の一つである、持続性コンピュータ可読記憶媒体。
【請求項２０】
前記コードは、ハードウェア記述言語（ＨＤＬ）で記述されている、請求項１９に記載の持続性コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、２０１０年１２月２日に出願された米国特許出願第１２／９５８，５８５号の利益を請求し、同出願は完全に記載されるかのように参照により組み込まれる。
【０００２】
本願は、マイクロプロセッサ、中央処理装置（ＣＰＵ）、グラフィカルプロセッシングユニット（ＧＰＵ）などを含むがこれらに限定されない、プロセッサまたは集積回路チップに関する。
【背景技術】
【０００３】
集積回路（ＩＣ）または複数のＩＣを含むシステムの設計後に、正しい動作について当該設計を検証する必要がある。複雑な回路設計のデバッギングは、処理技術の進化、サイズの縮小およびデバイスの複雑性の増加とともに、従来のシミュレーションツールおよび技法を使用して行うことがますます困難になってきている。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
デバッギング中にエラーが検出された場合に、設計者は、関心信号を回路から選び、エラーの原因を判定するためにロジックアナライザを使用しようとしてもよい。しかしながら、これは困難なプロセスであり、効果的ではないことが多い。すでに発生しているエラーは、反復して再構築することが困難であることが多い。したがって、より効率的なデバッギングを提供することが望ましい。
【課題を解決するための手段】
【０００５】
柔軟かつ効率的なデバッグ可視性のための複雑なトリガシーケンスをプログラムすることを可能にするデバッグステートマシン（ＤＳＭ）を含む、プロセッサまたは集積回路チップを開示する。ＤＳＭは、例えば、トレース開始および停止、トレースフィルタリング、ＤＳＭ間のクロストリガ、クロック停止、システムデバッグモード中断をトリガすること、フレキシブルマイクロコードインターフェースなどのローカルデバッグ機能の制御を集中させる。ＤＳＭは、プロセッサコア、他のＤＳＭ、ノースブリッジ、他のソケットなどからトリガを受信し、対応するトリガまたは一連のトリガが発生するという条件において、プログラムされた動作を開始するように構成されている。
【０００６】
より詳細な理解は、添付図面と併せて一例として挙げられる、以下の説明から得られてもよい。
【図面の簡単な説明】
【０００７】
【図１】一実施形態による、デバッグステートマシン（ＤＳＭ）を含むプロセッサ例を示す図である。
【図２】ＤＳＭインターフェース例を示す図である。
【図３】ＤＳＭのプログラミングモデル例を示す図である。
【図４】ＤＳＭ状態図例を示す図である。
【図５（Ａ）】ＤＳＭベクトルレジスタによって保持されるメタベクトルを示す図である。
【図５（Ｂ）】メタベクトルを介したＤＳＭプログラミングを示す図である。
【図６】ランダムイベントジェネレータ例の論理構造を示す図である。
【図７】ＤＳＭを通したデバッグバスおよびバッファに記憶するフローの論理構造を示す図である。
【発明を実施するための形態】
【０００８】
一実施形態によれば、プロセッサまたは集積回路チップは、柔軟かつ効率的なデバッグ可視性のための複雑なトリガシーケンスをプログラムすることを可能にするデバッグステートマシン（ＤＳＭ）を含む。ＤＳＭは、トレース開始および停止、トレースフィルタリング、ＤＳＭ間のクロストリガ、クロック停止、ハードウェアデバッグツール（ＨＤＴ）中断、フレキシブルマイクロコードインターフェースなどのローカルデバッグ機能の制御を集中させる。
【０００９】
図１は、一実施形態による、ＤＳＭを含むプロセッサ例１００を示す。図１のプロセッサ１００は、２つのコア１１０と、ノースブリッジ１２０とを含む。各コア１１０は、コアユニット１１２と、ＤＳＭ１１４と、マイクロコード１１６と、キャッシュ１１８とを含んでもよい。ノースブリッジ１２０は、ＤＳＭ１２２と、トレースキャッシュバッファ（ＴＣＢ）１２４とを含んでもよい。ＴＣＢ１２４は、トレースデータを記憶するための専用アレイである。各コアのＤＳＭ１１４は、コア、他のＤＳＭ、ノースブリッジおよび／または他のソケット等からトリガを受信し、特定の動作を行う。動作は、以下で詳細に説明されるように、クロックを停止すること、デバッグモードに入ること、デバッグクロストリガを発行すること、情報を記憶ユニット（例えば、キャッシュ１１８またはＴＣＢ１２４）に記憶することを開始若しくは停止すること、特定のデバッグ状態に移行すること、カウンタをインクリメントまたはクリアすること、レジスタ内のフラグをセット若しくはクリアすることなどを含むが、これらに限定されない。
【００１０】
図１に示されるプロセッサ構造は例であり、任意の変形例が可能であることに留意されたい。例えば、プロセッサ１００は、１つのコアまたは２つよりも多くのコアを含んでもよく、ノースブリッジ１２０を含んでもよいし、含まなくてもよい。ノースブリッジ１２０は、ＤＳＭ１１４を含んでもよいし、含まなくてもよい。ＤＳＭ１１４は、中央処理装置（ＣＰＵ）、グラフィックスプロセッシングユニット（ＧＰＵ）、サウスブリッジ、ノースブリッジなどの任意の種類のプロセッサまたはチップセットで利用されてもよい。
【００１１】
図２は、ＤＳＭインターフェース例を示す。ＤＳＭ１１４は、クロック信号、トリガ、動作、特殊レジスタバス（ＳＲＢ）アクセス、外部タイムスタンプカウンタ、制御および状態レジスタ、デバッグ中断、デバッグバスインターフェース、一般カウンタ、制御信号等のためのインターフェースを有してもよい。表１は、ＤＳＭ１１４に提供され得るＤＳＭインターフェース例を示す。ＤＳＭ１１４は、用途に応じて、表１に記載されるインターフェースの全てまたは一部を有してもよい。
【表１】
0005543675.tif 000002
【００１２】
プロセッサ１００は、クロックを停止すること及びスキャンポートを通してスキャンすることによって、プロセッサアレイの状態がアクセスされ得るように、スキャン能力をサポートしてもよい。スキャンクロックは、別個の一式のピン（ＳＣ１およびＳＣ２）を有する。
【００１３】
トリガインターフェース（ＴｒｉｇｇｅｒｓＥｘｔ）は、デバッグバスおよびブロードサイドトリガからＤＳＭ１１４への着信トリガ用である。ブロードサイドトリガは、クロック信号を停止する信号（ＯＫＴｏＳｔｏｐＣｌｏｃｋｓ）、パフォーマンスモニタ、エラー、ブレイクポイント、他のＤＳＭからのクロストリガ等を含む。
【００１４】
動作インターフェース（Ａｃｔｉｏｎｓ）は、トリガまたは一連のトリガに基づく特有の動作のためのＤＳＭからの発信信号用である。
【００１５】
ＳＲＢアクセスインターフェース（ＲｅｇＤａｔ、ＲｅｇＷｒＥｎ、ＲｅｇＡｃｃｅｓｓＧａｔｅｒ、ＲｅｇＤｅｃｏｄｅ、ＲｅｇＲｄＤａｔａ）は、ＤＳＭレジスタからデータを読み取り、ＤＳＭレジスタへデータを書き込むために提供される。
【００１６】
ＤＳＭは、独自の内部タイムスタンプカウンタを使用してもよい。代替として、ＤＳＭは、グローバルタイムスタンプが全てのＤＳＭにわたって使用され得るように、外部タイムスタンプカウンタ入力用のインターフェース（ＥｘｔＴｓｃＣｎｔ）を有してもよい。
【００１７】
制御および状態レジスタ（ＣｎｔｌＳｔａｔｕｓ、ＣｎｔｌＳｔａｔｕｓ２、ＤｓｍＴｒｉｇＰｒｅＳｅｌ＊）は、ＤＳＭを制御するためのものである。
【００１８】
デバッグ中断インターフェース（ＤｂｇＩｎｔ）は、マイクロコード等を中断するためのものであり、従来のデバッグ要求信号と論理和されてもよく、または専用デバッグ中断信号を形成してもよい。
【００１９】
デバッグバスインターフェース（ＤｅｂｕｇＢｕｓＩｎ、ＤｅｂｕｇＴｒａｃｅＷｒＥｎ、ＤｅｂｕｇＴｒａｃｅＷｒＤａｔａ）は、デバッグ情報を制御し、記憶ユニット（例えば、キャッシュ１１８またはＴＣＢ１２４）に送信するためのものである。
【００２０】
ＤＳＭ１１４のプログラミング例を以降で説明する。図３は、ＤＳＭ１１４のプログラミングモデル例を示す。ＤＳＭ１１４は、コア、ノースブリッジ、他のＤＳＭまたは他のソケット等からトリガを受信し、ある動作を行う。ＤＳＭ１１４は、以下で詳細に説明されるように、制御および状態レジスタと、カウンタと、線形フィードバックシフトレジスタ（ＬＳＦＲ）と、デバッグバストリガ用のレジスタと、事前選択トリガおよび事前選択動作用のレジスタと、ＤＳＭコア用のレジスタと、デバッグバスマスクレジスタと、などを含んでもよい。ＤＳＭ動作は、特定のトリガに応答して特定の動作を行うように、任意の方式でプログラムされてもよい。
【００２１】
図４は、ＤＳＭ状態図例を示す。例として、４つの状態がＤＳＭ１１４に対して定義されてもよい。４つの状態が例として提供され、恣意的な数の状態が定義されてもよいことに留意されたい。ＤＳＭ状態は、特定のトリガによってトリガされる動作として、１つの状態から別の状態に移行してもよい。
【００２２】
ＤＳＭ１１４は、特殊レジスタバス（ＳＲＢ）を介してプログラムされてもよい。ＤＳＭ１１４をプログラムするために、複数のメタベクトルが、複数のＤＳＭ状態ごとに定義されてもよい。例えば、３つの４２ビットメタベクトルが、４つのＤＳＭ状態ごとに定義されてもよい。図５（Ａ）は、ＤＳＭベクトルレジスタ（ｄｓｍ＿ｓｍ＿ｖｅｃ）によって保持されるメタベクトル５００を示す。メタベクトル５００は、１つ以上のトリガフィールド５０２ａ、５０２ｂ、５０２ｃ（本例では３つのトリガフィールドＡ、ＢおよびＣ）と、置換フィールド５０４と、動作フィールド５０６とを含んでもよい。メタベクトルのそれぞれは、最大で所定数のトリガ（例えば、本例では３つ）に対して感受性（ｓｅｎｓｉｔｉｖｅ）があってもよい。メタベクトル５００は、任意の数のトリガに対して感受性があるようにプログラムされてもよいことに留意されたい。トリガフィールド５０２ａ〜５０２ｃは、トリガを選択する。置換フィールド５０４は、そのメタベクトルに対する３つのトリガの任意のブール組み合わせを、組み合わせる。置換フィールド５０４は、そのメタベクトルに対する条件が満たされているかどうかを定義する。条件が満たされているのであれば、動作フィールド５０６によって特定される動作が呼び出される。
【００２３】
図５（Ｂ）は、メタベクトル５００を介したＤＳＭプログラミングを示す。各トリガフィールドＡ、ＢおよびＣ５０２ａ〜５０２ｃの各々は、全ての考えられるトリガソースからトリガを選択し、３ビット動作信号５１２を生成する。置換ビットのうち１つは、３ビット動作信号５１２に基づいて、メタトリガ（ｍｅｔａ＿ｔｒｉｇ）５１４として選択される。メタトリガ５１４が真である場合、動作フィールド５０６によって定義される動作が実施される。
【００２４】
表２は、トリガの関数としての置換フィールドプログラミング例を示す。例えば、トリガＢおよびＣにかかわらず、トリガＡが発生する時にトリガされるように動作がプログラムされる場合、置換フィールドは、０ｘＡＡにセットされてもよい。トリガＡ  ＸＯＲ  Ｂが真である時にトリガされるように動作がプログラムされる場合、置換フィールドは、０ｘ６６にセットされてもよい。
【表２】
0005543675.tif 000003
【００２５】
トリガを以下で説明する。ＤＳＭは、コア、ノースブリッジ、マイクロコード、他のＤＳＭ、他のソケットなどからトリガを受信し、所定の動作を行う。トリガは、一般カウントマッチトリガ、クロックカウントマッチトリガ、フラグ、デバッグバスベースのトリガ、ランダムイベント、パフォーマンスモニタ、中断、エラー、ＯＫＴｏＳｔｏｐＣｌｏｃｋ信号、クロストリガ、ブレイクポイントおよび／または一般比較ベースのトリガ等を含むが、これらに限定されない。表３は、コアおよびノースブリッジからのトリガ例を記載する。
【表３】
0005543675.tif 000004
【００２６】
カウントマッチトリガは、カウンタ（一般カウンタ、クロックカウンタ等）がマッチ値に合致する場合に生成される。デバッグデータベースのトリガは、デバッグバスを介して種々のコアユニットから来る様々なトレースデータに由来する。デバッグデータベースのトリガは、値（値の全てまたは一部（例えば、上位または下位３２ビット））が比較値に等しい、および／または比較値よりも大きい若しくは小さい（または任意の他の論理あるいは算術演算に基づく）場合に生成されてもよい。デバッグデータベースのトリガは、デバッグバスから選択されるビットであってもよい。デバッグデータベースのトリガ信号は、デバッグバス上の少なくとも１ビットが、以前のクロックサイクルにおけるその値と比べて変化したことを示してもよい。
【００２７】
以下で説明されるランダムイベントトリガは、シード、多項式、マスクおよび／またはマッチレジスタの関数として始動する。マイクロコードは、あるＤＳＭ動作をトリガしてもよい。マイクロコードトリガは、別個のレジスタ内で静的に定義されてもよいし、デバッグ実行全体にわたって固定され、全てのＤＳＭ状態に適用されてもよい。付加的なカウントマッチトリガは、カウンタが別のカウンタに等しいことを示す。これは、割当／割当解除型関数を追跡するために有用である。例えば、ｔｒｉｇ＿ｇｅｎ＿ｃｎｔ１は閾値にセットされてもよく、ｔｒｉｇ＿ｇｅｎ＿ｃｎｔ０は割当時にインクリメントされてもよく、ｔｒｉｇ＿ｇｅｎ＿ｃｎｔ１は割当解除時にインクリメントされてもよい。このトリガは、閾値が満たされた場合に始動する。
【００２８】
事前選択されたトリガ（表３のマイクロコードトリガ）は、ブレイクポイント、中断、パフォーマンスモニタおよびエラーイベントなどの群におけるトリガである。
【００２９】
ＤＳＭは、従来のブレイクポイント条件をトリガとして使用してもよい。ＤＳＭは、従来のブレイクポイントがマイクロコードを通して無効にされるにつれて、ブレイクポイントを無効にする。ブレイクポイント処理マイクロコードは、実行し始める場合に、ｄｓｍ２ｍｃｏｄｅレジスタ（ＤＳＭからマイクロコードへの通信のためのレジスタ）内の値を読み出す。ビットが真である場合、マイクロコードは、レジスタ内の対応するビットをセットすることによって、それが指すブレイクポイントの種類を信号伝達し、ブレイクポイントを取らずに戻る。
【００３０】
ＤＳＭは、システム管理モード（ＳＭＭ）Ｉ／Ｏトラップオフセットレジスタで特定されるようなＩ／Ｏ命令をトリガしてもよい。ＳＭＭ  ＩＯトラップは、ブレイクポイントトリガと同様に、通常通り発生しなくてもよい。
【００３１】
ＤＳＭは、トリガするイベントとしてパフォーマンスモニタ信号を使用してもよい。既存のパフォーマンスモニタイベント選択能力から選択されるイベントは、トリガとしてＤＳＭに送られる。次いで、ＤＳＭは、パフォーマンスモニタをトリガとして扱うことができ、それらの組み合わせまたはシーケンスに反応するようにプログラムされてもよい。
【００３２】
事前選択トリガの各々は、最大で２つのフィールドでできていてもよい。第１のフィールドは、クラスタにとらわれない選択符号化であり、第２のフィールドは、表６に示されるように、どちらのクラスタまたは両方のクラスタのＯＲであるかを判定する。第２のフィールドは、ＤＳＭが実際に受けるものを形成するために、トリガの各クラスタのバージョンがどのようにして使用されるかをプログラムする。ＤＳＭは、これらのフィールドの両方を使用して、トリガごとに、１つのコアまたは他方のクラスタのバージョンを見てもよいし、あるいは何れか一方のクラスタのバージョンのＯＲを見てもよい。表４および５は、ｄｓｍ＿ｔｒｉｇ＿ｐｒｅ＿ｓｅｌ１およびｄｓｍ＿ｔｒｉｇ＿ｐｒｅ＿ｓｅｌ２レジスタビットフィールド定義例を示す。
【表４】
0005543675.tif 000005
【表５】
0005543675.tif 000006
【表６】
0005543675.tif 000007
【００３３】
表７は、中断トリガのうちのいずれかを選択するために、表４および５のＵｃｏｄｅＰｒｅＳｅｌ＊［４：０］フィールドごとのマイクロコードトリガ例を定義する。
【表７】
0005543675.tif 000008
【００３４】
ＤＳＭ動作を以下に説明する。ＤＳＭは、トリガまたは一連のトリガに基づいて特定の動作を行う。動作は、メイン動作および事前選択動作という２つのカテゴリに分類されてもよい。例として、１６のメイン動作および４６の事前選択動作が以下のように定義される。メイン動作は、ＤＳＭにフィードバックするトリガを引き起こし得る動作である。１６のメイン動作の中で、１２の実際のメイン動作および４の一般動作が、本明細書において一例として定義される。４の一般動作（Ｇｅｎ＿ａｃｔ０〜３）は、これらが、１２の実際のメイン動作がフィードバックする緊密なループの外側にある、間接レベルである。これは、一般動作のパイプライン方式を可能にする。図５（Ａ）のメタベクトルの動作フィールドは、１６ビット完全復号フィールドである。これは、１６の一般動作の任意の置換を始動することを可能にする。表８に、１６のメイン動作例を示す。
【表８】
0005543675.tif 000009
【００３５】
Ｇｅｎ＿ａｃｔ０−３動作は、４つのＤＳＭ状態ごとに別々に定義される。これは、合理的なプログラミングの融通性を可能にする。４つのＤＳＭ状態に対する６ビット一般動作のプログラミングサポートは、表９および１０で定義されるように、２つのレジスタを必要とする。表９は、ｄｓｍ＿ａｃｔ＿ｐｒｅ＿ｓｅｌ０１レジスタビットフィールド定義例を示し、表１０は、ｄｓｍ＿ａｃｔ＿ｐｒｅ＿ｓｅｌ２３レジスタビットフィールド定義例を示す。
【表９】
0005543675.tif 000010
【表１０】
0005543675.tif 000011
【００３６】
事前選択動作については、６ビットの符号化が、列挙するために提供される。表１１に、事前選択動作のサンプルリストを示す。これらの動作は、内部ＤＳＭタイミングループの外側にあってもよく、したがってパイプライン型であってもよい。
【表１１】
0005543675.tif 000012
【００３７】
ＤＳＭは、制御および動作のために複数のレジスタを含む。制御および状態レジスタは、様々なＤＳＭ制御を提供する。例えば、制御レジスタは、ＤＳＭトリガが動作にマップする方法を制御する（例えば、「ＰｅｒｆＭｏｎ０が発生する場合にｃｈｉｐ＿ｓｔｏｐｃｌｋ動作を生成する」など）。表１２に、ｄｓｍ＿ｃｏｎｔｒｏｌ＿ｓｔａｔｕｓレジスタビットフィールド定義例を示す。
【表１２】
0005543675.tif 000013
【００３８】
ｄｓｍ＿ｅｎｂｌビットは、１にセットされた場合にＤＳＭの動作を有効にし、０にセットされた場合にＤＳＭの動作を無効にする。ｄｓｍ＿ｅｎｂｌビットが０である場合に、いずれのＤＳＭ状態も修正されなくてもよい（ＤＳＭがオフにされた場合でさえも数を数える絶対時間カウンタを除く）。ｄｓｍ＿ｅｎｂｌビットは、０ｘ０にリセットされてもよい。セキュリティの理由で、マイクロコードは、このビットが書き込みマシン状態レジスタ（ＷＲＭＳＲ）命令によってセットされることを防止し、ＨＤＴ（またはマイクロコードパッチ）がこのビットをセットしてもよい。
【００３９】
Ｄｓｍ＿ｈｄｔ＿ｓｔａｔｕｓビットは、ＨＤＴまたは高度プラットフォーム管理リンク（ＡＰＭＬ）に入るために理由を判定する方法を提供する。ＳＷは、このビットをポーリングし、ＤＳＭがＨＤＴまたはＡＰＭＬを呼び出そうとしたかどうかを判定してもよい。このビットは、Ｍｃｏｄｅ２ＤｓｍレジスタのＣｌｒＨｄｔＳｔａｔｕｓビットへの１の書き込みによって、手動でクリアされてもよい。このビットは、ｄｓｍ＿ｃｏｎｔｒｏｌ＿ｓｔａｔｕｓレジスタの中で読み取り／書き込み可能であるが、そこにライトすることは、そのレジスタの中で同様に書き込み可能であるｄｓｍ＿ｓｔａｔｅビットを潜在的に破損する危険がある。ｍｃｏｄｅ２ｄｓｍレジスタのＣｌｒＨｄｔＳｔａｔｕｓビットを有することにより、ｄｓｍ＿ｃｏｎｔｒｏｌ＿ｓｔａｔｕｓの中にあるＤｓｍＳｔａｔｅビットを同様に破損し得るｄｓｍ＿ｃｏｎｔｒｏｌ＿ｓｔａｔｕｓへの読み取り・修正・書き込み（Ｒ-Ｍ-Ｗ）という処理を行う必要を回避する。
【００４０】
ｃｍｐ＿ｍｏｄｅおよびｂｕｓ＿ｓｅｌビットは、カスタムトリガ機能性と関連付けられる。
【００４１】
ｔｒｉｇ＿ｏｂｓ［５：０］フィールドは、どのトリガが発信デバッグバス上で可視的にされるかを制御する。ｔｒｉｇ＿ｏｂｓフィールドは、任意の特定のトリガに対処するために、それぞれ６ビット幅であってもよい。発信デバッグバストレースデータフィールドは、表１３のように定義される。
【表１３】
0005543675.tif 000014
【００４２】
ｓｔｏｒｅ＿ｏｎ＿ｃｈａｎｇｅビットは、データが全クロック上に記憶されるかどうか、あるいは任意のデータがいつ変化するかを制御する。変更時に記憶する特徴について見られるデータは、状態キャプチャバッファ（Ｌ２またはＴＣＢ）に送信される全７２ビットのトレースデータを含む。
【００４３】
ｄｓｍ＿ｓｔａｔｅビットは、デバッグステートマシン状態ビットである。ＤｓｍＳｔａｔｅビットは、ＤＳＭ自体の状態を示す。ＤＳＭは、その論理への入力としてこれらを使用し、また、動作を介してこれらのビットを変更してもよい。
【００４４】
ＤｂｇＴｉｍｅＣｎｔＤｉｓビットは、絶対時間カウンタ用である。このビットは０にリセットし、デフォルト設定で、絶対時間カウンタが有効であることを意味する。
【００４５】
ＧｅｎＣｎｔＩｎｃｒｅｍｅｎｔビットは、４つの汎用カウンタに対応する。これらのビットは通常、動作Ｇｅｎ＿ｃｎｔ＿ｔｇｌ＿ｉｎｃ＿［３，  ２，  １，  ０］によって制御される。これらは、ここでは、この状態へのリードアクセスを提供するためのものである。
【００４６】
ＳｔｏｒｅＴｏＬ２ビットは、デバッグ情報が状態キャプチャ（Ｌ２またはＴＣＢ）に記憶されるかどうかを制御する。このビットは、ＳＲＢ上でｒ／ｗアクセス可能である。このビットはまた、Ｔｒａｃｅ＿ｓｔｏｒｅ＿ｓｔａｒｔおよびＴｒａｃｅ＿ｓｔｏｒｅ＿ｓｔｏｐ  ＤＳＭ動作を介して、セットおよびクリアされてもよい。Ｔｒａｃｅ＿ｓｔｏｒｅ＿ｃｕｒｒｅｎｔおよびＴｉｍｅ＿ｓｔｏｒｅ動作は、たとえＳｔｏｒｅＴｏＬ２ビットがセットされていなくても、記憶を引き起こしてもよい。
【００４７】
ＬｏｗＰｗｒビットをセットすることにより、ＤＳＭの中の全てのフロップ状態を静的にゲートオフする。しかしながら、全てのレジスタは依然として、読み取り／書き込み可能である。ゲーティング制御は、ＤＳＭへの書き込みがない限り、これらのレジスタフロップが時間測定されないことを確実にする。
【００４８】
ＤｂｇＥｘｔＴｓｃビットは、外部タイムスタンプソースの使用を可能にする。これは、ノースブリッジのｐ状態変化により、ノースブリッジに使用されるクロックが経時的に周波数を変化させてもよいという、ノースブリッジ実装のためにサポートされている。このビットが１にセットされた場合に、外部ソースが使用される。加えて、外部ソースが使用される場合に、内部クロックカウンタｄｓｍ＿ｃｌｋ＿ｃｎｔが無効にされ、マッチトリガに適用されるマスク値として使用される。マスク値を必要とする理由は、外部タイムスタンプカウンタ値が１より多くインクリメントされ得るからである。下位ビットのマスクを外すことにより、そうでなければ見落とされ得る特有のマッチ値を見落とさないことを可能にする。これは、クロックサイクル上の合致の分解能が、タイムスタンプ値が常に１つインクリメントするという単純な場合のものから低減されるという制限を課す。
【００４９】
絶対時間カウンタは、状態キャプチャバッファ（Ｌ２またはＴＣＢ）に書き込まれる際に、種々のデバッグデータのタイムスタンピングに使用される。このカウンタは、ＤＳＭに対するマッチトリガを生成するために使用されてもよい。表１４に、ｄｓｍ＿ｃｌｋ＿ｃｎｔレジスタビットフィールド定義例を示す。
【表１４】
0005543675.tif 000015
【００５０】
ｄｓｍ＿ｃｌｋ＿ｃｎｔレジスタは、動作信号ｃｌｋ＿ｃｎｔ＿ｒｓｔが始動する場合にＤＳＭによってリセットされてもよい。このリセットを行う信号は、別の可能なＤＳＭ動作である。これは、ＤＳＭの遅延機能を設定することを可能にする。大抵の場合、このカウンタはＤＳＭによってリセットされず、遅延を生成することは、４つの汎用カウンタを使用して行われることが期待される。
【００５１】
ノースブリッジのＰ状態により、ノースブリッジＤＳＭアプリケーションは、この内部カウンタの代わりにＤＳＭによって使用され得る、「ＮＢのＰ状態が調整された」クロックカウンタを提供してもよい。表１５に、ｄｓｍ＿ｃｌｋ＿ｍａｔｃｈレジスタビットフィールド定義例を示す。
【表１５】
0005543675.tif 000016
【００５２】
ｄｓｍ＿ｃｌｋ＿ｍａｔｃｈレジスタは、このレジスタの値がｄｓｍｊｅｏｕｎｔレジスタの値未満の１に等しい場合に発生するイベントを特定するために使用されてもよい。合致時に、信号ｔｒｉｇ＿ｃｌｋ＿ｃｎｔがパルスする。ＤｂｇＥｘｔＴｓｃが１にセットされた場合に、合致条件は、ｄｓｍ＿ｃｌｋ＿ｃｎｔレジスタの対応ビットが０にセットされるビットを参照する。
【００５３】
汎用カウンタは、ＤＳＭによって制御されてもよい。それらは、ＤＳＭによってリセットまたはインクリメントされてもよい。汎用カウンタは、ＤＳＭが対応するインクリメント信号を始動する場合にインクリメントする。汎用カウンタは、対応するインクリメント状態が真である場合に、各クロックでインクリメントする（例えば、ＧｅｎＣｎｔＩｎｃｒｅｍｅｎｔ［３：０］は、Ｇｅｎ＿ｃｎｔ＿ｔｇｌ＿ｉｎｃ＿［３：０］動作によって制御される）。汎用カウンタは、ＤＳＭに対するマッチトリガを生成してもよい。汎用カウンタは、関連マッチレジスタと併せて、トリガソースとしてＤＳＭによって使用されてもよい。
【００５４】
汎用カウンタ０および１は、ループバッグモードにある場合に、デバッグバス用のデータソースになる。汎用カウンタ０は、ループバッグモードにおいて、デバッグバスの下位３２ビットを供給してもよく、汎用カウンタ１は、デバッグバスの上位３２ビットを供給してもよい。
【００５５】
タイミングが合い、且つ、付加的な回路領域を消費しない方法でカウンタを実装するために、これらのカウンタは、以下の制限を有してもよい。カウンタは、０ｘ０から数を数え始めてもよく、任意の可能な合致限界をサポートしてもよい。３未満の合致限界を伴うロールオーバーはサポートされなくてもよい。ゼロではない値から数を数え始めることは、合致が、３を加えた開始値以上である場合に機能してもよい。０ｘ０の合致限界はサポートされなくてもよい。インクリメント動作は、たとえインクリメントがｇｅｎ＿ｃｎｔ＿ｔｏｇｇｌｅ＿ｉｎｃ＿＊によって引き起こされたとしても、クリア動作に優先してもよい。クリア動作は、（切替がインクリメントから非インクリメントに進む）切替動作と同じサイクルで行われた場合に、効果がなくてもよい。これは、切替動作が状態によって遅延されるためである。しかしながら、同じ全体的効果を得るために、ユーザは、（非インクリメントからインクリメントに切り替える場合に）インクリメントに戻って切り替えるメタベクトルの同じ動作フィールドの中にクリア動作を入れてもよい。ここで、トグルの遅延した効果により、クリアは、切替前に実際に発生する。
【００５６】
表１６に、ｄｓｍ＿ｇｅｎ＿ｃｎｔ＿＊レジスタビットフィールド定義例を示す。
【表１６】
0005543675.tif 000017
【００５７】
ｄｓｍ＿ｇｅｎ＿ｃｎｔ＿＊レジスタは、対応するトリガ信号ｇｅｎ＿ｃｌｋ＿ｉｎｃ＿＊が真であるクロックサイクルで、または対応するＧｅｎ＿ｃｎｔ＿ｔｇｌ＿ｉｎｃ＿＊動作がカウンタをインクリメントさせ続けるクロックサイクルでインクリメントする。このレジスタは、対応する動作信号ｇｅｎ＿ｃｌｋ＿ｒｓｔ＿＊が真である場合に、ＤＳＭの動作としてリセットされてもよい。リセット機能は、コンフリクト時にインクリメント機能に優先してもよい。これは、ＤＳＭの遅延機能を設定することを可能にする。
【００５８】
デバッグブロックは、出力がトリガとして使用され得る疑似ランダムイベントジェネレータを有してもよい。一実施形態によれば、疑似ランダムイベントジェネレータは、２つの仮想線形フィードバックシフトレジスタ（ＬＦＳＲ）を備えてもよい。例えば、ＬＦＳＲは、４８ビット幅の完全にプログラム可能なフィードバック多項式（４７ビット値）、ガロアスタイル数学（幅と独立して、タイミングを合わせることができる）、２つの仮想ＬＦＳＲ（実際のＬＦＳＲが共有される）用の２組のマスク／マッチレジスタ、４８ビットマスクレジスタおよび４８ビットマッチレジスタといった属性を有してもよい。
【００５９】
図６に、ランダムイベントジェネレータ例６００の論理構造を示す。ランダムイベントジェネレータ６００の出力は、ＤＳＭ用のトリガソースとして使用されてもよい。本例では、２つの出力ビット（ｒａｎｄ＿ｅｖｅｎｔ０およびｒａｎｄ＿ｅｖｅｎｔ１）が生成される。論理構造はまた、エラー処理機構を試験するために、エラーを注入するようにコア内の他のユニットによって使用されてもよい。この機構は、ハードウェアに内蔵されるため、プレシリコンおよびポストシリコンの両方で使用されてもよい。
【００６０】
ランダムイベントジェネレータ６００は、ランダムイベントジェネレータレジスタ６０２（ｄｓｍ＿ｒｎｄ＿ｌｆｓｒ）と、ランダムイベントジェネレータフィードバックレジスタ６０８（ｄｓｍ＿ｒｎｄ＿ｐｏｌｙ）と、マッチレジスタ６０４（ｄｓｍ＿ｒｎｄ＿ｍａｔｃｈ）と、マスクレジスタ６０６（ｄｓｍ＿ｒｎｄ＿ｍａｓｋ）と、ＸＯＲゲート６１０と、ＮＯＴゲート６１２と、ＡＮＤゲート６１４と、ＯＲゲート６１６とを含む。
【００６１】
ＤＳＭ１１４は、ランダムイベントジェネレータフィードバックレジスタ６０８のＤｓｍ＿ｒｎｄ＿ｅｎｂｌビットをセットすることによって、ランダムイベントジェネレータ６００を有効または無効にするために、ｒａｎｄ＿ｅｎ＿ｔｏｇｇｌｅ動作を発行してもよい。シード値は、ランダムイベントジェネレータレジスタ６０２に書き込まれることによって適用されてもよい。ランダムイベントフィードバックレジスタ６０８は、ランダムイベントジェネレータフィードバック多項式を記憶する。ランダムイベントジェネレータフィードバック多項式は、ランダムイベントジェネレータ６００内で任意の可能な多項式を使用することを可能にする。最もランダムな挙動を有するために、Ｍ系列または最大長多項式が使用されてもよい。ランダムイベントジェネレータフィードバックレジスタ６０８は、ガロアスタイルＬＦＳＲであってもよい。使用する１つの多項式例は、［４８，２８，２７，１］ｇである。これは、０ｘ００００＿０Ｃ００＿０００１に変換される。フィードバック項のビット位置は、１だけ右に推移される。０次項がそこにあり、単純化される。最高次項（４８）が、次数を示すために記載される。
【００６２】
ｄｓｍ＿ｒｎｄ＿ｍａｔｃｈレジスタ６０４は、ランダムイベントジェネレータマッチ値を保持し、ｄｓｍ＿ｒｎｄ＿ｍａｓｋレジスタ６０６は、ランダムイベントジェネレータマスク値を保持する。ランダムイベントジェネレータ６００の最終出力は、結果として生じたランダムイベントを表す単一のビット（ｒａｎｄ＿ｅｖｅｎｔ０またはｒａｎｄ＿ｅｖｅｎｔｌ）である。ＸＯＲゲート６１０は、出力ビットを生成するために、ランダムイベントジェネレータマッチ値（ｒｅｇ＿ｍａｔｃｈ［４７：０］）とＬＦＳＲ値（ｒｅｇ＿ｌｆｓｒ［４７：０］）とのビット単位の比較を行う。その後、ＸＯＲゲートの出力がＮＯＴゲート６１２によって反転され、次いで、ＡＮＤゲート６１４によってランダムイベントジェネレータマスク値でマスクされる。ランダムイベントジェネレータマスクレジスタ６０６の「０」であるビットに対応するビット（ｒｅｇ＿ｍａｓｋ［４７：０］）のマスクが外される。次いで、ＯＲゲート６１６により、マスクされた値にＯＲ演算を行うことによって、出力ビットが生成される。
【００６３】
表１７に、ｄｓｍ＿ｒｎｄ＿ｌｆｓｒレジスタビットフィールド定義例を示す。これは、実際のＬＦＳＲレジスタである。シード値が、このレジスタの書き込みに適用されてもよい。
【表１７】
0005543675.tif 000018
【００６４】
表１８に、ｄｓｍ＿ｒｎｄ＿ｐｏｌｙレジスタビットフィールド定義例を示す。
【表１８】
0005543675.tif 000019
【００６５】
種々のデバッグデータが、デバッグのために当該デバッグデータを可視的にするために、オンチップまたはオフチップ記憶構造（例えば、キャッシュ１０８またはＴＣＢ１２４）に記憶されてもよい。デバッグデータは、種々の場所からデバッグデータを引き出し得るデバッグバスネットワークを介して、ＤＳＭに送り込まれてもよい。
【００６６】
図７に、デバッグバスの論理構造と、ＤＳＭ１１４を介してバッファに記憶するフローとを示す。デバッグデータは、種々のユニットから収集され、ＤＳＭ１１４に供給される。ＤＳＭ１１４は、デバッグデータ（状態キャプチャデータ）を、記憶構造１３０（例えば、Ｌ２キャッシュ、ＴＣＢ、あるいはコア内、ノースブリッジ内、サウスブリッジ内、グラフィックスプロセッシングユニット（ＧＰＵ）内、中央処理装置（ＣＰＵ）内若しくはオフチップのデータ記憶装置など）に送る。ＤＳＭ１１４は、フィルタリング機能を提供するために、デバッグデータを条件付きで記憶してもよい。トレーシングは、ＤＳＭ１１４の制御下で開始および停止されてもよい。デバッグデータは、記憶構造１３０においてキャプチャされた後に、ＳＲＢを介してＨＤＴからアクセスされてもよい。
【００６７】
この目的で採用される記憶構造１３０は、Ｌ２キャッシュおよびＴＣＢのデフィーチャ方法を使用することを含んでもよい。表１９に、状態キャプチャデータビットフィールド定義例を示す。ＤｅｂｕｇＴｒａｃｅＷｒＥｎビットは、その入力が有効な情報を含有するか否かを示す。カウント／データビットは、ビット７１：０がタイムスタンプ値または実際のデバッグデータを表すかどうかを示す。
【表１９】
0005543675.tif 000020
【００６８】
トレースデータ（状態キャプチャデータ）は、ｄｓｍ＿ｃｏｎｔｒｏｌ＿ｓｔａｔｕｓレジスタ内のＳｔｏｒｅＴｏＬ２ビットがセットされている間に、クロックサイクル毎に記憶されてもよい。ＳｔｏｒｅＴｏＬ２ビットは、ｄｓｍ＿ｃｏｎｔｒｏｌ＿ｓｔａｔｕｓレジスタ内で読み取り／書き込み可能であるが、この読み書きは、ＤＳＭからのトレース開始および停止動作を介して行われてもよい。
【００６９】
フィルタリングを提供するために、変更時記憶モードが提供されてもよい。ｄｓｍ＿ｃｏｎｔｒｏｌ＿ｓｔａｔｕｓレジスタ内のＳｔｏｒｅＴｏＬ２ビットおよびｓｔｏｒｅ＿ｏｎ＿ｃｈａｎｇｅビットを（例えば、Ｔｒａｃｅ＿ｓｔｏｒｅ＿ｓｔａｒｔおよびＴｒａｃｅ＿ｓｔｏｒｅ＿ｓｔｏｐ動作を介して）セットすることによって、変更時記憶モードに入る。変更時記憶モードでは、１つのサイクルからの記憶ストリーム全体に対する記憶値が、次と比較される。比較は、記憶する経路内のデバッグデータのビット全体に適用される。変更がない場合、新しい値は記憶されない。変更がある場合、それが記憶される。
【００７０】
フィルタ機能が、トリガ生成論理によって定義されてもよい。このモードは、トリガ条件の選択およびデータストリームに依存するフィルタ比を提供してもよい。いくつかの異なるモードが提供されてもよい。例えば、１つのモードでは、動作（Ｔｒａｃｅ＿ｓｔｏｒｅ＿ｃｕｒｒｅｎｔ）が、選択されたデバッグデータを現在のサイクルの状態キャプチャバッファ（Ｌ２またはＴＣＢ）に記憶するように定義されてもよい。別のモードでは、動作（Ｔｒａｃｅ＿ｓｔｏｒｅ＿ｓｔａｒｔおよびＴｒａｃｅ＿ｓｔｏｒｅ＿ｓｔｏｐ）が、記憶することを開始または停止するように定義されてもよい。併用動作が、記憶することを停止するように定義されてもよい。「トリガ時に記憶する」は、実際には明示的なモードではないが、むしろ、選択的に記憶するようにＤＳＭをプログラミングすることともに、Ｔｒａｃｅ＿ｓｔｏｒｅ＿ｃｕｒｒｅｎｔまたはＴｒａｃｅ＿ｓｔｏｒｅ＿ｓｔａｒｔおよびＴｒａｃｅ＿ｓｔｏｒｅ＿ｓｔｏｐ動作を使用することを伴う。
【００７１】
ある時にＴｒａｃｅ＿ｓｔｏｒｅ＿ｃｕｒｒｅｎｔ動作が始動する条件がセットされてもよい。それが低頻度で始動するほど、圧縮比が高くなる。Ｔｒａｃｅ＿ｓｔｏｒｅ＿ｓｔａｒｔおよびＴｒａｃｅ＿ｓｔｏｒｅ＿ｓｔｏｐ動作を使用する場合、ＤＳＭは、Ｔｒａｃｅ＿ｓｔｏｒｅ＿ｓｔａｒｔを始動し、その後に続いてＴｒａｃｅ＿ｓｔｏｒｅ＿ｓｔｏｐ動作を始動するようにセットされてもよい。全体的な圧縮比は、Ｔｒａｃｅ＿ｓｔｏｒｅ＿ｓｔａｒｔおよびＴｒａｃｅ＿ｓｔｏｒｅ＿ｓｔｏｐ動作の間の時間対合計時間の関数となる。変更時記憶モードは、圧縮をさらに最適化するために、Ｔｒａｃｅ＿ｓｔｏｒｅ＿ｓｔａｒｔおよびＴｒａｃｅ＿ｓｔｏｒｅ＿ｓｔｏｐ動作の使用と組み合わせられてもよい。
【００７２】
記憶から非記憶への任意の移行時に、タイムスタンプ値が書き出されてもよい。これは、フィルタにかけられたデータの相関を可能にする。
【００７３】
デバッグバスで融通性を提供するために、ビット単位のプログラム可能な遅延機能が、ｄｓｍ＿ｄｂｇ＿ｄｅｌａｙレジスタＭＳＲを通して提供されてもよい。デバッグバスの６４ビットのそれぞれは、有効ビットがその対応するデータの後で１サイクルに到達しているケースを処理するために、１クロックサイクルだけ遅延されてもよい。任意の有効ビットを、対応するデータとパイプ整合させることが望ましいが、ソースにおいてデータを遅延することは非効率的となる。したがって、ＤＳＭにおいて中心的にこの能力を提供することが、より効率的であってもよい。ｄｓｍ＿ｄｂｇ＿ｄｅｌａｙレジスタ内の１である各ビットについては、デバッグバスの対応するビットは、１クロックだけ遅延される。
【００７４】
ｄｓｍ＿ｄｂｇ＿ｍａｓｋレジスタは、ビット単位のデバッグバスマスクである。ｄｓｍ＿ｄｂｇ＿ｍａｓｋレジスタの中の各ビットについては、０である場合、対応するデバッグバスビットはマスクされない。１である場合、対応するデバッグバスビットはマスクされる。この機能は、ＤＳＭの外部でこのマスキングを行う方法がない用途であって、変更時に記憶する機能またはＤｂｇＢｕｓＣｈｎｇトリガを使用する要望のある用途において使用されてもよい。
【００７５】
ＤＳＭは、様々なデバッグバスデータに基づいてトリガしてもよい。デバッグバスデータは、トリガを生成するための任意の論理演算のために処理されてもよい。例えば、論理演算は、「に等しい」比較および／または「よりも大きい」比較であってもよい。デバッグバスデータの６４ビットのうち３２ビットが、制御および状態レジスタ内のｂｕｓ＿ｓｅｌ信号によって選択されてもよい。１つまたは複数のあるデバッグデータビットが、マスク（ｓｃｂ＿ｔｒｉｇ＿ｍａｓｋビット）による比較のために選択されてもよい。２つのモード（「最後の値と比較する」モードおよび「固定値と比較する」モード）が、ｃｍｐ＿ｍｏｄｅビットによって定義されてもよい。「最後の値と比較する」モードでは、デバッグデータは、最後のデバッグデータと比較される。「固定値と比較する」モードでは、デバッグデータは、所与の比較値（ｃｍｐ＿ｖａｌビット）と比較される。表２０に、ｄｓｍ＿ｔｒｉｇ＿ｄａｔａ＿＊レジスタビットフィールド定義例を示す。ｄｓｍ＿ｔｒｉｇ＿ｄａｔａ＿＊レジスタは、トリガｔｒｉｇ＿ｍｉｓｃ＿ｅｑ［＊］およびｔｒｉｇ＿ｍｉｓｃ＿ｇｔ［＊］と関連付けられる。
【表２０】
0005543675.tif 000021
【００７６】
この機能性を制御するビットは、レジスタｄｓｍ＿ｃｏｎｔｒｏｌ＿ｓｔａｔｕｓ内に存在する。Ｂｕｓ＿ｓｅｌ＿０ビットが０にセットされた場合、下位３２ビットが様々なデバッグバスデータから選択され、Ｂｕｓ＿ｓｅｌ＿０ビットが１にセットされた場合、上位３２ビットが様々なデバッグバスデータから選択される。Ｃｍｐ＿ｍｏｄｅ＿０ビットが０である場合、ｃｍｐ＿ｖａｌ［３１：０］と比較され、Ｃｍｐ＿ｍｏｄｅ＿０ビットが１である場合、最後の状態と比較される。デバッグバスに基づくいくつかのトリガが提供されてもよい。これらのトリガのそれぞれ１つが、デバッグバス上の６４ビットのうちのいずれかから来るようにプログラムされてもよい。表２１に、ｄｓｍ＿ｔｒｉｇ＿ｓｅｌレジスタビットフィールド定義例を示す。
【表２１】
0005543675.tif 000022
【００７７】
各ＴｒｉｇｇｅｒＳｅｌｅｃｔ＊フィールド内の６ビット値は、デバッグバス上の６４ビットのうちのいずれかを指し示す。２ビットＴｒｉｇｇｅｒＭｏｄｅ＊値は、各ＴｒｉｇｇｅｒＳｅｌｅｃｔ＊フィールドに対応する。ＴｒｉｇｇｅｒＭｏｄｅ＊値は、関連トリガをポジティブエッジまたはネガティブエッジ検出として挙動させることを可能にする。この機能は、より効果的な検証をサポートすることを目的としている。
【００７８】
表２２に、ｄｓｍ＿ｓｍ＿ｖｅｃレジスタビットフィールド定義例を示す。
【表２２】
0005543675.tif 000023
【００７９】
ＤＳＭ用のマイクロコードインターフェースを以下に説明する。ＤＳＭがマイクロコードと通信するために、および逆も同様に、インターフェースが提供されてもよい。このインターフェースは、ＤＳＭとマイクロコードとの間の双方向通信を可能にしてもよい。ｄｓｍ２ｍｃｏｄｅレジスタは、ＤＳＭがコマンドをマイクロコードに信号伝達するための手段を提供し、ｍｃｏｄｅ２ｄｓｍレジスタは、マイクロコードがＤＳＭに信号伝達するための手段を提供する。ＤＳＭ動作は、マイクロコードによって読み取り可能なｄｓｍ２ｍｃｏｄｅレジスタ内のビットをセットしてもよい。マイクロコードは、ＤＳＭによってトリガとして使用可能であるｍｃｏｄｅ２ｄｓｍレジスタ内のビットをセットしてもよい。
【００８０】
専用デバッグマイクロ中断は、ＤＳＭがマイクロコードの注目を集めることを可能にする。これらの機能は、ブレイクポイントが実際に取られる場合、または取られない場合をＤＳＭが制御するための能力、ＤＳＭがマイクロコードパッチを送信するための能力、（従来のＨＤＴのような）汎用比較を行い、真または偽の結果を返信するようにＤＳＭがマイクロコードに指図するための能力、ＨＤＴに入るようにＤＳＭがマイクロコードに指図するための能力、マイクロコードがブレイクポイントをＤＳＭに信号伝達するための能力およびマイクロコードが汎用フラグビットをＤＳＭにセットするための能力などを提供する。
【００８１】
所与のスレッド上で実行するマイクロコードが、他方のスレッドのものからの別個の状態と相互作用するように、ｄｓｍ２ｍｃｏｄｅおよびｍｃｏｄｅ２ｄｓｍレジスタの両方が、スレッド方式で処理されてもよい。デバッグマイクロ中断は、（緊急ＨＤＴ中断以外の）任意の他の中断のように扱われてもよく、命令境界で取られてもよい。デバッグマイクロ中断が命令またはルーチンの最中に取られ得る少数のケースが存在する。これらのケースのほとんどは、スピンループ（例えば、ＨＡＬＴ、ＳＴＰＣＬＫ、ＦＰＵ  ＦＲＥＥＺＥループ等）である。
【００８２】
表２３に、ｄｓｍ２ｍｃｏｄｅレジスタビットフィールド定義例を示す。
【表２３】
0005543675.tif 000024
【００８３】
ＤＳＭをトリガするブレイクポイント条件を使用するために、実際にブレイクポイントを取ることなくブレイクポイント条件が観察された場合にＤＳＭが観察されてもよい。ＥｎａｂｌｅＢｐビットは、レジスタ内の値を更新するようにマイクロコードに指示するものである。これは、ブレイクポイントが無効にされた状態でデバッグシーケンスを開始できること、または途中でそれらを有効できること（または逆も同様）を可能にする。このスキームは、既存のブレイクポイント有効／無効機構を活用する。
【００８４】
ｆｌａｇ１およびｆｌａｇ０ビットは、ＤＳＭ動作またはＳＲＢアクセスによってセットまたはクリアされてもよい。これらのビットは、ＤＳＭへのトリガオプションである。これらのビットは、種々の方法で使用されてもよい。それらは、ＤＳＭが複雑な条件を追跡するための余分な状態ビットである。それらは、ＤＳＭ観察からビットを読み出すマイクロコード経路へ、情報を信号伝達するために使用されてもよい。それらは、あるＨＤＴレベル観察をＤＳＭに知らせるように、ＨＤＴによってセットされてもよい。
【００８５】
ＤＳＭは、専用デバッグマイクロ中断を引き出すことによって、マイクロコードをトリガする能力を有してもよい。マイクロコードは、従来のデバッグ要求（ＤＢＲＥＱ）中断から次に高い優先順位として、ＤＳＭマイクロ中断を優先させる。したがって、ＤＢＲＥＱおよびＤＳＭ中断の両方が保留である場合、マイクロコードは、最初にＤＳＭ中断を処理してもよい。Ｐａｔｃｈ、Ｃｏｍｐａｒｅ、ＥｎａｂｌｅＢｐ、ＥｎｔｅｒＡｐｍｌおよびＥｎｔｅｒＨｄｔビットは全て、ＤＳＭからの関連するセットおよびクリア動作を有する。これは、これらのビットがＤＳＭによって動的に変更されることを可能にする。ＭｃｏｄｅＣｔｌおよびＤｂｇＣｎｔｒｌビットは、いずれのセットまたはクリア動作を持たず、ＳＲＢ上にそれらをライトすることによってのみ制御されてもよい。ＭｃｏｄｅＣｔｌおよびＤｂｇＣｎｔｒｌビットは、デバッグ実行をセットしている間に静的に書き込まれてもよい。次いで、Ｐａｔｃｈ、Ｃｏｍｐａｒｅ、ＥｎａｂｌｅＢｐ、ＥｎｔｅｒＡｐｍｌおよびＥｎｔｅｒＨｄｔビットは、ＤＳＭによって動的にセットまたはクリアされてもよく、マイクロ中断動作の始動につながる（ＣＵ＿ＤｂｇＭｉｃｒｏＩｎｔＣ［１｜０］）。これは、ＤＳＭが、１つのデバッグ中断と別のデバッグ中断とでは別のやり方をするようにマイクロコードに「伝える」ことを変更するのを可能にする。デバッグマイクロ中断が始動された場合に、マイクロコードは、何をする必要があるかを判定するために、ｄｓｍ２ｍｃｏｄｅレジスタを読み出す。
【００８６】
ｄｓｍ２ｍｃｏｄｅのＤｂｇＭｉｃｒｏＩｎｔ、Ｐａｔｃｈ、ＥｎａｂｌｅＢｐ、ＥｎｔｅｒＡｐｍｌおよびＥｎｔｅｒＨｄｔビットのビットクリアは、ｍｃｏｄｅ２ｄｓｍレジスタ内のクリアビットを用いて処理される。このスキームは、（読み出し以降に）ＤＳＭによって修正されたｄｓｍ２ｍｃｏｄｅレジスタ内の他のビットが上書きされる可能性を防止するために、ｄｓｍ２ｍｃｏｄｅレジスタへの直接的なＲ−Ｍ−Ｗの代わりに実装される。
【００８７】
ＤＳＭが、ノースブリッジ（ＮＢ）で採用される場合、ＮＢのＤＳＭが完全なマイクロコードインターフェースを持たないため、デバッグ中断を始動するよりもむしろ、ＮＢ  ＤＳＭは、全てのコアに広がる前に、ＤＢＲｅｑ信号へのＤｂｇＩｎｔ出力にＯＲ演算を行ってもよい。これは、ＣＣＩへの変更を伴わずに、ＨＤＴへの進入を発生させるＮＢ  ＤＳＭをサポートすることを可能にする。
【００８８】
Ｄｓｍ２ｍｃｏｄｅレジスタのビットのうち、ＤｂｇＭｉｃｒｏＩｎｔおよびＦｌａｇＯｕｔビットがサポートされてもよい。ＤｂｇＭｉｃｒｏＩｎｔは、ＤｂｇＩｎｔ出力を駆動する。ＦｌａｇＯｕｔビットは、コアＤＳＭでのように、スクラッチパッドとして使用されてもよい。ＥｎａｂｌｅＢｐ、Ｃｏｍｐａｒｅ、Ｐａｔｃｈ、ＥｎｔｅｒＡｐｍｌおよびＥｎｔｅｒＨｄｔビットは、利用されなくてもよい。
【００８９】
ＤＳＭが、非常に複雑なトリガシーケンスを処理するリソースを欠いている場合、能力を拡張するためにマイクロコードを採用することが可能である。トリガシーケンスの任意の時点で、ＤＳＭは、完全に新しいトリガシーケンスのためにＤＳＭを完全に再構成するマイクロコードパッチを呼び出してもよい。これは、高複雑度の場合を処理するために採用されてもよい。ＤＳＭ＿ＰＡＴＣＨは、中断からの帰還としてリードオンリーメモリ（ＲＯＭ）内にあってもよい。それは、マイクロコードパッチ機構を介してパッチを適用されてもよい。この特別な場所は、他の命令フローと共有されるべきではない。
【００９０】
全ての中断（ｉｎｔ  ０、ｉｎｔ  １、ｉｎｔ  ３等）は、いくつかの例外を伴って、ｍｃｏｄｅ２ｄｓｍ内でビット０をセットする。第１に、１バイトｉｎｔ３  ｏｐコードのみが、ｍｃｏｄｅ２ｄｓｍ内でＩＮＴ３ビットをセットし、１バイトｉｎｔ３は、ＩＮＴビットをセットしない。ソフトウェアデバッガは、ソフトウェアブレイクポイントをセットするために、１バイトｉｎｔ３  ｏｐコードを使用してもよい。これは、ｉｎｔ３がＤＳＭへの特別なインターフェースを有する理由、および１バイトｏｐコードがフラグを付けるために重要である理由である。第２に、「ｉｎｔ  ４」（オーバーフロー）は、この中断がめったに使用されず、マイクロコードへの変更が容易ではないため、ｍｃｏｄｅ２ｄｓｍ内でビット０をセットしない。ブレイクポイントが「ｉｎｔ  ４」のためにセットされる必要がある稀な場合において、ユーザは、中断ハンドラの開始時に命令ブレイクポイントをセットしてもよい。他の適切な中断ハンドラは、ｄｓｍ＿ｅｎｂｌビットがＤＳＭ  ＣｏｎｔｒｏｌＳｔａｔｕｓレジスタ内でセットされた場合（ビット０）に、ｍｃｏｄｅ２ｄｓｍ内でビット８：３をセットしてもよい。
【００９１】
ｍｃｏｄｅ２ｄｓｍ  ＭＳＲは、マイクロコードがＤＳＭに信号伝達するための手段を提供する。各クラスタに対する別個のビットがある。表２４に、ｍｃｏｄｅ２ｄｓｍレジスタビットフィールド定義例を示す。全てのビットは書き込み専用である。
【表２４】
0005543675.tif 000025
【００９２】
ｍｃｏｄｅ２ｄｓｍＭＳＲ内のビットは、マイクロコードがＤＳＭに信号伝達するために使用される。これらのビットは、ＤＳＭが任意の他のトリガのように使用してもよいトリガとして、ＤＳＭに送られる。各スレッドに１つずつ、２組のこれらのビットがあってもよい。これらのビットは、ＳＶＭ傍受チェックを含む任意の例外の前にマイクロコードによって書き込まれてもよい。ソフトウェアベースの中断（ｉｎｔ、ｉｎｔ３）がＤＳＭに信号伝達される方法は、マイクロコードがこれらの対応するビットをｍｃｏｄｅ２ｄｓｍレジスタに書き込むことによる。
【００９３】
特徴および要素は、特定の組み合わせで上記に説明されるが、各特徴または要素は、他の特徴および要素を伴わずに単独で、あるいは他の特徴および要素を伴う若しくは伴わない種々の組み合わせで、使用されてもよい。本明細書で説明される装置は、汎用コンピュータまたはプロセッサによって実行するためのコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェアまたはファームウェアを使用することによって製造されてもよい。コンピュータ可読記憶媒体の例は、リードオンリーメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内部ハードディスクおよびリムーバブルディスク等の磁気媒体、磁気光学媒体、ならびにＣＤ−ＲＯＭディスクおよびデジタル多用途ディスク（ＤＶＤ）等の光学媒体を含む。
【００９４】
本発明の実施形態は、コンピュータ可読記憶媒体に記憶された命令およびデータとして表されてもよい。例えば、本発明の態様は、ハードウェア記述言語（ＨＤＬ）であるＶｅｒｉｌｏｇを使用して実装されてもよい。処理された時に、Ｖｅｒｉｌｏｇデータ命令は、半導体加工施設で実装される製造過程を行うために使用され得る他の中間データ（例えば、ネットリスト、ＧＤＳデータなど）を生成してもよい。製造過程は、本発明の種々の態様を具現化する半導体デバイス（例えば、プロセッサ）を製造するように適合されてもよい。
【００９５】
好適なプロセッサは、一例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、グラフィックスプロセッシングユニット（ＧＰＵ）、ＤＳＰコア、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、任意の他の種類の集積回路（ＩＣ）および／またはステートマシン、あるいはそれらの組み合わせを含む。
【図１】
0005543675.tif 000026
【図２】
0005543675.tif 000027
【図３】
0005543675.tif 000028
【図４】
0005543675.tif 000029
【図５（Ａ）】
0005543675.tif 000030
【図５（Ｂ）】
0005543675.tif 000031
【図６】
0005543675.tif 000032
【図７】
0005543675.tif 000033