(57)【特許請求の範囲】
【請求項１】
観測対象の回路に含まれる各信号線を流れる各信号値を組み合わせた値の各々に応じた前記組み合わせた値の発生回数を記憶する第１記憶部と、
前記組み合わせた値の全部または一部に対応する各ノードの各々の値に、前記第１記憶部のうち、前記値に対応する前記組み合わせた値に応じた前記発生回数を記憶する領域を示す情報を関連付ける２分探索木の構造のデータを記憶する第２記憶部と、
前記回路の動作中に前記各信号線を流れる各信号値の変化に応じて、前記各信号線を流れる各信号値を組み合わせた値を順次受け付け、前記組み合わせた値を受け付けた順に記憶し、記憶した順に前記組み合わせた値を取り出すことが可能なキュー構造の第３記憶部を有する受け付け部と、
前記２分探索木から、前記値が前記受け付け部によって受け付けられた前記組み合わせた値に対応するノードを探索し、探索した前記ノードの値に関連付けられた前記情報を出力する探索部と、
前記探索部によって出力された前記情報が示す前記第１記憶部のうちの前記領域に記憶された前記発生回数を更新する更新部と、
を有し、
前記探索部は、
前記第３記憶部に最も先に記憶された前記組み合わせた値を取得し、取得した前記組み合わせた値に対応する前記ノードを探索し、前記ノードの探索中に、前記第３記憶部に記憶された前記組み合わせた値の数が所定数以上である場合に、前記ノードの探索を中断し、前記２分探索木のうち中断時において検出したノードの値に関連付けて記憶された前記情報を出力し、前記第３記憶部に最も先に記憶された前記組み合わせた値を新たに取得し、新たに取得した前記組み合わせた値に対応する前記ノードを探索する、
ことを特徴とするイベント計数装置。
【請求項２】
前記受け付け部は、
前記組み合わせた値に応じた発生回数を前記組み合わせた値に関連付けて前記第３記憶部に格納し、
前記探索部は、
新たに前記組み合わせた値を受け付けると、新たに受け付けた前記組み合わせた値と同一値が前記第３記憶部に記憶されているかを探索し、
前記更新部は、
受け付けた前記組み合わせた値と同一値が検出された場合、受け付けた前記組み合わせた値を前記第３記憶部に記憶せず、前記第３記憶部に記憶された同一値に関連付けられた前記発生回数を更新し、
受け付けた前記組み合わせた値と同一値が検出されなかった場合、前記第３記憶部に、受け付けた前記組み合わせた値と、受け付けた前記組み合わせた値に応じた発生回数と、を関連付けて格納する、
ことを特徴とする請求項１に記載のイベント計数装置。
【請求項３】
前記受け付け部は、
前記各信号値に対応する重要度に基づいて、前記各信号値を組み合わせた値を生成し、生成した前記組み合わせた値を受け付け、
前記探索部は、
前記受け付け部によって受け付けられた前記組み合わせた値のビットの並びに基づいて、前記２分探索木から、前記値が前記組み合わせた値に対応するノードを探索する、
ことを特徴とする請求項１または２に記載のイベント計数装置。
【請求項４】
前記受け付け部は、
前記各信号値に対応する重要度に基づいて、前記各信号値から選択した信号値を組み合わせた値を生成し、生成した前記組み合わせた値を受け付ける、
ことを特徴とする請求項３に記載のイベント計数装置。
【請求項５】
前記受け付け部は、
前記回路の複数のイベントの各々について前記各信号線を流れる前記各信号値を組み合わせた値を生成し、生成した前記組み合わせた値のうち、前記複数のイベントのうち指定されたイベントに応じた前記組み合わせた値を受け付ける、
ことを特徴とする請求項１〜４のいずれか一つに記載のイベント計数装置。
【請求項６】
前記探索部は、
受け付けられた前記組み合わせた値に対応するノードの探索中に、前記２分探索木の深さが特定値となった場合に、前記ノードの探索を中断し、前記２分探索木のうち中断時において検出したノードの値に関連付けて記憶された前記情報を出力する、
ことを特徴とする請求項１〜５のいずれか一つに記載のイベント計数装置。
【請求項７】
前記第２記憶部に記憶された前記ノードの値と、前記ノードの値に関連付けられた前記情報と、を取得し、前記第１記憶部に記憶された前記発生回数を取得し、前記２分探索木に含まれるノードのうち前記値に前記情報が関連付けられた前記ノードの各々について、前記ノードの値と、取得した前記発生回数のうち前記ノードの値に関連付けられた前記情報が示す領域に格納された前記発生回数と、を関連付けて提示する出力部を有することを特徴とする請求項１〜６のいずれか一つに記載のイベント計数装置。
【請求項８】
観測対象の回路に含まれる各信号線を流れる各信号値を組み合わせた値の各々に応じた前記組み合わせた値の発生回数を記憶する第１記憶部と、
前記組み合わせた値の全部または一部に対応する各ノードの各々の値に、前記第１記憶部のうち、前記値に対応する前記組み合わせた値に応じた前記発生回数を記憶する領域を示す情報を関連付ける２分探索木の構造のデータを記憶する第２記憶部と、
前記組み合わせた値を受け付けた順に記憶し、記憶した順に前記組み合わせた値を取り出すことが可能なキュー構造の第３記憶部と、を有するイベント計数装置が、
前記回路の動作中に前記各信号線を流れる各信号値の変化に応じて、前記各信号線を流れる各信号値を組み合わせた値を順次受け付け、
前記２分探索木から、前記値が受け付けた前記組み合わせた値に対応するノードを探索し、探索した前記ノードの値に関連付けられた前記情報を出力し、
出力した前記情報が示す前記第１記憶部のうちの前記領域に記憶された前記発生回数を更新する、
処理を行い、
前記探索する処理では、
前記第３記憶部に最も先に記憶された前記組み合わせた値を取得し、取得した前記組み合わせた値に対応する前記ノードを探索し、前記ノードの探索中に、前記第３記憶部に記憶された前記組み合わせた値の数が所定数以上である場合に、前記ノードの探索を中断し、前記２分探索木のうち中断時において検出したノードの値に関連付けて記憶された前記情報を出力し、前記第３記憶部に最も先に記憶された前記組み合わせた値を新たに取得し、新たに取得した前記組み合わせた値に対応する前記ノードを探索する、
ことを特徴とするイベント計数方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、イベント計数装置、およびイベント計数方法に関する。
【背景技術】
【０００２】
従来、プロセッサやメモリシステムなどのハードウェア回路の内部の動作を観測するために、ハードウェア回路の信号値などをカウントするパフォーマンス監視ユニットなどが公知である。
【０００３】
また、マイクロプロセッサシステムにおいて、メモリアドレスの増加による境界検出信号がイベントのカウントに使用され、スタックは短縮化された命令群、および迅速化された実行コードを許容する技術が公知である（例えば、以下特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表平１１−５１３８２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来、回路の内部のイベントの発生回数を観測する場合、観測対象の回路が高速に動作すると、イベントの発生回数を数える回路も高速に動作することになる。しかしながら、観測するイベントの数が多いと、イベントの発生回数を数える回路が複雑となり、イベントの発生回数を高速に数えることが困難となる場合がある。
【０００６】
１つの側面では、本発明は、観測対象の回路が高速に動作してもイベントの数を高速に数えることができるイベント計数装置、およびイベント計数方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、観測対象の回路に含まれる各信号線を流れる各信号値を組み合わせた値の各々に応じた前記組み合わせた値の発生回数を記憶する第１記憶部と、前記組み合わせた値の全部または一部に対応する各ノードの各々の値に、前記第１記憶部のうち、前記値に対応する前記組み合わせた値に応じた前記発生回数を記憶する領域を示す情報を関連付ける２分探索木の構造のデータを記憶する第２記憶部と、前記回路の動作中に前記各信号線を流れる各信号値の変化に応じて、前記各信号線を流れる各信号値を組み合わせた値を順次受け付ける受け付け部と、前記２分探索木から、前記値が前記受け付け部によって受け付けられた前記組み合わせた値に対応するノードを探索し、探索した前記ノードの値に関連付けられた前記情報を出力する探索部と、前記探索部によって出力された前記情報が示す前記第１記憶部のうちの前記領域に記憶された前記発生回数を更新する更新部と、を有し、前記探索部は、前記受け付け部によって受け付けられた前記組み合わせた値に対応する前記ノードの探索中に、前記受け付け部によって新たに前記組み合わせた値が受け付けられると、前記ノードの探索を中断し、前記２分探索木のうち中断時において検出したノードの値に関連付けて記憶された前記情報を出力し、新たに受け付けられた前記組み合わせた値に対応する前記ノードを探索するイベント計数装置、およびイベント計数方法が提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、観測対象の回路が高速に動作してもイベントの数を高速に数えることができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、本発明にかかるイベント計数装置の一例を示す説明図である。
【図２】図２は、探索および更新処理の一例を示す説明図である。
【図３】図３は、イベント計数装置の全体例を示す説明図である。
【図４】図４は、符号化時に付加される情報の一種であるＴＹＰＥの値例を示す説明図である。
【図５】図５は、符号化およびイベントフィルタ例１を示す説明図である。
【図６】図６は、符号化およびイベントフィルタ例２を示す説明図である。
【図７】図７は、イベントフィルタ回路例を示す説明図である。
【図８】図８は、イベント圧縮回路例を示す説明図である。
【図９】図９は、破棄例および並び替え例を示す説明図である。
【図１０】図１０は、破棄および並び替えの結果例を示す説明図である。
【図１１】図１１は、圧縮イベントキュー回路例を示す説明図である。
【図１２】図１２は、圧縮イベントキュー回路において扱うデータのデータ構造例を示す説明図である。
【図１３】図１３は、プッシュ処理部が行うプッシュ処理手順例を示すフローチャートである。
【図１４】図１４は、ポップ処理部が行うポップ処理手順例を示すフローチャートである。
【図１５】図１５は、ピーク処理部が行うピーク処理手順例を示すフローチャートである。
【図１６】図１６は、ＳＵＰ処理部が行うＳＵＰ処理手順例を示すフローチャートである。
【図１７】図１７は、２分探索木のデータ構造例を示す説明図である。
【図１８】図１８は、カウンタ値テーブルのデータ構造例を示す説明図である。
【図１９】図１９は、２分探索木回路例を示す説明図である。
【図２０】図２０は、カウンタ値テーブル回路例を示す説明図である。
【図２１】図２１は、データストア回路例を示す説明図である。
【図２２】図２２は、探索およびテーブル登録例を示す説明図である。
【図２３】図２３は、２分探索処理部が行う２分探索処理手順例を示すフローチャート（その１）である。
【図２４】図２４は、２分探索処理部が行う２分探索処理手順例を示すフローチャート（その２）である。
【図２５】図２５は、関数ｓｕｂ＿ｐｒｏｃ（ｐ）についての処理手順例を示すフローチャートである。
【図２６】図２６は、ノード割当処理部が行うノード割当処理手順例を示すフローチャートである。
【図２７】図２７は、データストア回路が行うデータストア処理手順例を示す説明図である。
【図２８】図２８は、テーブルインデックス計算部が行うテーブルインデックス計算処理手順例を示すフローチャートである。
【図２９】図２９は、イベント発生例を示す説明図である。
【図３０】図３０は、２分探索木から得られるダンプデータ例を示す説明図である。
【図３１】図３１は、カウンタ値テーブルから得られるダンプデータ例を示す説明図である。
【図３２】図３２は、２分探索木のダンプデータを木構造によって表した例を示す説明図である。
【図３３】図３３は、イベント種別およびカウンタ値への対応付け例を示す説明図である。
【図３４】図３４は、レポート出力例を示す説明図である。
【図３５】図３５は、レポート生成部が行うレポート生成処理手順例を示すフローチャートである。
【図３６】図３６は、図３５で示した集計処理（ステップＳ３５０３）の詳細な説明を示すフローチャートである。
【図３７】図３７は、関数ｒｅｐｏｒｔ＿ｓｕｂの詳細な説明を示すフローチャート（その１）である。
【図３８】図３８は、関数ｒｅｐｏｒｔ＿ｓｕｂの詳細な説明を示すフローチャート（その２）である。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、本発明にかかるイベント計数装置、およびイベント計数方法の実施の形態を詳細に説明する。
【００１１】
図１は、本発明にかかるイベント計数装置の一例を示す説明図である。イベント計数装置１００は、観測対象の回路１２１において発生するイベントの発生回数を数える。観測対象の回路１２１とは、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）やＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）などのハードウェア回路である。イベント計数装置１００は、例えば、観測対象の回路１２１に接続されて利用される。イベント計数装置１００は、例えば、観測対象の回路１２１のデバッグ時に利用される。例えば、利用者が、イベントの発生回数の傾向などを把握することにより、ソフトウェアのハードウェア化やハードウェアのソフトウェア化などを検討するための指針となる情報を採取することができる。
【００１２】
従来、ハードウェア回路の特定のイベントが観測対象の回路１２１内で発生した回数を数える場合、ハードウェア回路は高速に動作するため、イベントの発生回数を数える回路も高速に動作させなければならない。例えば、ハードウェア回路の動作速度が１００［ＭＨｚ］であれば、最大１秒間に１億回、信号線の値が変化する。しかしながら、観測するイベントの数が多いと、イベントの発生回数を数える回路が複雑となり、イベントの発生回数を高速に数えることが困難となる場合がある。例えば、観測したいイベントを利用者が選択できるようにすると、イベントの発生回数を数える回路が複雑となるため、イベントの発生回数を高速に数えることができない。
【００１３】
また、例えば、観測対象の回路１２１の動作速度を遅くさせることにより、発生回数を数える方法もあるが、観測対象の回路１２１の動作速度が実際の動作速度と異なると、観測対象の回路１２１の挙動が変化する可能性がある。観測対象の回路１２１の挙動が変化した場合、観測したい希望の動作を観測できない可能性がある。
【００１４】
本実施の形態では、イベント計数装置１００は、イベント発生回数の記憶領域のアドレスを管理する２分探索木からイベントデータのノード探索中に新たにイベントデータを受けると、探索を中断する。記憶領域のアドレスは、記憶領域を区別するために領域ごとに付された番地である。そして、イベント計数装置１００は、中断時のノードに応じたアドレスが示す記憶領域の発生回数を更新する。これにより、観測対象のハードウェア回路の動作速度への影響に支障を与えることなく、イベントの発生回数を確実に計数しつつ観測対象のハードウェア回路を高速に動作させることができる。
【００１５】
また、中断しない場合やすべてのイベントデータを数える回路によって計数した場合などと比較して、イベントデータの精度は低下するが、イベントの発生回数を高速に計数することができる。イベントの発生が少ないような処理速度に余裕がある場合には、より多くの情報を記憶し、イベントの発生が多いような処理速度に余裕がない場合には、情報を省略して記録することができる。メモリアクセスを例に挙げると、イベントの発生が多いような場合とは、例えば、外部からの割り込みイベントなどの発生によりメモリアクセスが集中する場合である。このように、同じイベントが常時発生するわけではないため、イベントの発生回数の傾向を把握することは可能である。
【００１６】
イベント計数装置１００は、第１記憶部１１１と、第２記憶部１１２と、受け付け部１０１と、探索部１０２と、更新部１０３と、を有する。
【００１７】
第１記憶部１１１は、観測対象の回路１２１に含まれる各信号線を流れる各信号値を組み合わせた値の各々に応じた組み合わせた値の発生回数を記憶する。組み合わせた値は、例えば、イベントデータとも称する。回路１２１に含まれる各信号線は、例えば、計数したい回路１２１の所望のイベントに応じた信号線である。
【００１８】
第２記憶部１１２は、組み合わせた値または組み合わせた値の一部に対応する各ノードの各々の値に、第１記憶部１１１のうち、値に対応する組み合わせた値に応じた発生回数を記憶する領域を示す情報を関連付ける２分探索木の構造のデータを記憶する。領域を示す情報とは、例えば、領域を示すアドレスである。
【００１９】
受け付け部１０１は、観測対象の回路１２１の動作中に各信号線を流れる各信号値の変化に応じて、各信号線を流れる各信号値を組み合わせた値を順次受け付ける。受け付け部１０１は、例えば、各信号線を流れる各信号値が変化した場合に、各信号線を流れる各信号値を組み合わせた値を受け付ける。また、受け付け部１０１は、例えば、各信号線を流れる各信号値を常時受け付けて、受け付けた各信号値が変化した場合に、各信号値を組み合わせた値を受け付けてもよい。
【００２０】
探索部１０２は、２分探索木から、値が受け付け部１０１によって受け付けられた組み合わせた値に対応するノードを探索し、探索したノードの値に関連付けられた情報を出力する。
【００２１】
更新部１０３は、探索部１０２によって出力された情報が示す第１記憶部１１１のうちの領域に記憶された発生回数を更新する。具体的に、更新部１０３は、例えば、記憶された発生回数に１加算した発生回数を探索部１０２によって出力された情報が示す第１記憶部１１１のうちの領域に格納する。
【００２２】
ここで、探索部１０２は、受け付け部１０１によって受け付けられた組み合わせた値に対応するノードの探索中に、受け付け部１０１によって新たな組み合わせた値が受け付けられると、ノードの探索を中断する。そして、探索部１０２は、２分探索木のうち中断時において検出したノードの値に関連付けて記憶された情報を出力し、２分探索木から第２の組み合わせた値に対応するノードを探索する。中断時において検出したノードとは、中断時の着目ノードである。
【００２３】
図２は、探索および更新処理の一例を示す説明図である。受け付け部１０１は、第１の組み合わせた値を受け付ける。第１の組み合わせた値は、「１００１」である。探索部１０２は、例えば、値が第１の組み合わせた値に対応するノードを探索する。具体的に、探索部１０２は、例えば、ルートノードから順に着目ノードとし、着目ノードの値と第１の組み合わせた値とが一致するか否かによって順に探索する。第１の組み合わせた値が「１００１」であるため、探索部１０２は、ルートノードのつぎに着目ノードをノード−１にする。
【００２４】
探索部１０２は、例えば、ノード−１のつぎに着目ノードをノード−１０にする。そして、受け付け部１０１は、第２の組み合わせた値を受け付ける。そのため、探索部１０２は、例えば、ノード−１０において第１の組み合わせた値に対応するノードの探索を中断する。そして、探索部１０２は、着目ノードであるノード−１０の値に関連付けられたアドレス「０００４」を出力する。
【００２５】
更新部１０３は、第１記憶部１１１のうち、アドレス「０００４」が示す領域に格納された発生回数を更新する。具体的に、更新部１０３は、発生回数を１加算することにより発生回数を更新する。図２の例では、アドレス「０００４」が示す領域に格納された発生回数が２から３に更新される。
【００２６】
これにより、イベントの発生回数を高速に数えることができる。
【００２７】
（イベント計数装置１００の全体例）
図３は、イベント計数装置の全体例を示す説明図である。イベント計数装置１００は、イベント符号化回路３０１と、イベントフィルタ回路３０２と、イベント圧縮回路３０３と、圧縮イベントキュー回路３０４と、を有する。また、イベント計数装置１００は、２分探索木回路３０６と、カウンタ値テーブル回路３０７と、データストア回路３０５と、レポート生成部３０８と、を有する。
【００２８】
各回路は、論理積回路であるＡＮＤ、否定論理回路であるＩＮＶＥＲＴＥＲ、論理和回路であるＯＲや、ラッチ回路であるＦＦ（Ｆｌｉｐ  Ｆｌｏｐ）などの素子によって形成されてもよい。また、各回路は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）などのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によって実現されてもよい。具体的には、例えば、上述した各部の機能をハードウェア記述言語などによってネットリストに機能定義し、そのネットリストを論理合成してＡＳＩＣやＰＬＤに与えることにより、各部を実現してもよい。
【００２９】
また、各回路は、理解の容易化のために、機能別となっているが、実際には、各回路の構成要素が共有される場合もある。
【００３０】
ここで、受け付け部１０１は、イベント符号化回路３０１と、イベントフィルタ回路３０２と、イベント圧縮回路３０３と、圧縮イベントキュー回路３０４と、によって実現される。第２記憶部１１２と探索部１０２とは、例えば、２分探索木回路３０６とデータストア回路３０５とによって実現される。第１記憶部１１１と更新部１０３とは、カウンタ値テーブル回路３０７とデータストア回路３０５とによって実現される。出力部は、例えば、レポート生成部３０８によって実現される。
【００３１】
また、レポート生成部３０８は、出力部であり、図示省略するが、イベント計数装置１００を有するＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）などのＣＰＵによって実現されてもよい。例えば、レポート生成部３０８の処理は、図示省略するが、ＣＰＵがアクセス可能なＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ディスクなどの記憶装置に記憶されたプログラムにコーディングされる。そして、ＣＰＵが記憶装置から該プログラムを読み出して、プログラムにコーディングされる処理を実行する。これにより、レポート生成部３０８の処理が実現される。また、レポート生成部３０８の処理結果は、例えば、ＲＡＭ、ＲＯＭ、ディスクなどの記憶装置に記憶される。
【００３２】
イベント符号化回路３０１は、観測対象の回路１２１の動作中に各信号線を流れる各信号値の変化に応じて、各信号線を流れる各信号値を取得する。そして、イベント符号化回路３０１は、イベントに応じて、取得した各信号値を組み合わせた値を生成する。ここで、組み合わせた値は、例えば、イベントデータとも称する。具体的に、イベント符号化回路３０１は、観測対象の回路１２１においてイベントが発生すると、イベントの種類に応じて符号化を行うことにより、イベントデータを生成する。イベント符号化回路３０１は、例えば、観測対象の回路１２１から、メモリ（ＲＡＭ）の書き込みや読み出しの指示、ＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）の値、アドレス値、データ、演算指示、演算結果などの各種データを受け付ける。
【００３３】
図４は、符号化時に付加される情報の一種であるＴＹＰＥの値例を示す説明図である。イベント符号化回路３０１は、イベントデータ内に、イベントの種類を示すＴＹＰＥを設定する。
【００３４】
図４の例では、ＴＹＰＥの値が「０」であれば、メモリ書き込みのイベントデータであることを示す。図４の例では、ＴＹＰＥの値が「１」であれば、メモリ読み出しのイベントデータであることを示す。図４の例では、ＴＹＰＥの値が「２」であれば、レジスタ移動のイベントデータであることを示す。図４の例では、ＴＹＰＥの値が「３」であれば、加算のイベントデータであることを示す。例えば、ＴＹＰＥの値が「１５」であれば、ＣＰＵの動作停止のイベントデータであることを示す。
【００３５】
このように、ＴＹＰＥの値によってイベントデータの種類を判別することが可能となる。
【００３６】
従来のパフォーマンス監視ユニットなどは、実際に流通する製品などに搭載されるものを想定しているため、監視するイベントの種類数が少ない。これに対して、デバッグ時にイベントの発生回数を計数する場合、デバッグの容易化を図るためには、監視するイベントの種類数は多いとよい。しかし、イベントの種類数が多いと、イベントのイベントデータごとに発生回数を計数するため、発生回数を記憶するメモリの使用量が増大する。また、従来のパフォーマンス監視ユニットなどは、観測可能なイベントが固定であり、観測対象の信号を変更することが困難である。
【００３７】
そこで、本実施の形態では、イベントフィルタ回路３０２が、各信号値のうち、利用者の操作により指定された信号値を選択して、指定された信号値を組み合わせた値を受け付ける。これにより、メモリ容量の増大を抑制することができる。また、利用者が、集計結果を見て、情報が少ないと思う場合、観測したいイベントのイベントデータだけに絞ってイベントデータを集計するように指定することが可能となる。
【００３８】
イベントフィルタ回路３０２は、観測対象の回路１２１の複数のイベントの各々について各信号線を流れる各信号値を組み合わせた値を生成する。そして、イベントフィルタ回路３０２は、生成した組み合わせた値のうち、複数のイベントのうち指定されたイベントに応じた組み合わせた値を受け付ける受け付け部１０１である。
【００３９】
具体的に、イベントフィルタ回路３０２は、例えば、イベント符号化回路３０１から出力されたイベントデータのうち、所望のイベントに対応するイベントデータを出力する。例えば、メモリアクセスのイベントについてのイベントの発生回数について集計する場合、イベントフィルタ回路３０２は、例えば、ＴＹＰＥの値が「０」または「１」のイベントデータを出力する。一方、イベントフィルタ回路３０２は、ＴＹＰＥの値が「０」または「１」以外のイベントデータを出力しない。
【００４０】
図５は、符号化およびイベントフィルタ例１を示す説明図である。イベント符号化回路３０１は、メモリ書き込みの場合にＴＹＰＥの値を「０」にし、ＴＹＰＥ、ＰＣ、ＡＤ、ＤＡＴＡの順に並べたイベントデータを生成する。ＰＣは、プログラムカウンタの値であり、ＡＤはメモリアドレスであり、ＤＡＴＡは書き込みデータである。そして、イベントフィルタ回路３０２は、ＴＹＰＥの値が「０」であるため、受け付けたイベントデータを出力する。
【００４１】
図６は、符号化およびイベントフィルタ例２を示す説明図である。イベント符号化回路３０１は、加算の場合にＴＹＰＥの値を「３」にし、ＴＹＰＥ、加算結果の順に並べたイベントデータを生成する。そして、イベントフィルタ回路３０２は、ＴＹＰＥの値が「３」であるため、受け付けたイベントデータを出力しない。
【００４２】
図７は、イベントフィルタ回路例を示す説明図である。具体的に、イベントフィルタ回路３０２は、例えば、比較回路７００と、レジスタ７０１と、を有する。レジスタ７０１は、利用者によって指定可能なコンフィギュレーションデータを記憶する。利用者は、コンフィギュレーションデータによってフィルタ条件が設定可能である。
【００４３】
比較回路７００は、例えば、コンフィギュレーションデータに応じたフィルタ条件に対応するＡＮＤ回路によってイベントデータをマスクして０になった場合には出力しないとしてもよい。
【００４４】
また、比較回路７００は、例えば、フィルタ条件にイベントデータがマッチした場合に信号ｍａｔｃｈの値を「１」にする。例えば、イベントフィルタ回路３０２の後段にあるイベント圧縮回路３０３は信号ｍａｔｃｈの値が「１」の場合に動作しないというようにしてもよい。ここでのマッチするとは、所望のイベントでない場合である。また、比較回路７００は、フィルタ条件にイベントデータがマッチしない場合に信号ｍａｔｃｈの値を「０」にしてもよい。例えば、イベントフィルタ回路３０２の後段にあるイベント圧縮回路３０３は信号ｍａｔｃｈの値が「０」の場合に動作しないというようにしてもよい。ここでのマッチしないとは、所望のイベントの場合である。
【００４５】
このように、所望のイベントに応じたイベントデータを選択して出力する。これにより、所望のイベント以外のイベントの発生回数をカウントしなくてよいため、発生回数を記憶するためのメモリの使用量の増大を抑制することができる。
【００４６】
つぎに、図３に示すイベント圧縮回路３０３は、各信号値に対応する重要度に基づいて、各信号値を組み合わせた値を生成し、生成した組み合わせた値を受け付ける受け付け部１０１である。イベント圧縮回路３０３は、例えば、重要度が高い順に各信号値を並び替えて組み合わせた値を生成してもよい。ここで、イベント圧縮回路３０３によって生成される組み合わせた値は、例えば、圧縮イベントデータや圧縮後のイベントデータなどとも称する。重要度については、例えば、利用者によって定められる。
【００４７】
また、イベント圧縮回路３０３は、各信号値に対応する重要度に基づいて、各信号値から選択した信号値を組み合わせた値を生成し、生成した組み合わせた値を受け付ける受け付け部１０１である。
【００４８】
図８は、イベント圧縮回路例を示す説明図である。具体的に、イベント圧縮回路３０３は、例えば、イベントフィルタ回路３０２から出力されたイベントデータをコンフィギュレーションデータによってビットの並び替えを行う。ここでのコンフィギュレーションデータが各信号値の重要度である。
【００４９】
また、イベント圧縮回路３０３は、イベントデータのうちコンフィギュレーションデータによって破棄指定されたデータを除外したイベントデータを出力する。例えば、利用者は、コンフィギュレーションデータによって２０ビットのＰＣの値のうち上位４ビットを破棄するように指定してもよい。
【００５０】
図８では、イベントデータに含まれる各データにおいて上位ビットであるほど、重要度が高い例である。図８の例では、イベント圧縮回路３０３は、４ビットのＴＹＰＥの値と、２０ビットのＰＣの値と、１６ビットのＡＤの値と、１６ビットのＤＡＴＡの値と、を含むイベントデータの、一部のビットデータの除外と、ビットの並び替えを行う。これにより、イベント圧縮回路３０３は、３２ビットのデータｗ０と３２ビットのデータｗ１とを含む圧縮イベントデータを生成する。データｗ０とデータｗ１とのビット幅が３２ビットであるのは、この後説明する図１２および図１１のＲＡＭ１１０６が３２ビット幅であるためであり、データｗ０とデータｗ１とのビット幅は３２ビットに限定されない。
【００５１】
図９は、破棄例および並び替え例を示す説明図である。イベント圧縮回路３０３は、ＰＣの上位４ビットとＤＡＴＡの全ビットを破棄する。そして、イベント圧縮回路３０３は、例えば、ＭＳＢ（Ｍｏｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）側にＴＹＰＥの値を含め、ＴＹＰＥの値の後にＰＣの値とＡＤの値とを交互に並べる。これにより、イベント圧縮回路３０３は、データｗ０とデータｗ１とを有する圧縮イベントデータを生成する。データｗ１の上位４ビット以外については、未使用であり、空き領域となる。
【００５２】
図１０は、破棄および並び替えの結果例を示す説明図である。図１０では利用者が与えた重要度として、ＴＹＰＥを最高とし、つづいてＰＣとＡＤとが同順位であるとしている。図１０では、図５に示したイベントデータ例を用いて図９に示した圧縮イベントデータの生成例を説明する。イベント圧縮回路３０３は、ＴＹＰＥの値が「０」、ＰＣの値が「１２３４０」、ＡＤの値が「４０００」、ＤＡＴＡの値が「ａｂｃｄ」であるイベントデータを受け付ける。
【００５３】
イベント圧縮回路３０３は、ＤＡＴＡの値と、ＰＣの上位４ビットの値と、を破棄する。そして、イベント圧縮回路３０３は、ＴＹＰＥの値である「０」をＭＳＢに配置し、ＰＣの値の上位の値を削除する。イベント圧縮回路３０３は、ＰＣの下位１６ビットの値と、ＡＤの値と、を交互に並べて圧縮イベントデータを生成する。そのため、データｗ０は、「０２４３０４００」となり、データｗ１は「０」となる。
【００５４】
図１０の例では、４ビット単位で交互に並べたが、１ビット単位で交互に並べてもよく、特に限定しなくてよい。重要度が等しいデータについては交互に並べるのがこの実施例では効果的であるためであり、並べ替えをしない場合もありえる。利用者は重要度を与えるかわりに、具体的な並べ替え方法を直接与えてもよい。
【００５５】
つぎに、図３に示す圧縮イベントキュー回路３０４は、組み合わせた値を順次受け付ける受け付け部１０１である。圧縮イベントキュー回路３０４は、例えば、組み合わせた値を受け付けた順に記憶し、記憶した順に組み合わせた値を取り出すことが可能なキュー構造の第３記憶部を有する。ここで、第３記憶部は、圧縮イベントデータを格納するキュー構造の記憶部であるため、圧縮イベントキューとも称する。第３記憶部は、例えば、図１２に示すＲＡＭである。圧縮イベントキュー回路３０４は、受け付けた圧縮イベントデータを圧縮イベントキューに入れる。
【００５６】
また、カウンタ値テーブル回路３０７は、圧縮イベントデータに応じた発生回数を圧縮イベントデータに関連付けてカウンタ値テーブルに格納してもよい。そして、２分探索木回路３０６は、圧縮イベントキューへ圧縮イベントデータを入れる前に、圧縮イベントキューに、受け付けた圧縮イベントデータと同一の圧縮イベントデータが記憶されているか否かを探索する。
【００５７】
２分探索木回路３０６は、新たに圧縮イベントデータを受け付けると、受け付けた圧縮イベントデータと同一値が圧縮イベントキューに記憶されているかを探索する。そして、カウンタ値テーブル回路３０７は、受け付けた圧縮イベントデータと同一値が検出された場合、圧縮イベントキューに記憶された同一値に関連付けられた発生回数を更新し、受け付けた圧縮イベントデータを圧縮イベントキューに記憶させない。発生回数は、カウンタ値とも称する。ここで、カウンタ値テーブル回路３０７は、同一に関連付けられたカウンタ値に１を加算することによってカウンタ値を更新する。
【００５８】
また、カウンタ値テーブル回路３０７は、受け付けた圧縮イベントデータと同一値が検出されなかった場合、圧縮イベントキューに、受け付けた圧縮イベントデータと、受け付けた圧縮イベントデータに応じたカウンタ値と、を関連付けて記憶する。ここでのカウンタ値は「１」である。
【００５９】
また、圧縮イベントキュー回路３０４は、圧縮イベントキューに記憶された圧縮イベントデータの数が所定数以上となった場合に、予告信号を生成してデータストア回路３０５に出力する。所定数は、例えば、利用者によって定められてもよい。所定数は、例えば、閾値ｆｕｌｌ＿ｔｈｒｅｓとも称する。圧縮イベントキューに記憶された圧縮イベントデータの数は、例えば、データ数ｎｕｍとも称する。
【００６０】
図１１は、圧縮イベントキュー回路例を示す説明図である。圧縮イベントキュー回路３０４は、ＳＵＰ処理部１１０１と、プッシュ処理部１１０２と、ピーク処理部１１０３と、ポップ処理部１１０４と、ＲＡＭ制御部１１０５と、ＲＡＭ１１０６と、を有する。圧縮イベントキュー回路３０４は、圧縮イベントデータを一時的に格納するキューとしてＲＡＭ１１０６を使用する。
【００６１】
各部の詳細な説明の前に、圧縮イベントキュー回路３０４において扱うデータのデータ構造について説明する。
【００６２】
図１２は、圧縮イベントキュー回路において扱うデータのデータ構造例を示す説明図である。図１１に示したＲＡＭ１１０６の構成について説明する。ＲＡＭ１１０６は、上述した第３記憶部である。ＲＡＭ１１０６は、例えば、１ワードが３２ビットであり、６４ワードを有する。ここで、６４ワードを定数ｌｅｎとし、ＲＡＭ１１０６のサイズを表す。定数ｌｅｎの単位はワード数である。
【００６３】
圧縮イベントデータは、３２ビット幅のデータｗ０と４ビット幅のデータｗ１とを有する３６ビット幅のデータである。このため、１つの圧縮イベントデータに対してＲＡＭ１１０６のうち２ワード分を使用する。そこで、圧縮イベントキュー回路３０４は、３６ビットの圧縮イベントデータと８ビットのカウンタ値とを、２ワードのデータとしてＲＡＭ１１０６に格納する。
【００６４】
図１１に示すＲＡＭ制御部１１０５は、ＲＡＭ１１０６に、圧縮イベントデータを格納したり、ＲＡＭ１１０６から圧縮イベントデータを取り出す際に、使用する変数などを記憶する制御用レジスタを有する。制御用レジスタは、例えば、アドレスｗｒｉｔｅ＿ｐｔｒ、アドレスｒｅａｄ＿ｐｔｒ、データ数ｎｕｍ、閾値ｆｕｌｌ＿ｔｈｒｅｓを記憶する。
【００６５】
アドレスｗｒｉｔｅ＿ｐｔｒは、書き込み用のアドレスである。アドレスｒｅａｄ＿ｐｔｒは、読み出し用のアドレスである。データ数ｎｕｍは、ＲＡＭ１１０６の６４ワードのうち使用中のワードの数である。このため、データ数ｎｕｍは、ＲＡＭ１１０６に記憶された組み合わせた値の数である。閾値ｆｕｌｌ＿ｔｈｒｅｓは、上述したように所定数であり、予告信号ｎｅａｒｌｙ＿ｆｕｌｌを出力するか否かを判定するための閾値である。閾値ｆｕｌｌ＿ｔｈｒｅｓは、例えば、利用者によって設定可能である。
【００６６】
以降、説明の簡単化のために、プッシュ処理部１１０２、ポップ処理部１１０４、ピーク処理部１１０３などがＲＡＭ１１０６に対して書き込みや読み出しを行ったり、各変数などを更新するように記載する。実際には、ＲＡＭ制御部１１０５が、ＲＡＭ１１０６にデータをプッシュしたり、ＲＡＭ１１０６にデータをポップする際の制御を行う。
【００６７】
プッシュ処理部１１０２は、ＲＡＭ１１０６に対するプッシュ処理を行う。入力データは、圧縮イベントデータと、カウンタ値ｃｎｔと、である。ここで入力データに含まれるカウンタ値ｃｎｔは「１」である。圧縮イベントデータは、データｗ０とデータｗ１を有する。データｗ０とデータｗ１とはそれぞれ３２ビット幅である。カウンタ値ｃｎｔは８ビット幅である。また、プッシュ処理部１１０２は、圧縮イベントキューが溢れそうになったら予告信号ｎｅａｒｌｙ＿ｆｕｌｌを出力する。
【００６８】
プッシュ処理部１１０２は、定数ｌｅｎと、データ数ｎｕｍと、を扱う。プッシュ処理部１１０２は、プッシュ処理の一例として、データｗ１の下位ビットが未使用であることを利用して、データｗ１の下位ビットにカウンタ値ｃｎｔを格納し、データｗ０とデータｗ１とカウンタ値ｃｎｔとを２ワードで表してＲＡＭ１１０６に書き込む。
【００６９】
図１３は、プッシュ処理部が行うプッシュ処理手順例を示すフローチャートである。プッシュ処理部１１０２は、圧縮イベントデータを受け付ける（ステップＳ１３０１）。つぎに、プッシュ処理部１１０２は、定数ｌｅｎ≦データ数ｎｕｍか否かを判断する（ステップＳ１３０２）。
【００７０】
定数ｌｅｎ≦データ数ｎｕｍであると判断された場合（ステップＳ１３０２：Ｙｅｓ）、プッシュ処理部１１０２は、書き込み不可能エラーを出力し（ステップＳ１３０３）、一連の処理を終了する。定数ｌｅｎ≦データ数ｎｕｍでないと判断された場合（ステップＳ１３０２：Ｎｏ）、プッシュ処理部１１０２は、ＲＡＭ１１０６内のアドレスｗｒｉｔｅ＿ｐｔｒが示す領域にデータｗ０を書き込む（ステップＳ１３０４）。
【００７１】
プッシュ処理部１１０２は、ＲＡＭ１１０６内のアドレスｗｒｉｔｅ＿ｐｔｒ＋１が示す領域にデータｗ１とカウンタ値ｃｎｔを書き込む（ステップＳ１３０５）。プッシュ処理部１１０２は、データ数ｎｕｍ＝データ数ｎｕｍ＋２を行い（ステップＳ１３０６）。プッシュ処理部１１０２は、アドレスｗｒｉｔｅ＿ｐｔｒ＝アドレスｗｒｉｔｅ＿ｐｔｒ＋２とする（ステップＳ１３０７）。
【００７２】
そして、プッシュ処理部１１０２は、アドレスｗｒｉｔｅ＿ｐｔｒ＞定数ｌｅｎか否かを判断する（ステップＳ１３０８）。アドレスｗｒｉｔｅ＿ｐｔｒ＞定数ｌｅｎでないと判断された場合（ステップＳ１３０８：Ｎｏ）、プッシュ処理部１１０２は、ステップＳ１３１０へ移行する。アドレスｗｒｉｔｅ＿ｐｔｒ＞定数ｌｅｎであると判断された場合（ステップＳ１３０８：Ｙｅｓ）、プッシュ処理部１１０２は、アドレスｗｒｉｔｅ＿ｐｔｒ＝アドレスｗｒｉｔｅ＿ｐｔｒ−定数ｌｅｎとする（ステップＳ１３０９）。
【００７３】
プッシュ処理部１１０２は、閾値ｆｕｌｌ＿ｔｈｒｅｓ＜データ数ｎｕｍか否かを判断する（ステップＳ１３１０）。閾値ｆｕｌｌ＿ｔｈｒｅｓ＜データ数ｎｕｍでない場合（ステップＳ１３１０：Ｎｏ）、プッシュ処理部１１０２は、予告信号ｎｅａｒｌｙ＿ｆｕｌｌ＝０とし（ステップＳ１３１１）、一連の処理を終了する。閾値ｆｕｌｌ＿ｔｈｒｅｓ＜データ数ｎｕｍである場合（ステップＳ１３１０：Ｙｅｓ）、プッシュ処理部１１０２は、予告信号ｎｅａｒｌｙ＿ｆｕｌｌ＝１とし（ステップＳ１３１２）、一連の処理を終了する。
【００７４】
つぎに、図１１に示すポップ処理部１１０４は、ＲＡＭ１１０６に対するポップ処理を行う。出力データは、圧縮イベントデータと、カウンタ値ｃｎｔと、である。圧縮イベントデータは、データｗ０とデータｗ１を有する。データｗ０とデータｗ１とはそれぞれ３２ビット幅である。カウンタ値ｃｎｔは８ビット幅である。
【００７５】
図１４は、ポップ処理部が行うポップ処理手順例を示すフローチャートである。ポップ処理部１１０４は、データ数ｎｕｍ≦０か否かを判断する（ステップＳ１４０１）。データ数ｎｕｍ≦０であると判断された場合（ステップＳ１４０１：Ｙｅｓ）、ポップ処理部１１０４は、読み出し不可能エラーを出力し（ステップＳ１４０２）、一連の処理を終了する。
【００７６】
データ数ｎｕｍ≦０でないと判断された場合（ステップＳ１４０１：Ｎｏ）、ポップ処理部１１０４は、ＲＡＭ１１０６内のアドレスｒｅａｄ＿ｐｔｒが示す領域からデータｄを読み出し、データｗ０にデータｄを出力する（ステップＳ１４０３）。ポップ処理部１１０４は、ＲＡＭ１１０６内のアドレスｒｅａｄ＿ｐｔｒ＋１が示す領域からデータｄを読み出す（ステップＳ１４０４）。
【００７７】
ポップ処理部１１０４は、データｄ１に（データｄ  ＡＮＤ  ０ｘｆｆｆｆｆｆ００）の結果を出力する（ステップＳ１４０５）。ポップ処理部１１０４は、カウンタ値ｃｎｔに（データｄ  ＡＮＤ  ０ｘ００００００ｆｆ）の結果を出力する（ステップＳ１４０６）。ポップ処理部１１０４は、データ数ｎｕｍ＝データ数ｎｕｍ−２とする（ステップＳ１４０７）。
【００７８】
ポップ処理部１１０４は、アドレスｒｅａｄ＿ｐｔｒ＝アドレスｒｅａｄ＿ｐｔｒ＋２とする（ステップＳ１４０８）。ポップ処理部１１０４は、アドレスｒｅａｄ＿ｐｔｒ＞定数ｌｅｎか否かを判断する（ステップＳ１４０９）。アドレスｒｅａｄ＿ｐｔｒ＞定数ｌｅｎでない場合（ステップＳ１４０９：Ｎｏ）、ポップ処理部１１０４は、一連の処理を終了する。アドレスｒｅａｄ＿ｐｔｒ＞定数ｌｅｎである場合（ステップＳ１４０９：Ｙｅｓ）、ポップ処理部１１０４は、アドレスｒｅａｄ＿ｐｔｒ＝アドレスｒｅａｄ＿ｐｔｒ−定数ｌｅｎとし（ステップＳ１４１０）、一連の処理を終了する。
【００７９】
図１１に示すピーク処理部１１０３は、ポインタｒｅａｄ＿ｐｔｒを変化させずに、圧縮イベントキューであるＲＡＭ１１０６からデータを読み出す。入力データは、読み出し位置ｉである。出力データは、圧縮イベントデータと、カウンタ値ｃｎｔと、図１１に示すＲＡＭ１１０６のアドレスｐｔｒと、である。圧縮イベントデータは、データｗ０とデータｗ１を有する。データｗ０とデータｗ１とはそれぞれ３２ビット幅である。カウンタ値ｃｎｔは８ビット幅である。
【００８０】
図１５は、ピーク処理部が行うピーク処理手順例を示すフローチャートである。ピーク処理部１１０３は、読み出し位置ｉを受け付ける（ステップＳ１５０１）。ピーク処理部１１０３は、データ数ｎｕｍ≦ｉか否かを判断する（ステップＳ１５０２）。データ数ｎｕｍ≦ｉであると判断された場合（ステップＳ１５０２：Ｙｅｓ）、ピーク処理部１１０３は、読み出し不可能エラーを出力し（ステップＳ１５０３）、一連の処理を終了する。データ数ｎｕｍ≦ｉでないと判断された場合（ステップＳ１５０２：Ｎｏ）、ピーク処理部１１０３は、アドレスｐ＝アドレスｒｅａｄ＿ｐｔｒ＋ｉとする（ステップＳ１５０４）。
【００８１】
つぎに、ピーク処理部１１０３は、定数ｌｅｎ≦アドレスｐか否かを判断する（ステップＳ１５０５）。定数ｌｅｎ≦アドレスｐでないと判断された場合（ステップＳ１５０５：Ｎｏ）、ピーク処理部１１０３は、ステップＳ１５０７へ移行する。定数ｌｅｎ≦アドレスｐであると判断された場合（ステップＳ１５０５：Ｙｅｓ）、ピーク処理部１１０３は、アドレスｐ＝アドレスｐ−定数ｌｅｎとする（ステップＳ１５０６）。
【００８２】
ピーク処理部１１０３は、ＲＡＭ１１０６内のアドレスｐが示す領域からデータｄを読み出す（ステップＳ１５０７）。ピーク処理部１１０３は、データｗ０にデータｄを出力する（ステップＳ１５０８）。ピーク処理部１１０３は、ＲＡＭ１１０６内のアドレスｐ＋１が示す領域からデータｄを読み出す（ステップＳ１５０９）。ピーク処理部１１０３は、データｄ１に（データｄ  ＡＮＤ  ０ｘｆｆｆｆｆｆ００）の結果を出力する（ステップＳ１５１０）。
【００８３】
ピーク処理部１１０３は、カウンタ値ｃｎｔに（データｄ  ＡＮＤ  ０ｘ００００００ｆｆ）の結果を出力する（ステップＳ１５１１）。ピーク処理部１１０３は、アドレスｐｔｒにアドレスｐを出力し（ステップＳ１５１２）、一連の処理を終了する。
【００８４】
ＳＵＰ処理部１１０１は、スキャン（Ｓｃａｎ）処理とアップデート（Ｕｐｄａｔｅ）処理とプッシュ（Ｐｕｓｈ）処理を行う。ＳＵＰ処理部１１０１は、受け付けた圧縮イベントデータとカウンタ値とを含むデータを圧縮イベントキューへ投入する前に、圧縮イベントキューをスキャンする。ＳＵＰ処理部１１０１は、受け付けた圧縮イベントデータと同一の圧縮イベントデータがすでに圧縮イベントキューにあるか否かを判断する。
【００８５】
ＳＵＰ処理部１１０１は、すでに圧縮イベントキューにある場合、圧縮イベントキューに登録された圧縮イベントデータに対応するカウンタ値ｃｎｔをカウントアップし、新たに受け付けた圧縮イベントデータを圧縮イベントキューに投入しない。
【００８６】
入力データは、圧縮イベントデータと、カウンタ値ｃｎｔと、である。ここで入力データに含まれるカウンタ値ｃｎｔは「１」である。圧縮イベントデータは、データｗ０とデータｗ１を有する。データｗ０とデータｗ１とはそれぞれ３２ビット幅である。カウンタ値ｃｎｔは８ビット幅である。
【００８７】
図１６は、ＳＵＰ処理部が行うＳＵＰ処理手順例を示すフローチャートである。ＳＵＰ処理部１１０１は、圧縮イベントデータｉｗ０，ｉｗ１とカウンタ値ｉｃｎｔとを受け付ける（ステップＳ１６０１）。ＳＵＰ処理部１１０１は、読み出し位置ｉ＝０とする（ステップＳ１６０２）。ＳＵＰ処理部１１０１は、読み出し位置ｉ≦（データ数ｎｕｍ−２）であるか否かを判断する（ステップＳ１６０３）。
【００８８】
読み出し位置ｉ≦（データ数ｎｕｍ−２）であると判断された場合（ステップＳ１６０３：Ｙｅｓ）、ＳＵＰ処理部１１０１は、プッシュ処理を行い（ステップＳ１６０４）、一連の処理を終了する。読み出し位置ｉ≦（データ数ｎｕｍ−２）でないと判断された場合（ステップＳ１６０３：Ｎｏ）、ＳＵＰ処理部１１０１は、読み出し位置ｉを入力としてピーク処理を行い、データｗ０，ｗ１、カウンタ値ｃｎｔ、アドレスｐｔを取得する（ステップＳ１６０５）。
【００８９】
ＳＵＰ処理部１１０１は、データｉｗ０＝データｗ０、かつデータｉｗ１＝データｗ１であるか否かを判断する（ステップＳ１６０６）。データｉｗ０＝データｗ０でない、またはデータｉｗ１＝データｗ１でないと判断された場合（ステップＳ１６０６：Ｎｏ）、ＳＵＰ処理部１１０１は、ステップＳ１６０３へ戻る。データｉｗ０＝データｗ０、かつデータｉｗ１＝データｗ１であると判断された場合（ステップＳ１６０６：Ｙｅｓ）、ＳＵＰ処理部１１０１は、アドレスｐｔｒ＋１が示す領域にデータｉｗ１とカウンタ値（ｃｎｔ＋ｉｃｎｔ）を書き込む（ステップＳ１６０７）。そして、ＳＵＰ処理部１１０１は、一連の処理を終了する。
【００９０】
つぎに、データストア回路３０５と、２分探索木回路３０６と、カウンタ値テーブル回路３０７と、について説明する。
【００９１】
データストア回路３０５は、２分探索木回路３０６と、カウンタ値テーブル回路３０７と、を制御する。
【００９２】
２分探索木回路３０６は、第２記憶部１１２を有する。そして、２分探索木回路３０６は、２分探索木から、値が受け付け部１０１によって受け付けられた組み合わせた値に対応するノードを探索する。そして、２分探索木回路３０６は、探索したノードの値に関連付けられた情報を出力する探索部１０２である。情報は、例えば、上述したようにアドレスである。ここでは、エントリアドレスとも称する。
【００９３】
カウンタ値テーブルは、第１記憶部１１１のうち、出力されたエントリアドレスが示す領域に記憶された発生回数を更新する更新部１０３である。発生回数はカウンタ値とも称する。
【００９４】
また、２分探索木回路３０６は、ノードの探索中に、新たに組み合わせた値が受け付けられると、ノードの探索を中断する。そして、２分探索木回路３０６は、２分探索木のうち中断時において検出したノードの値に関連付けて記憶されたアドレスを出力する。そして、２分探索木は、新たに受け付けられた組み合わせた値に対応するノードを探索する。また、２分探索木回路３０６は、組み合わせた値に対応するノードの探索中に、２分探索木の深さが特定値となった場合に、ノードの探索を中断し、２分探索木のうち中断時において検出したノードの値に関連付けて記憶されたアドレスを出力する。中断時において検出したノードとは、中断時の着目ノードである。
【００９５】
ここで、図２に示した２分探索木とカウンタ値テーブルのデータ構造について説明する。
【００９６】
図１７は、２分探索木のデータ構造例を示す説明図である。図１７に示すＲＡＭ１７００は、２分探索木の構造のデータを記憶する第２記憶部１１２である。図１７に示すＲＡＭ１７００は、１ワードのビット幅が２８ビットであり、ワード数が５１２ワードである。ここでは、１ワードが１つのノードを表すため、ワード数がノード数であり、ノード数をＢＴＲＥＥ＿ＮＯＤＥ＿ＮＵＭと示す。
【００９７】
２分探索木の１つのノードあたりのデータ形式は、９ビットのノード番号ｐ０と９ビットのノード番号ｐ１と１０ビットのエントリアドレスとの全２８ビットである。ノード番号ｐ０は、０枝が示すノード番号である。ノード番号ｐ１は、１枝が示すノード番号である。ここで、ノード番号はノードを識別可能な番号であり、ノードの値であり、ＲＡＭ１７００のアドレスでもある。
【００９８】
ここで、テーブルエントリの数はＴＡＢＬＥ＿ＳＩＺＥと示す。テーブルエントリが存在しないことを表すための定数をＴＡＢＬＥ＿ＥＮＴＲＹ＿ＮＯＮＥと示す。ノードが存在しないことを意味する定数をＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥと示す。各値の一例は以下の通りである。
【００９９】
ＴＡＢＬＥ＿ＳＩＺＥ＝１０２４
ＴＡＢＬＥ＿ＥＮＴＲＹ＿ＮＯＮＥ＝１０２３
ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＵＭ＝５１２
ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥ＝５１１
【０１００】
ここで、ノード番号ｐ０とノード番号ｐ１とエントリアドレスｅｎｔｒｙとの初期値は以下の通りである。
ｐ０＝ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥ
ｐ１＝ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥ
ｅｎｔｒｙ＝ＴＡＢＬＥ＿ＥＮＴＲＹ＿ＮＯＮＥ
【０１０１】
図１８は、カウンタ値テーブルのデータ構造例を示す説明図である。ＲＡＭ１８００は、例えば、カウンタ値を記憶する第１記憶部１１１である。第１記憶部１１１は、カウンタ値テーブルとも称する。カウンタ値テーブルは、例えば、１ワードが３２ビットであり、１０２４ワード有する。テーブルエントリ１つあたりのデータ形式は、例えば、３２ビット幅のカウンタ値ｃｎｔである。カウンタ値ｃｎｔの初期値は０である。
【０１０２】
図１９は、２分探索木回路例を示す説明図である。２分探索木回路３０６は、２分探索処理部１９０１と、初期化処理部１９０２と、ノード割当処理部１９０３と、ダンプ処理部１９０４と、ＲＡＭ制御部１９０５と、ＲＡＭ１７００と、を有する。
【０１０３】
ＲＡＭ１７００は、２分探索木の構造のデータを格納する第２記憶部１１２である。ＲＡＭ制御部１９０５は、ＲＡＭ１７００からのデータの読み出し、ＲＡＭ１７００へのデータの書込を制御する。ＲＡＭ制御部１９０５は、フリーノードアドレスｂｔｒｅｅ＿ｎоｄｅ＿ｆｒｅｅを格納可能な制御用レジスタを有する。
【０１０４】
初期化処理部１９０２は、リセット信号を受け取ったときに、ＲＡＭ１７００の全ワードについて、ノード番号ｐ０とノード番号ｐ１とエントリアドレスｅｎｔｒｙと、を初期化する。
【０１０５】
また、２分探索処理部１９０１は、２分探索木から、値が受け付けた圧縮イベントデータに対応するノードを探索する。ノード割当処理部１９０３は、２分探索処理部１９０１によって圧縮イベントデータに対応するノードが見つからない場合、圧縮イベントデータまたは圧縮イベントデータの一部に対応する新たなノードを割り当てる処理を行う。
【０１０６】
ダンプ処理部１９０４は、ＲＡＭ１７００に格納された各ノードの値をダンプしてレポート生成部３０８に出力する処理を行う。
【０１０７】
図２０は、カウンタ値テーブル回路例を示す説明図である。カウンタ値テーブル回路３０７は、初期化処理部２００１と、テーブルエントリ割当処理部２００２と、ダンプ処理部２００３と、ＲＡＭ制御部２００４と、ＲＡＭ１８００と、を有する。
【０１０８】
ＲＡＭ１８００は、カウンタ値テーブルである。ＲＡＭ１８００は、圧縮イベントデータの各々に応じた圧縮イベントデータの発生回数を記憶する第１記憶部１１１である。
【０１０９】
ＲＡＭ制御部２００４は、ＲＡＭ１８００への書き込みや読み出しを制御する。また、ＲＡＭ制御部２００４は、フリーエントリアドレスｔａｂｌｅ＿ｆｒｅｅを格納可能な制御用レジスタを有する。フリーエントリアドレスｔａｂｌｅ＿ｆｒｅｅは、ＲＡＭ１８００のうち未使用の領域を示すアドレスのうちの先頭のアドレスである。
【０１１０】
テーブルエントリ割当処理部２００２は、２分探索木に含まれるノードに対応するテーブルエントリを割り当てる処理を行う。
【０１１１】
初期化処理部２００１は、リセット信号を受け取った時に、すべてのテーブルエントリを初期化する。
【０１１２】
ダンプ処理部２００３は、ＲＡＭ１８００に格納された各テーブルエントリの値をダンプしてレポート生成部３０８に出力する処理を行う。
【０１１３】
図２１は、データストア回路例を示す説明図である。データストア回路３０５は、カウンタ値テーブル回路３０７と２分探索木回路３０６とを制御する。データストア回路３０５は、例えば、２分探索木回路３０６によって出力されたエントリアドレスが示す第１記憶部１１１のうちの領域に記憶された発生回数を更新する更新部１０３である。データストア回路３０５は、テーブルインデックス計算部２１００を有する。
【０１１４】
図２２は、探索およびテーブル登録例を示す説明図である。ＲＡＭ１７００には、２分探索木の構造のデータが格納される。ＲＡＭ１８００では、アドレス「００００」〜「０００２」が示す各領域は使用状態であり、アドレス「０００３」以降のアドレスが示す各領域は未使用状態である。そのため、フリーエントリアドレスｔａｂｌｅ＿ｆｒｅｅは、「０００３」が設定される。
【０１１５】
データストア回路３０５は、ポップ処理部１１０４によってポップ処理を行わせることにより圧縮イベントキューから圧縮後のイベントデータとカウンタ値とを取得する。そして、データストア回路３０５は、取り出した圧縮後のイベントデータを検索キーとして２分探索処理部１９０１によって２分探索処理を実行する。具体的に、２分探索処理部１９０１は、例えば、圧縮後のイベントデータを検索キーとして２分探索木から検索キーに対応するノードを探索する。ここでは、説明の簡略化のために、圧縮後のイベントデータは、「１００１」とする。そして、カウンタ値は、「１」とする。
【０１１６】
まず、２分探索処理部１９０１は、ルートノードから順に圧縮後のイベントデータの先頭のビット「１」と一致するノード−１を探索する。つぎに、２分探索処理部１９０１は、「１０」と一致するノード−１０を探索する。ここで、２分探索処理部１９０１は、予告信号を受け付けたため、探索を中断する。そのため、２分探索処理部１９０１は、ノード−１０のノード番号を出力する。
【０１１７】
テーブルインデックス計算部２１００は、２分探索処理部１９０１によって出力されたノード番号に基づいてＲＡＭ１７００からノード番号に関連付けられたエントリアドレスｅｎｔｒｙを読み出す。テーブルインデックス計算部２１００は、読み出したエントリアドレスｅｎｔｒｙを出力する。
【０１１８】
テーブルインデックス計算部２１００は、エントリアドレスｅｎｔｒｙが未割当値ＴＡＢＬＥ＿ＥＮＴＲＹ＿ＮＯＮＥの場合、フリーポインタｔａｂｌｅ＿ｆｒｅｅに基づいて新たにテーブルエントリを割り当てる。テーブルインデックス計算部２１００は、新たにテーブルエントリを割り当てた後、フリーポインタを更新する。そして、テーブルインデックス計算部２１００は、新たに割り当てたエントリアドレスｅｎｔｒｙを出力する。
【０１１９】
データストア回路３０５は、ＲＡＭ１８００のうちエントリアドレスｅｎｔｒｙが示す領域に格納されたカウンタ値ｃｎｔ＿ｏｌｄを読み出す。そして、データストア回路３０５は、カウンタ値ｃｎｔ＿ｏｌｄに、ポップ処理によって得られたカウンタ値ｃｎｔを加算したカウンタ値を、ＲＡＭ１８００のうちエントリアドレスｅｎｔｒｙが示す領域に格納する。
【０１２０】
図２３および図２４は、２分探索処理部が行う２分探索処理手順例を示すフローチャートである。２分探索処理部１９０１は、ｎｏｄｅ＝０とする（ステップＳ２３０１）。２分探索処理部１９０１は、ｎｏｄｅ＿ｆｒｏｍ＝定数ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥにする（ステップＳ２３０２）。
【０１２１】
２分探索処理部１９０１は、ｗ０，ｗ１＝圧縮イベントデータとする（ステップＳ２３０３）。そして、２分探索処理部１９０１は、ｂｉ＝０とする（ステップＳ２３０４）。２分探索処理部１９０１は、閾値ｌｉｍｉｔ＝２０とする（ステップＳ２３０５）。２分探索木のノード数が増えてくると、２分探索木を実現するＲＡＭ１７００の使用容量が大きくなる。そこで、２分探索木のノードの深さに閾値ｌｉｍｉｔを設けることにより、ＲＡＭ１７００の使用容量の低減を図る。ＲＡＭ１７００の使用容量の低減を図ることにより、よりＲＡＭ１７００のサイズの縮小化を図ることができる。また、メモリ満杯エラーが発生した場合には、エラーの回復処理として閾値ｌｉｍｉｔを減らして再度実行することにしてもよい。これにより、メモリの使用容量の低減を図ることができる。また、２分探索木のルートノードからの探索中のノードまでのノード数に対して閾値を設けることにより、ＲＡＭ１７００の使用容量の低減を図ってもよい。
【０１２２】
２分探索処理部１９０１は、３６≦ｂｉか否かを判断する（ステップＳ２３０６）。３６≦ｂｉでないと判断された場合（ステップＳ２３０６：Ｎｏ）、２分探索処理部１９０１は、ｎｏｄｅ＿ｆｒｏｍを出力し（ステップＳ２３０７）、一連の処理を終了する。
【０１２３】
３６≦ｂｉであると判断された場合（ステップＳ２３０６：Ｙｅｓ）、２分探索処理部１９０１は、閾値ｌｉｍｉｔ＝０または予告信号ｎｅａｒｌｙ＿ｆｕｌｌ＝１であるか否かを判断する（ステップＳ２３０８）。つぎに、閾値ｌｉｍｉｔ＝０または予告信号ｎｅａｒｌｙ＿ｆｕｌｌ＝１である場合（ステップＳ２３０８：Ｙｅｓ）、２分探索処理部１９０１は、ｎｏｄｅを出力し（ステップＳ２３０９）、一連の処理を終了する。
【０１２４】
閾値ｌｉｍｉｔ＝０でなく、予告信号ｎｅａｒｌｙ＿ｆｕｌｌ＝１でない場合（ステップＳ２３０８：Ｎｏ）、２分探索処理部１９０１は、ステップＳ２４０１へ移行する。
【０１２５】
一方、ステップＳ２３０８のＹｅｓの場合のつぎに、２分探索処理部１９０１は、ＲＡＭ［ｎоｄｅ］を読み出し、［ｐ０，ｐ１，ｅｎｔｒｙ］＝ＲＡＭ［ｎоｄｅ］とする（ステップＳ２４０１）。ここでのＲＡＭは、ＲＡＭ１７００である。つぎに、２分探索処理部１９０１は、ｂ＝ビットベクタ［ｗ０，ｗ１］のＭＳＢ側から第ｂｉビットとする（ステップＳ２４０２）。
【０１２６】
２分探索処理部１９０１は、ｂ＝０か否かを判断する（ステップＳ２４０３）。ｂ＝０であると判断された場合（ステップＳ２４０３：Ｙｅｓ）、２分探索処理部１９０１は、ｎоｄｅ＿ｎｅｘｔ＝関数ｓｕｂ＿ｐｒｏｃ（ｐ０）とし（ステップＳ２４０４）、ステップＳ２４０６へ移行する。ｂ＝０でないと判断された場合（ステップＳ２４０３：Ｎｏ）、２分探索処理部１９０１は、ｎоｄｅ＿ｎｅｘｔ＝関数ｓｕｂ＿ｐｒｏｃ（ｐ１）とし（ステップＳ２４０５）、ステップＳ２４０６へ移行する。
【０１２７】
２分探索処理部１９０１は、ｎｏｄｅ＿ｆｒｏｍ＝ｎｏｄｅとする（ステップＳ２４０６）。２分探索処理部１９０１は、ｎоｄｅ＝ｎоｄｅ＿ｎｅｘｔとする（ステップＳ２４０７）。２分探索処理部１９０１は、ｂｉ＝ｂｉ＋１とする（ステップＳ２４０８）。２分探索処理部１９０１は、閾値ｌｉｍｉｔ＝閾値ｌｉｍｉｔ−１とし（ステップＳ２４０９）、ステップＳ２３０６へ戻る。
【０１２８】
図２５は、関数ｓｕｂ＿ｐｒｏｃ（ｐ）についての処理手順例を示すフローチャートである。２分探索処理部１９０１は、入力ｐを受け付ける（ステップＳ２５０１）。そして、２分探索処理部１９０１は、ｐ＝定数ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥか否かを判断する（ステップＳ２５０２）。ｐ＝定数ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥでないと判断された場合（ステップＳ２５０２：Ｎｏ）、２分探索処理部１９０１は、ステップＳ２５０６へ移行する。
【０１２９】
ｐ＝定数ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥであると判断された場合（ステップＳ２５０２：Ｙｅｓ）、２分探索処理部１９０１は、ｐ＝ノード割当処理部１９０３によるノード割当処理の結果とする（ステップＳ２５０３）。２分探索処理部１９０１は、ｐ＝定数ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥであるか否かを判断する（ステップＳ２５０４）。ｐ＝定数ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥであると判断された場合（ステップＳ２５０４：Ｙｅｓ）、２分探索処理部１９０１は、メモリ満杯エラーを出力し（ステップＳ２５０５）、一連の処理を終了する。
【０１３０】
ｐ＝定数ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥでないと判断された場合（ステップＳ２５０４：Ｎｏ）、２分探索処理部１９０１は、ｐを返し（ステップＳ２５０６）、一連の処理を終了する。
【０１３１】
図２６は、ノード割当処理部が行うノード割当処理手順例を示すフローチャートである。ノード割当処理部１９０３は、定数ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥ≦フリーノードアドレスｂｔｒｅｅ＿ｎоｄｅ＿ｆｒｅｅか否かを判断する（ステップＳ２６０１）。定数ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥ≦フリーノードアドレスｂｔｒｅｅ＿ｎоｄｅ＿ｆｒｅｅであると判断された場合（ステップＳ２６０１：Ｙｅｓ）、ノード割当処理部１９０３は、メモリ満杯エラーを出力し（ステップＳ２６０２）、一連の処理を終了する。
【０１３２】
定数ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥ≦フリーノードアドレスｂｔｒｅｅ＿ｎоｄｅ＿ｆｒｅｅでないと判断された場合（ステップＳ２６０１：Ｎｏ）、ノード割当処理部１９０３は、ｎｅｗ＿ｂｔｒｅｅ＿ｎоｄｅ＝フリーノードアドレスｂｔｒｅｅ＿ｎоｄｅ＿ｆｒｅｅとする（ステップＳ２６０３）。ノード割当処理部１９０３は、フリーノードアドレスｂｔｒｅｅ＿ｎоｄｅ＿ｆｒｅｅ＝フリーノードアドレスｂｔｒｅｅ＿ｎоｄｅ＿ｆｒｅｅ＋１とする（ステップＳ２６０４）。そして、ノード割当処理部１９０３は、ｎｅｗ＿ｂｔｒｅｅ＿ｎоｄｅを返し（ステップＳ２６０５）、一連の処理を終了する。
【０１３３】
テーブルエントリ割当処理部２００２によるテーブルエントリ割当処理は、ノード割当処理部１９０３によるノードの割当処理と同様の処理であるため、詳細な説明を省略する。
【０１３４】
図２７は、データストア回路が行うデータストア処理手順例を示す説明図である。データストア回路３０５は、圧縮イベントキューからポップ処理によってデータ（圧縮イベントデータ［ｗ０，ｗ１］，カウンタ値ｃｎｔ）を取り出す（ステップＳ２７０１）。データストア回路３０５は、圧縮イベントデータ［ｗ０，ｗ１］を入力として、テーブルインデックス計算処理を行い、エントリアドレスｅｎｔｒｙを得る（ステップＳ２７０２）。
【０１３５】
そして、データストア回路３０５は、ＲＡＭ１８００のうちエントリアドレスｅｎｔｒｙが示す領域に格納されたカウンタ値ｃｎｔ＿оｌｄを読み出す（ステップＳ２７０３）。つぎに、データストア回路３０５は、ＲＡＭ１８００のうちエントリアドレスｅｎｔｒｙが示す領域に、カウンタ値（ｃｎｔ＋ｃｎｔ＿оｌｄ）を書き込み（ステップＳ２７０４）、一連の処理を終了する。
【０１３６】
図２８は、テーブルインデックス計算部が行うテーブルインデックス計算処理手順例を示すフローチャートである。テーブルインデックス計算部２１００は、ｂｔｒｅｅ＿ｎоｄｅ＝２分探索処理の結果とする（ステップＳ２８０１）。テーブルインデックス計算部２１００は、［ｐ０，ｐ１，ｅｎｔｒｙ］＝ＲＡＭ［ｂｔｒｅｅ＿ｎоｄｅ］とする（ステップＳ２８０２）。ここでのＲＡＭは、ＲＡＭ１７００である。ステップＳ２８０２においては、例えば、テーブルインデックス計算部２１００が、ＲＡＭ１７００のうちｂｔｒｅｅ＿ｎоｄｅが示す領域に格納されたデータを、ｐ０，ｐ１，ｅｎｔｒｙそれぞれに代入する処理である。
【０１３７】
テーブルインデックス計算部２１００は、エントリアドレスｅｎｔｒｙ＝定数ＴＡＢＬＥ＿ＥＮＴＲＹ＿ＮＯＮＥか否かを判断する（ステップＳ２８０３）。エントリアドレスｅｎｔｒｙ＝定数ＴＡＢＬＥ＿ＥＮＴＲＹ＿ＮＯＮＥでないと判断された場合（ステップＳ２８０３：Ｎｏ）、テーブルインデックス計算部２１００は、ステップＳ２８０６へ移行する。エントリアドレスｅｎｔｒｙ＝定数ＴＡＢＬＥ＿ＥＮＴＲＹ＿ＮＯＮＥであると判断された場合（ステップＳ２８０３：Ｙｅｓ）、テーブルインデックス計算部２１００は、ステップＳ２８０４へ移行する。テーブルインデックス計算部２１００は、エントリアドレスｅｎｔｒｙ＝テーブルエントリ割り当て処理の結果とする（ステップＳ２８０４）。
【０１３８】
テーブルインデックス計算部２１００は、ＲＡＭ［ｂｔｒｅｅ＿ｎｏｄｅ］＝［ｐ０，ｐ１，ｅｎｔｒｙ］とする（ステップＳ２８０５）。ここでのＲＡＭは、ＲＡＭ１７００である。テーブルインデックス計算部２１００は、エントリアドレスｅｎｔｒｙを返し（ステップＳ２８０６）、一連の処理を終了する。
【０１３９】
つぎに、図３に示すレポート生成部３０８は、２分探索木のデータと発生回数とを集計して提示する出力部である。レポート生成部３０８は、例えば、第２記憶部１１２に記憶されたノードの値と、ノードの値に関連付けられた情報と、を取得する。レポート生成部３０８は、第１記憶部１１１に記憶された発生回数を取得する。レポート生成部３０８は、２分探索木に含まれるノードのうち値に情報が関連付けられたノードの各々について、ノードの値と、取得した発生回数のうちノードの値に関連付けられた情報が示す領域に格納された発生回数と、を関連付けて提示する。レポート生成部３０８は、２分探索木のデータと発生回数とを集計してレポートを出力する。
【０１４０】
図２９は、イベント発生例を示す説明図である。図２９の左側には、イベントフィルタ回路３０２から出力されたイベントデータを示す。そして、図２９の右側には、イベントデータがイベント圧縮回路３０３によって圧縮された後の圧縮イベントデータを示す。上述したように、ＴＹＰＥの値が「０」であれば、メモリ書き込みを示し、ＴＹＰＥの値が「１」であれば、メモリ読み出しを示す。図２９には、メモリ書き込みとメモリ読み出しとが６回発生した例を示す。以下では、図２９のイベントが発生しているときに、ＲＡＭ１７００とＲＡＭ１８００のデータを用いてレポート生成部３０８が行う処理を説明する。
【０１４１】
レポート生成部３０８は、ダンプ処理部１９０４によってＲＡＭ１７００のダンプデータを取得する。
【０１４２】
図３０は、２分探索木から得られるダンプデータ例を示す説明図である。図３０では、各ノードを「［ノード番号］  ノード番号ｐ０  ノード番号ｐ１  エントリアドレスｅｎｔｒｙ」によって表す。
【０１４３】
上述では、値が存在しない場合については、「５１１」や「１０２３」などを使って表していたが、図３０の例では、［−１］と表す。図３０によれば、エントリアドレスｅｎｔｒｙが設定されてあるノードが全体のノードに対して少ないことが判別可能である。具体的に、エントリアドレスｅｎｔｒｙが設定されてあるノードのノード番号は「２０」、「３７」、「４８」、「６４」、「８０」である。このことは、２分探索木のノード数と比較して、ＲＡＭ１８００はそれほど大容量でなくてもよいことを示している。
【０１４４】
また、レポート生成部３０８は、ダンプ処理部２００３によってＲＡＭ１８００のダンプデータを取得する。
【０１４５】
図３１は、カウンタ値テーブルから得られるダンプデータ例を示す説明図である。図３１では、「［  ］」によってエントリアドレスを表し、「［  ］」の隣の数値がカウンタ値を表す。フリーエントリアドレスｔａｂｌｅ＿ｆｒｅｅの値は５である。
【０１４６】
図３１によれば、例えば、ＲＡＭ１８００のうちアドレスが「０」の領域に格納されたカウンタ値は１であり、ＲＡＭ１８００のうちアドレスが「１」の領域に格納されたカウンタ値は２である。
【０１４７】
図３２は、２分探索木のダンプデータを木構造によって表した例を示す説明図である。図３２では、例えば、「［ｎ］」の場合、ｎがノード番号を表す。矢印の上の「０」が０枝を表し、矢印の上の「１」が１枝を表す。
【０１４８】
例えば、［０］から［２０］に至る枝のラベルを収集して２進ベクトルによって表すと、「０００１０００００１０…」となる。この２進ベクトルを１６進数によって表すと、「０ｘ＿１＿０＿４＿０＿０」となる。
【０１４９】
１６進数によって表された数値が、再構築された圧縮イベントデータである。上述例における圧縮イベントキューに投入される際の圧縮イベントデータのデータ幅は、３６ビットであるが、再構築された圧縮イベントデータのデータ幅は、２０ビットである。このように、データストアの途中において予告信号ｎｅａｒｌｙ＿ｆｕｌｌの発生または閾値ｌｉｍｉｔにより圧縮イベントデータの情報量が低減する。図３２には、閾値ｌｉｍｉｔを２０として実行したときの結果を示す。
【０１５０】
図３３は、イベント種別およびカウンタ値への対応付け例を示す説明図である。図３３における表記について説明する。「［ｎ］＝＝＝＞（ｐ：ｑ）」の場合を例に挙げて説明すると、ｎがノード番号である。ここでのｐがノードに関連付けられているエントリアドレスである。ここでのｑが、エントリアドレスが示す領域に格納されているカウンタ値である。ルートノードから各ノードまでに至る枝ラベルから圧縮イベントデータを再構築することができる。また、圧縮および並び替えを戻すことによって圧縮前のイベントデータが得られる。ここでは、例えば、テーブルに格納する前の圧縮イベントデータは３６ビットであるが、新たに戻した場合の圧縮イベントデータは２０ビットである。
【０１５１】
例えば、「［２０］＝＝＝＞（０：１）」の場合、再構築された圧縮イベントデータは「０ｘ＿１＿０＿４＿０＿０」である。また、圧縮および並び替えを戻した場合におけるイベントデータでは、読み出しのイベントであることを示し、ＰＣの値が「０ｘ＊００＊＊」であり、ＡＤが「０ｘ４０＊＊」であることを示す。「＊」は、不確定値を表し、情報量が低減したために値を決められないことを示す。
【０１５２】
例えば、「［８０］＝＝＝＞（４：１）」の場合、再構築された圧縮イベントデータは「０ｘ＿１＿８＿０＿０＿０」である。また、圧縮および並び替えを戻した場合におけるイベントデータでは、読み出しのイベントであることを示し、ＰＣの値が「０ｘ＊８０＊＊」であり、ＡＤが「０ｘ００＊＊」であることを示す。
【０１５３】
例えば、「［３７］＝＝＝＞（１：２）」の場合、再構築された圧縮イベントデータは「０ｘ＿０＿０＿０＿０＿０」である。また、圧縮および並び替えを戻した場合におけるイベントデータでは、書き込みのイベントであることを示し、ＰＣの値が「０ｘ＊００＊＊」であり、ＡＤが「０ｘ００＊＊」であることを示す。ここでは、ｑの値が「２」であるため、このイベントは、２回発生していることを示す。
【０１５４】
図３４は、レポート出力例を示す説明図である。図３４の例では、［ノード番号］、イベント内訳については、２進数表記（１６進数表記）、ｃｏｕｎｔがカウンタ値である。
【０１５５】
［２０］を例に挙げると、ＰＣの値が「０ｘ＊００＊＊」においてアドレスが「０ｘ４０＊＊」である領域へのメモリ書き込みのイベントが１回発生したことを示す。
【０１５６】
また、［４］を例に挙げると、ＰＣとアドレスが不明であるが、メモリ書き込みのイベントが計２回発生したことを示す。
【０１５７】
また、［２１］を例に挙げると、ＰＣとアドレスが不明であるが、メモリ読み出しのイベントが計４回発生したことを示す。
【０１５８】
また、［３］を例に挙げると、読み出しまたは書き込みのいずれかは不明であるが、メモリアクセスのイベントが計６回発生することを示す。
【０１５９】
（レポート生成部３０８が行うレポート生成処理手順例）
図３５は、レポート生成部が行うレポート生成処理手順例を示すフローチャートである。レポート生成部３０８は、２分探索木回路３０６にダンプ処理を行わせ、データを取得する（ステップＳ３５０１）。ここで取得されるデータは、ｂｔｒｅｅ［］と表す。つぎに、レポート生成部３０８は、カウンタ値テーブル回路３０７にダンプ処理を行わせ、データを取得する（ステップＳ３５０２）。ここで取得されるデータは、ｔａｂｌｅ［］と表す。
【０１６０】
つぎに、レポート生成部３０８は、集計処理を行う（ステップＳ３５０３）。そして、レポート生成部３０８は、集計結果を出力し（ステップＳ３５０４）、一連の処理を終了する。
【０１６１】
図３６は、図３５で示した集計処理（ステップＳ３５０３）の詳細な説明を示すフローチャートである。レポート生成部３０８は、着目ノード番号ｎоｄｅ＝ルートノード番号とする（ステップＳ３６０１）。ここで、ルートノード番号は「０」である。レポート生成部３０８は、要素数３６の配列変数ｅｂのメモリ確保を行う（ステップＳ３６０２）。要素数３６の配列変数ｅｂのメモリ確保とは、Ｃ言語などのｃｈａｒ型を例に挙げると、「ｃｈａｒ  ｅｂ［３６］」のように配列変数ｅｂの領域が確保されることである。
【０１６２】
レポート生成部３０８は、配列変数ｅｂを初期化する（ステップＳ３６０３）。配列変数ｅｂには、再構築された圧縮イベントデータが格納される。初期化するとは、具体的に、例えば、レポート生成部３０８は、ｅｂ［０］＝２、ｅｂ［１］＝２，ｅｂ［２］＝２とする。ここでは、ｅｂ［ｉ］によって１桁の値を表し、０，１，不確定値＊の３種類の値を格納するために、０，１と、不確定値＊に２を用いる。
【０１６３】
レポート生成部３０８は、ｅｂ＿ｔａｉｌ＝−１とする（ステップＳ３６０４）。レポート生成部３０８は、関数ｒｅｐоｒｔ＿ｓｕｂ（ｎоｄｅ，ｅｂ，ｅｂ＿ｔａｉｌ）の呼び出しを行い（ステップＳ３６０５）、一連の処理を終了する。
【０１６４】
図３７および図３８は、関数ｒｅｐｏｒｔ＿ｓｕｂの詳細な説明を示すフローチャートである。レポート生成部３０８は、着目ノード番号ｎоｄｅ＝定数ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥか否かを判断する（ステップＳ３７０１）。定数ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥは、ノードが存在しないことを表す数である。着目ノード番号ｎоｄｅ＝定数ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥであると判断された場合（ステップＳ３７０１：Ｙｅｓ）、レポート生成部３０８は、０を返し（ステップＳ３７０２）、一連の処理を終了する。
【０１６５】
着目ノード番号ｎоｄｅ＝定数ＢＴＲＥＥ＿ＮＯＤＥ＿ＮＯＮＥでないと判断された場合（ステップＳ３７０１：Ｎｏ）、レポート生成部３０８は、［ｐ０，ｐ１，ｅｎｔｒｙ］＝ｂｔｒｅｅ［ｎоｄｅ］とする（ステップＳ３７０３）。つぎに、レポート生成部３０８は、配列変数ｅｂ［ｅｂ＿ｔａｉｌ＋１］＝０とする（ステップＳ３７０４）。
【０１６６】
レポート生成部３０８は、ｎｕｍ０＝関数ｒｅｐоｒｔ＿ｓｕｂ（ｐ０，ｅｂ，ｅｂ＿ｔａｉｌ＋１）とする（ステップＳ３７０５）。ステップＳ３７０５における関数ｒｅｐоｒｔ＿ｓｕｂの呼び出しは再帰呼び出しである。レポート生成部３０８は、ｅｂ［ｅｂ＿ｔａｉｌ＋１］＝１とする（ステップＳ３７０６）。レポート生成部３０８は、ｎｕｍ１＝ｒｅｐоｒｔ＿ｓｕｂ（ｐ１，ｅｂ，ｅｂ＿ｔａｉｌ＋１）とする（ステップＳ３７０７）。ステップＳ３７０７における関数ｒｅｐоｒｔ＿ｓｕｂの呼び出しは再帰呼び出しである。
【０１６７】
つぎに、レポート生成部３０８は、エントリアドレスｅｎｔｒｙ＝定数ＴＡＢＬＥ＿ＥＮＴＲＹ＿ＮＯＮＥか否かを判断する（ステップＳ３８０１）。定数ＴＡＢＬＥ＿ＥＮＴＲＹ＿ＮＯＮＥは、上述したようにテーブルエントリが存在しないことを表すための定数である。エントリアドレスｅｎｔｒｙ＝定数ＴＡＢＬＥ＿ＥＮＴＲＹ＿ＮＯＮＥでないと判断された場合（ステップＳ３８０１：Ｎｏ）、レポート生成部３０８は、データ数ｎｕｍ＝ｔａｂｌｅ［ｅｎｔｒｙ］とし（ステップＳ３８０２）、ステップＳ３８０４へ移行する。
【０１６８】
エントリアドレスｅｎｔｒｙ＝定数ＴＡＢＬＥ＿ＥＮＴＲＹ＿ＮＯＮＥであると判断された場合（ステップＳ３８０１：Ｙｅｓ）、レポート生成部３０８は、データ数ｎｕｍ＝０とする（ステップＳ３８０３）。そして、レポート生成部３０８は、ｅｂ［ｅｂ＿ｔａｉｌ＋１］＝２とする（ステップＳ３８０４）。レポート生成部３０８は、ｃоｕｎｔ＝ｎｕｍ＋ｎｕｍ０＋ｎｕｍ１とする（ステップＳ３８０５）。そして、レポート生成部３０８は、ｃоｕｎｔとｅｂ［３６］をレポート出力する（ステップＳ３８０６）。そして、レポート生成部３０８は、ｃоｕｎｔを返し（ステップＳ３８０７）、一連の処理を終了する。
【０１６９】
以上説明したように、イベント計数装置１００は、イベントの発生回数を記憶する領域のアドレスを管理する２分探索木からイベントデータのノード探索中に新たなイベントデータを受け付けると、探索を中断する。そして、イベント計数装置１００は、中断時に検出したノードに応じたアドレスが示す領域の発生回数を更新する。これにより、観測対象のハードウェア回路の動作速度への影響に支障を与えることなく、イベントの発生回数を確実に計数しつつ観測対象のハードウェア回路を高速に動作させることができる。
【０１７０】
また、中断しない場合やすべてのイベントデータを数える回路によって計数した場合などと比較して、イベントデータの精度は低下するが、イベントの発生回数を高速に計数することができる。イベントの発生が少ないような処理速度に余裕がある場合には、より多くの情報を記憶し、イベントの発生が多いような処理速度に余裕がない場合には、情報を省略して記録することができる。メモリアクセスを例に挙げると、イベントの発生が増減する場合とは、例えば、外部からの入力されたデータや割り込み発生などの要因によりメモリアクセスの場所や頻度が増減する場合である。このように、同じイベントが常時一定の頻度で発生するわけではない。たまたま処理速度に余裕がなくなって情報が省略されてしまったとしても、イベントの発生回数の傾向をおおまかに把握することは可能である。
【０１７１】
また、イベント計数装置１００は、キューから取得したイベントデータに対応するノードの探索中に、キューに格納されたイベントデータの数が所定数以上となった場合、ノード探索を中断し、中断時のノードに対応するアドレスが示す領域の発生回数を更新する。
【０１７２】
また、イベント計数装置１００は、出力されたアドレスが示す領域に記憶された発生回数を１加算することにより発生回数を更新する。これにより、発生回数を計数することができる。
【０１７３】
また、イベント計数装置１００は、イベントデータに発生回数を関連付けてキューに記憶させる場合、新たに受け付けたイベントデータがすでにキューにある場合、すでにキューに格納されたイベントデータに関連付けられた発生回数を更新する。これにより、イベントデータに対応するノードの探索回数の低減を図ることができる。したがって、より高速にイベントの発生回数を計数することができる。
【０１７４】
また、イベント計数装置１００は、各信号値に対応する重要度に基づいて、各信号値を組み合わせた値を生成し、生成した組み合わせた値を受け付け、組み合わせた値のビットの並びに基づき組み合わせた値に対応するノードを探索する。これにより、ノードの探索が中断されても、組み合わせた値のうちより重要度の高いビットに対応するノードの発生回数を更新することが可能となる。したがって、情報量が削減されても、より重要度の高い情報を残すことができる。
【０１７５】
また、イベント計数装置１００は、各信号値に対応する重要度に基づいて、各信号値から選択した信号値を組み合わせた値を生成し、生成した組み合わせた値を受け付ける。これにより、重要な情報を残しつつ、情報を削減することが可能となる。したがって、キュー、２分探索木、カウンタ値テーブルなどのメモリの使用容量の低減を図ることができる。
【０１７６】
また、イベント計数装置１００は、イベントデータのうち、複数のイベントのうち指定されたイベントに応じたイベントデータを受け付ける。これにより、利用者が所望のイベントに応じたイベントの発生回数を計数しつつ、キュー、２分探索木、カウンタ値テーブルなどのメモリの使用容量の低減を図ることができる。
【０１７７】
また、イベント計数装置１００は、圧縮イベントデータに対応するノードの探索中に、２分探索木の深さが特定値となった場合に、ノードの探索を中断し、２分探索木のうち中断時において検出したノードの値に関連付けて記憶されたアドレスを出力する。このように、２分探索木の深さを制限することにより、圧縮イベントデータの情報量は低減するが、メモリの使用容量を制限でき、メモリ使用容量の低減を図ることができる。特定値は、例えば、閾値ｌｉｍｉｔとも称する。
【０１７８】
また、イベント計数装置１００は、２分探索木からダンプ処理して得た情報と、カウンタ値テーブルからダンプ処理して得た情報と、に基づいて、ノードの値の各々について発生回数を関連付けて提示する。これにより、利用者は、提示された情報を見て、イベントデータの発生回数の傾向を把握することが可能となる。
【０１７９】
また、イベント計数装置１００は、ノードの探索中に、イベントデータの全部または一部に対応するノードがない場合、あらたにノードを割り当てる。
【０１８０】
また、イベント計数装置１００は、生成されたノードの値が組み合わせた値の全部に対応する場合、またはノードの探索が中断した際の着目ノードが生成されたノードである場合に、カウンタ値テーブルに領域を確保する。これにより、発生回数をカウントすべきイベントデータの全部または一部に応じた領域だけをカウンタ値テーブル内に確保することができる。したがって、すべてのノードの値に対応する領域をカウンタ値テーブル内に確保する場合よりも、メモリの使用容量の低減を図ることができる。
【０１８１】
また、本実施の形態で説明したイベント計数装置１００は、スタンダードセルやストラクチャードＡＳＩＣなどのＡＳＩＣやＦＰＧＡなどのＰＬＤによっても実現することができる。具体的には、例えば、上述したイベント計数装置１００の機能や記憶部がＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）記述によって機能定義され、そのＨＤＬ記述が論理合成されてＡＳＩＣやＰＬＤに与える。これにより、イベント計数装置１００が製造されてもよい。イベント計数装置１００の機能や記憶部とは、例えば、受け付け部１０１から更新部１０３や第１記憶部１１１および第２記憶部１１２などである。
【０１８２】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１８３】
（付記１）観測対象の回路に含まれる各信号線を流れる各信号値を組み合わせた値の各々に応じた前記組み合わせた値の発生回数を記憶する第１記憶部と、
前記組み合わせた値の全部または一部に対応する各ノードの各々の値に、前記第１記憶部のうち、前記値に対応する前記組み合わせた値に応じた前記発生回数を記憶する領域を示す情報を関連付ける２分探索木の構造のデータを記憶する第２記憶部と、
前記回路の動作中に前記各信号線を流れる各信号値の変化に応じて、前記各信号線を流れる各信号値を組み合わせた値を順次受け付ける受け付け部と、
前記２分探索木から、前記値が前記受け付け部によって受け付けられた前記組み合わせた値に対応するノードを探索し、探索した前記ノードの値に関連付けられた前記情報を出力する探索部と、
前記探索部によって出力された前記情報が示す前記第１記憶部のうちの前記領域に記憶された前記発生回数を更新する更新部と、
を有し、
前記探索部は、
前記受け付け部によって受け付けられた前記組み合わせた値に対応する前記ノードの探索中に、前記受け付け部によって新たに前記組み合わせた値が受け付けられると、前記ノードの探索を中断し、前記２分探索木のうち中断時において検出したノードの値に関連付けて記憶された前記情報を出力し、新たに受け付けられた前記組み合わせた値に対応する前記ノードを探索する、
ことを特徴とするイベント計数装置。
【０１８４】
（付記２）前記受け付け部は、
前記組み合わせた値を受け付けた順に記憶し、記憶した順に前記組み合わせた値を取り出すことが可能なキュー構造の第３記憶部を有し、
前記探索部は、
前記第３記憶部に最も先に記憶された前記組み合わせた値を取得し、取得した前記組み合わせた値に対応する前記ノードを探索し、前記ノードの探索中に、前記第３記憶部に記憶された前記組み合わせた値の数が所定数以上である場合に、前記ノードの探索を中断し、前記２分探索木のうち中断時において検出したノードの値に関連付けて記憶された前記情報を出力し、前記第３記憶部に最も先に記憶された前記組み合わせた値を新たに取得し、新たに取得した前記組み合わせた値に対応する前記ノードを探索する、
ことを特徴とする付記１に記載のイベント計数装置。
【０１８５】
（付記３）前記更新部は、
前記探索部によって出力された前記情報が示す前記第１記憶部のうちの前記領域に記憶された前記発生回数に１を加算することによって前記発生回数を更新する、
ことを特徴とする付記１または２に記載のイベント計数装置。
【０１８６】
（付記４）前記受け付け部は、
前記組み合わせた値に応じた発生回数を前記組み合わせた値に関連付けて前記第３記憶部に格納し、
新たに前記組み合わせた値を受け付けると、新たに受け付けた前記組み合わせた値と同一値が前記第３記憶部に記憶されているかを探索し、
受け付けた前記組み合わせた値と同一値が検出された場合、受け付けた前記組み合わせた値を前記第３記憶部に記憶せず、前記第３記憶部に記憶された同一値に関連付けられた前記発生回数を更新し、
受け付けた前記組み合わせた値と同一値が検出されなかった場合、前記第３記憶部に、受け付けた前記組み合わせた値と、受け付けた前記組み合わせた値に応じた発生回数と、を関連付けて格納し、
前記更新部は、
前記探索部によって出力された前記情報が示す領域に記憶された前記発生回数を、前記第３記憶部に記憶された前記組み合わせた値に関連付けられた前記発生回数に基づき更新する、
ことを特徴とする付記２に記載のイベント計数装置。
【０１８７】
（付記５）前記受け付け部は、
前記各信号値に対応する重要度に基づいて、前記各信号値を組み合わせた値を生成し、生成した前記組み合わせた値を受け付け、
前記探索部は、
前記受け付け部によって受け付けられた前記組み合わせた値のビットの並びに基づいて、前記２分探索木から、前記値が前記組み合わせた値に対応するノードを探索する、
ことを特徴とする付記１〜４のいずれか一つに記載のイベント計数装置。
【０１８８】
（付記６）前記受け付け部は、
前記各信号値に対応する重要度に基づいて、前記各信号値から選択した信号値を組み合わせた値を生成し、生成した前記組み合わせた値を受け付ける、
ことを特徴とする付記５に記載のイベント計数装置。
【０１８９】
（付記７）前記受け付け部は、
前記回路の複数のイベントの各々について前記各信号線を流れる前記各信号値を組み合わせた値を生成し、生成した前記組み合わせた値のうち、前記複数のイベントのうち指定されたイベントに応じた前記組み合わせた値を受け付ける、
ことを特徴とする付記１〜６のいずれか一つに記載のイベント計数装置。
【０１９０】
（付記８）前記探索部は、
受け付けられた前記組み合わせた値に対応するノードの探索中に、前記２分探索木の深さが特定値となった場合に、前記ノードの探索を中断し、前記２分探索木のうち中断時において検出したノードの値に関連付けて記憶された前記情報を出力する、
ことを特徴とする付記１〜７のいずれか一つに記載のイベント計数装置。
【０１９１】
（付記９）前記第２記憶部に記憶された前記ノードの値と、前記ノードの値に関連付けられた前記情報と、を取得し、前記第１記憶部に記憶された前記発生回数を取得し、前記２分探索木に含まれるノードのうち前記値に前記情報が関連付けられた前記ノードの各々について、前記ノードの値と、取得した前記発生回数のうち前記ノードの値に関連付けられた前記情報が示す領域に格納された前記発生回数と、を関連付けて提示する出力部を有することを特徴とする付記１〜８のいずれか一つに記載のイベント計数装置。
【０１９２】
（付記１０）前記探索部は、
受け付けられた前記組み合わせた値に対応するノードの探索中に、前記値が前記組み合わせた値の全部または一部に対応するノードがない場合、前記組み合わせた値の全部または一部に値が対応するノードを生成する、
ことを特徴とする付記１〜９のいずれか一つに記載のイベント計数装置。
【０１９３】
（付記１１）前記更新部は、
前記探索部によって新たに前記ノードが生成された場合において、生成された前記ノードの値が前記組み合わせた値の全部に対応する場合、または前記ノードの探索が中断され、生成された前記ノードが中断時において検出した前記ノードである場合に、生成された前記ノードの値に対応する前記組み合わせた値の全部または一部に応じた発生回数を記憶する領域を前記第１記憶部に確保し、確保した前記領域に生成された前記ノードの値に対応する前記組み合わせた値の全部または一部に応じた発生回数を記憶し、
前記探索部は、
新たに生成された前記ノードの値に、前記更新部によって確保された前記領域を示す情報を関連付けて前記第２記憶部に記憶する、
ことを特徴とする付記１０に記載のイベント計数装置。
【０１９４】
（付記１２）観測対象の回路に含まれる各信号線を流れる各信号値を組み合わせた値の各々に応じた前記組み合わせた値の発生回数を記憶する第１記憶部と、
前記組み合わせた値の全部または一部に対応する各ノードの各々の値に、前記第１記憶部のうち、前記値に対応する前記組み合わせた値に応じた前記発生回数を記憶する領域を示す情報を関連付ける２分探索木の構造のデータを記憶可能な第２記憶部と、を有するイベント計数装置）が、
前記回路の動作中に前記各信号線を流れる各信号値の変化に応じて、前記各信号線を流れる各信号値を組み合わせた値を順次受け付け、
前記２分探索木から、前記値が受け付けた前記組み合わせた値に対応するノードを探索し、探索した前記ノードの値に関連付けられた前記情報を出力し、
出力した前記情報が示す前記第１記憶部のうちの前記領域に記憶された前記発生回数を更新する、
処理を行い、
前記探索する処理では、
受け付けた前記組み合わせた値に対応する前記ノードの探索中に、新たに前記組み合わせた値が受け付けられると、前記ノードの探索を中断し、前記２分探索木のうち中断時において検出したノードの値に関連付けて記憶された前記情報を出力し、前記２分探索木から新たに受け付けられた前記組み合わせた値に対応する前記ノードを探索する、
ことを特徴とするイベント計数方法。
【符号の説明】
【０１９５】
１００  イベント計数装置
１０１  受け付け部
１０２  探索部
１０３  更新部
１１１  第１記憶部
１１２  第２記憶部
１２１  回路
３０１  イベント符号化回路
３０２  イベントフィルタ回路
３０３  イベント圧縮回路
３０４  圧縮イベントキュー回路
３０５  データストア回路
３０６  ２分探索木回路
３０７  カウンタ値テーブル回路
３０８  レポート生成部
７００  比較回路
７０１  レジスタ
１１０１  ＳＵＰ処理部
１１０２  プッシュ処理部
１１０３  ピーク処理部
１１０４  ポップ処理部
１１０５，１９０５，２００４  ＲＡＭ制御部
１１０６，１７００，１８００  ＲＡＭ
１９０１  ２分探索処理部
１９０２，２００１  初期化処理部
１９０３  ノード割当処理部
１９０４，２００３  ダンプ処理部
２００２  テーブルエントリ割当処理部
２１００  テーブルインデックス計算部
【図１】
0006617466.tif 000002
【図２】
0006617466.tif 000003
【図３】
0006617466.tif 000004
【図４】
0006617466.tif 000005
【図５】
0006617466.tif 000006
【図６】
0006617466.tif 000007
【図７】
0006617466.tif 000008
【図８】
0006617466.tif 000009
【図９】
0006617466.tif 000010
【図１０】
0006617466.tif 000011
【図１１】
0006617466.tif 000012
【図１２】
0006617466.tif 000013
【図１３】
0006617466.tif 000014
【図１４】
0006617466.tif 000015
【図１５】
0006617466.tif 000016
【図１６】
0006617466.tif 000017
【図１７】
0006617466.tif 000018
【図１８】
0006617466.tif 000019
【図１９】
0006617466.tif 000020
【図２０】
0006617466.tif 000021
【図２１】
0006617466.tif 000022
【図２２】
0006617466.tif 000023
【図２３】
0006617466.tif 000024
【図２４】
0006617466.tif 000025
【図２５】
0006617466.tif 000026
【図２６】
0006617466.tif 000027
【図２７】
0006617466.tif 000028
【図２８】
0006617466.tif 000029
【図２９】
0006617466.tif 000030
【図３０】
0006617466.tif 000031
【図３１】
0006617466.tif 000032
【図３２】
0006617466.tif 000033
【図３３】
0006617466.tif 000034
【図３４】
0006617466.tif 000035
【図３５】
0006617466.tif 000036
【図３６】
0006617466.tif 000037
【図３７】
0006617466.tif 000038
【図３８】
0006617466.tif 000039