"デバッグトリガを受信するように構成されており、対応するデバッグトリガまたは一連のデバッグトリガが発生するという条件で、プログラムされた動作を開始するように構成されている、モジュールを備える、集積回路IC。前記モジュールは、プロセッサコア、異なるデバッギングモジュール、ノースブリッジまたは他のソケットのうち少なくとも1つからデバッグトリガを受信するように構成されている、請求項1に記載のIC。前記モジュールは、クロックを停止すること、デバッグモードに入ること、デバッグクロストリガを発行すること、デバッグトレースデータを記憶構造に記憶することを開始若しくは停止すること、デバッグ状態に移行すること、カウンタをインクリメント、デクリメント若しくはクリアすること、あるいはレジスタ内のフラグをセット若しくはクリアすることのうち少なくとも1つをトリガするように構成されている、請求項1に記載のIC。前記モジュールは、メタベクトルを保持するためのレジスタを含み、前記メタベクトルは、デバッグトリガを選択するためのトリガフィールドと、前記選択されたデバッグトリガのブール組み合わせを組み合わせるための置換フィールドと、動作フィールドとを含み、前記置換フィールドによって定義された条件が満たされたことを条件として、前記動作フィールドによって定義された動作がトリガされるように構成されている、請求項1に記載のIC。前記デバッグトリガは、カウンタがマッチ値に合致する場合に生成されるカウントマッチトリガと、クロックカウントがマッチ値に合致する場合に生成されるクロックカウントマッチトリガと、前記モジュールとマイクロコードとの間の通信のためのレジスタ内のフラグビットと、ランダムイベントジェネレータによって生成されるランダムイベント信号と、パフォーマンスモニタ信号と、中断と、エラーと、ブレイクポイントと、デバッグバス上のデータの論理または算術比較に基づいて生成されるデバッグデータベースのトリガと、デバッグバスから選択されるビットであるデバッグデータベースのトリガと、のうち少なくとも1つを含む、請求項1に記載のIC。前記デバッグトリガは、マイクロコードによって生成される、請求項1に記載のIC。前記モジュールは、デバッグデータを受信し、前記デバッグデータを記憶構造に供給するように構成されている、請求項1に記載のIC。前記記憶構造は、前記IC上のキャッシュ、またはコア内、ノースブリッジ内、サウスブリッジ内、グラフィックスプロセッシングユニットGPU内、中央処理装置CPU内若しくはオフチップのデータ記憶装置である、請求項7に記載のIC。前記モジュールは、前記デバッグデータへのフィルタ機能を実行するように構成されている、請求項7に記載のIC。前記モジュールは、前記モジュールの動作を制御する、制御および状態レジスタを含む、請求項1に記載のIC。前記制御および状態レジスタは、電力消費を節約するように前記モジュールの電力状態を制御するための低電力ビットを含む、請求項10に記載のIC。集積回路ICをデバッグする方法であって、デバッグトリガを受信するステップと、対応するデバッグトリガまたは一連のデバッグトリガが発生するという条件で、プログラムされた動作を開始するステップと、を含む、方法。前記デバッグトリガは、プロセッサコア、異なるデバッギングモジュール、ノースブリッジまたは他のソケットのうち少なくとも1つから受信される、請求項12に記載の方法。前記プログラムされた動作は、クロックを停止するステップ、デバッグモードに入るステップ、デバッグクロストリガを発行するステップ、デバッグトレースデータを記憶構造に記憶することを開始若しくは停止するステップ、デバッグ状態に移行するステップ、カウンタをインクリメント、デクリメント若しくはクリアするステップ、あるいはレジスタ内のフラグをセット若しくはクリアするステップのうち少なくとも1つを含む、請求項12に記載の方法。前記デバッグトリガは、カウンタがマッチ値に合致する場合に生成されるカウントマッチトリガと、クロックカウントがマッチ値に合致する場合に生成されるクロックカウントマッチトリガと、前記モジュールとマイクロコードとの間の通信のためのレジスタ内のフラグビットと、ランダムイベントジェネレータによって生成されるランダムイベント信号と、パフォーマンスモニタ信号と、中断と、エラーと、ブレイクポイントと、デバッグバス上のデータの論理または算術比較に基づいて生成されるデバッグデータベースのトリガと、デバッグバスから選択されるビットであるデバッグデータベースのトリガと、のうち少なくとも1つを含む、請求項12に記載の方法。前記デバッグトリガは、マイクロコードによって生成される、請求項12に記載の方法。デバッグデータを記憶構造に記憶するステップをさらに含む、請求項12に記載の方法。前記デバッグデータを記憶する前に、前記デバッグデータへのフィルタ機能を実行するステップをさらに含む、請求項17に記載の方法。デバッグトリガを受信するように構成されており、対応するデバッグトリガまたは一連のデバッグトリガが発生するという条件で、プログラムされた動作を開始するように構成されている、モジュールの構造および/または挙動を記述するためのコードを記憶する、コンピュータ可読記憶媒体。前記コードは、ハードウェア記述言語HDLで記述されている、請求項19に記載のコンピュータ可読記憶媒体。デバッギング中にエラーが検出された場合に、設計者は、関心信号を回路から選び、エラーの原因を判定するためにロジックアナライザを使用しようとしてもよい。しかしながら、これは困難なプロセスであり、効果的ではないことが多い。すでに発生しているエラーは、反復して再構築することが困難であることが多い。したがって、より効率的なデバッギングを提供することが望ましい。柔軟かつ効率的なデバッグ可視性のための複雑なトリガシーケンスをプログラムすることを可能にするデバッグステートマシンDSMを含む、プロセッサまたは集積回路チップを開示する。DSMは、例えば、トレース開始および停止、トレースフィルタリング、DSM間のクロストリガ、クロック停止、システムデバッグモード中断をトリガすること、フレキシブルマイクロコードインターフェースなどのローカルデバッグ機能の制御を集中させる。DSMは、プロセッサコア、他のDSM、ノースブリッジ、他のソケットなどからトリガを受信し、対応するトリガまたは一連のトリガが発生するという条件において、プログラムされた動作を開始するように構成されている。より詳細な理解は、添付図面と併せて一例として挙げられる、以下の説明から得られてもよい。一実施形態によれば、プロセッサまたは集積回路チップは、柔軟かつ効率的なデバッグ可視性のための複雑なトリガシーケンスをプログラムすることを可能にするデバッグステートマシンDSMを含む。DSMは、トレース開始および停止、トレースフィルタリング、DSM間のクロストリガ、クロック停止、ハードウェアデバッグツールHDT中断、フレキシブルマイクロコードインターフェースなどのローカルデバッグ機能の制御を集中させる。図1は、一実施形態による、DSMを含むプロセッサ例100を示す。図1のプロセッサ100は、2つのコア110と、ノースブリッジ120とを含む。各コア110は、コアユニット112と、DSM114と、マイクロコード116と、キャッシュ118とを含んでもよい。ノースブリッジ120は、DSM122と、トレースキャッシュバッファTCB124とを含んでもよい。TCB124は、トレースデータを記憶するための専用アレイである。各コアのDSM114は、コア、他のDSM、ノースブリッジおよび/または他のソケット等からトリガを受信し、特定の動作を行う。動作は、以下で詳細に説明されるように、クロックを停止すること、デバッグモードに入ること、デバッグクロストリガを発行すること、情報を記憶ユニット例えば、キャッシュ118またはTCB124に記憶することを開始若しくは停止すること、特定のデバッグ状態に移行すること、カウンタをインクリメントまたはクリアすること、レジスタ内のフラグをセット若しくはクリアすることなどを含むが、これらに限定されない。図1に示されるプロセッサ構造は例であり、任意の変形例が可能であることに留意されたい。例えば、プロセッサ100は、1つのコアまたは2つよりも多くのコアを含んでもよく、ノースブリッジ120を含んでもよいし、含まなくてもよい。ノースブリッジ120は、DSM114を含んでもよいし、含まなくてもよい。DSM114は、中央処理装置CPU、グラフィックスプロセッシングユニットGPU、サウスブリッジ、ノースブリッジなどの任意の種類のプロセッサまたはチップセットで利用されてもよい。図2は、DSMインターフェース例を示す。DSM114は、クロック信号、トリガ、動作、特殊レジスタバスSRBアクセス、外部タイムスタンプカウンタ、制御および状態レジスタ、デバッグ中断、デバッグバスインターフェース、一般カウンタ、制御信号等のためのインターフェースを有してもよい。表1は、DSM114に提供され得るDSMインターフェース例を示す。DSM114は、用途に応じて、表1に記載されるインターフェースの全てまたは一部を有してもよい。プロセッサ100は、クロックを停止すること及びスキャンポートを通してスキャンすることによって、プロセッサアレイの状態がアクセスされ得るように、スキャン能力をサポートしてもよい。スキャンクロックは、別個の一式のピンSC1およびSC2を有する。トリガインターフェースTriggersExtは、デバッグバスおよびブロードサイドトリガからDSM114への着信トリガ用である。ブロードサイドトリガは、クロック信号を停止する信号OKToStopClocks、パフォーマンスモニタ、エラー、ブレイクポイント、他のDSMからのクロストリガ等を含む。動作インターフェースActionsは、トリガまたは一連のトリガに基づく特有の動作のためのDSMからの発信信号用である。SRBアクセスインターフェースRegDat、RegWrEn、RegAccessGater、RegDecode、RegRdDataは、DSMレジスタからデータを読み取り、DSMレジスタへデータを書き込むために提供される。DSMは、独自の内部タイムスタンプカウンタを使用してもよい。代替として、DSMは、グローバルタイムスタンプが全てのDSMにわたって使用され得るように、外部タイムスタンプカウンタ入力用のインターフェースExtTscCntを有してもよい。制御および状態レジスタCntlStatus、CntlStatus2、DsmTrigPreSelは、DSMを制御するためのものである。デバッグ中断インターフェースDbgIntは、マイクロコード等を中断するためのものであり、従来のデバッグ要求信号と論理和されてもよく、または専用デバッグ中断信号を形成してもよい。デバッグバスインターフェースDebugBusIn、DebugTraceWrEn、DebugTraceWrDataは、デバッグ情報を制御し、記憶ユニット例えば、キャッシュ118またはTCB124に送信するためのものである。DSM114のプログラミング例を以降で説明する。図3は、DSM114のプログラミングモデル例を示す。DSM114は、コア、ノースブリッジ、他のDSMまたは他のソケット等からトリガを受信し、ある動作を行う。DSM114は、以下で詳細に説明されるように、制御および状態レジスタと、カウンタと、線形フィードバックシフトレジスタLSFRと、デバッグバストリガ用のレジスタと、事前選択トリガおよび事前選択動作用のレジスタと、DSMコア用のレジスタと、デバッグバスマスクレジスタと、などを含んでもよい。DSM動作は、特定のトリガに応答して特定の動作を行うように、任意の方式でプログラムされてもよい。図4は、DSM状態図例を示す。例として、4つの状態がDSM114に対して定義されてもよい。4つの状態が例として提供され、恣意的な数の状態が定義されてもよいことに留意されたい。DSM状態は、特定のトリガによってトリガされる動作として、1つの状態から別の状態に移行してもよい。DSM114は、特殊レジスタバスSRBを介してプログラムされてもよい。DSM114をプログラムするために、複数のメタベクトルが、複数のDSM状態ごとに定義されてもよい。例えば、3つの42ビットメタベクトルが、4つのDSM状態ごとに定義されてもよい。図5Aは、DSMベクトルレジスタdsm_sm_vecによって保持されるメタベクトル500を示す。メタベクトル500は、1つ以上のトリガフィールド502a、502b、502c本例では3つのトリガフィールドA、BおよびCと、置換フィールド504と、動作フィールド506とを含んでもよい。メタベクトルのそれぞれは、最大で所定数のトリガ例えば、本例では3つに対して感受性sensitiveがあってもよい。メタベクトル500は、任意の数のトリガに対して感受性があるようにプログラムされてもよいことに留意されたい。トリガフィールド502a~502cは、トリガを選択する。置換フィールド504は、そのメタベクトルに対する3つのトリガの任意のブール組み合わせを、組み合わせる。置換フィールド504は、そのメタベクトルに対する条件が満たされているかどうかを定義する。条件が満たされているのであれば、動作フィールド506によって特定される動作が呼び出される。図5Bは、メタベクトル500を介したDSMプログラミングを示す。各トリガフィールドA、BおよびC502a~502cの各々は、全ての考えられるトリガソースからトリガを選択し、3ビット動作信号512を生成する。置換ビットのうち1つは、3ビット動作信号512に基づいて、メタトリガmeta_trig514として選択される。メタトリガ514が真である場合、動作フィールド506によって定義される動作が実施される。表2は、トリガの関数としての置換フィールドプログラミング例を示す。例えば、トリガBおよびCにかかわらず、トリガAが発生する時にトリガされるように動作がプログラムされる場合、置換フィールドは、0xAAにセットされてもよい。トリガAXORBが真である時にトリガされるように動作がプログラムされる場合、置換フィールドは、0x66にセットされてもよい。トリガを以下で説明する。DSMは、コア、ノースブリッジ、マイクロコード、他のDSM、他のソケットなどからトリガを受信し、所定の動作を行う。トリガは、一般カウントマッチトリガ、クロックカウントマッチトリガ、フラグ、デバッグバスベースのトリガ、ランダムイベント、パフォーマンスモニタ、中断、エラー、OKToStopClock信号、クロストリガ、ブレイクポイントおよび/または一般比較ベースのトリガ等を含むが、これらに限定されない。表3は、コアおよびノースブリッジからのトリガ例を記載する。カウントマッチトリガは、カウンタ一般カウンタ、クロックカウンタ等がマッチ値に合致する場合に生成される。デバッグデータベースのトリガは、デバッグバスを介して種々のコアユニットから来る様々なトレースデータに由来する。デバッグデータベースのトリガは、値値の全てまたは一部例えば、上位または下位32ビットが比較値に等しい、および/または比較値よりも大きい若しくは小さいまたは任意の他の論理あるいは算術演算に基づく場合に生成されてもよい。デバッグデータベースのトリガは、デバッグバスから選択されるビットであってもよい。デバッグデータベースのトリガ信号は、デバッグバス上の少なくとも1ビットが、以前のクロックサイクルにおけるその値と比べて変化したことを示してもよい。以下で説明されるランダムイベントトリガは、シード、多項式、マスクおよび/またはマッチレジスタの関数として始動する。マイクロコードは、あるDSM動作をトリガしてもよい。マイクロコードトリガは、別個のレジスタ内で静的に定義されてもよいし、デバッグ実行全体にわたって固定され、全てのDSM状態に適用されてもよい。付加的なカウントマッチトリガは、カウンタが別のカウンタに等しいことを示す。これは、割当/割当解除型関数を追跡するために有用である。例えば、trig_gen_cnt1は閾値にセットされてもよく、trig_gen_cnt0は割当時にインクリメントされてもよく、trig_gen_cnt1は割当解除時にインクリメントされてもよい。このトリガは、閾値が満たされた場合に始動する。事前選択されたトリガ表3のマイクロコードトリガは、ブレイクポイント、中断、パフォーマンスモニタおよびエラーイベントなどの群におけるトリガである。DSMは、従来のブレイクポイント条件をトリガとして使用してもよい。DSMは、従来のブレイクポイントがマイクロコードを通して無効にされるにつれて、ブレイクポイントを無効にする。ブレイクポイント処理マイクロコードは、実行し始める場合に、dsm2mcodeレジスタDSMからマイクロコードへの通信のためのレジスタ内の値を読み出す。ビットが真である場合、マイクロコードは、レジスタ内の対応するビットをセットすることによって、それが指すブレイクポイントの種類を信号伝達し、ブレイクポイントを取らずに戻る。DSMは、システム管理モードSMMI/Oトラップオフセットレジスタで特定されるようなI/O命令をトリガしてもよい。SMMIOトラップは、ブレイクポイントトリガと同様に、通常通り発生しなくてもよい。DSMは、トリガするイベントとしてパフォーマンスモニタ信号を使用してもよい。既存のパフォーマンスモニタイベント選択能力から選択されるイベントは、トリガとしてDSMに送られる。次いで、DSMは、パフォーマンスモニタをトリガとして扱うことができ、それらの組み合わせまたはシーケンスに反応するようにプログラムされてもよい。事前選択トリガの各々は、最大で2つのフィールドでできていてもよい。第1のフィールドは、クラスタにとらわれない選択符号化であり、第2のフィールドは、表6に示されるように、どちらのクラスタまたは両方のクラスタのORであるかを判定する。第2のフィールドは、DSMが実際に受けるものを形成するために、トリガの各クラスタのバージョンがどのようにして使用されるかをプログラムする。DSMは、これらのフィールドの両方を使用して、トリガごとに、1つのコアまたは他方のクラスタのバージョンを見てもよいし、あるいは何れか一方のクラスタのバージョンのORを見てもよい。表4および5は、dsm_trig_pre_sel1およびdsm_trig_pre_sel2レジスタビットフィールド定義例を示す。表7は、中断トリガのうちのいずれかを選択するために、表4および5のUcodePreSel[4:0]フィールドごとのマイクロコードトリガ例を定義する。DSM動作を以下に説明する。DSMは、トリガまたは一連のトリガに基づいて特定の動作を行う。動作は、メイン動作および事前選択動作という2つのカテゴリに分類されてもよい。例として、16のメイン動作および46の事前選択動作が以下のように定義される。メイン動作は、DSMにフィードバックするトリガを引き起こし得る動作である。16のメイン動作の中で、12の実際のメイン動作および4の一般動作が、本明細書において一例として定義される。4の一般動作Gen_act0~3は、これらが、12の実際のメイン動作がフィードバックする緊密なループの外側にある、間接レベルである。これは、一般動作のパイプライン方式を可能にする。図5Aのメタベクトルの動作フィールドは、16ビット完全復号フィールドである。これは、16の一般動作の任意の置換を始動することを可能にする。表8に、16のメイン動作例を示す。Gen_act0-3動作は、4つのDSM状態ごとに別々に定義される。これは、合理的なプログラミングの融通性を可能にする。4つのDSM状態に対する6ビット一般動作のプログラミングサポートは、表9および10で定義されるように、2つのレジスタを必要とする。表9は、dsm_act_pre_sel01レジスタビットフィールド定義例を示し、表10は、dsm_act_pre_sel23レジスタビットフィールド定義例を示す。事前選択動作については、6ビットの符号化が、列挙するために提供される。表11に、事前選択動作のサンプルリストを示す。これらの動作は、内部DSMタイミングループの外側にあってもよく、したがってパイプライン型であってもよい。DSMは、制御および動作のために複数のレジスタを含む。制御および状態レジスタは、様々なDSM制御を提供する。例えば、制御レジスタは、DSMトリガが動作にマップする方法を制御する例えば、PerfMon0が発生する場合にchip_stopclk動作を生成するなど。表12に、dsm_control_statusレジスタビットフィールド定義例を示す。dsm_enblビットは、1にセットされた場合にDSMの動作を有効にし、0にセットされた場合にDSMの動作を無効にする。dsm_enblビットが0である場合に、いずれのDSM状態も修正されなくてもよいDSMがオフにされた場合でさえも数を数える絶対時間カウンタを除く。dsm_enblビットは、0x0にリセットされてもよい。セキュリティの理由で、マイクロコードは、このビットが書き込みマシン状態レジスタWRMSR命令によってセットされることを防止し、HDTまたはマイクロコードパッチがこのビットをセットしてもよい。Dsm_hdt_statusビットは、HDTまたは高度プラットフォーム管理リンクAPMLに入るために理由を判定する方法を提供する。SWは、このビットをポーリングし、DSMがHDTまたはAPMLを呼び出そうとしたかどうかを判定してもよい。このビットは、Mcode2DsmレジスタのClrHdtStatusビットへの1の書き込みによって、手動でクリアされてもよい。このビットは、dsm_control_statusレジスタの中で読み取り/書き込み可能であるが、そこにライトすることは、そのレジスタの中で同様に書き込み可能であるdsm_stateビットを潜在的に破損する危険がある。mcode2dsmレジスタのClrHdtStatusビットを有することにより、dsm_control_statusの中にあるDsmStateビットを同様に破損し得るdsm_control_statusへの読み取り修正書き込みRMWという処理を行う必要を回避する。cmp_modeおよびbus_selビットは、カスタムトリガ機能性と関連付けられる。trig_obs[5:0]フィールドは、どのトリガが発信デバッグバス上で可視的にされるかを制御する。trig_obsフィールドは、任意の特定のトリガに対処するために、それぞれ6ビット幅であってもよい。発信デバッグバストレースデータフィールドは、表13のように定義される。store_on_changeビットは、データが全クロック上に記憶されるかどうか、あるいは任意のデータがいつ変化するかを制御する。変更時に記憶する特徴について見られるデータは、状態キャプチャバッファL2またはTCBに送信される全72ビットのトレースデータを含む。dsm_stateビットは、デバッグステートマシン状態ビットである。DsmStateビットは、DSM自体の状態を示す。DSMは、その論理への入力としてこれらを使用し、また、動作を介してこれらのビットを変更してもよい。DbgTimeCntDisビットは、絶対時間カウンタ用である。このビットは0にリセットし、デフォルト設定で、絶対時間カウンタが有効であることを意味する。GenCntIncrementビットは、4つの汎用カウンタに対応する。これらのビットは通常、動作Gen_cnt_tgl_inc_[3,2,1,0]によって制御される。これらは、ここでは、この状態へのリードアクセスを提供するためのものである。StoreToL2ビットは、デバッグ情報が状態キャプチャL2またはTCBに記憶されるかどうかを制御する。このビットは、SRB上でr/wアクセス可能である。このビットはまた、Trace_store_startおよびTrace_store_stopDSM動作を介して、セットおよびクリアされてもよい。Trace_store_currentおよびTime_store動作は、たとえStoreToL2ビットがセットされていなくても、記憶を引き起こしてもよい。LowPwrビットをセットすることにより、DSMの中の全てのフロップ状態を静的にゲートオフする。しかしながら、全てのレジスタは依然として、読み取り/書き込み可能である。ゲーティング制御は、DSMへの書き込みがない限り、これらのレジスタフロップが時間測定されないことを確実にする。DbgExtTscビットは、外部タイムスタンプソースの使用を可能にする。これは、ノースブリッジのp状態変化により、ノースブリッジに使用されるクロックが経時的に周波数を変化させてもよいという、ノースブリッジ実装のためにサポートされている。このビットが1にセットされた場合に、外部ソースが使用される。加えて、外部ソースが使用される場合に、内部クロックカウンタdsm_clk_cntが無効にされ、マッチトリガに適用されるマスク値として使用される。マスク値を必要とする理由は、外部タイムスタンプカウンタ値が1より多くインクリメントされ得るからである。下位ビットのマスクを外すことにより、そうでなければ見落とされ得る特有のマッチ値を見落とさないことを可能にする。これは、クロックサイクル上の合致の分解能が、タイムスタンプ値が常に1つインクリメントするという単純な場合のものから低減されるという制限を課す。絶対時間カウンタは、状態キャプチャバッファL2またはTCBに書き込まれる際に、種々のデバッグデータのタイムスタンピングに使用される。このカウンタは、DSMに対するマッチトリガを生成するために使用されてもよい。表14に、dsm_clk_cntレジスタビットフィールド定義例を示す。dsm_clk_cntレジスタは、動作信号clk_cnt_rstが始動する場合にDSMによってリセットされてもよい。このリセットを行う信号は、別の可能なDSM動作である。これは、DSMの遅延機能を設定することを可能にする。大抵の場合、このカウンタはDSMによってリセットされず、遅延を生成することは、4つの汎用カウンタを使用して行われることが期待される。ノースブリッジのP状態により、ノースブリッジDSMアプリケーションは、この内部カウンタの代わりにDSMによって使用され得る、NBのP状態が調整されたクロックカウンタを提供してもよい。表15に、dsm_clk_matchレジスタビットフィールド定義例を示す。dsm_clk_matchレジスタは、このレジスタの値がdsmjeountレジスタの値未満の1に等しい場合に発生するイベントを特定するために使用されてもよい。合致時に、信号trig_clk_cntがパルスする。DbgExtTscが1にセットされた場合に、合致条件は、dsm_clk_cntレジスタの対応ビットが0にセットされるビットを参照する。汎用カウンタは、DSMによって制御されてもよい。それらは、DSMによってリセットまたはインクリメントされてもよい。汎用カウンタは、DSMが対応するインクリメント信号を始動する場合にインクリメントする。汎用カウンタは、対応するインクリメント状態が真である場合に、各クロックでインクリメントする例えば、GenCntIncrement[3:0]は、Gen_cnt_tgl_inc_[3:0]動作によって制御される。汎用カウンタは、DSMに対するマッチトリガを生成してもよい。汎用カウンタは、関連マッチレジスタと併せて、トリガソースとしてDSMによって使用されてもよい。汎用カウンタ0および1は、ループバッグモードにある場合に、デバッグバス用のデータソースになる。汎用カウンタ0は、ループバッグモードにおいて、デバッグバスの下位32ビットを供給してもよく、汎用カウンタ1は、デバッグバスの上位32ビットを供給してもよい。タイミングが合い、且つ、付加的な回路領域を消費しない方法でカウンタを実装するために、これらのカウンタは、以下の制限を有してもよい。カウンタは、0x0から数を数え始めてもよく、任意の可能な合致限界をサポートしてもよい。3未満の合致限界を伴うロールオーバーはサポートされなくてもよい。ゼロではない値から数を数え始めることは、合致が、3を加えた開始値以上である場合に機能してもよい。0x0の合致限界はサポートされなくてもよい。インクリメント動作は、たとえインクリメントがgen_cnt_toggle_inc_によって引き起こされたとしても、クリア動作に優先してもよい。クリア動作は、切替がインクリメントから非インクリメントに進む切替動作と同じサイクルで行われた場合に、効果がなくてもよい。これは、切替動作が状態によって遅延されるためである。しかしながら、同じ全体的効果を得るために、ユーザは、非インクリメントからインクリメントに切り替える場合にインクリメントに戻って切り替えるメタベクトルの同じ動作フィールドの中にクリア動作を入れてもよい。ここで、トグルの遅延した効果により、クリアは、切替前に実際に発生する。表16に、dsm_gen_cnt_レジスタビットフィールド定義例を示す。dsm_gen_cnt_レジスタは、対応するトリガ信号gen_clk_inc_が真であるクロックサイクルで、または対応するGen_cnt_tgl_inc_動作がカウンタをインクリメントさせ続けるクロックサイクルでインクリメントする。このレジスタは、対応する動作信号gen_clk_rst_が真である場合に、DSMの動作としてリセットされてもよい。リセット機能は、コンフリクト時にインクリメント機能に優先してもよい。これは、DSMの遅延機能を設定することを可能にする。デバッグブロックは、出力がトリガとして使用され得る疑似ランダムイベントジェネレータを有してもよい。一実施形態によれば、疑似ランダムイベントジェネレータは、2つの仮想線形フィードバックシフトレジスタLFSRを備えてもよい。例えば、LFSRは、48ビット幅の完全にプログラム可能なフィードバック多項式47ビット値、ガロアスタイル数学幅と独立して、タイミングを合わせることができる、2つの仮想LFSR実際のLFSRが共有される用の2組のマスク/マッチレジスタ、48ビットマスクレジスタおよび48ビットマッチレジスタといった属性を有してもよい。図6に、ランダムイベントジェネレータ例600の論理構造を示す。ランダムイベントジェネレータ600の出力は、DSM用のトリガソースとして使用されてもよい。本例では、2つの出力ビットrand_event0およびrand_event1が生成される。論理構造はまた、エラー処理機構を試験するために、エラーを注入するようにコア内の他のユニットによって使用されてもよい。この機構は、ハードウェアに内蔵されるため、プレシリコンおよびポストシリコンの両方で使用されてもよい。ランダムイベントジェネレータ600は、ランダムイベントジェネレータレジスタ602dsm_rnd_lfsrと、ランダムイベントジェネレータフィードバックレジスタ608dsm_rnd_polyと、マッチレジスタ604dsm_rnd_matchと、マスクレジスタ606dsm_rnd_maskと、XORゲート610と、NOTゲート612と、ANDゲート614と、ORゲート616とを含む。DSM114は、ランダムイベントジェネレータフィードバックレジスタ608のDsm_rnd_enblビットをセットすることによって、ランダムイベントジェネレータ600を有効または無効にするために、rand_en_toggle動作を発行してもよい。シード値は、ランダムイベントジェネレータレジスタ602に書き込まれることによって適用されてもよい。ランダムイベントフィードバックレジスタ608は、ランダムイベントジェネレータフィードバック多項式を記憶する。ランダムイベントジェネレータフィードバック多項式は、ランダムイベントジェネレータ600内で任意の可能な多項式を使用することを可能にする。最もランダムな挙動を有するために、M系列または最大長多項式が使用されてもよい。ランダムイベントジェネレータフィードバックレジスタ608は、ガロアスタイルLFSRであってもよい。使用する1つの多項式例は、[48,28,27,1]gである。これは、0x0000_0C00_0001に変換される。フィードバック項のビット位置は、1だけ右に推移される。0次項がそこにあり、単純化される。最高次項48が、次数を示すために記載される。dsm_rnd_matchレジスタ604は、ランダムイベントジェネレータマッチ値を保持し、dsm_rnd_maskレジスタ606は、ランダムイベントジェネレータマスク値を保持する。ランダムイベントジェネレータ600の最終出力は、結果として生じたランダムイベントを表す単一のビットrand_event0またはrand_eventlである。XORゲート610は、出力ビットを生成するために、ランダムイベントジェネレータマッチ値reg_match[47:0]とLFSR値reg_lfsr[47:0]とのビット単位の比較を行う。その後、XORゲートの出力がNOTゲート612によって反転され、次いで、ANDゲート614によってランダムイベントジェネレータマスク値でマスクされる。ランダムイベントジェネレータマスクレジスタ606の0であるビットに対応するビットreg_mask[47:0]のマスクが外される。次いで、ORゲート616により、マスクされた値にOR演算を行うことによって、出力ビットが生成される。表17に、dsm_rnd_lfsrレジスタビットフィールド定義例を示す。これは、実際のLFSRレジスタである。シード値が、このレジスタの書き込みに適用されてもよい。表18に、dsm_rnd_polyレジスタビットフィールド定義例を示す。種々のデバッグデータが、デバッグのために当該デバッグデータを可視的にするために、オンチップまたはオフチップ記憶構造例えば、キャッシュ108またはTCB124に記憶されてもよい。デバッグデータは、種々の場所からデバッグデータを引き出し得るデバッグバスネットワークを介して、DSMに送り込まれてもよい。図7に、デバッグバスの論理構造と、DSM114を介してバッファに記憶するフローとを示す。デバッグデータは、種々のユニットから収集され、DSM114に供給される。DSM114は、デバッグデータ状態キャプチャデータを、記憶構造130例えば、L2キャッシュ、TCB、あるいはコア内、ノースブリッジ内、サウスブリッジ内、グラフィックスプロセッシングユニットGPU内、中央処理装置CPU内若しくはオフチップのデータ記憶装置などに送る。DSM114は、フィルタリング機能を提供するために、デバッグデータを条件付きで記憶してもよい。トレーシングは、DSM114の制御下で開始および停止されてもよい。デバッグデータは、記憶構造130においてキャプチャされた後に、SRBを介してHDTからアクセスされてもよい。この目的で採用される記憶構造130は、L2キャッシュおよびTCBのデフィーチャ方法を使用することを含んでもよい。表19に、状態キャプチャデータビットフィールド定義例を示す。DebugTraceWrEnビットは、その入力が有効な情報を含有するか否かを示す。カウント/データビットは、ビット71:0がタイムスタンプ値または実際のデバッグデータを表すかどうかを示す。トレースデータ状態キャプチャデータは、dsm_control_statusレジスタ内のStoreToL2ビットがセットされている間に、クロックサイクル毎に記憶されてもよい。StoreToL2ビットは、dsm_control_statusレジスタ内で読み取り/書き込み可能であるが、この読み書きは、DSMからのトレース開始および停止動作を介して行われてもよい。フィルタリングを提供するために、変更時記憶モードが提供されてもよい。dsm_control_statusレジスタ内のStoreToL2ビットおよびstore_on_changeビットを例えば、Trace_store_startおよびTrace_store_stop動作を介してセットすることによって、変更時記憶モードに入る。変更時記憶モードでは、1つのサイクルからの記憶ストリーム全体に対する記憶値が、次と比較される。比較は、記憶する経路内のデバッグデータのビット全体に適用される。変更がない場合、新しい値は記憶されない。変更がある場合、それが記憶される。フィルタ機能が、トリガ生成論理によって定義されてもよい。このモードは、トリガ条件の選択およびデータストリームに依存するフィルタ比を提供してもよい。いくつかの異なるモードが提供されてもよい。例えば、1つのモードでは、動作Trace_store_currentが、選択されたデバッグデータを現在のサイクルの状態キャプチャバッファL2またはTCBに記憶するように定義されてもよい。別のモードでは、動作Trace_store_startおよびTrace_store_stopが、記憶することを開始または停止するように定義されてもよい。併用動作が、記憶することを停止するように定義されてもよい。トリガ時に記憶するは、実際には明示的なモードではないが、むしろ、選択的に記憶するようにDSMをプログラミングすることともに、Trace_store_currentまたはTrace_store_startおよびTrace_store_stop動作を使用することを伴う。ある時にTrace_store_current動作が始動する条件がセットされてもよい。それが低頻度で始動するほど、圧縮比が高くなる。Trace_store_startおよびTrace_store_stop動作を使用する場合、DSMは、Trace_store_startを始動し、その後に続いてTrace_store_stop動作を始動するようにセットされてもよい。全体的な圧縮比は、Trace_store_startおよびTrace_store_stop動作の間の時間対合計時間の関数となる。変更時記憶モードは、圧縮をさらに最適化するために、Trace_store_startおよびTrace_store_stop動作の使用と組み合わせられてもよい。記憶から非記憶への任意の移行時に、タイムスタンプ値が書き出されてもよい。これは、フィルタにかけられたデータの相関を可能にする。デバッグバスで融通性を提供するために、ビット単位のプログラム可能な遅延機能が、dsm_dbg_delayレジスタMSRを通して提供されてもよい。デバッグバスの64ビットのそれぞれは、有効ビットがその対応するデータの後で1サイクルに到達しているケースを処理するために、1クロックサイクルだけ遅延されてもよい。任意の有効ビットを、対応するデータとパイプ整合させることが望ましいが、ソースにおいてデータを遅延することは非効率的となる。したがって、DSMにおいて中心的にこの能力を提供することが、より効率的であってもよい。dsm_dbg_delayレジスタ内の1である各ビットについては、デバッグバスの対応するビットは、1クロックだけ遅延される。dsm_dbg_maskレジスタは、ビット単位のデバッグバスマスクである。dsm_dbg_maskレジスタの中の各ビットについては、0である場合、対応するデバッグバスビットはマスクされない。1である場合、対応するデバッグバスビットはマスクされる。この機能は、DSMの外部でこのマスキングを行う方法がない用途であって、変更時に記憶する機能またはDbgBusChngトリガを使用する要望のある用途において使用されてもよい。DSMは、様々なデバッグバスデータに基づいてトリガしてもよい。デバッグバスデータは、トリガを生成するための任意の論理演算のために処理されてもよい。例えば、論理演算は、に等しい比較および/またはよりも大きい比較であってもよい。デバッグバスデータの64ビットのうち32ビットが、制御および状態レジスタ内のbus_sel信号によって選択されてもよい。1つまたは複数のあるデバッグデータビットが、マスクscb_trig_maskビットによる比較のために選択されてもよい。2つのモード最後の値と比較するモードおよび固定値と比較するモードが、cmp_modeビットによって定義されてもよい。最後の値と比較するモードでは、デバッグデータは、最後のデバッグデータと比較される。固定値と比較するモードでは、デバッグデータは、所与の比較値cmp_valビットと比較される。表20に、dsm_trig_data_レジスタビットフィールド定義例を示す。dsm_trig_data_レジスタは、トリガtrig_misc_eq[]およびtrig_misc_gt[]と関連付けられる。この機能性を制御するビットは、レジスタdsm_control_status内に存在する。Bus_sel_0ビットが0にセットされた場合、下位32ビットが様々なデバッグバスデータから選択され、Bus_sel_0ビットが1にセットされた場合、上位32ビットが様々なデバッグバスデータから選択される。Cmp_mode_0ビットが0である場合、cmp_val[31:0]と比較され、Cmp_mode_0ビットが1である場合、最後の状態と比較される。デバッグバスに基づくいくつかのトリガが提供されてもよい。これらのトリガのそれぞれ1つが、デバッグバス上の64ビットのうちのいずれかから来るようにプログラムされてもよい。表21に、dsm_trig_selレジスタビットフィールド定義例を示す。各TriggerSelectフィールド内の6ビット値は、デバッグバス上の64ビットのうちのいずれかを指し示す。2ビットTriggerMode値は、各TriggerSelectフィールドに対応する。TriggerMode値は、関連トリガをポジティブエッジまたはネガティブエッジ検出として挙動させることを可能にする。この機能は、より効果的な検証をサポートすることを目的としている。表22に、dsm_sm_vecレジスタビットフィールド定義例を示す。DSM用のマイクロコードインターフェースを以下に説明する。DSMがマイクロコードと通信するために、および逆も同様に、インターフェースが提供されてもよい。このインターフェースは、DSMとマイクロコードとの間の双方向通信を可能にしてもよい。dsm2mcodeレジスタは、DSMがコマンドをマイクロコードに信号伝達するための手段を提供し、mcode2dsmレジスタは、マイクロコードがDSMに信号伝達するための手段を提供する。DSM動作は、マイクロコードによって読み取り可能なdsm2mcodeレジスタ内のビットをセットしてもよい。マイクロコードは、DSMによってトリガとして使用可能であるmcode2dsmレジスタ内のビットをセットしてもよい。専用デバッグマイクロ中断は、DSMがマイクロコードの注目を集めることを可能にする。これらの機能は、ブレイクポイントが実際に取られる場合、または取られない場合をDSMが制御するための能力、DSMがマイクロコードパッチを送信するための能力、従来のHDTのような汎用比較を行い、真または偽の結果を返信するようにDSMがマイクロコードに指図するための能力、HDTに入るようにDSMがマイクロコードに指図するための能力、マイクロコードがブレイクポイントをDSMに信号伝達するための能力およびマイクロコードが汎用フラグビットをDSMにセットするための能力などを提供する。所与のスレッド上で実行するマイクロコードが、他方のスレッドのものからの別個の状態と相互作用するように、dsm2mcodeおよびmcode2dsmレジスタの両方が、スレッド方式で処理されてもよい。デバッグマイクロ中断は、緊急HDT中断以外の任意の他の中断のように扱われてもよく、命令境界で取られてもよい。デバッグマイクロ中断が命令またはルーチンの最中に取られ得る少数のケースが存在する。これらのケースのほとんどは、スピンループ例えば、HALT、STPCLK、FPUFREEZEループ等である。表23に、dsm2mcodeレジスタビットフィールド定義例を示す。DSMをトリガするブレイクポイント条件を使用するために、実際にブレイクポイントを取ることなくブレイクポイント条件が観察された場合にDSMが観察されてもよい。EnableBpビットは、レジスタ内の値を更新するようにマイクロコードに指示するものである。これは、ブレイクポイントが無効にされた状態でデバッグシーケンスを開始できること、または途中でそれらを有効できることまたは逆も同様を可能にする。このスキームは、既存のブレイクポイント有効/無効機構を活用する。flag1およびflag0ビットは、DSM動作またはSRBアクセスによってセットまたはクリアされてもよい。これらのビットは、DSMへのトリガオプションである。これらのビットは、種々の方法で使用されてもよい。それらは、DSMが複雑な条件を追跡するための余分な状態ビットである。それらは、DSM観察からビットを読み出すマイクロコード経路へ、情報を信号伝達するために使用されてもよい。それらは、あるHDTレベル観察をDSMに知らせるように、HDTによってセットされてもよい。DSMは、専用デバッグマイクロ中断を引き出すことによって、マイクロコードをトリガする能力を有してもよい。マイクロコードは、従来のデバッグ要求DBREQ中断から次に高い優先順位として、DSMマイクロ中断を優先させる。したがって、DBREQおよびDSM中断の両方が保留である場合、マイクロコードは、最初にDSM中断を処理してもよい。Patch、Compare、EnableBp、EnterApmlおよびEnterHdtビットは全て、DSMからの関連するセットおよびクリア動作を有する。これは、これらのビットがDSMによって動的に変更されることを可能にする。McodeCtlおよびDbgCntrlビットは、いずれのセットまたはクリア動作を持たず、SRB上にそれらをライトすることによってのみ制御されてもよい。McodeCtlおよびDbgCntrlビットは、デバッグ実行をセットしている間に静的に書き込まれてもよい。次いで、Patch、Compare、EnableBp、EnterApmlおよびEnterHdtビットは、DSMによって動的にセットまたはクリアされてもよく、マイクロ中断動作の始動につながるCU_DbgMicroIntC[1|0]。これは、DSMが、1つのデバッグ中断と別のデバッグ中断とでは別のやり方をするようにマイクロコードに伝えることを変更するのを可能にする。デバッグマイクロ中断が始動された場合に、マイクロコードは、何をする必要があるかを判定するために、dsm2mcodeレジスタを読み出す。dsm2mcodeのDbgMicroInt、Patch、EnableBp、EnterApmlおよびEnterHdtビットのビットクリアは、mcode2dsmレジスタ内のクリアビットを用いて処理される。このスキームは、読み出し以降にDSMによって修正されたdsm2mcodeレジスタ内の他のビットが上書きされる可能性を防止するために、dsm2mcodeレジスタへの直接的なR-M-Wの代わりに実装される。DSMが、ノースブリッジNBで採用される場合、NBのDSMが完全なマイクロコードインターフェースを持たないため、デバッグ中断を始動するよりもむしろ、NBDSMは、全てのコアに広がる前に、DBReq信号へのDbgInt出力にOR演算を行ってもよい。これは、CCIへの変更を伴わずに、HDTへの進入を発生させるNBDSMをサポートすることを可能にする。Dsm2mcodeレジスタのビットのうち、DbgMicroIntおよびFlagOutビットがサポートされてもよい。DbgMicroIntは、DbgInt出力を駆動する。FlagOutビットは、コアDSMでのように、スクラッチパッドとして使用されてもよい。EnableBp、Compare、Patch、EnterApmlおよびEnterHdtビットは、利用されなくてもよい。DSMが、非常に複雑なトリガシーケンスを処理するリソースを欠いている場合、能力を拡張するためにマイクロコードを採用することが可能である。トリガシーケンスの任意の時点で、DSMは、完全に新しいトリガシーケンスのためにDSMを完全に再構成するマイクロコードパッチを呼び出してもよい。これは、高複雑度の場合を処理するために採用されてもよい。DSM_PATCHは、中断からの帰還としてリードオンリーメモリROM内にあってもよい。それは、マイクロコードパッチ機構を介してパッチを適用されてもよい。この特別な場所は、他の命令フローと共有されるべきではない。全ての中断int0、int1、int3等は、いくつかの例外を伴って、mcode2dsm内でビット0をセットする。第1に、1バイトint3opコードのみが、mcode2dsm内でINT3ビットをセットし、1バイトint3は、INTビットをセットしない。ソフトウェアデバッガは、ソフトウェアブレイクポイントをセットするために、1バイトint3opコードを使用してもよい。これは、int3がDSMへの特別なインターフェースを有する理由、および1バイトopコードがフラグを付けるために重要である理由である。第2に、int4オーバーフローは、この中断がめったに使用されず、マイクロコードへの変更が容易ではないため、mcode2dsm内でビット0をセットしない。ブレイクポイントがint4のためにセットされる必要がある稀な場合において、ユーザは、中断ハンドラの開始時に命令ブレイクポイントをセットしてもよい。他の適切な中断ハンドラは、dsm_enblビットがDSMControlStatusレジスタ内でセットされた場合ビット0に、mcode2dsm内でビット8:3をセットしてもよい。mcode2dsmMSRは、マイクロコードがDSMに信号伝達するための手段を提供する。各クラスタに対する別個のビットがある。表24に、mcode2dsmレジスタビットフィールド定義例を示す。全てのビットは書き込み専用である。mcode2dsmMSR内のビットは、マイクロコードがDSMに信号伝達するために使用される。これらのビットは、DSMが任意の他のトリガのように使用してもよいトリガとして、DSMに送られる。各スレッドに1つずつ、2組のこれらのビットがあってもよい。これらのビットは、SVM傍受チェックを含む任意の例外の前にマイクロコードによって書き込まれてもよい。ソフトウェアベースの中断int、int3がDSMに信号伝達される方法は、マイクロコードがこれらの対応するビットをmcode2dsmレジスタに書き込むことによる。特徴および要素は、特定の組み合わせで上記に説明されるが、各特徴または要素は、他の特徴および要素を伴わずに単独で、あるいは他の特徴および要素を伴う若しくは伴わない種々の組み合わせで、使用されてもよい。本明細書で説明される装置は、汎用コンピュータまたはプロセッサによって実行するためのコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェアまたはファームウェアを使用することによって製造されてもよい。コンピュータ可読記憶媒体の例は、リードオンリーメモリROM、ランダムアクセスメモリRAM、レジスタ、キャッシュメモリ、半導体メモリデバイス、内部ハードディスクおよびリムーバブルディスク等の磁気媒体、磁気光学媒体、ならびにCD-ROMディスクおよびデジタル多用途ディスクDVD等の光学媒体を含む。本発明の実施形態は、コンピュータ可読記憶媒体に記憶された命令およびデータとして表されてもよい。例えば、本発明の態様は、ハードウェア記述言語HDLであるVerilogを使用して実装されてもよい。処理された時に、Verilogデータ命令は、半導体加工施設で実装される製造過程を行うために使用され得る他の中間データ例えば、ネットリスト、GDSデータなどを生成してもよい。製造過程は、本発明の種々の態様を具現化する半導体デバイス例えば、プロセッサを製造するように適合されてもよい。好適なプロセッサは、一例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサDSP、複数のマイクロプロセッサ、グラフィックスプロセッシングユニットGPU、DSPコア、コントローラ、マイクロコントローラ、特定用途向け集積回路ASIC、フィールドプログラマブルゲートアレイFPGA、任意の他の種類の集積回路ICおよび/またはステートマシン、あるいはそれらの組み合わせを含む。"