(57)【要約】【課題】組み込み機器に搭載されているメモリ（ＤＲＡＭコントローラ）及びＤＭＡコントローラを用いて、簡易な構成でスムーズにトレース収集をすることを目的とする。【解決手段】トレース対象のトランザクションをトレースしたトレースデータを、バス２を介して収集し、ＤＲＡＭ１３に記憶するＬＳＩ１００において、バッファを備え、トレースデータを取得し、取得したトレースデータをバッファに記録するトレースバッファ１２と、バッファからトレースデータを読み出すリクエストを、トレースバッファ１２をバスターゲットとしてバス２に発行するＤＭＡコントローラ１１とを備え、トレースバッファ１２は、ＤＭＡコントローラ１１により発行されたリクエストに対応して、トレースデータをバス２に送出し、ＤＭＡコントローラ１１は、バス２に送出されたトレースデータをＤＲＡＭ１３にＤＭＡ転送する。【選択図】図１
2014211813.tif 000002
【特許請求の範囲】
【請求項１】
バスを備え、トレース対象のトランザクションをトレースしたトレースデータを、前記バスを介して取得し、メモリに記憶するトレース収集回路において、
前記メモリを制御するメモリ制御部と、
前記バスを制御するバスコントローラと、
バッファを備え、前記トレースデータを取得し、取得した前記トレースデータを前記バッファに記録するトレースバッファ回路と、
前記バッファから前記トレースデータを読み出すリードリクエストを、前記トレースバッファ回路をバスターゲットとして前記バスに発行する転送コントローラと
を備え、
前記トレースバッファ回路は、
前記転送コントローラにより発行された前記リードリクエストに対応して、前記バッファに記録された前記トレースデータをリードデータとして前記バスに送出し、
前記転送コントローラは、
前記バスに送出された前記リードデータを前記メモリに書き込むライトリクエストを、前記メモリ制御部をバスターゲットとして前記バスに発行する転送を実行し、
前記メモリ制御部は、
前記転送コントローラにより発行された前記ライトリクエストに対応して、前記リードデータを前記メモリに記録する
ことを特徴とするトレース収集回路。
【請求項２】
前記転送コントローラは、ＤＭＡ（Ｄｉｒｅｃｔ・Ｍｅｍｏｒｙ・Ａｃｃｅｓｓ）転送を行うＤＭＡコントローラであることを特徴とする請求項１に記載のトレース収集回路。
【請求項３】
前記トレースバッファ回路は、前記バッファに記録された少なくともひとつの前記トレースデータがリード単位のサイズを満たした場合に、前記リードデータとして送出し、
前記バスコントローラは、前記トレースデータがリード単位のサイズを満たすまでの間に、前記バスがデットロックを起こさないように前記バスを制御する
ことを特徴とする請求項１または２に記載のトレース収集回路。
【請求項４】
前記転送コントローラは、複数のチャネルを有し、
前記トレースバッファ回路は、前記複数のチャネルのそれぞれに対応する複数の前記バッファを備え、
前記転送コントローラは、前記複数のチャネルのチャネル毎に前記転送を実行する
ことを特徴とする請求項１〜３のいずれかに記載のトレース収集回路。
【請求項５】
ＣＰＵからの命令に基づいて、トレース対象のトランザクションのトレース可否を判定する判定部を備えることを特徴とする請求項１〜４のいずれかに記載のトレース収集回路。
【請求項６】
前記判定部は、トレース対象とする必要のないトランザクションの種類が予め設定されたトレース除外情報を記憶装置に備え、前記トレース除外情報に基づいて、トレース対象のトランザクションのトレース可否を判定することを特徴とする請求項５に記載のトレース収集回路。
【請求項７】
前記トレースデータを前記メモリに記録するために発生したトランザクションが後続のトランザクションの動作を遅延させた場合に、前記バスの待ち時間を計測する待ち時間カウンタを備えることを特徴とする請求項１〜６のいずれかに記載のトレース収集回路。
【請求項８】
前記トレースデータを前記メモリに記録するために発生したメモリアクセスがビジー状態の場合に、前記メモリアクセス以外のアクセスが遅延する場合に、遅延状態のクロックサイクル数を計測するサイクル数カウンタを備えることを特徴とする請求項１〜７のいずれかに記載のトレース収集回路。
【請求項９】
前記バスコントローラは、前記バスに発行されたリクエストの順序を変えて実行するアウトオブオーダ方式で動作することを特徴とする請求項１〜８のいずれかに記載のトレース収集回路。
【請求項１０】
前記トレースバッファ回路は、前記リードデータがリード単位を満たしていることを通知するリード可能通知を前記バスコントローラに通知し、
前記転送コントローラは、前記バスに前記リードリクエストを発行するためのバス権を得る前に、前記リードリクエストの発行の対象である前記トレースバッファ回路を識別する識別情報を、前記バスコントローラに通知し、
前記バスコントローラは、前記転送コントローラから通知された識別情報により識別される前記トレースバッファ回路が前記リード可能通知を通知している場合に、前記転送コントローラに対してバス権を与える
ことを特徴とする請求項１〜９のいずれかに記載のトレース収集回路。
【請求項１１】
前記トレースバッファ回路は、前記バスのトレース対象を選択するためのバスアドレスの範囲を示すレジスタを備え、前記レジスタに示された前記バスアドレスに基づいたデータを前記トレースデータに含めて前記メモリに記録することを特徴とする請求項１〜１０のいずれかに記載のトレース収集回路。
【請求項１２】
前記トレースバッファ回路は、前記バッファに記録されたデータ量を記録するカウンタと、データのシフト回路とを備え、前記トレースデータを前記バッファに転送する前に、前記カウンタに記録されたデータ量に基づいて、前記トレースデータに対して前記シフト回路によりシフト操作を行なうことを特徴とする請求項１〜１１のいずれかに記載のトレース収集回路。
【請求項１３】
前記トレースバッファ回路は、前記バッファに記録したトレースデータと新たに記録するトレースデータとの差分を計算し、計算した差分に基づいて前記新たに記録するトレースデータに圧縮し、前記バッファに記録することを特徴とする請求項１〜１２のいずれかに記載のトレース収集回路。
【請求項１４】
前記トレースバッファ回路は、符号化によるデータ圧縮方法を利用した演算回路を備え、前記トレースデータに対し前記演算回路により圧縮を実行して圧縮後トレースデータを生成し、生成した前記圧縮後トレースデータと、圧縮前のトレースデータとのいずれかを選択して前記バッファに記録することを特徴とする請求項１〜１２のいずれかに記載のトレース収集回路。
【請求項１５】
前記トレースバッファ回路は、前記トレースデータの少なくとも一部と前記バッファに記憶された辞書データとを用いたデータ圧縮方法を適用した回路を備え、頻度測定を行わずに出現順に辞書に登録しつつ圧縮対象データを出力し、辞書のエントリ数をカウンタで計数し、辞書があふれたら辞書データをトレースデータの一部として出力し、辞書の容量分をバッファの空き容量計算に使用し、古い辞書データの出力中にも新たな辞書の更新と参照を可能にする前記バッファに記録することを特徴とする請求項１〜１２のいずれかに記載のトレース収集回路。
【請求項１６】
前記トレースバッファ回路は、多項式を生成する複数の回路を備え、前記トレースデータを前記複数の回路のいずれかに基づいて暗号化し、暗号化した暗号化後のトレースデータと暗号化するために用いた前記複数の回路のうちのいずれかの回路の情報とを含めて前記バッファに記録することを特徴とする請求項１〜１２のいずれかに記載のトレース収集回路。
【請求項１７】
前記トレースバッファ回路は、予め設定されている前記トレースデータの取得を制限する保護機能を解除する解除部を有し、前記解除部により前記保護機能を解除してから、トレース起動を行なうことを特徴とする請求項１〜１５のいずれかに記載のトレース収集回路。
【請求項１８】
バスとメモリと前記メモリを制御するメモリ制御部とを備え、トレース対象のトランザクションをトレースしたトレースデータを、前記バスを介して取得し、前記メモリに記憶するトレース収集回路のトレース収集方法において、
バッファを備えるトレースバッファ回路が、前記トレースデータを取得し、取得した前記トレースデータを前記バッファに記録し、
コントローラが、前記バッファから前記トレースデータを読み出すリードリクエストを、前記トレースバッファ回路をバスターゲットとして前記バスに発行し、
前記トレースバッファ回路が、前記コントローラにより発行された前記リードリクエストに対応して、前記バッファに記録された前記トレースデータをリードデータとして前記バスに送出し、
前記コントローラが、前記バスに送出された前記リードデータを前記メモリに書き込むライトリクエストを、前記メモリ制御部をバスターゲットとして前記バスに発行し、
前記コントローラにより発行された前記ライトリクエストに対応して、前記リードデータを前記メモリに記録することを特徴とするトレース収集回路のトレース収集方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、トレース収集回路及びトレース収集方法に関する。特に、ＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）のバスをトレースするトレース収集方法に関する。
【背景技術】
【０００２】
コンピュータの性能向上のためにプログラム挙動を解析する手法として、１９７０年代には、バスをプロービングしてアドレスなどを記憶媒体に記録する方法が開示されている（例えば、特許文献１参照）。
最近は、上記の原理を応用し、市販のロジックアナライザのプローブを接続し、そのメモリに記録したデータ（以下「トレース」と呼ぶ）を別コンピュータで解析することで専用の装置なしに上記の方法と同様なことが実現できている。
【０００３】
また、信号を直接モニタせずにコンピュータ内で発生するキャッシュミスなどの事象をプログラムから選択指定してカウントしてその発生回数を読み出すことにより動作のボトルネックを調査する回路と手法が特許文献２で開示され、非特許文献１とマイクロプロセッサ製品ＭＰＣ７５０で公知となっている（以下、「パフォーマンスカウンタ」と呼ぶ）。
【０００４】
一方、半導体の進歩により集積度が飛躍に伸びた結果、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置、処理装置、演算装置ともいう）、キャッシュメモリ、メモリコントローラ、数十Ｋｂｙｔｅから数ＭｂｙｔｅレベルにいたるＲＡＭ（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）、一部の入出力装置、バスなどをワンチップに搭載するＳｏＣ（ｓｙｓｔｅｍ・ｏｎ・ａ・ｃｈｉｐ）が使われるようになってきた。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第３５８８８３７号明細書
【特許文献２】米国特許第５５５７５４８号明細書
【特許文献３】特開２００１−１０９６４３号公報
【特許文献４】特開２００６−３１８１７２号公報
【非特許文献】
【０００６】
【非特許文献１】「ＭＰＣ７５０  ＲＩＳＣ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  Ｕｓｅｒ’ｓ  マニュアル」（モトローラ社１９９７年）  ｐ．１１−１〜１１−１２
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＳｏＣが使われるようになった結果、システム全体の性能を決めるキャッシュミス動作、メモリや入出力装置のアクセスもＳｏＣ内部で行われ、外部に出ているバスやＬＳＩピンの観測結果からこれらの事象を知ることはきわめて困難になってきた。
【０００８】
性能分析ではなく、プログラムデバッグの観点からも同様な課題が発生し、それを解決または緩和する手法が開示されている。
まず、プログラムを止めた状態でＣＰＵやメモリの内容を読み出す機能としてＪＴＡＧを使用したデバッグ手法が一般的である。これは、リアルタイム動作が必要な多くの組み込み機器では、継続動作ができないという課題を持っている。
【０００９】
次に、内部の重要な信号を高速な信号を用いてＬＳＩ外に出力する方法があり、特許文献３でも既存技術として紹介されている。この方法は、バッファリングをしても、（周波数×ピン数）＜（平均の信号変化周波数×ビット数）の条件からはずれると圧縮しない限り情報をロスするかサンプル程度の情報しか得られないという課題がある。
【００１０】
この課題を解決する方法として、ＬＳＩ内部にメモリを持ち、事象の発生はメモリにいったん書き込み、後で時間をかけてＪＴＡＧ（Ｊｏｉｎ  Ｔｅｓｔ  Ａｃｔｉｏｎ  Ｇｒｏｕｐ）やイーサネット（登録商標）などで読み出す方法がある。この場合、メモリのチップ面積が大きくなるため、ＬＳＩに内蔵した主記憶用のＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を分割してそこに事象の記録結果をＤＭＡ（Ｄｉｒｅｃｔ・Ｍｅｍｏｒｙ・Ａｃｃｅｓｓ）を使って書き込む方法があり特許文献４に開示されている。
【００１１】
これらの手法は、高機能・高性能な組み込み機器では、その機器の処理能力の向上の結果、ピン出力方式では事象の帯域の増大に対応できないという課題、また、ＳＲＡＭ方式では、その容量が小さく格納しきれないという課題が顕著になる。
性能分析に上記手法を用いるには、ＲＡＭが数百Ｋｂｙｔｅ〜数十Ｍｂｙｔｅ必要であり、チップコストと性能上、チップ外部のＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）に事象の発生の結果を蓄える必要が出てきた。
【００１２】
性能分析のために、専用のＤＲＡＭを用い、ＤＲＡＭのアクセスのために専用ピンを用意すると、ＬＳＩチップ単価の上昇を招く。
また、ピンを他の目的のピンと兼用し切り替える方法は、ＤＤＲ（Ｄｏｕｂｌｅ  Ｄａｔａ  Ｒａｔｅ）、ＤＤＲ２、ＤＤＲ３とＤＲＡＭの信号振幅が小さくなりその電気特性がきめ細かくなってきているため、困難である。
ＤＲＡＭ自体をトレースにも共用し、ＤＲＡＭコントローラを本来の機能とこのトレース結果出力用にそれぞれ持つと、ピンを駆動するドライバへの入力をそれらの間で調停する必要が生じ、配線遅延が増大し、またＤＲＡＭコントローラ回路が２倍になるという課題が発生する。また、トレースデータをＤＲＡＭコントローラにバースト転送できる専用のＤＭＡ回路も必要となる。
【００１３】
１組のＤＲＡＭ素子に本来のアクセスとトレースのデータアクセスを共存させるには、本来の機能として存在するＤＲＡＭコントローラを共通に用いて、また、これも本来ある汎用的なＤＭＡコントローラを用い、トレース結果をＤＲＡＭにＤＭＡ転送させる原理が比較的容易に思いつく。しかし、それには克服すべきいくつかの課題がある。
【００１４】
１つ目の課題は、トレース結果をバッファリングした塊をＤＭＡコントローラがバス経由で読み出し、それをまたバス経由でＤＲＡＭへ書き込むという処理を繰り返すことになるが、ＤＭＡ動作でトレースのバッファに読み出しに行ったがデータ量がバスのバースト転送サイズに達しないため、そのサイズになるまで更なるバス事象発生を待ち続ける。しかし、この転送ができないために後続のバス転送やＤＭＡ転送が待ち状態に入りデットロック起こす場合がある。
【００１５】
２つ目の課題は、トレース対象のデータ総量が元々わからないことである。ＤＲＡＭの書き込み領域のサイズをＤＭＡで指定するが、実際の事象発生数はそれより小さいかもしれず、ＤＭＡコントローラは、終了条件がわからず待ち続ける可能性がある。
【００１６】
３つ目の課題は、トレースを行わないときに比べてトレースした場合にはＤＲＡＭへのアクセスが増え、ＤＲＡＭの帯域とバスの帯域を圧迫し、トレースのＤＲＡＭ出力が事象発生に追いつかなくなるバッファの「オーバラン」と呼ばれる現象を起こすことである。
オーバランはトレースのＤＲＡＭ書き込みの優先度を通常のアクセスに比べて低い優先度で行うためにまず発生する。固定的に高い優先度にするとオーバランはなくてもリアルタイム処理が間に合わなくなる。それらの緩和には、バッファ残量を見て動的に制御する古典的な優先度制御方法をこのトレースに適用できる。
特許文献３には、このような優先度制御に関して事象発生元のＣＰＵを止める技術が開示されているが、その手法は汎用的かつ十分に緩和できるものではない。特許文献（３）では、ＣＰＵ負荷に限定して言及している。
【００１７】
４つ目の課題は、オーバランやリアルタイム性に影響はないものの、トレースを採取したことにより、システム全体の動作が本来の動作より遅くなり分析結果の誤差が大きくなることである。
【００１８】
この発明は、上記のような課題を解決するためになされたもので、組み込み機器に搭載されているＤＲＡＭコントローラ、ＤＭＡコントローラを本来の動作のほかにトレース出力の目的に使用できるようにするＬＳＩに搭載した回路とその使用方法である。
【課題を解決するための手段】
【００１９】
本発明に係るトレース収集回路は、バスを備え、トレース対象のトランザクションをトレースしたトレースデータを、前記バスを介して取得し、メモリに記憶するトレース収集回路において、
前記メモリを制御するメモリ制御部と、
前記バスを制御するバスコントローラと、
バッファを備え、前記トレースデータを取得し、取得した前記トレースデータを前記バッファに記録するトレースバッファ回路と、
前記バッファから前記トレースデータを読み出すリードリクエストを、前記トレースバッファ回路をバスターゲットとして前記バスに発行する転送コントローラと
を備え、
前記トレースバッファ回路は、
前記転送コントローラにより発行された前記リードリクエストに対応して、前記バッファに記録された前記トレースデータをリードデータとして前記バスに送出し、
前記転送コントローラは、
前記バスに送出された前記リードデータを前記メモリに書き込むライトリクエストを、前記メモリ制御部をバスターゲットとして前記バスに発行する転送を実行し、
前記メモリ制御部は、前記転送コントローラにより発行された前記ライトリクエストに対応して、前記リードデータを前記メモリに記録することを特徴とする。
【発明の効果】
【００２０】
本発明に係るトレース収集回路によれば、トレース回路が、取得したトレースデータをバッファに記録し、ＤＭＡコントローラが、トレース回路をバスターゲットとしてトレースデータのリードリクエストをバスに発行する構成を有しているので、組み込み機器に搭載されているメモリ（ＤＲＡＭコントローラ）及びＤＭＡコントローラを用いて、簡易な構成でスムーズにトレース収集をすることができる。
【図面の簡単な説明】
【００２１】
【図１】実施の形態１に係るＬＳＩ１００の構成図。
【図２】実施の形態１に係るトライステート回路を使わないゲート構成のバスの具体構成例を示す図。
【図３】実施の形態１に係るＤＭＡコントローラ１１の動作を説明するための図。
【図４】実施の形態１に係るシングルバッファ動作の簡単な例を示す図。
【図５】実施の形態１に係るパフォーマンスカウンタ７０の構成を示す図。
【図６】実施の形態１に係るトレースバッファの構成及び動作を説明するための図。
【図７】実施の形態１に係るバッファ用のＲＡＭに書き込むトレースデータの一例を示す図。
【図８】実施の形態１に係るＤＭＡコントローラ１１の状態遷移を示す図。
【図９】実施の形態１に係るデットロックの発生の様子を示す図。
【図１０】実施の形態１に係るデットロックを回避する様子を示す図。
【図１１】実施の形態１に係る転送単位データ９０にダミーデータを付加した状態を示す図。
【図１２】実施の形態１に係るトレース要否の一例を示す図。
【図１３】実施の形態１に係るトレースにおける時刻データの記録方法について示す図。
【図１４】実施の形態１に係る時刻情報取得の回路例を示す図。
【図１５】実施の形態１に係るトレース動作対象を除外した待ち状態をカウントする回路例を示す図。
【図１６】実施の形態２に係るバス調停回路を示す図。
【図１７】実施の形態２に係る図１６の回路を用いて、デットロックを回避する様子を示す図。
【図１８】実施の形態３に係るＤＭＡコントローラ１１の状態遷移を示す図。
【図１９】実施の形態５に係る事象データ９１を示す図。
【図２０】実施の形態６に係る１つの事象データ９１がトレースバッファ１２への書き込み単位と異なる一例を示す図。
【図２１】（ａ）は実施の形態６に係る事象データ９１の書き込み回路の一例を示す図であり、（ｂ）は実施の形態６に係る事象データ９１の書き込み回路の他例を示す図。
【図２２】実施の形態６に係る転送単位を跨いで事象データ９１を詰める例を示す図。
【図２３】実施の形態７に係るトレースデータの格納方法として圧縮した例を示し、（ａ）は圧縮したトレースデータの構成を示す図であり、（ｂ）〜（ｅ）は圧縮として差分方式の一例を示す図。
【図２４】実施の形態７に係るトレース差分計算機構の一例を示す図。
【図２５】実施の形態８に係る圧縮方式を説明するための図。
【図２６】実施の形態９に係る圧縮対象のトレースデータを３２ビット幅としたときの圧縮方式の例を示した図。
【図２７】実施の形態１０に係るビット反転のパターンを生成多項式を循環させることにより切り替える方式を示す図。
【図２８】実施の形態１１に係るトレースデータのリバースエンジニアリングを防ぐ方式を示す図。
【発明を実施するための形態】
【００２２】
実施の形態１．
図１は、本実施の形態に係るＬＳＩ１００の構成図である。ＬＳＩ１００は、回路の一例である。
図１において、ＬＳＩ１００は、バス２を中心に、バス２の動作を起動するバスイニシエータ３、その起動に対してサービスをするバスターゲット４、バスを制御するバスコントローラ５、ＣＰＵ６、キャッシュメモリ７を中心に構成される。
また、その他に、図中に番号は付与していないが、ＬＳＩ１００に内蔵されたメモリ、入出力装置（Ｉ／Ｏ）、外部バスとのインターフェイス回路等がある。
【００２３】
図１に示すように、バスイニシエータ３には、ＣＰＵブリッジ３ａ、ＤＭＡコントローラ１１（転送コントローラの一例）などがある。
バスターゲット４には、ＤＲＡＭコントローラ１０（メモリ制御部の一例），ＳＲＡＭコントローラ１０ａ、Ｉ／Ｏブリッジ４ａ、トレースバッファ１２（トレースバッファ回路の一例）などがある。ＤＲＡＭコントローラ１０は、ＤＲＡＭ１３（メモリの一例）を制御する。
【００２４】
図１の矢印はコマンド発行の流れを示している。また、図示はしていないが、クロック生成回路、リセット回路、割り込み制御回路等も、ＬＳＩ１００に含まれる。
【００２５】
図２は、トライステート回路を使わないゲート構成のバスの具体構成例を示す図である。
図２に示すように、２ａはアドレスとコマンド、２ｂはライトデータ、２ｃはリードデータを示す。応答信号や各種有効信号の記載は省略している。矢印はそれぞれの流れを、台形は選択回路を示す。
【００２６】
再び図１に戻り説明する。
バスコントローラ５は、各バスイニシエータ３やバスターゲット４から信号を受け取り、バスの調停とバス動作に必要な選択信号の駆動をする。
各バスイニシエータ３は、バスリクエスト、コマンド、アドレス、ライトデータを送信し、リードデータと応答を受信する。
各バスターゲット４は、調停されたコマンドとアドレスを受信し、ライト動作では受信したライトデータをメモリにライトまたは下位のバスに伝送する。リード動作では、メモリから読みだしたデータまたは下位バスのデータをリードデータとしてバスに返送する。バス２がアウトオブオーダ制御のときには、バスコントローラ５の調停に従いリードデータを送出する。
【００２７】
ＣＰＵ６は、命令とデータをキャッシュメモリ７とＣＰＵブリッジ３ａ（バスイニシエータ３）を介してそれぞれのバスターゲット４にアクセスする。通常はキャッシュメモリ７にコピーを蓄えて高速動作を行う。
【００２８】
また、ＬＳＩ１００は、バスターゲット機能を持つＤＲＡＭコントローラ１０を備える。
ＤＲＡＭコントローラ１０は、バス２からのリクエストをバッファリングして、ＤＲＡＭ１３のＲＡＳ、ＣＡＳ、ＷＥ、ＣＳなどの信号を生成し、アドレスとともにＬＳＩ１００外部のＤＲＡＭ１３を起動し、ライトデータを駆動する。
【００２９】
また、ＤＲＡＭコントローラ１０は、タイミングを見てリードデータをサンプルし、コントローラ内にバッファリングしてバスに返送する。ＤＲＡＭのバンクとデータラインに関するビジー管理、リフレッシュ制御も行う。特に、ＤＤＲ方式では、スループットが高い割にアクセスレーテンシが遅いため、バースト転送を行いかつ複数アクセスをバッファリングしてパイプライン処理または並列処理する。
【００３０】
ＤＭＡコントローラ１１は、バスイニシエータ機能を持つＤＭＡコントローラである。プログラムから指定された２組のアドレス（転送元、転送先）とデータ転送長に対し、バスまたはターゲットが扱えるデータ長の単位でバスを介してリードとライト動作を繰り返す。ＤＭＡコントローラ１１には、起動とその転送情報とをＣＰＵ６から指示するためにターゲット機能も備わっている。
【００３１】
トレースバッファ１２は、トレース対象となるバス信号やバスに接続されてない個別信号を選択し、トレース結果を外部のＤＲＡＭ１３に転送する準備としてバッファリングを行う。本実施の形態では、トレースバッファ１２は、バスのイニシエータではなくターゲットである。トレースバッファ１２は、バッファ用のＲＡＭ（一時バッファＲＡＭ５０）（図７参照）を備える。一時バッファＲＡＭ５０はバッファの一例である。
【００３２】
次に、本実施の形態の基礎となるＬＳＩの性能分析技術の動作について説明する。
ＣＰＵ６からメモリアクセスした場合には、キャッシュメモリ７がライトバック方式でありヒットする場合は、バスイニシエータ３（ＣＰＵブリッジ３ａ）にはリクエストが出ない。ミスした場合、キャッシュ禁止アクセス、コピーバックのライトアクセスが出る。Ｉ／Ｏアクセス動作のときはＣＰＵブリッジ３ａを介してバス２にリクエストが出る。
【００３３】
ＣＰＵのクロック周波数はバスや各メモリに比べて高い周波数で動作し、その性能差はキャッシュメモリ７により吸収している。そのため、キャッシュメモリ７にヒットする限りは高速に動作する。しかし、ミスが多発する場合や、キャッシュアクセスを禁止したメモリやＩ／Ｏへのアクセスが想定より多い場合には、ＣＰＵ動作が待たされシステム全体の性能が低下する。
そこで、バス上にリクエストとして現れたアドレスをトレースして、それを別コンピュータで解析することによりその低下原因を究明し、プログラムの改善やＬＳＩ１００の構成やキャッシュメモリ７の改良を行う。アドレスを見ることによりＲＡＭの種類やＩ／Ｏの種類の情報も判る。
【００３４】
図３は、ＤＭＡコントローラ１１の動作を説明するための図である。
ＤＭＡコントローラ１１には、あらかじめプログラムからＤＭＡコントローラ１１内の記憶素子に転送指示情報が格納されている。転送指示情報とは、転送元アドレス（ａ）、転送先アドレス（ｂ）、転送データ長（ｃ）である。
図３に示すように、ＤＭＡコントローラ１１は、転送指示情報である転送元アドレス（ａ）、転送先アドレス（ｂ）、転送データ長（ｃ）に基づき、バスとターゲットが扱える転送単位（図２における「ｄ」）ごとのバス動作としてリードとライトとを繰り返す。
【００３５】
図４は、シングルバッファ動作の簡単な例を示す図である。
通常は、全データの転送が完了するか、異常状態が発生するか、プログラムから停止指令が指示されるまでこの動作を繰り返す。リードの転送単位が２×ｄで、ライトの転送単位がｄの場合はリード、ライト、ライト、リード、ライト、ライトという順で動作する。
また、バス２から見ると通常、他のイニシエータの動作と入り乱れてＤＭＡ動作が行われる。
ＤＭＡコントローラ同士は互いに独立して動作する。図示はしていないが、ＤＭＡコントローラには１個のコントローラが複数のチャネルを持ち、見掛け上複数のＤＭＡコントローラに相当する機能を持つものもある。その場合は、時分割でチャネルを切り替え、バス動作上は複数チャネル間の動作がパイプライン動作してオーバラップし、また、順不同に転送処理がおこなわれるアウトオブオーダ動作をする。
【００３６】
図５は、パフォーマンスカウンタ７０の構成を示す図である。
ＣＰＵ６以外のバスイニシエータ３に関してもバス２をトレースすることによりＣＰＵ同様にアクセス挙動が判る。バスコントローラ５には、パフォーマンスカウンタ７０を内蔵しており、それは、バスアクセス回数を、選択回路７２に指定した条件で絞り込んでカウントを行う。このパフォーマンスカウンタ７０の例を図５に示す。
【００３７】
パフォーマンスカウンタ７０は、カウンタ７１を備える。クロックとリセットは省略して記載している。また、パフォーマンスカウンタ７０は、条件を選択する選択回路７２、何を選択するか指定するレジスタ（選択指定レジスタ７３）を備える。選択回路７２には、選択される信号群７４が入力される。
その信号群７４には、バス２のコマンドの種類、イニシエータ、ターゲット、ターゲット内のアドレスなどがあり、その信号群７４から選択回路７２により選択された信号がカウンタ７１でカウントされることにより統計値としてそれらの回数を知ることができる。バス２でなく個別信号の場合もある。このカウンタ７１に変化・記録された統計値を、割り込みなどの一定時間ごとにプログラムが読み出し、メモリ上に格納することにより時系列的な挙動把握ができる。
しかし、数十マイクロ秒以下の分解能を得るのは困難であり、またその事象発生原因の推定には情報が不足する。
【００３８】
次に、本実施の形態に係るＬＳＩ１００（トレース収集回路）のトレース収集方式の動作を説明する。本実施の形態に係るＬＳＩ１００では、トレース結果をＤＭＡ転送するにあたり、トレースバッファ１２は自らバス動作の起動を行うバスイニシエータ３ではなく、バスイニシエータ３からの要求で動作するバスターゲット４であることが特徴となっている。
【００３９】
トレースの開始は、ＤＭＡコントローラ１１に転送データの総長とトレース格納先の先頭を示すＤＲＡＭ１３のアドレスを指定する。転送元アドレスは、トレースバッファ１２を示すアドレスを指定する。
【００４０】
トレースが開始されると、まず、ＤＭＡコントローラ１１を起動するレジスタ（図示なし）のビットを１にする。次に、図６に示すトレースバッファ１２内のトレースイネーブルビット４９を１にする。
【００４１】
ＤＭＡコントローラ１１は、通常は、プログラムによりＣＰＵからのレジスタ書き込みによる起動指示に従い、バスコントローラ５にバス権を求めるリクエストを発行する。
バスコントローラ５は、他のバスイニシエータ３のリクエストとＤＭＡコントローラ１１のリクエストとの調停を行い、ＤＭＡコントローラ１１にバス権を与える。
【００４２】
ＤＭＡコントローラ１１は、トレースバッファ１２をバスターゲット４として、データ長が固定長ｄのバースト転送のリードコマンドを発行する。
【００４３】
図６は、トレースバッファ１２の構成及び動作を説明するための図である。
トレースバッファ１２は、トレース起動を受けて、以下のように動作する。
図６に示すように、トレースバッファ１２は、トレース候補信号４０の中から、選択指定信号４３に従い、トレース対象となるトレース候補信号４０の一部である有効信号４１ａをサンプルする。サンプルした有効信号４１ａが有効ならば、選択された対象信号４１を、バッファ用のＲＡＭ（一時バッファＲＡＭ５０）に書き込む。
事象発生判定部５９は、選択された対象信号４１と有効信号４１ａとを入力し、事象発生か否かを判定し、事象判定結果信号４４をバッファ管理部５１に出力する。
このバッファ用のＲＡＭ（一時バッファＲＡＭ５０）は、ライトポインタ４５とリードポインタ４６を持つサイクルバッファ構成で、ライトとリードを同時に行える。ＷＥ信号４７は、一時バッファＲＡＭ５０への書き込みを直接指示する。タイミング信号４８は、データの長さを知るコマンドと、データ転送との同期をとるための信号である。
【００４４】
図７は、バッファ用のＲＡＭ（一時バッファＲＡＭ５０）に書き込むトレースデータの一例を示す図である。
図７に示すように、事象データ９１（トレースデータの一例）が各事象の記録単位（リード単位）である。事象データ９１の括弧内の数字はビット長を示す。これを複数個まとめた転送単位データ９０（リードデータの一例）が、ＤＭＡコントローラ１１への送信単位となる。
【００４５】
図６に示すトレースバッファ１２のバッファ管理部５１は、これらのポインタの関係から読みだし可能なデータ量を計算し、それがバス転送量ｄ以上ならば、バス２にデータを返送する。データがｄに満たない場合は、データが必要量に達するまで待ち、その後リードデータを返送する。
【００４６】
図８は、本実施の形態に係るＤＭＡコントローラ１１の状態遷移を示す図である。
ここでは、転送元アドレス（Ａ）、転送先アドレス（Ｂ）、転送データ長（Ｃ）とする。
ＤＭＡコントローラ１１は、図８に示す状態遷移をとり、起動後は（６０）に遷移してバス権を得てリードリクエスト（６１）を発行、リードデータが返ったら（６２）（６３）と遷移し、バスコントローラ５にバス権を求め、今度はＤＲＡＭに対し、バースト転送のライトコマンドを発行し、受信したリードデータを渡す。
ＤＭＡコントローラ１１は、このライトが受けつけられたら、（６４）に遷移して転送先アドレス（Ｂ）をｄだけ加算し、転送長（Ｃ）をｄだけ減算する。ＤＭＡコントローラ１１は、Ｃがゼロになるまで、この一連の処理（６１，６２，６３，６４）を繰り返す。
【００４７】
図８の（６４）におけるＡ＋＝ｄは、本実施の形態では、トレースデータ転送時には転送元はトレースバッファ１２が対象のため、ｄ＝０として実行される。
このＤＭＡ転送では転送元はバッファでありそのアドレスは意味がない。ＤＭＡコントローラ１１に転送元のアドレスが固定またはインクリメントしないというモード設定を行う、トレースバッファが転送元の場合はインクリメントしない、またはトレースバッファを意味するアドレス空間がインクリメントされてもその範囲を示すように大きな領域を持つ、などの機能を用いて転送元アドレスが意味を持たないようにしている。
【００４８】
次に、本実施の形態に係るＬＳＩ１００（トレース収集回路）のトレース収集方式の動作とその効果を説明する。
【００４９】
まず１つ目の課題であるデットロックは、順序通りにバス動作するインオーダバスで発生する。デットロックが発生する理由は以下の通りである。
（１）トレースデータが揃わないのでリードデータを返送できない。
（２）そのため次のバストランザクションが前のトランザクション終了を待ち続ける場合、または、パイプライン動作のためその次が待たされることはないが、さらにその次のトランザクション発行ができない。
（３）その結果トレース対象の事象が増加しない。
【００５０】
以上のような（１）から（３）の経過を経て、同じ状態が継続することにより、デットロックが発生する。
図９は、デットロックの発生の様子を示す図である。
図９では、ＤＭＡ−２がトレースデータの転送用で、ＤＭＡ−１が通常のデータ転送である。
図９に示すように、ＤＭＡ−２においてトレースデータ転送長以下のためリードデータを返送できず待ち状態となっているので、ＤＭＡ−１において、前のデータ転送が未完了のためバスを使用できず、デットロックとなっている。
【００５１】
本実施の形態に係るＬＳＩ１００のバス構造は、アウトオブオーダで順不同にリードデータを返送し、トランザクションもアウトオブオーダで完了するものとしている。このため、図９に示すようなデットロックは発生しない。
アウトオブオーダでデータを返す場合は、データ転送のリクエストをバスターゲット４が上げ、それらのうちの１つをバスコントローラ５が選択して転送許可を与える。バスターゲット４は、データとともに受信するバスイニシエータ３の識別子と、複数トランザクションを発行できる場合にはトランザクションの識別子とを併せて送信する。
バスの規約として受信バッファに空きがなくてもバスイニシエータ３がバス２にコマンド発行できる場合には、バスターゲット４はリクエストを上げるときにバスイニシエータ３の識別子も知らせ、バスコントローラ５はバスイニシエータ３のバッファ空き状態を応答可否条件に入れて、リードデータ返送のバス使用許可を与える。アウトオブオーダバス自体は既知の技術である。
【００５２】
図１０は、本実施の形態において、デットロックを回避する様子を示す図である。
上記のような手法を組み合わせることにより、デットロックを回避できる様子を図１０に示す。
図１０においても、ＤＭＡ−２がトレースデータの転送用で、ＤＭＡ−１が通常のデータ転送である。リクエストの順番にしか動作できない図９のインオーダ方式では４回目のバス動作が起動されたが、ＤＭＡ−２の４回目とＤＭＡ−１のＫ＋３回目がハングする。
図１０のアウトオブオーダ方式では、Ｋ＋３回目とＫ＋４回目がＤＭＡ−２を追い越すことにより４回目のリードデータが返送でき、このバスレベルでのデットロック問題を回避している。
【００５３】
このようなデットロックの問題は、バス２だけではなくＤＭＡコントローラ１１でも発生する。アウトオブオーダバスを用いてもＤＭＡ−２が複数チャネル動作するときに、１つのチャネルのライトまで完了しないと次のチャネル動作に移れないと図９と同じような状態に陥る。
【００５４】
本実施の形態に係るＬＳＩ１００のトレース収集方式では、トレースデータ転送を行う複数チャネルのＤＭＡコントローラでは、チャネルごとに個別のバッファ領域を持ち、それぞれのチャネルが図８のような遷移をし、チャネル間での動作の追い越しが可能な構成とし、バスに発行する識別子をチャネルごとに変えてチャネル間でもアウトオブオーダ動作することによりデットロックを回避できる。なお、チャネルが１個しかない場合はこの問題は発生しない。
【００５５】
以上のように、本実施の形態に係るＬＳＩ１００のトレース収集方式によれば、アウトオブオーダ動作するバス２、アウトオブオーダ動作する複数チャネルを搭載したＤＭＡコントローラ１１により、デットロックを回避しつつ、トレースバッファ１２をバスターゲット４としてトレースデータをＤＲＡＭ１３に簡単に転送できる。
【００５６】
次に、２つ目の課題に対する効果について説明する。２つ目の課題は、トレース対象のデータ量が元々わからないことである。
ＤＲＡＭ１３の書き込み領域のサイズをＤＭＡで指定するが、実際の事象発生数はそれより小さいかもしれず、ＤＭＡコントローラ１１は、終了条件がわからず待ち続ける可能性がある。
【００５７】
本実施の形態では、プログラムがＤＭＡコントローラ１１に対して停止指令を指示するデータをレジスタに書き込む。その時点で、ＤＭＡコントローラ１１のステートが（６４）（図８参照）であれば即時に停止する。
トレースバッファ１２中のデータが、１回の転送データ長以上ある場合は１回分の転送後にＤＭＡは停止する。１回の転送分にも満たないトレースデータしかない場合は、データが溜まり転送された後に停止できる。通常は、その方法でトレース全体が終了できる。
さらに、トレースバッファ１２のトレースイネーブルビット４９を０にして停止指示を行うと、トレースバッファ１２はそのデータ残量に無関係にバッファ中の古いデータまたはダミーデータを転送し確実に終了させることができる。
図１１は、転送単位データ９０にダミーデータを付加した状態を示す図である。
【００５８】
３つ目の課題は、トレースした場合にはＤＲＡＭ１３へのアクセスが増えて、トレース出力が発生に追いつかなくなるオーバラン現象を起こすことである。
まず、オーバランはトレース書き込みの優先度を通常のアクセスに比べて低い優先度で行うために発生する。その回避には、トレースの優先度を上げる方法があるが、原理的にはトレースに関わらず優先度制御として通常の技術である。しかし、この技術の適用は、トレースではない本来のアクセスが遅れてしまい、リアルタイム処理が間に合わなくなるという短所があり組み込み機器では受け入れられない場合がある。
【００５９】
本実施の形態に係るＬＳＩ１００のトレース収集方式では、トレース対象を絞り込む機構によりデータ量を静的に制限して、複数回に分けてトレースを採ることでリアルタイム性を確保する。トレースデータを複数回に分けて採取した場合には、その結果を併合しても都度、その合計が合わないなど再現性が悪いという課題も浮上する。
その主たる原因は、タイマーなどで規定された周期で動作する独立したプログラム単位（タスクと呼ぶ）の周期が、複数種類あり、ぶれが発生することによる。そこで、タスク間の遷移時に遷移情報を、トレースと同じ時刻情報源を用いた時刻情報とともに記録して併合時に突き合わせを行うと、ぶれの補正ができる。
例えば、周期同士の関係が２倍のときは、その組み込み機器の一番長い周期の２周期分の時間のトレース結果を採り、複数に分割したトレース結果を併合すれば少なくてもその１周期分のトレースを再現できる。また、このタスク遷移情報の格納もオーバヘッドを伴うが、その誤差を確認するためにパフォーマンスカウンタ（サイクル数カウンタ）を用いて、トレースした場合としない場合のそれぞれに対しクロックサイクル数やキャッシュミス回数などを比較判定する判定部を設けることにより、オーバヘッドを定量的に把握・確認できる。
【００６０】
４つ目の課題は、オーバランやリアルタイム性に影響はないものの、トレースを採取したことにより、本来の動作より遅い動作となり分析結果の誤差が大きくなることである。
この課題は、３つ目の最初の課題（オーバーラン）と類似しており、トレース対象を絞り込むという対策も同様である。すなわち、誤差を減らすにはＤＲＡＭ１３にライトするデータを減らすのが効果的である。
本実施の形態に係るトレース収集方式では、トレースデータのライトもトレース対象となりうる。１バストランザクションあたりのトレースデータを８ｂｙｔｅ、バス転送を６４ｂｙｔｅとすると６４ｂｙｔｅ転送のトレースにあたりトレースデータのリードとライトで計１６ｂｙｔｅつまり２５％の無駄が発生する。
【００６１】
トレースバッファ１２からのリードは、バスターゲット４がトレースバッファ１２であるという条件で、ＤＲＡＭ１３への書き込みはバスイニシエータ３とチャネル番号とを比較判定することによりトレース対象から除外する。ＤＲＡＭ１３への書き込み判定はプログラムから比較値であるチャネル番号をあらかじめセットできるようにすることで空いているＤＭＡコントローラやチャネルを有効活用できる。転送先のＤＲＡＭアドレスを指定して領域を判別してもよい。アドレス指定により条件を絞り込むには図６の事象発生判定部５９のなかに、アドレスを指定する手段と比較する手段であるアドレス指定・比較部５８ａを設ければよい。
【００６２】
上記のような無駄の範疇ではないが、パフォーマンスカウンタなど他の情報から補てんできるトレース情報は、３つ目の最初の課題で述べた選択機能（絞り込み機構）により除外できる。
図１２は、本実施の形態に係るトレース要否の一例（トレース除外情報８１）を示す図である。図６の事象発生判定部５９のなかには、トレース除外情報８１に基づいてトレースの要否を選択するトレース選択部５８ｂが設けられる。
図６のトレース選択部５８ｂは、図１２のトレース除外情報８１に基づいて、パフォーマンスカウンタなど他の情報から補てんできるトレース情報についてのトレースの取得を除外する。
【００６３】
また、トレースデータには発生タイミングを知るために時刻方法が必須である。とくにプログラムからタスク遷移時にメモリに記録する時刻情報を記録するが、その時刻情報とトレースデータの時刻情報との突き合わせをするためには、トレース上の時刻情報にも長いビットが必要となる。
たとえば５００ＭＨｚで動作するバスで２０ｍ秒間を計測するには２４ビット必要であり、分解能を１μ秒に粗くしても１５ビットは必須となる。しかし、平均して１００μ秒ごとに事象が発生する場合には、７ビットあれば１μ秒の分解能で１２７μ秒までカウントでき、時間が１つ前の記録より小さくなったら１周分の１２８μ秒を加算して補正することが考えられる。しかし、必ずしも事象が発生しない場合には、１周後か２周後以降かの判別ができなくなる。
【００６４】
そこで、以下のような時刻データの記録方法を実行する。
図１３は、トレースにおける時刻データの記録方法について示す図である。図１３に示すように、時刻データを記録する９２のタイミングまでに事象の記録がない場合には、９２では時刻情報（時刻データ）を記録する。
図１４は、時刻情報取得の回路例を示す図である。図１４の回路では、最後に記録した事象から１周時間が進み記録するべき事象がない場合には時刻情報のみを記録する。
これにより周期を間違えることなく短いビット幅で正確に記録ができる効果を得られる。
【００６５】
ＬＳＩ１００では、タスク遷移にプログラムから繰り返し周期情報とタスク情報とがメモリ上に記録されるが、このときタスク遷移時に呼ばれたフック関数からトレースデータに付加される時刻情報と同じ時刻情報源が読み出され、メモリに記録される。
【００６６】
パフォーマンスカウンタ７０（図５参照）は、一般に事象数をカウントするものである。その他にＣＰＵのパイプラインストールサイクル数をカウントする事例は非特許文献１で開示されている。
【００６７】
図１５は、トレース動作対象を除外した待ち状態をカウントするパフォーマンスカウンタの回路例である。
トレーストランザクションが１サイクルでも先行したために、本来のバスアクセスやＤＲＡＭアクセスがそれ以上のサイクル間待たされるオーバヘッドであるレイテンシの増加は、図１５に示す回路を用いて、トレース動作対象を除外した待ち状態をカウントし、トレースした時とトレースしない時とのカウンタ値を比較することでその影響が判る。
【００６８】
図１５において、７４ａがバス２のレイテンシ、７４ｂがＤＲＡＭコントローラ１０のレイテンシサイクルの信号である。厳密には並列動作効果があるため、サイクル数の増加分はオーバヘッドの増加分そのものではないが、トラフィックが少ない場合は近似値として使えるため、増加分をサイクル数と近似できる。近似にしては誤差が大きい場合には、動作をシミュレータで再現しシミュレーション結果に表れるレイテンシが実測のレイテンシと一致するようにシミュレーション上のトランザクション発生タイミングを合わせこむことにより誤差を削減できる。レイテンシ計測用のカウンタを設ける場合は、パフォーマンスカウンタ７０の他の情報も比較用に併用するためカウンタは複数本必要となる。
【００６９】
以上のように、ＬＳＩ１００（トレース収集方式）は、命令実行回数やキャッシュミス回数などプログラム実行の性能の指標となる事象や、バスアクセス回数などオーバヘッドの指標となる事象の回数を選択してカウントしプログラムから読み出せるパフォーマンスカウンタ機能を搭載しかつ、トレースデータをＤＭＡ機能により記録する機能を併せ持ちかつ、プログラムが周期情報とタスク情報をメモリ上に記録とともにパフォーマンスカウンタ情報の値も記録することにより、それらの情報を相互に関連付けることが可能にする情報を提供できる。
【００７０】
次に、本実施の形態において説明したＬＳＩ１００のトレース収集方式についてまとめる。
【００７１】
上記実施の形態に係るＬＳＩ１００（トレース収集方式）は、バス、バスにリクエストを発行するバスイニシエータ、バスのリクエストに応答するバスターゲット、複数のバスイニシエータからのリクエストの調停機能、バースト転送を行えるＤＲＡＭコントローラ、ＤＭＡコントローラを含むＬＳＩ回路において、以下の手段をすべて備えている。
（ａ）バスのアドレス、バスのイニシエータ、リードとライトの区別、データ長、を全部または一部またはそれらを推定できる情報をトレースデータとしてメモリに記録するために、サンプルする機能。
（ｂ）上記（ａ）の結果のバス転送を円滑に行うために一時的に蓄えるレジスタまたは小容量のメモリからなるバッファ。
（ｃ）バスターゲットとしてＤＭＡコントローラからのリクエストに対応して（ｂ）のバッファからバスへ送出する機構。
（ｄ）ＤＭＡコントローラにはデータ転送元として（ｃ）を指定可能。
（ｅ）データの転送元、データの転送先を指定できるメモリ間の転送を行うＤＭＡ機構。
（ｆ）ＤＭＡコントローラはバスまたはＤＲＡＭが扱える転送単位に分割して（ｃ）からのリードとＤＲＡＭコントローラへのライトを繰り返すＤＭＡ機能。
【００７２】
上記実施の形態に係るＬＳＩ１００（トレース収集方式）は、トレース対象のデータが揃わない状態でもバスがデットロックを起こさないバス機構を搭載した。
【００７３】
上記実施の形態に係るＬＳＩ１００（トレース収集方式）は、複数の領域への並行転送を行なう複数チャネルを搭載し、トレース対象のデータが揃わない状態でバスへリクエストまたはその準備を実施した状態でトレースデータの読み出しが遅延した場合でも他のチャネル動作が止まらずにトレースデータのＤＲＡＭへのライトを追い越して動作できることによりデットロックを起こさないＤＭＡコントローラを搭載した。
【００７４】
上記実施の形態に係るＬＳＩ１００（トレース収集方式）は、トレース対象とするバストランザクションの種類をプログラムから選択または条件によりトレース可否を決める機能により、トレース事象の発生に対してＤＲＡＭへの転送が間に合わなくなるオーバラン状態を回避できる。
【００７５】
上記実施の形態に係るＬＳＩ１００（トレース収集方式）は、トレース対象とする必要のないバストランザクションの種類を固定条件またはプログラムから指定することにより除外し、トレース量を減らすことによりオーバランの抑制またトレーストランザクション発生による処理低下による計測結果の誤差を軽減できる。
【００７６】
上記実施の形態に係るＬＳＩ１００（トレース収集方式）は、トレースデータをＤＲＡＭに記録するために発生したバストランザクションが後続のバストランザクション動作を遅延させたことにより、システム全体の処理が遅延した影響の尺度としてバスの待ち時間を計測しプログラムから読みだし可能なカウンタを搭載した。
【００７７】
上記実施の形態に係るＬＳＩ１００（トレース収集方式）は、トレースデータをＤＲＡＭに記録するために発生したＤＲＡＭアクセスがバンクビジー、ＤＲＡＭバスビジーなどの要因で次のＤＲＡＭへのリクエストを受信していてもＤＲＡＭ起動を遅らせざるを得ない状態において、システム全体の処理が遅延した影響の尺度として遅延状態のクロックサイクル数を計測しプログラムから読みだし可能なカウンタ（待ち時間カウンタ）を搭載した。
【００７８】
上記実施の形態に係るＬＳＩ１００（トレース収集方式）は、バス動作におけるコマンドとアドレスからなるバス起動動作の順に関わらずに、リードデータの転送をおこないかつその動作を完了しバス動作に必要な資源を解放できるアウトオブオーダ機能を持ったバス、バスに接続されたイニシエータの調停、バスターゲットの調停を行うバスコントローラを備えた。これにより、トレース対象のデータが揃わない状態でもバスがデットロックを起こさないバス機構を実現した。
【００７９】
また、上記実施の形態に係るＬＳＩ１００のトレース収集方法は、バスとメモリと前記メモリを制御するメモリ制御部とを備え、トレース対象のトランザクションをトレースしたトレースデータを、前記バスを介して取得し、前記メモリに記憶するトレース収集回路のトレース収集方法において、バッファを備えるトレースバッファ回路が、前記トレースデータを取得し、取得した前記トレースデータを前記バッファに記録し、コントローラが、前記バッファから前記トレースデータを読み出すリードリクエストを、前記トレースバッファ回路をバスターゲットとして前記バスに発行し、前記トレースバッファ回路が、前記コントローラにより発行された前記リードリクエストに対応して、前記バッファに記録された前記トレースデータをリードデータとして前記バスに送出し、前記コントローラが、前記バスに送出された前記リードデータを前記メモリに書き込むライトリクエストを、前記メモリ制御部をバスターゲットとして前記バスに発行し、前記コントローラにより発行された前記ライトリクエストに対応して、前記リードデータを前記メモリに記録することを特徴とする。
【００８０】
以上のように、本実施の形態に係るＬＳＩ１００のトレース収集方式によれば、ＬＳＩに基本機能として搭載されているＤＲＡＭコントローラとＤＭＡコントローラを用い、トレースバッファをバスターゲットとして簡易的に追加しても、デットロックの問題を回避し、トレース終了判断も容易にできる。一方、トレースバッファをバスイニシエータとして追加すると、バスの選択回路の増大、バス調停回路の複雑化に加えて、トレースバッファの設計量も過大となるため、本実施の形態の効果は明白である。また、本実施の形態で示したように、リアルタイム性を確保し、トレースなしの時と比べたトレース結果の事象発生数や挙動の誤差を最小にできるまたは誤差を把握し他の手段と合わせて補正ができるようになる効果がある。
【００８１】
実施の形態２．
本実施の形態では、主に、実施の形態１と異なる点について説明する。
実施の形態１で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【００８２】
実施の形態１では、アウトオブオーダバスの例について説明したが、本実施の形態では、インオーダバスを使った場合について説明する。
図１６は、バス調停回路（バスコントローラ）を示す図である。図１６に示す回路は、バスのイニシエータが転送先として選んだターゲットと、そのターゲットが発するビジー信号群を用いて、ターゲットがビジーでないものの中からトランザクションを選択する回路である。
【００８３】
本実施の形態では、図１６の回路を応用して、トレースバッファ１２に転送可能なデータが揃っていなければ（リード可能通知を通知していない場合の一例）、トレースバッファ１２がビジーをバスコントローラ５に発行することにより、アウトオブオーダと同様にデットロックを回避できる。
【００８４】
図１７は、図１６の回路を用いて、デットロックを回避する様子を示す図である、
図１７では、ＤＭＡ−２からの４回目の転送要求があるが、トレースバッファがビジーをアサートしているのでＤＭＡ−２にバス権を与えないためバスのデットロックは発生しない。
【００８５】
次に、本実施の形態において説明したＬＳＩ１００のトレース収集方式についてまとめる。
【００８６】
上記実施の形態に係るＬＳＩ１００（トレース収集方式）は、リードデータが揃っているまたは揃うことが確定しリード動作の準備ができていることをバスコントローラに知らせる機能を持つバスターゲットと、バス権を得る前にデータ転送のターゲットの識別情報をバスコントローラに知らせる機能を持つバスイニシエータと、それら２つの情報がともに成立するものの中からリード動作に係るバスイニシエータを選択しバス権を与える機能を備えた。
【００８７】
以上のように、本実施の形態に係るＬＳＩ１００のトレース収集方式によれば、インオーダバスを使ったＬＳＩ１００においても、デットロックを回避することができる。
【００８８】
実施の形態３．
本実施の形態では、主に、実施の形態１，２と異なる点について説明する。
実施の形態１，２で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【００８９】
図１８は、本実施の形態に係るＤＭＡコントローラ１１の状態遷移を示す図である。
実施の形態１で説明した図８のＤＭＡコントローラ１１のステートに、図１８では新たなステート６５が加わっている。
【００９０】
図１８に示すように、１回のリードバストランザクション発行前に、必ずトレースバッファ１２からのキック信号を待つ制御を追加する。このキックは通常動作では必須でない場合もあり、使用の要否はプログラムからレジスタで設定する。
【００９１】
通常の動作時は破線の遷移をする。この方法による回路量の増大は高々数ゲートで回路追加は容易である。
キック信号を１にする条件は、トレースバッファ１２に転送できるデータが揃った時である。
【００９２】
０にする条件は、転送方式により異なる。
このバスでトレースデータを連続してＤＲＡＭ１３に転送しないならば、１にするタイミングと同じでよい。このバスでトレースバッファ１２がコマンドを受け付けた状態で、さらに次のコマンドを受け付け開始するならば、リードポインタをさらに１本追加してデータ読み出し用のリードポインタとデータ残量計算用のリードポインタに分け、コマンド受け付け時にデータ残量計算用のリードポインタを更新し、更新した結果との計算結果にてキック信号の値を決める。
【００９３】
上記実施の形態に係るＬＳＩ１００（トレース収集方式）は、１組のバスインターフェイスと、１組のＤＭＡ転送に対応した転送元と転送先アドレス情報を使用し、プログラムまたは専用信号などの起動機能、を持つＤＭＡ回路において、転送全体の起動とは別に、バスへのリクエストごとの起動タイミングをＤＭＡコントローラ外部から入力し、それにより状態遷移してリードデータが揃った場合のみバスリクエストを出す機能を持つＤＭＡ回路を搭載した。
【００９４】
実施の形態４．
本実施の形態では、主に、実施の形態３と異なる点について説明する。
実施の形態１〜３で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
実施の形態３では、単一チャネル動作の実施形態を示したが、ここでは複数チャネル構成のＤＭＡ回路に関する実施形態について述べる。
【００９５】
図１８で説明した機構を複数チャネル構成のＤＭＡコントローラ１１の各チャネルに付けると、実施の形態１で述べた各チャネルが別々の転送バッファを必要とせずに、チャネル間でバッファ共用が可能となる。
ステート６５からステート６１に遷移したチャネルの中からチャネルを選択すればデットロックなしに転送が可能となる。もともとチャネルごとにバッファを持たない複数チャネル実装においては回路量の増加も少なく回路変更も比較的容易である。
【００９６】
上記実施の形態に係るＬＳＩ１００（トレース収集方式）は、１組のバスインターフェイスと、複数組のＤＭＡ転送に対応した転送元と転送先アドレス情報と、複数組のデータバッファと、複数組の転送状態の示すレジスタを持ち、１つの組の転送が滞っても、バス起動とデータの送信と受信が他の組に影響なく行える複数チャネルの機能を持つ。
【００９７】
上記実施の形態に係るＬＳＩ１００（トレース収集方式）は、１組のバスインターフェイスと、複数組のＤＭＡ転送に対応した転送元と転送先アドレス情報と、プログラムまたは専用信号などの起動機能、を持つＤＭＡ回路において、転送全体の起動機能に加えて、バスへのリクエストごとの起動タイミングをＤＭＡコントローラ外部から入力し、その起動に基づいて状態遷移しリードデータが揃った場合のみバスリクエストを出す機能を少なくても１組は持つ、複数チャネルの機能を持つ。
【００９８】
実施の形態５．
本実施の形態では、主に、実施の形態１〜４と異なる点について説明する。
実施の形態１〜４で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【００９９】
トレースデータとして記録する事象に、アドレスではなくデータが重要な意味を持つ場合もある。
図１９は、本実施の形態に係る事象データ９１を示す図である。図１９において、カッコ内の数字はビット長の例を示す。
実施の形態４まではアドレスを記録対象にしていたが、図１９の例では、アドレスではなくライトデータまたはリードデータをその記録対象とする。アドレスとデータを判別ために、事象データ９１に専用のビットを設けてもよい。
【０１００】
また、イニシエータを示す３ビットが特定の値のときにデータを示すことにして、解析プログラムで先行するアドレス事象と関連付けてもよい。バスに現れたすべてのトランザクションに対してデータを記録するとアドレスを記録する場合の数倍の事象量となる。
しかし、Ｉ／Ｏに限定すると、メモリに比べて頻度が少ないため、数パーセント増で済む。Ｉ／Ｏであるか否か判定には、アドレスの上位部の上限の比較、上下限の範囲比較、上位部のビットマスク後の値との一致比較をレジスタ指定した値とバスアドレス（パイプラインバスではそれを遅延させたもの）を図６のアドレス指定・比較部５８ａ相当の回路で比較すればよい。
【０１０１】
対象Ｉ／Ｏを全部にするか、あるいは、限定した場合は、レジスタ指定を使わずに結線論理でデコードすればよい。いずれにしろ、それらの結果を図６のトレース候補信号４０相当の信号として与えて、アドレス指定・比較部５８ａによる比較、または有効信号４１ａを生成する。
特に、メモリと異なりＩ／Ｏの場合はそのデータ挙動をプログラムからシミュレーションで再現するのが困難である。また、特に、リードデータ値によりその後のプログラム挙動が大きく変わるためデータをトレース記録する効果は大きい。
【０１０２】
上記実施の形態に係るＬＳＩ１００（トレース収集方式）は、バスのトレース対象を選択するためにバスアドレスの全部または一部に関してその範囲を示す上限と下限を指定するレジスタ、または、アドレスの全部または一部に論理積を取った後に一致比較する対象を指定するレジスタを持ち、プログラムから書き込むことによりその選択範囲のアドレスに合致する領域へのライトデータまたはその一部のビットをトレースデータとしてＲＡＭに記録することができる。
【０１０３】
実施の形態６．
本実施の形態では、主に、実施の形態１〜５と異なる点について説明する。
実施の形態１〜５で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【０１０４】
実施の形態５までは、図７に示すトレースバッファ１２からのＤＭＡのデータ送信単位（データ９０）１つに、複数個の事象データ９１が端数なく含まれる例を示した。
図２０では、１つの事象データ９１がトレースバッファ１２への書き込み単位と異なる一例を示す。
【０１０５】
図２０に示すように、端数はデータ９３のように無効な領域であり、転送単位データ９０に対し、１か所でも複数個所でもよい。複数個所の端数を許すと、計算量が減りシフト回路は単純になるがデータ格納の利用効率は低下する場合が多くなる。逆に１か所にするとシフト回路は複雑化するがデータ効率は向上しやすい。
【０１０６】
図２１は、（ａ）は事象データ９１の書き込み回路の一例、（ｂ）は事象データ９１の書き込み回路の他例である。
【０１０７】
図２１は、データの一時バッファとなるＲＡＭのビット幅をｘ、事象データ長をｙとし、ｘ≧ｙ＞０．５ｘの場合の事象データ９１の書き込み回路の例を図２１（ａ）と図２１（ｂ）に示す。
【０１０８】
図２１（ａ）（ｂ）において、書き込み回路は、一時バッファＲＡＭ５０、その前段または後段に置いたレジスタ５３、選択回路から構成されるシフタ５４である。
【０１０９】
図２１（ａ）のシフタ５４は、事象データ９１の複数組の中から一時バッファＲＡＭ５０への書き込みデータを選択する。図２１（ｂ）のレジスタ５３では、事象データ９１をレジスタ５３に格納するときに、レジスタ５３のクロックを制御する。
なお、図２１（ｂ）のレジスタ５３のクロック制御の代わりに、一時バッファＲＡＭ５０のライトイネーブルを複数に分割し、複数に分割したライトイネーブルを制御しても同様な効果が得られる。
【０１１０】
図２２は、転送単位を跨いで事象データ９１を詰める例を示す。図２２の「事象データ７」は、転送単位データ９０に納まらず、転送単位データ９０を跨いで格納されている。図２２では、転送単位データ９０には「事象データ７」の６０％程度しか格納されていない状態を示している。
これを実現する回路の構成は、図２１（ａ）や図２１（ｂ）と同等であるが、データが詰まっている状態を示すカウンタ（図示なし）のビットを短く省略できないこと、また動作が複雑化することが差異点ではある。
【０１１１】
いずれの場合も一時バッファＲＡＭ５０、レジスタ５３、シフタ５４ともに、１９６０年代から１９８０年代のコンピュータのＣＰＵのシフト回路またはアライメント回路として実装された技術であるデータの加工方法である。本実施の形態では、トレースデータの配置方法が特徴である。
【０１１２】
上記実施の形態に係るトレースバッファ回路は、バッファに記録されたデータ量をビット単位で記録するカウンタと、データのシフト回路と、過去に記録したデータとマージする手段を持ち、トレースデータをＲＡＭに転送する前にシフト操作を行ないデータ長の端数を詰めてＲＡＭの空きビットを無くすことにより、トレースデータ長がＲＡＭのビット幅に合わない、またはトレースデータ長が一定でなくても記録の効率を高める効果を持つ。
【０１１３】
実施の形態７．
本実施の形態では、主に、実施の形態１〜６と異なる点について説明する。
実施の形態１〜６で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【０１１４】
実施の形態６まではトレースデータは圧縮してない。本実施の形態では、トレースデータの圧縮について説明する。
図２３は、トレースデータの格納方法として圧縮した例を示し、（ａ）は圧縮したトレースデータの構成、（ｂ）〜（ｅ）は圧縮として差分方式の一例を示す。図２３において、カッコ内の数字はビット長の例を示す。
【０１１５】
図２３（ａ）に示すように、トレースデータは、圧縮方式を示す部分（９１ａ）と圧縮後のデータ部（９１ｂ）からなる。
【０１１６】
図２３（ｂ）〜（ｅ）を用いて、圧縮方法として差分方式を用いた場合の例について説明する。
図２３（ｂ）は、圧縮方式を示す部分（９１ａ）の実施例である。
図２３（ｃ）〜図２３（ｅ）に圧縮後のデータ部（９１ｂ）の実施例である。
【０１１７】
図２３（ｂ）では、圧縮方式を示す部分（９１ａ）を３つのフィールドに分割し、アドレスの差分を示す２ビットのフィールド、リード・ライトと転送長とイニシエータを示す１ビットのフィールド、時刻を示す１ビットのフィールドがある。ともに値ゼロは、圧縮のない状態を示す。
【０１１８】
アドレスのビット３０：３の２８ビットに対し前回のアドレスとの差分計算した結果を符号付きの２０ビット、１２ビット、４ビットで形式を定義し、そのアドレスを表現できる最短の形式を選択する。
リード・ライトと転送長とイニシエータは前回と異なる場合のみ合計７ビットのデータ用いる。
時刻は前回との差分を符号なし４ビットで表現できれば４ビットを、そうでなければ１６ビットを用いる。
【０１１９】
これらの差分方式を用いることにより、最悪時には４ビット増加するが、最良時には３９ビット削減できる。
図２４は、本実施の形態に係るトレース差分計算機構の一例を示す図である。図２４に示すトレース差分計算機構を、図２１（ａ）または図２１（ｂ）の入力に挿入することにより、上述した機能を実現することができる。このトレース差分計算機構は、前回の事象データ９１を記録する前回値レジスタ５５と今回の事象データ９１との差分を計算する差分演算器５６から構成され、圧縮方式を示す部分９１ａと圧縮後のデータ部９１ｂとを生成する。
【０１２０】
なお、前回値レジスタ５５（図２４参照）とレジスタ５３（図２１（ａ）（ｂ）参照）を兼用してもよい。このような簡単な演算回路で圧縮することにより、バス２とＤＲＡＭ１３のトラフィックを軽減でき、ＤＲＡＭ１３の領域をより小さくできるとともに、バス２やＤＲＡＭ１３の負荷が減り、トレースを行った場合と行わなかった場合の性能の誤差を軽減できる効果がある。
【０１２１】
上記実施の形態に係るトレースバッファ回路は、前回またはその近傍のトレースデータを蓄積しそられと新たなトレースデータの差分を計算し、より短いビット数で表現可能なトレースデータに圧縮した後に、バスを使って転送することにより、トレースデータ転送に伴うバス負荷を軽減しＲＡＭの必要帯域を低くしＲＡＭの必要領域を小さくする。
【０１２２】
実施の形態８．
本実施の形態では、主に、実施の形態１〜７と異なる点について説明する。
実施の形態１〜７で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【０１２３】
実施の形態７では差分を採取する方法による圧縮例を示したが、本実施の形態では、符号化理論を組み合わせた実施例を示す。差分ではなく、ＣＰＵのアクセス率が高いなど一般的な特性とその組み込み機器固有の特性から事前に確率計算を行い、シャノン・ファノ法による符号化方法などを適用する。
【０１２４】
図２５は、本実施の形態に係る圧縮方式を説明するための図である。
図２５に示すように、圧縮後の事象データ９１ｃと圧縮後の事象データ長９１ｄを圧縮演算器５７が算出する。しかし、確率が低いデータでは圧縮後の事象データ長９１ｄが長くなることがあり、それがバッファＲＡＭの格納単位のビット幅を超えるとその実装は複雑になる。
【０１２５】
そこで、本実施の形態では、圧縮後の事象データ長９１ｄが圧縮前の事象データ長９１ｆを超えた場合には圧縮しないことを示す信号９１ｅを生成する。信号９１ｅが圧縮しないことを示す場合には、生のトレースデータ（圧縮前の事象データ９１）と圧縮前の事象データ長９１ｆとを、圧縮後の事象データ９１ｃと圧縮後の事象データ長９１ｄとして選択する。圧縮後の事象データ長９１ｄが圧縮前の事象データ長９１ｆを超えない場合（つまり、信号９１ｅが圧縮することを示す場合）には、圧縮後の事象データ９１ｃと圧縮後の事象データ長９１ｄとを選択する。トレースデータの解析時には、圧縮の有無を示すフィールド（本実施の形態では、１ビットのフィールド９１ｅ）の記録結果から判別できる。
【０１２６】
上記実施の形態に係るトレースバッファ回路は、事前に採取したトレースデータのビットパタン例をもとにその出現頻度の統計をとり、その確率を利用した符号化によるデータ圧縮方法を利用した演算回路（圧縮演算器５７）によるトレースデータの加工結果と、加工していないトレースデータを選択して記録することにより、より短いビット数で表現可能なトレースデータに圧縮する。
【０１２７】
以上のように、本実施の形態に係る圧縮方式によれば、計測対象の組み込み機器がランダムな動作をする場合には、実施の形態７の圧縮方式に比べて、この符号理論に基づく圧縮が効果的に働く一方、回路が複雑化することなく実現できる。なお、バッファＲＡＭへの書き込みは図２１（ａ）または図２１（ｂ）と同様の方式で実現できる。
【０１２８】
実施の形態９．
本実施の形態では、主に、実施の形態１〜８と異なる点について説明する。
実施の形態１〜８で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【０１２９】
本実施の形態では、実施の形態８と異なる圧縮方式の適用例を示す。
トレースデータの圧縮にＬＺ７７など辞書を用いた圧縮方式も適用できる。これらの方式では、一般にＲＡＭ上に辞書データ用の領域を設けて辞書を参照・更新しながら圧縮をする。しかし、出現頻度の測定を行うと、（ａ）そのカウント用の回路とカウント値を格納するデータが辞書のエントリ数分必要となる、（ｂ）出力待ちのバッファが多く必要となる、（ｃ）バスとＤＲＡＭへのアクセス頻度が均等ではなく一時期に集中しやすくなる等の課題が出てくる。
【０１３０】
本実施の形態では、まず、圧縮したトレースデータの後に辞書を送信することにより、データを長時間蓄えるバッファの必要性を排除している。また、頻度測定による辞書の生成は行わずに、連続したデータに対する圧縮を行う。辞書があふれた時点で辞書を出力する。
【０１３１】
たとえば、２ビットで繰り返し回数を１，２，３，４の４種類を表し、６ビットで６４種類の８ビットデータを表す。そうすると効率最大では２５％に圧縮できる。辞書が満杯になると辞書を出力する方式のため、最悪効率下では、６４ｂｙｔｅのデータに対し６４ｂｙｔｅの辞書を出力し２００％となる。
【０１３２】
図２６は、本実施の形態において、圧縮対象のトレースデータを３２ビット幅としたときの圧縮方式の例を示した図である。
図２６に示すように、トレースデータが０ｘＡＢＡＢ５５５５の場合に、１ｂｙｔｅごとに「１ｂｙｔｅ圧縮演算器１０３」を用いて圧縮データを得る。
【０１３３】
各１ｂｙｔｅ圧縮演算器１０３は、８ビット幅の信号１０９を、８ビット幅×６４エントリの幅の辞書ＲＡＭ１０１に与えて辞書検索をする。図２６において、１ｂｙｔｅ圧縮演算器１０３と辞書ＲＡＭ１０１との「＊１」同士は接続されていることを意味し、１ｂｙｔｅ圧縮演算器１０３から辞書ＲＡＭ１０１に８ビット幅の信号１０９が与えられることを示す。
辞書のヒットは辞書の中身とデータが一致し、その一致したエントリ番号と有効数を示すカウンタ値から判断される。
ヒットすればエントリ番号１１０が辞書ＲＡＭ１０１より返され、ヒットしなければ辞書に登録後のエントリ番号１１０が返されるとともに辞書カウンタを＋１する。図２６において、１ｂｙｔｅ圧縮演算器１０３と辞書ＲＡＭ１０１との「＊２」同士は接続されていることを意味し、辞書ＲＡＭ１０１から１ｂｙｔｅ圧縮演算器１０３にエントリ番号１１０が返されることを示す。
８ビット幅の信号１０９、エントリ番号１１０は各ｂｙｔｅごとにある。
辞書があふれる場合は、あふれ信号１０７を１にして、辞書データ１０８を辞書ＲＡＭ１０１から一時バッファＲＡＭ５０に順に吐き出す。
【０１３４】
圧縮後のデータは１ｂｙｔｅ圧縮演算器１０３からシフト回路１０６に送られる。
また、元のトレースデータ（事象データ９１）の各ｂｙｔｅ値（９１ｆ）は１つ前のｂｙｔｅ値と比較器１０４で比較され、連続長計算器１０５で何ｂｙｔｅ同じ値が連続するか決定される。
【０１３５】
この例では２組の２ｂｙｔｅデータが検出され、それぞれのエントリ番号３と４が出力される。連続長はそれぞれ２ｂｙｔｅであるがそのｂｙｔｅ数より１減じた２ビットの値１がデータ長として出力される。これらが一時バッファＲＡＭ５０に格納される。
【０１３６】
この圧縮では、カウンタあふれ信号１０７が発生すると辞書ＲＡＭ１０１の内容を一時バッファＲＡＭ５０に吐き出すため、その間新たなトレース発生を受け付けられなくなる。それを避けるために、辞書ＲＡＭ１０１は２倍の容量または２面持っていて、吐き出しと新たな登録・参照を継続できる。登録と参照用の辞書カウンタは１組でもよいが、吐き出し用に別カウンタを設けるか２組持つ。また、一時バッファＲＡＭ５０の残数管理では、辞書データの容量分（ｚ）の余裕をもった残数計算を行う。
【０１３７】
一時バッファＲＡＭ５０も通常のトレースデータ書き込みと辞書データ書き込みが発生するが、時分割による並行的な書き込みをする、書き込みポートを２つにする、アドレスによりインターリブを行い隣接した領域はインターリブ機能による同時書き込みをする等、古典的な並列アクセス方式で実現できる。
【０１３８】
以上のような構成をとることにより、トレースデータの圧縮の長所を取り入れつつ、バスとＤＲＡＭのトラフィック増大を緩和し誤差を小さくすることができる。辞書をデータの後に吐き出すことで辞書容量を除く余分なバッファを不要とし、また辞書吐き出し時にトレースデータ採取ができなくなることはない。
【０１３９】
上記実施の形態に係るトレースバッファ回路は、辞書を用いたデータ圧縮アルゴリズムを適用した回路を用いてトレースデータを小さくして、より短いビット数で表現可能なトレースデータに圧縮する手法において、頻度測定を行わずに出現順に辞書に登録しつつ圧縮対象データを出力し、辞書のエントリ数をカウンタで計数し辞書があふれたら辞書をトレースデータの一部として出力し、辞書の容量分をバッファの空き容量計算に使用し、古い辞書データの出力中にも新たな辞書の更新と参照を可能にする。
【０１４０】
実施の形態１０．
本実施の形態では、主に、実施の形態１〜９と異なる点について説明する。
実施の形態１〜９で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【０１４１】
実施の形態９まではトレースデータを暗号化してないものとして扱った。本実施の形態では、トレースデータを暗号化する形態について示す。
【０１４２】
性能を細かく分析できる機能のため詳細な動作がわかり、リバースエンジニアリングされてソフトウェアの知的財産を盗まれる恐れがある。それに対応するため、トレースデータの暗号化が有効であるが、複雑な暗号化はデータ長の増大と処理時間の増大を招くのでトレースデータには適さない。
データ長を変更しない暗号化方式としては、ビットの反転、ビットの入れ替え、複数ビット単位での補数計算、複数ビット間での値のデータ位置の入れ替えが考えられる。しかし、時刻情報やアドレスなどは、その特性から暗号化のアルゴリズムを見破られやすい。
【０１４３】
そこで、本実施の形態では、ビット反転による暗号化において、ビット反転のパターンを、生成多項式を循環させることにより切り替える。
図２７は、ビット反転のパターンを生成多項式を循環させることにより切り替える方式を示す。これは乱数発生回路として排他論理和とシフトを繰り返す方式である。
図２７に示すように、生成多項式演算部１１０Ｎ（Ｎは１以上の整数）により生成された乱数値の中で１の立っているビットに対しトレースデータのビット反転を施す。しかし、１種類の多項式である場合は、見破られる可能性が高い。そこで、生成式または初期値の異なる生成多項式を複数組（Ｋ個）持ち、一定期間ごとに使用する多項式を信号１１７により切り替える。
【０１４４】
各多項式での新たな乱数生成は、トレースデータの格納信号１１６が１で該当する多項式の選択信号をデコードした結果をＡＮＤした信号１１５で行う。どの組の多項式を使用したかを示すビットまたはフィールド値１１４は、平文で格納している。
【０１４５】
この方法のほかに、現在のトレースデータ中に次のトレース用の多項式の組を暗文として持ってもよい。本実施の形態ではビット反転の例を示したが、ビット入れ替えなどに適用しても同様な効果が得られる。このように遅延が少なく簡単な回路の組み合わせにて、トレースデータの量を増やさずに容易に暗号化し、ソフトウェアの知的財産を守ることが出来る。
【０１４６】
上記実施の形態に係るトレースバッファ回路は、トレースデータをバッファに記録またはバス転送する前に暗号化に必要な多項式を生成する回路（生成多項式演算部１１０１〜１１０Ｋ）を複数持ち、それらの切り替え情報もトレース出力して頻度分析による解読を困難にし、不正コピーや改竄を目的としたプログラム挙動の解析を防止する機構を持つ。
【０１４７】
実施の形態１１．
本実施の形態では、主に、実施の形態１〜１０と異なる点について説明する。
実施の形態１〜１０で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【０１４８】
実施の形態１０では、トレースデータそのものの暗号化について示したが、本実施の形態では、暗号によらない保護について示す。
【０１４９】
図２８は、トレースデータのリバースエンジニアリングを防ぐ方式を示す図であり、（ａ）は状態遷移を示す図、（ｂ）は回路構成（保護機能及び保護機能の解除手段（解除部））を示す図である。
図２８（ｂ）に示すように、回路は、ステート値レジスタ１２０により、ステートマシンを構成する。選択回路１２１によりステート値ごとのキー値を選択し、選択したキー値とデータバス２ｂよりセットされたデータ値とを比較器１２５により比較する。比較が一致したら比較器出力信号１２４によりステートが進む。
【０１５０】
図２８（ａ）に示す例では、３回キーが正しく推移すると、トレースイネーブル発生回路１２３によりトレースイネーブルビット４９をセットする信号１２２が１になり、図６のトレースイネーブルビット４９がイネーブル状態になる。
本実施の形態によれば、上記のような正しいシーケンスを踏まないとトレースを開始できないため、簡易な回路で防御することができる。
【０１５１】
上記実施の形態に係るトレースバッファ回路は、予め定めた複数回のレジスタアクセス手順、または、アクセス保護を解除するためにプログラムからセットしたキーデータとの比較により、トレース動作自体を制限する保護機能を解除する手段を持ち、それによりトレースデータの採取を禁止する保護機能を解除してから、トレース起動を行なう手順により、不正コピーを目的としたプログラム挙動の解析を防止する機構を持つ。
【０１５２】
以上、本発明の実施の形態について説明したが、これらの実施の形態のうち、２つ以上を組み合わせて実施しても構わない。あるいは、これらの実施の形態のうち、１つを部分的に実施しても構わない。あるいは、これらの実施の形態のうち、２つ以上を部分的に組み合わせて実施しても構わない。なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【０１５３】
１  トレース収集回路、２  バス、３  バスイニシエータ、３ａ  ＣＰＵブリッジ、４  バスターゲット、４ａ  Ｉ／Ｏブリッジ、５  バスコントローラ、６  ＣＰＵ、７  キャッシュメモリ、１０  ＤＲＡＭコントローラ、１０ａ  ＳＲＡＭコントローラ、１１  ＤＭＡコントローラ、１２  トレースバッファ、４０  トレース候補信号、４１  対象信号、４１ａ  トレース対象信号の有効信号、４３  選択指定信号、４４  事象判定結果信号、４５  ライトポインタ、４６  リードポインタ、４７  ＷＥ信号、４８  タイミング信号、４９  トレースイネーブルビット、５０  一時バッファＲＡＭ、５１  バッファ管理部、５３  書き込み回路のレジスタ、５４  書き込み回路のシフタ、５５  前回値レジスタ、５８ａ  アドレス指定・比較部、５８ｂ  トレース選択部、５９  事象発生判定部、７１  カウンタ、７２  選択回路、７３  選択指定レジスタ、７４  信号群、７４ａ  レイテンシ、９０  転送単位データ、９１  事象データ、９１ａ  圧縮方式を示す部分、９１ｂ  圧縮後のデータ部、９１ｃ  圧縮後の事象データ、９１ｄ  圧縮後の事象データ長、９３  データ、１００  ＬＳＩ、１０１  辞書ＲＡＭ、１０３  １ｂｙｔｅ圧縮演算器、１０４  比較器、１０５  連続長計算器、１０６  シフト回路、１０９  ８ビット幅の信号、１０７  あふれ信号、１１０  エントリ番号、１１４  フィールド値、１１５  信号、１２０  ステート値レジスタ、１２１  選択回路、１２２  信号、１２３  トレースイネーブル発生回路、１２４  比較器出力信号、１２５  比較器。
【図１】
2014211813.tif 000003
【図２】
2014211813.tif 000004
【図３】
2014211813.tif 000005
【図４】
2014211813.tif 000006
【図５】
2014211813.tif 000007
【図６】
2014211813.tif 000008
【図７】
2014211813.tif 000009
【図８】
2014211813.tif 000010
【図９】
2014211813.tif 000011
【図１０】
2014211813.tif 000012
【図１１】
2014211813.tif 000013
【図１２】
2014211813.tif 000014
【図１３】
2014211813.tif 000015
【図１４】
2014211813.tif 000016
【図１５】
2014211813.tif 000017
【図１６】
2014211813.tif 000018
【図１７】
2014211813.tif 000019
【図１８】
2014211813.tif 000020
【図１９】
2014211813.tif 000021
【図２０】
2014211813.tif 000022
【図２１】
2014211813.tif 000023
【図２２】
2014211813.tif 000024
【図２３】
2014211813.tif 000025
【図２４】
2014211813.tif 000026
【図２５】
2014211813.tif 000027
【図２６】
2014211813.tif 000028
【図２７】
2014211813.tif 000029
【図２８】
2014211813.tif 000030