(57)【特許請求の範囲】
【請求項１】
複数のメモリのうち少なくともいずれかのメモリを選択するためのメモリ選択値を記憶するメモリ選択値記憶部と、
１つ以上の対象データを入力するデータ入力部と、
前記メモリ選択値記憶部に記憶された前記メモリ選択値に基づいて、前記データ入力部が入力した対象データの数と同じ数のメモリを前記１つ以上の対象データを記憶するメモリ群として前記複数のメモリから選択するメモリ群選択部と、
前記データ入力部が入力した対象データの数に基づいて、前記メモリ選択値記憶部に記憶された前記メモリ選択値を、前記メモリ群選択部によって選択された前記メモリ群以外のメモリを選択するための値に更新するメモリ選択値更新部と、
を備えることを特徴とするデータトレース回路。
【請求項２】
前記複数のメモリのそれぞれは複数のエントリを備え、
前記データトレース回路は、
前記複数のメモリのそれぞれのエントリを指定するエントリ指定値を記憶するエントリ指定値記憶部と、
前記エントリ指定値記憶部に記憶された前記エントリ指定値に基づいて、前記１つ以上の対象データのうちの１つの対象データを記憶するエントリを前記メモリ群のそれぞれのメモリに指定するエントリ指定部と、
前記複数のメモリに１つずつ対象データが記憶された場合、前記エントリ指定値記憶部に記憶された前記エントリ指定値を更新するエントリ指定値更新部と、
を備えることを特徴とする請求項１記載のデータトレース回路。
【請求項３】
前記エントリ指定値更新部は、前記データ入力部に入力される対象データの最大数以上のメモリが前記メモリ群選択部によって選ばれずに残っている場合、前記エントリ指定値を更新しない
ことを特徴とする請求項２記載のデータトレース回路。
【請求項４】
請求項１から請求項３いずれかに記載のデータトレース回路と、１つ以上のデータ抑止回路とを備え、
各データ抑止回路は、
複数のデータを入力するデータ抑止入力部と、
前記データ抑止入力部が入力した前記複数のデータのうちいずれかのデータを選択するデータ選択部と、
前記データ選択部によって選択された前記データを前記対象データとして前記データトレース回路に出力するデータ抑止出力部と、
を備えることを特徴とする集積回路。
【請求項５】
各データ抑止回路は、データ抑止機能を機能させるか否かを示すモード値を記憶するモード値記憶部を備え、
前記データ選択部は、前記モード値記憶部に記憶された前記モード値が前記データ抑止機能を機能させるための値を示す場合に、前記複数のデータのうちいずれかのデータを選択する
ことを特徴とする請求項４記載の集積回路。
【請求項６】
各データ抑止回路は、前記データ抑止入力部が入力した前記複数のデータのうち前記データ抑止出力部によって出力されなかったデータの数を数える抑止数カウント部を備える
ことを特徴とする請求項４または請求項５記載の集積回路。
【請求項７】
メモリ選択値記憶部とデータ入力部とメモリ群選択部とメモリ選択値更新部とを備えるデータトレース回路を用いるデータトレース方法であって、
前記メモリ選択値記憶部は、複数のメモリのうち少なくともいずれかのメモリを選択するためのメモリ選択値を記憶する記憶部であり、
前記データ入力部が、１つ以上の対象データを入力し、
前記メモリ群選択部が、前記メモリ選択値記憶部に記憶された前記メモリ選択値に基づいて、前記データ入力部が入力した対象データの数と同じ数のメモリを前記１つ以上の対象データを記憶するメモリ群として前記複数のメモリから選択し、
前記メモリ選択値更新部が、前記データ入力部が入力した対象データの数に基づいて、前記メモリ選択値記憶部に記憶された前記メモリ選択値を、前記メモリ群選択部によって選択された前記メモリ群以外のメモリを選択するための値に更新する
ことを特徴とするデータトレース方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、集積回路を流れるデータを収集（トレース）する技術に関するものである。
【背景技術】
【０００２】
コンピュータの性能を向上させるためにプログラムの挙動が解析される。
プログラムの挙動を解析するための手法として、バスをプロービングしてアドレスなどを記憶媒体に記録する方法が、１９７０年代に開示されている（例えば、特許文献１）。
最近は、市販のロジックアナライザのプローブがデータを用いてデータ（トレースともいう）をメモリに記録し、記録したデータを一般のコンピュータを用いて解析する手法が用いられている。この手法により、専用の装置を用いずにプログラムの挙動を解析することができる。
【０００３】
また、パフォーマンスカウンタと呼ばれる機能を用いる手法が存在する（例えば、特許文献２、非特許文献１）。
この手法は、コンピュータ内で発生する信号を直接モニタせずにコンピュータ内で発生するキャッシュミスなどの事象をカウントし、カウント回数に基づいてコンピュータの動作のボトルネックを調査する手法である。
【０００４】
一方、半導体の進歩によって回路の集積度が飛躍に伸びた結果、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、キャッシュメモリ、メモリコントローラ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、入出力装置、バスなどをワンチップに搭載するＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  ａ  Ｃｈｉｐ）が開発されている。
但し、キャッシュミスに関する動作、メモリまたは入出力装置に対するアクセスなど、システム全体の性能に影響を及ぼす事象がＳｏＣの内部で発生するため、ＳｏＣから外部に出ているバスまたはＬＳＩピン（ＬＳＩ：Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）に接続して、これらの事象を知ることはきわめて困難である。
【０００５】
性能の観点ではなくてプログラムデバッグの観点においても同様な課題が生じており、その課題を解決または緩和するために以下のような手法が提案されている。
【０００６】
（１）ＪＴＡＧ（Ｊｏｉｎｔ  Ｔｅｓｔ  Ａｃｔｉｏｎ  Ｇｒｏｕｐ）を使用したデバッグ手法が一般的である。ＪＴＡＧは、プログラムを止めた状態でＣＰＵまたはメモリの内容を読み出す機能である。但し、この手法には、リアルタイム動作が必要な多くの組み込み機器で動作を継続することができない、という課題を持っている。
【０００７】
（２）内部の重要な信号を高速な信号を用いてＬＳＩから出力する手法がある（例えば、特許文献３）。但し、この手法には、（周波数×ピン数）＜（平均の信号変化周波数×ビット数）という条件を満たさない場合、情報のバッファリングを行っても情報を圧縮しなければ、情報をロスするか、または、サンプル程度の情報しか得られない、という課題がある。
（３）この課題を解決するための手法として、ＬＳＩ内部にメモリを持ち、発生した事象の情報をメモリにいったん書き込み、メモリに書き込んだ情報を後で時間をかけてＪＴＡＧまたはイーサネット（登録商標）などの技術を用いて読み出す、という手法がある。この手法を用いる場合、メモリのチップ面積を抑えるために、ＬＳＩに内蔵した主記憶用のＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のアドレス空間を分割し、ＤＭＡ（Ｄｉｒｅｃｔ・Ｍｅｍｏｒｙ・Ａｃｃｅｓｓ）を使って事象の情報を分割後のＳＲＡＭに書き込む（例えば、特許文献４）。
【０００８】
高機能・高性能な組み込み機器の処理能力が向上した結果、（２）の手法（ピン出力方式）では、事象の情報を得るための周波数帯域の増大に対応できない。また、（３）の手法（ＳＲＡＭ方式）では、記憶容量が小さいため、事象の情報を格納しきれない。
そのため、（２）の手法を性能分析に用いるためには、数百キロバイトから数十メガバイトの記憶容量を有するＲＡＭが必要である。そして、チップコストおよび性能を考慮した場合、チップの外部に設けたＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）に事象の情報を蓄える必要がある。
【０００９】
事象の情報を取得する手法として、取得回路を小さくするために集積回路の内部バスをモニタする方法が一般的である。
具体的には、内部バスを介して送信されるコマンド信号と有効信号とをモニタする（例えば、特許文献５）。なお、有効信号はコマンド信号が有効であることを示す信号である。
目的は異なるが、バスをモニタして障害情報をメモリに記録する方法も古くから使われている（例えば、特許文献６）。
【００１０】
一方、集積回路内で信号の送信元と信号の受信元とを直接つなぐポイントツーポイント接続の形態をとるものが流通するようになった。このポイントツーポイント接続により、送信元と受信元とが内部バスを介さずにインタコネクト方式で直接つながる。以前の形態ではバスの送信者が一時期に１つであったが、この形態ではバスの送信者が同時に複数存在することもある。
また、ライトコマンド信号を送信するための伝送経路（チャネルともいう）とリードコマンド信号を送信するための伝送経路とが別々に設けられるため、送信元が１つであってもリードコマンド信号とライトコマンド信号とが同時に発生する可能性がある。
【００１１】
インタコネクト方式には、送信元の有効状態と受信元の有効状態とを自律的に調停するものがある。すなわち、送信元はコマンド信号が有効になったことを示す有効信号（ＶＡＬＩＤ）を有意にし、受信元はコマンド信号を取り込めることを示す有効信号（ＲＥＡＤＹ）を有意にする。そして、送信元の有効信号と受信元の有効信号とがともに有意になったときにコマンド信号の送信が成立したものとみなす。この仕組みはシェークハンドと呼ばれる。
シェークハンドの仕様として、ＡＲＭ社のＡＸＩ（Ａｄｖａｎｃｅｄ  ｅＸｔｅｎｓｉｂｌｅ  Ｉｎｔｅｒｆａｃｅ）が存在する（非特許文献２参照）。その中には記載がないが、複数の送信元がコマンド信号を同じ受信元に同時に送信しようとしたときに調停を行うために、次のような機能が実現可能である。その機能は、送信元と受信元との組み合わせをスイッチ回路によって選択し、複数の組み合わせで同時にコマンド信号の送信が成立しないようにするものである。
【００１２】
このようなインタコネクトの形態をもつ集積回路には、以下のような課題がある。
１つ目の課題は、送信元と同じ数だけ信号線が必要であり、信号数が増大し、チップ面積が大きくなってしまうことである。
２つ目の課題は、複数のトランザクション（例えば、コマンド信号）のそれぞれの情報を同時に記録できる構造をトレースバッファに設けなければならないことである。ＡＸＩのようにリードコマンド信号用のチャネルとライトコマンド信号用のチャネルとのそれぞれに同時にシェークハンドが発生してしまうと複数のトランザクションが同時に発生するため、トレースを収集するための回路が大規模化および複雑化する。
３つ目の課題は、シェークハンドの同時発生を抑止または削減してしまうとインタコネクト方式の本来の転送性能が得られなくなることである。シェークハンドの同時発生をトレースの取得時だけ抑止または削減する方法も考えられるが、測定したい動作の性能がトレース結果に正しく反映されなくなり、トレース結果から得られる性能値を補正する必要がある。また、コマンド信号の送信中に、通常モードから、シェークハンドの同時発生を抑止する抑止モードへのモード切り替えが行われた場合、インタコネクト方式の動作の連続性が保証されない。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】米国特許第３５８８８３７号明細書
【特許文献２】米国特許第５５５７５４８号明細書
【特許文献３】特開２００１−１０９６４３号公報
【特許文献４】特開２００６−３１８１７２号公報
【特許文献５】特開２００１−１３４４６５号公報
【特許文献６】特開平５−９４３８４号公報
【非特許文献】
【００１４】
【非特許文献１】「ＭＰＣ７５０  ＲＩＳＣ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  Ｕｓｅｒ’ｓ  マニュアル」、モトローラ社、１９９７年、ｐ．１１−１〜１１−１２
【非特許文献２】「ＡＭＢＡ(R)  ＡＸＩ  プロトコル」、ＡＲＭ社
【発明の概要】
【発明が解決しようとする課題】
【００１５】
本発明は、例えば、メモリの記憶領域を効率的に利用しながら、同時に発生する１つ以上の対象データをメモリに同時に記憶できるようにすることを目的とする。
【課題を解決するための手段】
【００１６】
本発明のデータトレース回路は、
複数のメモリのうち少なくともいずれかのメモリを選択するためのメモリ選択値を記憶するメモリ選択値記憶部と、
１つ以上の対象データを入力するデータ入力部と、
前記メモリ選択値記憶部に記憶された前記メモリ選択値に基づいて、前記データ入力部が入力した対象データの数と同じ数のメモリを前記１つ以上の対象データを記憶するメモリ群として前記複数のメモリから選択するメモリ群選択部と、
前記データ入力部が入力した対象データの数に基づいて、前記メモリ選択値記憶部に記憶された前記メモリ選択値を、前記メモリ群選択部によって選択された前記メモリ群以外のメモリを選択するための値に更新するメモリ選択値更新部と、を備える。
【発明の効果】
【００１７】
本発明によれば、例えば、同時に発生した対象データの数と同じ数のメモリを選択し、同時に発生した１つ以上の対象データを各メモリに同時に記憶することができる。また、対象データを記憶するメモリを複数のメモリから順番に選択することにより、複数のメモリに均等な量の対象データを記憶することができる。つまり、複数のメモリのそれぞれの記憶領域を効率的に利用することができる。
【図面の簡単な説明】
【００１８】
【図１】実施の形態１における集積回路１００のハードウェア構成図である。
【図２】実施の形態１におけるリクエストのシェークハンドの様子を示す図である。
【図３】実施の形態１におけるリクエスト抑止回路２００の構成図である。
【図４】実施の形態１における信号加工回路２２０の入出力値の一例を示す表である。
【図５】実施の形態１におけるトレースバッファ３００の構成図である。
【図６】実施の形態１における選択制御回路３１３の入出力値およびメモリ（３３０〜３３３）の入力値の一例を示す表である。
【図７】実施の形態１におけるバッファ管理回路３５０の入出力値およびメモリ（３３０〜３３３）の入力値の一例を示す表である。
【図８】実施の形態１におけるバッファ管理回路３５０の入出力値の一例を示す表である。
【発明を実施するための形態】
【００１９】
実施の形態１．
トレースバッファの記憶領域を効率的に利用しながら、同時に発生する１つ以上のデータをトレースバッファに同時に記憶する形態について説明する。
【００２０】
図１は、実施の形態１における集積回路１００のハードウェア構成図である。
実施の形態１における集積回路１００のハードウェア構成について、図１に基づいて説明する。
【００２１】
集積回路１００は、ＣＰＵ１１０、キャッシュメモリ１２０、ＤＲＡＭコントローラ１３０、ＣＰＵブリッジ１４０およびトレースバッファ３００（データトレース回路の一例）を備える。
また、集積回路１００は、バスコントローラ１０１、ＤＭＡコントローラ１０２、ＳＲＡＭコントローラ１０３およびＩ／Ｏブリッジ１０４を備える。
さらに、集積回路１００はリセット回路およびクロック回路等を備える（図示省略）。
ＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）は集積回路の一例である。
【００２２】
バスコントローラ１０１は、バス１０９に接続しているＤＭＡコントローラ１０２、ＳＲＡＭコントローラ１０３、Ｉ／Ｏブリッジ１０４、ＤＲＡＭコントローラ１３０またはＣＰＵブリッジ１４０などのデバイスを制御する。
【００２３】
ＤＭＡコントローラ１０２は、デバイス間で行われるデータのＤＭＡ転送を制御する。ＤＭＡは、Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓの略称である。
【００２４】
ＳＲＡＭコントローラ１０３は、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）またはＦＲＯＭ（Ｆｌａｓｈ  ＲＯＭ）を制御する。ＲＡＭはＲａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙの略称であり、ＲＯＭはＲｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙの略称である。
【００２５】
Ｉ／Ｏブリッジ１０４は、入出力デバイスを制御する。図中において「Ｉ／Ｏ」は入出力デバイスを意味している。
【００２６】
ＤＲＡＭコントローラ１３０は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）を制御する。
ＣＰＵブリッジ１４０は、バス１０９を介して行われるＣＰＵ１１０のデータ転送を制御する。
ＤＲＡＭコントローラ１３０およびＣＰＵブリッジ１４０は、後述するリクエスト抑止回路２００（データ抑止回路の一例）を備える。
【００２７】
ＣＰＵ１１０はデータを処理し、キャッシュメモリ１２０はＣＰＵ１１０によって処理されるデータを記憶する。ＣＰＵはＣｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔの略称である。
【００２８】
ＣＰＵ１１０は、（１）キャッシュメモリ１２０を使用し、または、（２）キャッシュメモリ１２０を使用せずに、データの読み込みを行う。
【００２９】
（１）キャッシュメモリ１２０を使用する場合、ＣＰＵ１１０は、以下のようにキャッシュメモリ１２０から目的のデータを読み出す。
目的のデータがキャッシュメモリ１２０に記憶されている場合、つまり、キャッシュヒットした場合、ＣＰＵ１１０はキャッシュメモリ１２０から目的のデータを読み込む。
目的のデータがキャッシュメモリ１２０に記憶されていない場合、つまり、キャッシュミスした場合、キャッシュメモリ１２０は、記憶しているデータをＤＲＡＭに書き出すために信号線１２１Ｗを介してライトリクエストをＤＲＡＭコントローラ１３０に送信する。そして、キャッシュメモリ１２０は、目的のデータをＤＲＡＭから読み出すために信号線１２１Ｒを介してリードリクエストをＤＲＡＭコントローラ１３０に送信する。ライトリクエストおよびリードリクエストは、コマンド、データ長およびアドレスなど、書き出すデータまたは読み出すデータに関する情報を含む。
各リクエストの送信者であるキャッシュメモリ１２０はＡＸＩ（Ａｄｖａｎｃｅｄ  ｅＸｔｅｎｓｉｂｌｅ  Ｉｎｔｅｒｆａｃｅ）のマスターに相当し、各リクエストの受信者であるＤＲＡＭコントローラ１３０はＡＸＩのスレーブに相当する。
信号線１２１Ｗおよび信号線１２１Ｒは、バス１０９を介さずにキャッシュメモリ１２０とＤＲＡＭコントローラ１３０とを接続する信号線（インタコネクト信号線ともいう）である。信号線１２１ＷはＡＸＩのライトアドレスチャネルに相当し、信号線１２１ＲはＡＸＩのリードアドレスチャネルに相当する。なお、ライトアドレスチャネルの他に、データを通信するためのライトデータチャネルおよび応答信号を通信するためのライト応答チャネルが有る。また、リードアドレスチャネルの他に、データおよび応答信号を通信するためのリードデータチャネルが有る（図示省略）。ライト応答チャネルおよびリードデータチャネルの送信者はＤＲＡＭコントローラ１３０である。
【００３０】
（２）キャッシュメモリ１２０を使用しない場合、ＣＰＵ１１０は、キャッシュメモリ１２０および信号線１２２Ｗを介してライトリクエストをＣＰＵブリッジ１４０に送信し、キャッシュメモリ１２０および信号線１２２Ｒを介してリードリクエストをＣＰＵブリッジ１４０に送信する。信号線１２２ＷはＡＸＩのライトアドレスチャネルに相当し、信号線１２２ＲはＡＸＩのリードアドレスチャネルに相当する。
【００３１】
図２は、実施の形態１におけるリクエストのシェークハンドの様子を示す図である。
上記（１）（２）のいずれの場合も、各リクエストの通信はシェークハンドの成立時に成立する（図２のＴ２参照）。シェークハンドとは、ＶＡＬＩＤ信号（有効信号ともいう）が有意であり、且つ、ＲＥＡＤＹ信号（準備信号ともいう）が有意であるときに、通信が成立する通信方式である。ＶＡＬＩＤ信号が有意であるとは、リクエストの送信者がリクエストが有効であることを意味するＶＡＬＩＤ信号を送信することを意味する。また、ＲＥＡＤＹ信号が有意であるとは、リクエストの受信者がリクエストを受信できることを意味するＲＥＡＤＹ信号を送信することを意味する。図２では、Ｔ２のタイミングでＶＡＬＩＤ信号が有意であり（ＶＡＬＩＤ＝１）、且つ、ＲＥＡＤＹ信号が有意である（ＲＥＡＤＹ＝１）。つまり、Ｔ２のタイミングでシェークハンドが成立している。
【００３２】
信号線１２１Ｗと信号線１２１Ｒとは独立しているため、信号線１２１Ｗのライトリクエストと信号線１２１Ｒのリードリクエストとが同時に成立することがある。
同様に、信号線１２２Ｗと信号線１２２Ｒとは独立していため、信号線１２２Ｗのライトリクエストと信号線１２２Ｒのリードリクエストとが同時に成立することがある。
さらに、信号線１２１Ｗのライトリクエストと信号線１２１Ｒのリードリクエストと信号線１２２Ｗのライトリクエストと信号線１２２Ｒのリードリクエストとの４つのリクエストが同時に成立することもある。
【００３３】
ＤＲＡＭコントローラ１３０およびＣＰＵブリッジ１４０のリクエスト抑止回路２００は、同時に成立したライトリクエストとリードリクエストとのうち少なくとも一方を抑止する回路である。
【００３４】
トレースバッファ３００は、ＤＲＡＭコントローラ１３０のリクエスト抑止回路２００とＣＰＵブリッジ１４０のリクエスト抑止回路２００とのそれぞれから同時に出力されるリクエストを同時に記憶する回路である。
【００３５】
図３は、実施の形態１におけるリクエスト抑止回路２００の構成図である。
ＤＲＡＭコントローラ１３０（図１参照）が備えるリクエスト抑止回路２００の構成について、図３に基づいて説明する。なお、ＣＰＵブリッジ１４０（図１参照）は、同様のリクエスト抑止回路２００を備える。
【００３６】
リクエスト抑止回路２００（データ抑止回路の一例）は、第一の選択回路２１０（データ抑止入力部と、第一のＡＮＤ回路２３１と、第二のＡＮＤ回路２３２とを備える。ＡＮＤ回路は複数の入力値から得られる論理積を出力する論理積回路である。
さらに、リクエスト抑止回路２００は、信号加工回路２２０（データ選択部、抑止数カウント部の一例）と、モードレジスタ２２１（モード値記憶部の一例）と、カウントレジスタ２２２とを備える。
【００３７】
第一の選択回路２１０は、信号線１２１Ｗからライトリクエストを入力し、信号線１２１Ｒからリードリクエストを入力し、信号加工回路２２０から選択信号を入力する。
そして、第一の選択回路２１０は、ライトリクエストとリードリクエストとのうち、選択信号によって選択されるリクエスト（ＶＡＬＩＤ信号を除く）を出力する。
【００３８】
第一のＡＮＤ回路２３１は、ライトリクエストに含まれるＶＡＬＩＤ信号（ＡＷＶＡＬＩＤ）とライトリクエストに関してＤＲＡＭコントローラ１３０によって生成されるＲＥＡＤＹ信号（加工前のＡＷＲＥＡＤＹ）とを入力する。加工前のＡＷＲＥＡＤＹ信号は、各スレーブ(１３０、１４０）のライトバッファの空き状態やメモリやブリッジのライトのビジー状態から生成され、元々は信号線１２１Ｗ、信号線１２２Ｗの一部としてスレーブからマスターに送信していたものである。そして、入力したＶＡＬＩＤ信号の値と入力したＲＥＡＤＹ信号の値とが共に「１（有意である）」である場合、第一のＡＮＤ回路２３１は、「１」を示すＶＡＬＩＤ信号（ライトリクエスト用）を出力する。その他の場合、第一のＡＮＤ回路２３１は「０（有意でない）」を示すＶＡＬＩＤ信号（ライトリクエスト用）を出力する。
【００３９】
第二のＡＮＤ回路２３２は、リードリクエストに含まれるＶＡＬＩＤ信号（ＡＲＶＡＬＩＤ）とリードリクエストに関してＤＲＡＭコントローラ１３０によって生成されるＲＥＡＤＹ信号（加工前のＡＲＲＥＡＤＹ）とを入力する。加工前のＡＲＲＥＡＤＹ信号は、各スレーブ(１３０、１４０）のリードバッファの空き状態やメモリやブリッジのリードのビジー状態から生成され、元々は信号線１２１Ｒ、信号線１２２Ｒの一部としてスレーブからマスターに送信していたものである。そして、入力したＶＡＬＩＤ信号の値と入力したＲＥＡＤＹ信号の値とが共に「１」である場合、第二のＡＮＤ回路２３２は、「１」を示すＶＡＬＩＤ信号（リードリクエスト用）を出力する。その他の場合、第二のＡＮＤ回路２３２は「０」を示すＶＡＬＩＤ信号（リードリクエスト用）を出力する。
【００４０】
モードレジスタ２２１は、動作モードの種類を示すモード値を記憶する記憶部である。動作モードには、同時に成立したライトリクエストとリードリクエストとのうち少なくとも一方を抑止する抑止モードと、抑止を行わない非抑止モードとの２種類のモードが有る。このモードはプログラムによる書き込みやＬＳＩの外部ピンの設定などの手段により０または１にセットできる。
【００４１】
カウントレジスタ２２２は、ライトリクエストまたはリードリクエストを抑止した回数、つまり、抑止されたライトリクエストおよびリードリクエストの数を記憶する。
【００４２】
信号加工回路２２０は、ライトリクエストに含まれるＶＡＬＩＤ信号（ＡＷＶＡＬＩＤ）と、リードリクエストに含まれるＶＡＬＩＤ信号（ＡＲＶＡＬＩＤ）と、ライトリクエストに関する加工前のＲＥＡＤＹ信号（ＡＷＲＥＡＤＹ）と、リードリクエストに関する加工前のＲＥＡＤＹ信号（ＡＲＲＥＡＤＹ）と、モードレジスタ２２１に記憶されているモード値とを入力する。
そして、信号加工回路２２０は、入力した各信号の値と入力したモード値とに応じた選択信号を第一の選択回路２１０と第一のＡＮＤ回路２３１と第二のＡＮＤ回路２３２とに出力する。
さらに、信号加工回路２２０は、入力した各信号の値と入力したモード値とに応じて各ＲＥＡＤＹ信号を加工する。なお、各ＲＥＡＤＹ信号は、キャッシュメモリ１２０に出力される。キャッシュメモリ１２０に出力される各ＲＥＡＤＹ信号に関する説明については非特許文献２を参照のこと。
また、信号加工回路２２０は、ライトリクエストおよびリードリクエストが抑止モードで同時に成立し、いずれかのリクエストを選択する選択信号を出力する場合、カウントレジスタ２２２に記憶されているカウント値を１カウントアップする。つまり、信号加工回路２２０はリクエストの抑止数を数えるパフォーマンスモニタ回路（パフォーマンスカウンタともいう）として機能する。このパフォーマンスモニタ回路の読み出しパスは本実施例の規定範囲外である。
【００４３】
図４は、実施の形態１における信号加工回路２２０の入出力値の一例を示す表である。
実施の形態１における信号加工回路２２０の入出力値の一例について、図４に基づいて説明する。なお、信号加工回路２２０は、図４に示す表をデータとして記憶し、使用しても構わない。
【００４４】
図４において、モード値「１」は抑止モードを意味し、モード値「０」が非抑止モードを意味する。また、「ｄ．ｃ．」（ｄｏｎ’ｔ  ｃａｒｅ）は任意の値を意味する（以降で説明する各表において同様）。
【００４５】
項番「１」の入力値は、抑止モードが指定されているときにライトリクエストとリードリクエストとが同時に成立していることを意味する。
抑止モードが指定されているため、信号加工回路２２０はＡＲＲＥＡＤＹの信号値を「１」から「０」に加工し、ライトリクエストを選択するための選択信号「０」を出力する。これにより、リードリクエストを抑止することができる。
但し、信号加工回路２２０は、ＡＲＲＥＡＤＹの信号値の代わりにＡＷＲＥＡＤＹの信号値を「１」から「０」に加工し、リードリクエストを選択するための選択信号「１」を出力してもよい。これにより、ライトリクエストを抑止することができる。
また、信号加工回路２２０は、ＡＲＲＥＡＤＹとＡＷＲＥＡＤＹとの両方の信号値を「１」から「０」に加工し、任意の値を示す選択信号を出力してもよい。これにより、ライトリクエストとリードリクエストとの両方を抑止することができる。なお、図示していないが、この項番「１」のみでカウントレジスタ２２２のカウントアップを行い、他の項番ではカウントアップを行わない。
【００４６】
項番「２」の入力値は、抑止モードが指定されていないときにライトリクエストとリードリクエストとが同時に成立していることを意味する。
抑止モードが指定されていないため、信号加工回路２２０はＡＷＲＥＡＤＹとＡＲＲＥＡＤＹとの両方の信号値「１」をそのまま加工後の信号値として出力する。また、信号加工回路２２０は任意の値を示す選択信号を出力する。その結果として、ライトリクエストまたはリードリクエストが抑止される。但し、リクエスト抑止回路２００とトレースバッファ３００との間にライトリクエスト用の信号線２０１Ａとリードリクエスト用の信号線２０１Ａとを設け、リクエスト抑止回路２００がライトリクエストとリードリクエストとの両方をトレースバッファ３００に出力しても構わない。
【００４７】
項番「３」から項番「７」の入力値は、ライトリクエストとリードリクエストとの少なくとも一方が成立していないことを意味する。
この場合、信号加工回路２２０は、抑止モードが指定されているか否かに関わらず、加工前の値または任意の値を示すＡＷＲＥＡＤＹを加工後のＡＷＲＥＡＤＹとして出力する。同様に、信号加工回路２２０は、加工前の値または任意の値を示すＡＲＲＥＡＤＹを加工後のＡＲＲＥＡＤＹとして出力する。また、信号加工回路２２０は、成立しているリクエストまたは任意のリクエストを選択するための選択信号を出力する。
【００４８】
図３に戻り、リクエスト抑止回路２００から出力されるリクエストについて説明する。
ライトリクエストを選択するための選択信号「０」が第一の選択回路２１０および第一のＡＮＤ回路２３１に出力された場合、加工後のライトリクエスト信号がリクエスト抑止回路２００から信号線２０１Ａを介してトレースバッファ３００に出力される。
加工後のライトリクエストは、第一の選択回路２１０から出力されるライトリクエスト（ＶＡＬＩＤ信号を除く）と第一のＡＮＤ回路２３１から出力される値との論理積と同等の値をとる。なお、第一のＡＮＤ回路２３１は、ライトリクエストのＶＡＬＩＤ信号（ＡＷＶＡＬＩＤ）と、信号加工回路か２２０から出力される選択信号と、ライトリクエスト用の加工前のＲＥＡＤＹ信号（ＡＷＲＥＡＤＹ）との論理積の値を出力する。
【００４９】
リードリクエストを選択するための選択信号「１」が信号加工回路２２０から出力された場合、加工後のリードリクエストがリクエスト抑止回路２００から信号線２０１Ａを介してトレースバッファ３００に出力される。
加工後のリードリクエストは、第一の選択回路２１０から出力されるリードリクエスト（ＶＡＬＩＤ信号を除く）と第二のＡＮＤ回路２３２から出力される値との論理積と同等の値をとる。なお、第二のＡＮＤ回路２３２は、リードリクエストのＶＡＬＩＤ信号（ＡＲＶＡＬＩＤ）と、信号加工回路か２２０から出力される選択信号と、リードリクエスト用の加工前のＲＥＡＤＹ信号（ＡＷＲＥＡＤＹ）との論理積の値を出力する。
【００５０】
このように、信号加工回路２２０でリクエスト信号を半分に狭めているが、加工されたＶＡＬIＤ信号だけは２本無いとライト、リード、無信号の３者の区別がつかないため、１本の信号が余分にいる。なお、それぞれの論理積の論理和の１本と選択信号の１本との合計２本を用いても効果は同様である。
【００５１】
図３では、入力される各信号の信号値の組み合わせに応じて動作する信号加工回路２２０（組み合わせ回路ともいう）が各ＲＥＡＤＹ信号を加工しているが、信号加工回路２２０の作り方として加工後の各ＲＥＡＤＹ信号をフリップフロップ出力として生成しても構わない。なお、フリップフロップ回路は、加工後の各ＲＥＡＤＹ信号の出力が遅延しないようにするためであり、１サイクル前の各ＶＡＬＩＤ信号を入力し、次のサイクルで加工後の各ＲＥＡＤＹ信号を出力してもよい。但し、ＡＸＩのプロトコルが崩れることを防ぐため、１サイクル前の各ＲＥＡＤＹ信号の値を予め「０」にしておき条件成立時に「１」に遷移するステートマシンが必要である。
【００５２】
上記の通り、リクエスト抑止回路２００は、同時に成立したライトリクエストとリードリクエストとのうち少なくとも一方を抑止することができる。
【００５３】
図５は、実施の形態１におけるトレースバッファ３００の構成図である。
実施の形態１におけるトレースバッファ３００の構成について、図５に基づいて説明する。
【００５４】
トレースバッファ３００（データトレース回路の一例）は、第一の選択回路３１１（データ入力部の一例）と、第二の選択回路３１２（データ入力部の一例）と、選択制御回路３１３とを備える。
トレースバッファ３００は、第一の入力レジスタ３２０から第四の入力レジスタ３２３の４つの入力レジスタと、第一のメモリ３３０から第四のメモリ３３３の４つのメモリとを備える。
トレースバッファ３００は、出力回路３４０と出力レジスタ３４１とを備える。
トレースバッファ３００は、バッファ管理回路３５０（メモリ群選択部、メモリ選択値更新部、エントリ指定部、エントリ指定値更新部の一例）を備える。
トレースバッファ３００は、セクターポイントレジスタ３５１（メモリ選択値記憶部の一例）と、第一のライトポイントレジスタ３５２（エントリ指定値記憶部の一例）と、第二のライトポイントレジスタ３５３（エントリ指定値記憶部の一例）とを備える。
【００５５】
以下、ＤＲＡＭコントローラ１３０（図１参照）のリクエスト抑止回路２００から出力されるライトリクエストまたはリードリクエストを「リクエスト（Ａ）」と呼び、ＣＰＵブリッジ１４０（図１参照）のリクエスト抑止回路２００から出力されるライトリクエストまたはリードリクエストを「リクエスト（Ｂ）」と呼ぶ。
リクエスト（Ａ）およびリクエスト（Ｂ）は、データ、データ長、アドレス、ＶＡＬＩＤ信号、ＲＥＡＤＹ信号などを含む。
【００５６】
第一の選択回路３１１および第二の選択回路３１２は、リクエスト（Ａ）とリクエスト（Ｂ）とを入力し、選択制御回路３１３から選択信号（Ｓａ、Ｓｂ）を入力する。
そして、第一の選択回路３１１および第二の選択回路３１２は、リクエスト（Ａ）とリクエスト（Ｂ）とのうち、選択信号（Ｓａ、Ｓｂ）によって選択されるリクエストを２つの入力レジスタに出力する。
第一の選択回路３１１から出力されるリクエストの出力先は第一の入力レジスタ３２０および第三の入力レジスタ３２２であり、第二の選択回路３１２から出力されるリクエストの出力先は第二の入力レジスタ３２１および第四の入力レジスタ３２３である。
第一の選択回路３１１に出力される選択信号を「Ｓａ」と記し、第二の選択回路３１２に出力される選択信号を「Ｓｂ」と記す。
【００５７】
選択制御回路３１３は、リクエスト（Ａ）とリクエスト（Ｂ）とのそれぞれに含まれるＶＡＬＩＤ信号（Ｖａ、Ｖｂ）を入力し、セクターポイントレジスタ３５１からセクターポインタ（ＳＥＣＴＰ）を入力する。
そして、選択制御回路３１３は、ＶＡＬＩＤ信号の値およびセクターポインタの値に応じて、選択信号（Ｓａ、Ｓｂ）を第一の選択回路３１１および第二の選択回路３１２に出力する。
リクエスト（Ａ）に含まれるＶＡＬＩＤ信号を「Ｖａ」と記し、リクエスト（Ｂ）に含まれるＶＡＬＩＤ信号を「Ｖｂ」と記す。
【００５８】
第一の入力レジスタ３２０は、第一の選択回路３１１からリクエストを入力し、入力したリクエストを記憶し、記憶したリクエストを第一のメモリ３３０に出力する。
第二の入力レジスタ３２１は、第二の選択回路３１２からリクエストを入力し、入力したリクエストを記憶し、記憶したリクエストを第二のメモリ３３１に出力する。
第三の入力レジスタ３２２は、第一の選択回路３１１からリクエストを入力し、入力したリクエストを記憶し、記憶したリクエストを第三のメモリ３３２に出力する。
第四の入力レジスタ３２３は、第二の選択回路３１２からリクエストを入力し、入力したリクエストを記憶し、記憶したリクエストを第四のメモリ３３３に出力する。
【００５９】
第一のメモリ３３０から第四のメモリ３３３の各メモリは複数の記憶領域（エントリともいう）を有し、ポート（Ａｗ）に入力されるアドレスによって記憶領域が指定される。
各メモリ（３３０〜３３３）は、各入力レジスタ（３２０〜３２３）からリクエストを入力する。図中の「Ｄ０」から「Ｄ３」はリクエストが入力されるポートを意味する。
第一のメモリ３３０から第三のメモリ３３２は、第一のライトポイントレジスタ３５２からライトポインタ（ＷＰＴＲａ）を入力し、バッファ管理回路３５０からライトイネーブル信号を入力する。また、第四のメモリ３３３は、第二のライトポイントレジスタ３５３からライトポインタ（ＷＰＴＲｂ）を入力し、バッファ管理回路３５０からライトイネーブル信号を入力する。図中の「Ａｗ」はライトポインタによりアドレスが入力されるポートを意味し、図中の「ＷＥ０」から「ＷＥ３」はライトイネーブル信号が入力されるポートを意味する。
各メモリ（３３０〜３３３）は、ライトポインタおよびライトイネーブル信号に応じてリクエストを記憶する。リクエストは、トレースバッファ３００の各メモリに記憶されるトレースデータ（対象データ）の一例である。
ライトポインタはリクエストを記憶する記憶領域を指定する値（エントリ指定値の一例）を示し、ライトイネーブル信号はリクエストを記憶するか否かを指定する値を示す。
【００６０】
トレースバッファ３００に対してトレースデータ（リクエスト）の読み出しが要求された場合、各メモリ（３３０〜３３３）は、要求されたトレースデータを記憶領域から読み出し、読み出したトレースデータを出力回路３４０に出力する。図中の「Ｄｏ」はトレースデータが出力されるポートを意味する。
【００６１】
出力回路３４０は、各メモリ（３３０〜３３３）からトレースデータを入力し、入力したトレースデータを出力レジスタ３４１に出力する。
出力レジスタ３４１は、出力回路３４０からトレースデータを入力し、入力したトレースデータをバス１０９を介して入出力デバイスに出力する。
【００６２】
バッファ管理回路３５０は、リクエスト（Ａ）とリクエスト（Ｂ）とのそれぞれに含まれるＶＡＬＩＤ信号（Ｖａ、Ｖｂ）を入力し、セクターポイントレジスタ３５１からセクターポインタ（ＳＥＣＴＰ）を入力する。
そして、バッファ管理回路３５０は、ＶＡＬＩＤ信号の値およびセクターポインタの値に応じて、ライトイネーブル信号を各メモリ（３３０〜３３３）に出力する。
また、バッファ管理回路３５０は、ＶＡＬＩＤ信号の値およびセクターポインタの値に応じて、新たなライトポインタ（ＷＰＴＲａ、ＷＰＴＲｂ）を第一のライトポイントレジスタ３５２および第二のライトポイントレジスタ３５３に設定する。つまり、バッファ管理回路３５０は、第一のライトポイントレジスタ３５２および第二のライトポイントレジスタ３５３に記憶されているライトポインタを更新する。
なお、バッファ管理回路３５０は、トレースデータの読み出しが要求された際にリードポインタを各メモリ（３３０〜３３３）に出力する。リードポインタはトレースデータを読み出す記憶領域を指定する。なお、第一のメモリ３３０から第四のメモリ３３３には読み出し用のアドレスであるリードポインタが入力されるポートおよび信号線が有る。それらについては図示を省略する。
【００６３】
また、バッファ管理回路３５０は、ＶＡＬＩＤ信号の値およびセクターポインタの値に応じて、新たなセクターポインタをセクターポイントレジスタ３５１に設定する。つまり、バッファ管理回路３５０は、セクターポイントレジスタ３５１に記憶されているセクターポインタを更新する。
セクターポインタは、リクエストを記憶するメモリ（３３０〜３３３）を選択するための値（メモリ選択値の一例）を示す。
【００６４】
セクターポイントレジスタ３５１は、セクターポインタを記憶し、記憶したセクターポインタを選択制御回路３１３およびバッファ管理回路３５０に出力する。
また、セクターポイントレジスタ３５１は、バッファ管理回路３５０から新たなセクターポインタを入力し、入力した新たなセクターポインタを記憶する。
【００６５】
第一のライトポイントレジスタ３５２は、第一のライトポインタ（ＷＰＴＲａ）を記憶し、記憶した第一のライトポインタを第一のメモリ３３０から第三のメモリ３３２のそれぞれに出力する。また、第一のライトポイントレジスタ３５２は、バッファ管理回路３５０から新たな第一のライトポインタを入力し、入力した新たな第一のライトポインタを記憶する。
第二のライトポイントレジスタ３５３は、第二のライトポインタ（ＷＰＴＲｂ）を記憶し、記憶した第二のライトポインタを第四のメモリ３３３に出力する。また、第二のライトポイントレジスタ３５３は、バッファ管理回路３５０から新たな第二のライトポインタを入力し、入力した新たな第二のライトポインタを記憶する。
【００６６】
図６は、実施の形態１における選択制御回路３１３の入出力値およびメモリ（３３０〜３３３）の入力値の一例を示す表である。
実施の形態１における選択制御回路３１３の入出力値およびメモリ（３３０〜３３３）の入力値の一例について、図６に基づいて説明する。なお、選択制御回路３１３は、図６に示す表をデータとして記憶し、使用しても構わない。
【００６７】
項番「１」から項番「４」の入力値（Ｖａ＝１、Ｖｂ＝１）は、リクエスト（Ａ、Ｂ）が同時に成立したことを意味する。セクターポインタ（ＳＥＣＴＰ）は「０」から「３」のいずれかの値を示す。
項番「１」「３」の場合（ＳＥＣＴＰ＝０又は２）、選択制御回路３１３は、「０」を示す選択信号（Ｓａ、Ｓｂ）を第一の選択回路３１１および第二の選択回路３１２に出力する。その結果、第一のメモリ３３０（Ｄ０）および第三のメモリ３３２（Ｄ２）にリクエスト（Ａ）が入力され、第二のメモリ３３１（Ｄ１）および第四のメモリ３３３（Ｄ３）にリクエスト（Ｂ）が入力される。
項番「２」「４」の場合（ＳＥＣＴＰ＝１又は３）、選択制御回路３１３は、「１」を示す選択信号（Ｓａ、Ｓｂ）を第一の選択回路３１１および第二の選択回路３１２に出力する。その結果、第一のメモリ３３０（Ｄ０）および第三のメモリ３３２（Ｄ２）にリクエスト（Ｂ）が入力され、第二のメモリ３３１（Ｄ１）および第四のメモリ３３３（Ｄ３）にリクエスト（Ａ）が入力される。
【００６８】
項番「５」から項番「１２」の入力値（Ｖａ、Ｖｂ）は、リクエスト（Ａ）とリクエスト（Ｂ）とのうち一方が成立し、他方が成立していないことを意味する。
項番「５」「７」「９」「１１」の場合（ＳＥＣＴＰ＝０又は２）、選択制御回路３１３は有効なリクエストを指定した選択信号（Ｓａ）を第一の選択回路３１１に出力する。その結果、第一のメモリ３３０（Ｄ０）および第三のメモリ３３２（Ｄ２）に有効なリクエストが入力される。
項番「６」「８」「１０」「１２」の場合（ＳＥＣＴＰ＝１又は３）、選択制御回路３１３は有効なリクエストを指定した選択信号（Ｓｂ）を第二の選択回路３１２に出力する。その結果、第二のメモリ３３１（Ｄ１）および第四のメモリ３３３（Ｄ３）に有効なリクエストが入力される。
【００６９】
項番「１３」の入力値（Ｖａ＝０、Ｖｂ＝０）は、リクエスト（Ａ）およびリクエスト（Ｂ）が共に成立していないことを意味する。
この場合、選択制御回路３１３は、セクターポインタ（ＳＥＣＴＰ）の値に関わらず、任意の値を示す選択信号（Ｓａ、Ｓｂ）を第一の選択回路３１１および第二の選択回路３１２に出力する。
【００７０】
図７は、実施の形態１におけるバッファ管理回路３５０の入出力値およびメモリ（３３０〜３３３）の入力値の一例を示す表である。
実施の形態１におけるバッファ管理回路３５０の入出力値およびメモリ（３３０〜３３３）の入力値の一例について、図７に基づいて説明する。なお、バッファ管理回路３５０は、図７に示す表をデータとして記憶し、使用しても構わない。
【００７１】
項番「１」から項番「４」の入力値（Ｖａ＝１、Ｖｂ＝１）は、リクエスト（Ａ、Ｂ）が同時に成立したことを意味する。
この場合、バッファ管理回路３５０は、セクターポインタ（ＳＥＣＴＰ）の値に応じて、第一のメモリ３３０から第四のメモリ３３３のうち２つのメモリ（ＷＥｘ）を選択する。そして、バッファ管理回路３５０は、選択した２つのメモリに「１」を示すライトイネーブル信号を出力し、残りの２つのメモリに「０」を示すライトイネーブル信号を出力する。
例えば、項番「１」の場合、バッファ管理回路３５０は、第一のメモリ３３０（ＷＥ０）および第二のメモリ３３１（ＷＥ１）にライトイネーブル信号「１」を出力し、第三のメモリ３３２（ＷＥ２）および第四のメモリ３３３（ＷＥ３）にライトイネーブル信号「０」を出力する。
「１」を示すライトイネーブル信号はリクエストを記憶させるための信号であり、「０」を示すライトイネーブル信号はリクエストを記憶させないための信号である。
【００７２】
項番「５」から項番「１２」の入力値は、リクエスト（Ａ）とリクエスト（Ｂ）とのうち一方が成立し、他方が成立していないことを意味する。
この場合、バッファ管理回路３５０は、セクターポインタ（ＳＥＣＴＰ）の値に応じて、第一のメモリ３３０から第四のメモリ３３３のうち１つのメモリ（ＷＥｘ）を選択する。そして、バッファ管理回路３５０は、選択した１つのメモリに「１」を示すライトイネーブル信号を出力し、残りの３つのメモリに「０」を示すライトイネーブル信号を出力する。
【００７３】
項番「１３」の入力値（Ｖａ＝０、Ｖｂ＝０）は、リクエスト（Ａ）およびリクエスト（Ｂ）が共に成立していないことを意味する。
この場合、バッファ管理回路３５０は、セクターポインタ（ＳＥＣＴＰ）の値に関わらず、全てのメモリ（３３０〜３３３）に「０」を示すライトイネーブル信号を出力する。
【００７４】
ここで、リクエスト（Ａ、Ｂ）を記憶する記憶動作の具体例について、図６および図７に基づいて説明する。
図６および図７の項番「１」において、リクエスト（Ａ、Ｂ）が同時に成立している。
図６の項番「１」において、第一のメモリ３３０（Ｄ０）および第三のメモリ３３２（Ｄ２）にはリクエスト（Ａ）が入力され、第二のメモリ３３１（Ｄ１）および第四のメモリ３３３（Ｄ３）にはリクエスト（Ｂ）が入力される。
図７の項番「１」において、第一のメモリ３３０（ＷＥ０）および第二のメモリ３３１（ＷＥ１）にはライトイネーブル信号「１」が入力され、第三のメモリ３３２（ＷＥ２）および第四のメモリ３３３（ＷＥ３）にはライトイネーブル信号「０」が入力される。
その結果、第一のメモリ３３０はリクエスト（Ａ）を記憶し、第二のメモリ３３１はリクエスト（Ｂ）を記憶し、第三のメモリ３３２および第四のメモリ３３３はリクエスト（Ａ、Ｂ）を記憶しない。
項番「２」から項番「３」の場合も同様な記憶動作が行われ、同時に成立したリクエスト（Ａ、Ｂ）が異なるメモリに同時に記憶される。
項番「５」から項番「１２」の場合、リクエスト（Ａ、Ｂ）の一方のみが成立しており、成立しているリクエストだけがメモリに記憶される。
項番「１３」の場合、リクエスト（Ａ、Ｂ）が成立していないため、リクエスト（Ａ、Ｂ）はメモリに記憶されない。
【００７５】
図８は、実施の形態１におけるバッファ管理回路３５０の入出力値の一例を示す表である。
上記の記憶動作が行われた後のバッファ管理回路３５０の動作について、図８に基づいて説明する。バッファ管理回路３５０は、図８に示す表をデータとして記憶し、使用しても構わない。
【００７６】
項番「１」の場合、リクエスト（Ａ、Ｂ）が第一のメモリ３３０（ＷＥ０）および第二のメモリ３３１（ＷＥ１）に記憶される（図７参照）。
バッファ管理回路３５０は、次回のリクエスト（Ａ、Ｂ）が第一のメモリ３３０（ＷＥ０）および第二のメモリ３３１（ＷＥ１）に記憶されないように、セクターポインタ（ＳＥＣＴＰ）の値「０」に「２」を加算する。つまり、バッファ管理回路３５０は、セクターポインタの値を「２（＝０＋２）」に更新する。
また、バッファ管理回路３５０は、ライトポインタ（ＷＰＴＲａ、ＷＰＴＲｂ）の値を更新しない。次回のリクエスト（Ａ、Ｂ）が、今回のリクエスト（Ａ、Ｂ）が記憶された第一のメモリ３３０および第二のメモリ３３１の記憶領域と同じ番号で識別される第三のメモリ３３２（ＷＥ２）および第四のメモリ３３３（ＷＥ３）の記憶領域に記憶されるようにするためである。例えば、今回のリクエスト（Ａ、Ｂ）が第一のメモリ３３０および第二のメモリ３３１の１番目の記憶領域に記憶された場合、次回のリクエスト（Ａ、Ｂ）は第三のメモリ３３２および第四のメモリ３３３の１番目の記憶領域に記憶される。つまり、トレースバッファ３００に入力されるリクエストの最大数以上（２つ以上）のメモリ（３３２、３３３）がライトイネーブル信号によって指定されずに残っている場合、バッファ管理回路３５０はライトポインタ（ＷＰＴＲａ、ＷＰＴＲｂ）を更新しない。
【００７７】
項番「２」の場合、リクエスト（Ａ、Ｂ）が第二のメモリ３３１（ＷＥ１）および第三のメモリ３３２（ＷＥ２）に記憶される（図７参照）。
バッファ管理回路３５０は、次回のリクエスト（Ａ、Ｂ）が第二のメモリ３３１（ＷＥ１）および第三のメモリ３３２（ＷＥ２）に記憶されないように、セクターポインタ（ＳＥＣＴＰ）の値「１」に「２」を加算する。つまり、バッファ管理回路３５０は、セクターポインタの値を「３（＝１＋２）」に更新する。
バッファ管理回路３５０は、ライトポインタ（ＷＰＴＲｂ）の値を更新しない。次回のリクエスト（Ａ、Ｂ）のうち一方のリクエスト（Ａ）が、今回のリクエスト（Ａ、Ｂ）が記憶された第二のメモリ３３１および第三のメモリ３３２の記憶領域と同じ番号で識別される第四のメモリ３３３の記憶領域に記憶されるようにするためである。
バッファ管理回路３５０は、ライトポインタ（ＷＰＴＲａ）の値に「１」を加算する。次回のリクエスト（Ａ、Ｂ）のうち残りのリクエスト（Ａ）が、第一のメモリ３３０の記憶領域のうち、以前のリクエストが記憶された記憶領域に上書きされないようにするためである。
【００７８】
項番「３」の場合、リクエスト（Ａ、Ｂ）が第三のメモリ３３２（ＷＥ２）および第四のメモリ３３３（ＷＥ３）に記憶される（図７参照）。
バッファ管理回路３５０は、次回のリクエスト（Ａ、Ｂ）が第三のメモリ３３２（ＷＥ２）および第四のメモリ３３３（ＷＥ３）に記憶されないように、セクターポインタ（ＳＥＣＴＰ）の値「２」に「２」を加算する。但し、セクターポインタの値は「０」から「３」までのいずれかであるため、「２」を加算した後のセクターポインタの値は「４」ではなく、「０」である。つまり、バッファ管理回路３５０は、セクターポインタの値を「０」に更新する。
バッファ管理回路３５０は、ライトポインタ（ＷＰＴＲａ、ＷＰＴＲｂ）の値に「１」を加算する。以降のリクエストが、第一のメモリ３３０から第四のメモリ３３３のそれぞれの記憶領域のうち、以前のリクエストが記憶された記憶領域に上書きされないようにするためである。つまり、各メモリ（３３０〜３３３）に１つずつリクエストが記憶された場合、バッファ管理回路３５０はライトポインタ（ＷＰＴＲａ、ＷＰＴＲｂ）の値を更新する。なお、この加算においてエントリの最後の値に＋１した場合、ポインタ値は０に戻る。
【００７９】
項番「４」の場合、リクエスト（Ａ、Ｂ）が第四のメモリ３３３（ＷＥ３）および第一のメモリ３３０（ＷＥ０）に記憶される（図７参照）。
バッファ管理回路３５０は、次回のリクエスト（Ａ、Ｂ）が第四のメモリ３３３（ＷＥ３）および第一のメモリ３３０（ＷＥ０）に記憶されないように、セクターポインタ（ＳＥＣＴＰ）の値「３」に「２」を加算する。但し、セクターポインタの値は「０」から「３」までのいずれかであるため、「２」を加算した後のセクターポインタの値は「５」ではなく、「１」である。つまり、バッファ管理回路３５０は、セクターポインタの値を「１」に更新する。
バッファ管理回路３５０は、ライトポインタ（ＷＰＴＲｂ）の値に「１」を加算する。以降のリクエストが、第四のメモリ３３３の記憶領域のうち、今回のリクエスト（Ａ）が記憶された記憶領域に上書きされないようにするためである。
バッファ管理回路３５０は、ライトポインタ（ＷＰＴＲａ）の値を更新しない。次回のリクエスト（Ａ、Ｂ）が、今回のリクエスト（Ｂ）が記憶された第一のメモリ３３０の記憶領域と同じ番号で識別される第二のメモリ３３１および第三のメモリ３３２に記憶されるようにするためである。
【００８０】
項番「５」から項番「１２」の場合、バッファ管理回路３５０は、項番「１」から項番「４」と同様に、セクターポインタ（ＳＥＣＴＰ）およびライトポインタ（ＷＰＴＲａ、ＷＰＴＲｂ）を更新する。
但し、メモリ（３３０〜３３３）に記憶されるリクエストの数が「１」であるため、セクターポインタに加算する値は「１」である。
【００８１】
項番「１３」の場合、メモリ（３３０〜３３３）に記憶されるリクエストが無いため、バッファ管理回路３５０はセクターポインタ（ＳＥＣＴＰ）およびライトポインタ（ＷＰＴＲａ、ＷＰＴＲｂ）を更新しない。
【００８２】
バッファ管理回路３５０がセクターポインタ（ＳＥＣＴＰ）およびライトポインタ（ＷＰＴＲａ、ＷＰＴＲｂ）を適宜に更新することにより、各メモリ（３３０〜３３３）に記憶されるリクエストの量を均等にすることができる。つまり、リクエストの記憶先が特定のメモリに集中することを防ぐことができる。これにより、特定のメモリから空きの記憶領域が無くなり、特定のメモリの記憶領域からリクエストが読み出される前に新たなリクエストが上書きされてしまうことを抑止することができる。その結果、トレースバッファ３００は、各メモリの記憶領域を効率的に利用し、より多くのリクエストを記憶することができる。
【００８３】
実施の形態１により、例えば、以下のような効果を奏する。
ポイントツーポイントのインタコネクトのトランザクション（例えば、リクエスト）が同時発生しても、それらをトレースバッファに取り込み、システム性能の解析に必要な情報を漏らさず記録できる。
インタコネクト回路（例えば、ＤＲＡＭコントローラ１３０、ＣＰＵブリッジ１４０）にトランザクションの同時発生を抑止する回路（例えば、リクエスト抑止回路２００）を挿入することにより、トレースバッファに同時に書き込みすることができるトランザクションの数よりも多いトランザクションが同時に発生した場合であっても、いくつかのトランザクションをイネーブルにし、同時に発生するトランザクションの数を削減することができる。
トランザクションの同時発生を抑止するので、インタコネクト回路とトレースバッファとの間の信号線を削減することができる。２つのトランザクションから１つのトランザクションを選択する場合には信号線の数を従来の１／２に削減し、４つのトランザクションから１つのトランザクションを選択する場合には信号線の数を従来の１／４に削減することができる。但し、信号線の数を削減する効果はインタコネクト回路の配置方法によって変わる。
【００８４】
実施の形態１は、以下のような形態であっても構わない。
リクエストはトレースバッファ３００に記憶するトレースデータ（対象データ）の一例である。トレースバッファ３００はリクエスト以外のデータを記憶しても構わない。
ＤＲＡＭコントローラ１３０およびＣＰＵブリッジ１４０のそれぞれのリクエスト抑止回路２００は、同時に成立した３つ以上のデータを入力し、少なくともいずれかのデータを抑止し、１つまたは複数の残りのデータをトレースバッファ３００に出力しても構わない。
トレースバッファ３００は、３つ以上のデータを同時に入力し、同時に入力した３つ以上のデータを同時に記憶しても構わない。
トレースバッファ３００が備えるメモリの数は２つまたは３つであっても構わない。また、トレースバッファ３００が備えるメモリの数は５つ以上であっても構わない。
次のような制御が行われてもよい。第二のライトポイントレジスタ３５３を用いる代わりに第一のライトポイントレジスタ３５２の値から１を減算する回路を用いる、または、第一のライトポイントレジスタ３５２を用いる代わりに第二のライトポイントレジスタ３５３の値に１を加算する回路を用いる。そして、加減算の条件をセクターポイントレジスタ３５１から求めて、書き込み対象となったメモリ（３３０〜３３４）のポートＡｗの値が図５の動作と等価になるように制御する。
【符号の説明】
【００８５】
１００  集積回路、１０１  バスコントローラ、１０２  ＤＭＡコントローラ、１０３
ＳＲＡＭコントローラ、１０４  Ｉ／Ｏブリッジ、１０９  バス、１１０  ＣＰＵ、１２０  キャッシュメモリ、１２１Ｗ，１２１Ｒ  信号線、１２２Ｗ，１２２Ｒ  信号線、１３０  ＤＲＡＭコントローラ、１４０  ＣＰＵブリッジ、２００  リクエスト抑止回路、２０１Ａ，２０１Ｂ  信号線、２１０  第一の選択回路、２２０  信号加工回路、２２１  モードレジスタ、２２２  カウントレジスタ、２３１  第一のＡＮＤ回路、２３２  第二のＡＮＤ回路、３００  トレースバッファ、３１１  第一の選択回路、３１２  第二の選択回路、３１３  選択制御回路、３２０  第一の入力レジスタ、３２１  第二の入力レジスタ、３２２  第三の入力レジスタ、３２３  第四の入力レジスタ、３３０  第一のメモリ、３３１  第二のメモリ、３３２  第三のメモリ、３３３  第四のメモリ、３４０  出力回路、３４１  出力レジスタ、３５０  バッファ管理回路、３５１  セクターポイントレジスタ、３５２  第一のライトポイントレジスタ、３５３  第二のライトポイントレジスタ。
【図１】
0006049564.tif 000002
【図２】
0006049564.tif 000003
【図３】
0006049564.tif 000004
【図４】
0006049564.tif 000005
【図５】
0006049564.tif 000006
【図６】
0006049564.tif 000007
【図７】
0006049564.tif 000008
【図８】
0006049564.tif 000009