(58)【調査した分野】(Int.Cl.,DB名)
前記転送コントローラは、DMA(Direct・Memory・Access)転送を行うDMAコントローラであることを特徴とする請求項1に記載のトレース収集回路。
前記トレースバッファ回路は、前記バッファに記録された少なくともひとつの前記トレースデータがリード単位のサイズを満たした場合に、前記リードデータとして送出し、
前記バスコントローラは、前記トレースデータがリード単位のサイズを満たすまでの間に、前記バスがデットロックを起こさないように前記バスを制御する
ことを特徴とする請求項1または2に記載のトレース収集回路。
CPUからの命令に基づいて、トレース対象のトランザクションのトレース可否を判定する判定部を備えることを特徴とする請求項1〜4のいずれかに記載のトレース収集回路。
前記判定部は、トレース対象とする必要のないトランザクションの種類が予め設定されたトレース除外情報を記憶装置に備え、前記トレース除外情報に基づいて、トレース対象のトランザクションのトレース可否を判定することを特徴とする請求項5に記載のトレース収集回路。
前記トレースデータを前記メモリに記録するために発生したトランザクションが後続のトランザクションの動作を遅延させた場合に、前記バスの待ち時間を計測する待ち時間カウンタを備えることを特徴とする請求項1〜6のいずれかに記載のトレース収集回路。
前記トレースデータを前記メモリに記録するために発生したメモリアクセスがビジー状態の場合に、前記メモリアクセス以外のアクセスが遅延する場合に、遅延状態のクロックサイクル数を計測するサイクル数カウンタを備えることを特徴とする請求項1〜7のいずれかに記載のトレース収集回路。
前記バスコントローラは、前記バスに発行されたリクエストの順序を変えて実行するアウトオブオーダ方式で動作することを特徴とする請求項1〜8のいずれかに記載のトレース収集回路。
前記トレースバッファ回路は、前記バスのトレース対象を選択するためのバスアドレスの範囲を示すレジスタを備え、前記レジスタに示された前記バスアドレスに基づいたデータを前記トレースデータに含めて前記メモリに記録することを特徴とする請求項1〜10のいずれかに記載のトレース収集回路。
前記トレースバッファ回路は、前記バッファに記録されたデータ量を記録するカウンタと、データのシフト回路とを備え、前記トレースデータを前記バッファに転送する前に、前記カウンタに記録されたデータ量に基づいて、前記トレースデータに対して前記シフト回路によりシフト操作を行なうことを特徴とする請求項1〜11のいずれかに記載のトレース収集回路。
前記トレースバッファ回路は、前記バッファに記録したトレースデータと新たに記録するトレースデータとの差分を計算し、計算した差分に基づいて前記新たに記録するトレースデータに圧縮し、前記バッファに記録することを特徴とする請求項1〜12のいずれかに記載のトレース収集回路。
前記トレースバッファ回路は、符号化によるデータ圧縮方法を利用した演算回路を備え、前記トレースデータに対し前記演算回路により圧縮を実行して圧縮後トレースデータを生成し、生成した前記圧縮後トレースデータと、圧縮前のトレースデータとのいずれかを選択して前記バッファに記録することを特徴とする請求項1〜12のいずれかに記載のトレース収集回路。
前記トレースバッファ回路は、前記トレースデータの少なくとも一部と前記バッファに記憶された辞書データとを用いたデータ圧縮方法を適用した回路を備え、頻度測定を行わずに出現順に辞書に登録しつつ圧縮対象データを出力し、辞書のエントリ数をカウンタで計数し、辞書があふれたら辞書データをトレースデータの一部として出力し、辞書の容量分をバッファの空き容量計算に使用し、古い辞書データの出力中にも新たな辞書の更新と参照を可能にする前記バッファに記録することを特徴とする請求項1〜12のいずれかに記載のトレース収集回路。
前記トレースバッファ回路は、多項式を生成する複数の回路を備え、前記トレースデータを前記複数の回路のいずれかに基づいて暗号化し、暗号化した暗号化後のトレースデータと暗号化するために用いた前記複数の回路のうちのいずれかの回路の情報とを含めて前記バッファに記録することを特徴とする請求項1〜12のいずれかに記載のトレース収集回路。
前記トレースバッファ回路は、予め設定されている前記トレースデータの取得を制限する保護機能を解除する解除部を有し、前記解除部により前記保護機能を解除してから、トレース起動を行なうことを特徴とする請求項1〜15のいずれかに記載のトレース収集回路。
バスとメモリと前記メモリを制御するメモリ制御部とを備え、トレース対象のトランザクションをトレースしたトレースデータを、前記バスを介して取得し、前記メモリに記憶するトレース収集回路のトレース収集方法において、
バッファを備えるトレースバッファ回路が、前記トレースデータを取得し、取得した前記トレースデータを前記バッファに記録し、
コントローラが、前記バッファから前記トレースデータを読み出すリードリクエストを、前記トレースバッファ回路をバスターゲットとして前記バスに発行し、
前記トレースバッファ回路が、前記コントローラにより発行された前記リードリクエストに対応して、前記バッファに記録された前記トレースデータをリードデータとして前記バスに送出し、
前記コントローラが、前記バスに送出された前記リードデータを前記メモリに書き込むライトリクエストを、前記メモリ制御部をバスターゲットとして前記バスに発行し、
前記コントローラにより発行された前記ライトリクエストに対応して、前記リードデータを前記メモリに記録することを特徴とするトレース収集回路のトレース収集方法。
【発明を実施するための形態】
【0022】
実施の形態1.
図1は、本実施の形態に係るLSI100の構成図である。LSI100は、回路の一例である。
図1において、LSI100は、バス2を中心に、バス2の動作を起動するバスイニシエータ3、その起動に対してサービスをするバスターゲット4、バスを制御するバスコントローラ5、CPU6、キャッシュメモリ7を中心に構成される。
また、その他に、図中に番号は付与していないが、LSI100に内蔵されたメモリ、入出力装置(I/O)、外部バスとのインターフェイス回路等がある。
【0023】
図1に示すように、バスイニシエータ3には、CPUブリッジ3a、DMAコントローラ11(転送コントローラの一例)などがある。
バスターゲット4には、DRAMコントローラ10(メモリ制御部の一例),SRAMコントローラ10a、I/Oブリッジ4a、トレースバッファ12(トレースバッファ回路の一例)などがある。DRAMコントローラ10は、DRAM13(メモリの一例)を制御する。
【0024】
図1の矢印はコマンド発行の流れを示している。また、図示はしていないが、クロック生成回路、リセット回路、割り込み制御回路等も、LSI100に含まれる。
【0025】
図2は、トライステート回路を使わないゲート構成のバスの具体構成例を示す図である。
図2に示すように、2aはアドレスとコマンド、2bはライトデータ、2cはリードデータを示す。応答信号や各種有効信号の記載は省略している。矢印はそれぞれの流れを、台形は選択回路を示す。
【0026】
再び
図1に戻り説明する。
バスコントローラ5は、各バスイニシエータ3やバスターゲット4から信号を受け取り、バスの調停とバス動作に必要な選択信号の駆動をする。
各バスイニシエータ3は、バスリクエスト、コマンド、アドレス、ライトデータを送信し、リードデータと応答を受信する。
各バスターゲット4は、調停されたコマンドとアドレスを受信し、ライト動作では受信したライトデータをメモリにライトまたは下位のバスに伝送する。リード動作では、メモリから読みだしたデータまたは下位バスのデータをリードデータとしてバスに返送する。バス2がアウトオブオーダ制御のときには、バスコントローラ5の調停に従いリードデータを送出する。
【0027】
CPU6は、命令とデータをキャッシュメモリ7とCPUブリッジ3a(バスイニシエータ3)を介してそれぞれのバスターゲット4にアクセスする。通常はキャッシュメモリ7にコピーを蓄えて高速動作を行う。
【0028】
また、LSI100は、バスターゲット機能を持つDRAMコントローラ10を備える。
DRAMコントローラ10は、バス2からのリクエストをバッファリングして、DRAM13のRAS、CAS、WE、CSなどの信号を生成し、アドレスとともにLSI100外部のDRAM13を起動し、ライトデータを駆動する。
【0029】
また、DRAMコントローラ10は、タイミングを見てリードデータをサンプルし、コントローラ内にバッファリングしてバスに返送する。DRAMのバンクとデータラインに関するビジー管理、リフレッシュ制御も行う。特に、DDR方式では、スループットが高い割にアクセスレーテンシが遅いため、バースト転送を行いかつ複数アクセスをバッファリングしてパイプライン処理または並列処理する。
【0030】
DMAコントローラ11は、バスイニシエータ機能を持つDMAコントローラである。プログラムから指定された2組のアドレス(転送元、転送先)とデータ転送長に対し、バスまたはターゲットが扱えるデータ長の単位でバスを介してリードとライト動作を繰り返す。DMAコントローラ11には、起動とその転送情報とをCPU6から指示するためにターゲット機能も備わっている。
【0031】
トレースバッファ12は、トレース対象となるバス信号やバスに接続されてない個別信号を選択し、トレース結果を外部のDRAM13に転送する準備としてバッファリングを行う。本実施の形態では、トレースバッファ12は、バスのイニシエータではなくターゲットである。トレースバッファ12は、バッファ用のRAM(一時バッファRAM50)(
図7参照)を備える。一時バッファRAM50はバッファの一例である。
【0032】
次に、本実施の形態の基礎となるLSIの性能分析技術の動作について説明する。
CPU6からメモリアクセスした場合には、キャッシュメモリ7がライトバック方式でありヒットする場合は、バスイニシエータ3(CPUブリッジ3a)にはリクエストが出ない。ミスした場合、キャッシュ禁止アクセス、コピーバックのライトアクセスが出る。I/Oアクセス動作のときはCPUブリッジ3aを介してバス2にリクエストが出る。
【0033】
CPUのクロック周波数はバスや各メモリに比べて高い周波数で動作し、その性能差はキャッシュメモリ7により吸収している。そのため、キャッシュメモリ7にヒットする限りは高速に動作する。しかし、ミスが多発する場合や、キャッシュアクセスを禁止したメモリやI/Oへのアクセスが想定より多い場合には、CPU動作が待たされシステム全体の性能が低下する。
そこで、バス上にリクエストとして現れたアドレスをトレースして、それを別コンピュータで解析することによりその低下原因を究明し、プログラムの改善やLSI100の構成やキャッシュメモリ7の改良を行う。アドレスを見ることによりRAMの種類やI/Oの種類の情報も判る。
【0034】
図3は、DMAコントローラ11の動作を説明するための図である。
DMAコントローラ11には、あらかじめプログラムからDMAコントローラ11内の記憶素子に転送指示情報が格納されている。転送指示情報とは、転送元アドレス(a)、転送先アドレス(b)、転送データ長(c)である。
図3に示すように、DMAコントローラ11は、転送指示情報である転送元アドレス(a)、転送先アドレス(b)、転送データ長(c)に基づき、バスとターゲットが扱える転送単位(
図2における「d」)ごとのバス動作としてリードとライトとを繰り返す。
【0035】
図4は、シングルバッファ動作の簡単な例を示す図である。
通常は、全データの転送が完了するか、異常状態が発生するか、プログラムから停止指令が指示されるまでこの動作を繰り返す。リードの転送単位が2×dで、ライトの転送単位がdの場合はリード、ライト、ライト、リード、ライト、ライトという順で動作する。
また、バス2から見ると通常、他のイニシエータの動作と入り乱れてDMA動作が行われる。
DMAコントローラ同士は互いに独立して動作する。図示はしていないが、DMAコントローラには1個のコントローラが複数のチャネルを持ち、見掛け上複数のDMAコントローラに相当する機能を持つものもある。その場合は、時分割でチャネルを切り替え、バス動作上は複数チャネル間の動作がパイプライン動作してオーバラップし、また、順不同に転送処理がおこなわれるアウトオブオーダ動作をする。
【0036】
図5は、パフォーマンスカウンタ70の構成を示す図である。
CPU6以外のバスイニシエータ3に関してもバス2をトレースすることによりCPU同様にアクセス挙動が判る。バスコントローラ5には、パフォーマンスカウンタ70を内蔵しており、それは、バスアクセス回数を、選択回路72に指定した条件で絞り込んでカウントを行う。このパフォーマンスカウンタ70の例を
図5に示す。
【0037】
パフォーマンスカウンタ70は、カウンタ71を備える。クロックとリセットは省略して記載している。また、パフォーマンスカウンタ70は、条件を選択する選択回路72、何を選択するか指定するレジスタ(選択指定レジスタ73)を備える。選択回路72には、選択される信号群74が入力される。
その信号群74には、バス2のコマンドの種類、イニシエータ、ターゲット、ターゲット内のアドレスなどがあり、その信号群74から選択回路72により選択された信号がカウンタ71でカウントされることにより統計値としてそれらの回数を知ることができる。バス2でなく個別信号の場合もある。このカウンタ71に変化・記録された統計値を、割り込みなどの一定時間ごとにプログラムが読み出し、メモリ上に格納することにより時系列的な挙動把握ができる。
しかし、数十マイクロ秒以下の分解能を得るのは困難であり、またその事象発生原因の推定には情報が不足する。
【0038】
次に、本実施の形態に係るLSI100(トレース収集回路)のトレース収集方式の動作を説明する。本実施の形態に係るLSI100では、トレース結果をDMA転送するにあたり、トレースバッファ12は自らバス動作の起動を行うバスイニシエータ3ではなく、バスイニシエータ3からの要求で動作するバスターゲット4であることが特徴となっている。
【0039】
トレースの開始は、DMAコントローラ11に転送データの総長とトレース格納先の先頭を示すDRAM13のアドレスを指定する。転送元アドレスは、トレースバッファ12を示すアドレスを指定する。
【0040】
トレースが開始されると、まず、DMAコントローラ11を起動するレジスタ(図示なし)のビットを1にする。次に、
図6に示すトレースバッファ12内のトレースイネーブルビット49を1にする。
【0041】
DMAコントローラ11は、通常は、プログラムによりCPUからのレジスタ書き込みによる起動指示に従い、バスコントローラ5にバス権を求めるリクエストを発行する。
バスコントローラ5は、他のバスイニシエータ3のリクエストとDMAコントローラ11のリクエストとの調停を行い、DMAコントローラ11にバス権を与える。
【0042】
DMAコントローラ11は、トレースバッファ12をバスターゲット4として、データ長が固定長dのバースト転送のリードコマンドを発行する。
【0043】
図6は、トレースバッファ12の構成及び動作を説明するための図である。
トレースバッファ12は、トレース起動を受けて、以下のように動作する。
図6に示すように、トレースバッファ12は、トレース候補信号40の中から、選択指定信号43に従い、トレース対象となるトレース候補信号40の一部である有効信号41aをサンプルする。サンプルした有効信号41aが有効ならば、選択された対象信号41を、バッファ用のRAM(一時バッファRAM50)に書き込む。
事象発生判定部59は、選択された対象信号41と有効信号41aとを入力し、事象発生か否かを判定し、事象判定結果信号44をバッファ管理部51に出力する。
このバッファ用のRAM(一時バッファRAM50)は、ライトポインタ45とリードポインタ46を持つサイクルバッファ構成で、ライトとリードを同時に行える。WE信号47は、一時バッファRAM50への書き込みを直接指示する。タイミング信号48は、データの長さを知るコマンドと、データ転送との同期をとるための信号である。
【0044】
図7は、バッファ用のRAM(一時バッファRAM50)に書き込むトレースデータの一例を示す図である。
図7に示すように、事象データ91(トレースデータの一例)が各事象の記録単位(リード単位)である。事象データ91の括弧内の数字はビット長を示す。これを複数個まとめた転送単位データ90(リードデータの一例)が、DMAコントローラ11への送信単位となる。
【0045】
図6に示すトレースバッファ12のバッファ管理部51は、これらのポインタの関係から読みだし可能なデータ量を計算し、それがバス転送量d以上ならば、バス2にデータを返送する。データがdに満たない場合は、データが必要量に達するまで待ち、その後リードデータを返送する。
【0046】
図8は、本実施の形態に係るDMAコントローラ11の状態遷移を示す図である。
ここでは、転送元アドレス(A)、転送先アドレス(B)、転送データ長(C)とする。
DMAコントローラ11は、
図8に示す状態遷移をとり、起動後は(60)に遷移してバス権を得てリードリクエスト(61)を発行、リードデータが返ったら(62)(63)と遷移し、バスコントローラ5にバス権を求め、今度はDRAMに対し、バースト転送のライトコマンドを発行し、受信したリードデータを渡す。
DMAコントローラ11は、このライトが受けつけられたら、(64)に遷移して転送先アドレス(B)をdだけ加算し、転送長(C)をdだけ減算する。DMAコントローラ11は、Cがゼロになるまで、この一連の処理(61,62,63,64)を繰り返す。
【0047】
図8の(64)におけるA+=dは、本実施の形態では、トレースデータ転送時には転送元はトレースバッファ12が対象のため、d=0として実行される。
このDMA転送では転送元はバッファでありそのアドレスは意味がない。DMAコントローラ11に転送元のアドレスが固定またはインクリメントしないというモード設定を行う、トレースバッファが転送元の場合はインクリメントしない、またはトレースバッファを意味するアドレス空間がインクリメントされてもその範囲を示すように大きな領域を持つ、などの機能を用いて転送元アドレスが意味を持たないようにしている。
【0048】
次に、本実施の形態に係るLSI100(トレース収集回路)のトレース収集方式の動作とその効果を説明する。
【0049】
まず1つ目の課題であるデットロックは、順序通りにバス動作するインオーダバスで発生する。デットロックが発生する理由は以下の通りである。
(1)トレースデータが揃わないのでリードデータを返送できない。
(2)そのため次のバストランザクションが前のトランザクション終了を待ち続ける場合、または、パイプライン動作のためその次が待たされることはないが、さらにその次のトランザクション発行ができない。
(3)その結果トレース対象の事象が増加しない。
【0050】
以上のような(1)から(3)の経過を経て、同じ状態が継続することにより、デットロックが発生する。
図9は、デットロックの発生の様子を示す図である。
図9では、DMA−2がトレースデータの転送用で、DMA−1が通常のデータ転送である。
図9に示すように、DMA−2においてトレースデータ転送長以下のためリードデータを返送できず待ち状態となっているので、DMA−1において、前のデータ転送が未完了のためバスを使用できず、デットロックとなっている。
【0051】
本実施の形態に係るLSI100のバス構造は、アウトオブオーダで順不同にリードデータを返送し、トランザクションもアウトオブオーダで完了するものとしている。このため、
図9に示すようなデットロックは発生しない。
アウトオブオーダでデータを返す場合は、データ転送のリクエストをバスターゲット4が上げ、それらのうちの1つをバスコントローラ5が選択して転送許可を与える。バスターゲット4は、データとともに受信するバスイニシエータ3の識別子と、複数トランザクションを発行できる場合にはトランザクションの識別子とを併せて送信する。
バスの規約として受信バッファに空きがなくてもバスイニシエータ3がバス2にコマンド発行できる場合には、バスターゲット4はリクエストを上げるときにバスイニシエータ3の識別子も知らせ、バスコントローラ5はバスイニシエータ3のバッファ空き状態を応答可否条件に入れて、リードデータ返送のバス使用許可を与える。アウトオブオーダバス自体は既知の技術である。
【0052】
図10は、本実施の形態において、デットロックを回避する様子を示す図である。
上記のような手法を組み合わせることにより、デットロックを回避できる様子を
図10に示す。
図10においても、DMA−2がトレースデータの転送用で、DMA−1が通常のデータ転送である。リクエストの順番にしか動作できない
図9のインオーダ方式では4回目のバス動作が起動されたが、DMA−2の4回目とDMA−1のK+3回目がハングする。
図10のアウトオブオーダ方式では、K+3回目とK+4回目がDMA−2を追い越すことにより4回目のリードデータが返送でき、このバスレベルでのデットロック問題を回避している。
【0053】
このようなデットロックの問題は、バス2だけではなくDMAコントローラ11でも発生する。アウトオブオーダバスを用いてもDMA−2が複数チャネル動作するときに、1つのチャネルのライトまで完了しないと次のチャネル動作に移れないと
図9と同じような状態に陥る。
【0054】
本実施の形態に係るLSI100のトレース収集方式では、トレースデータ転送を行う複数チャネルのDMAコントローラでは、チャネルごとに個別のバッファ領域を持ち、それぞれのチャネルが
図8のような遷移をし、チャネル間での動作の追い越しが可能な構成とし、バスに発行する識別子をチャネルごとに変えてチャネル間でもアウトオブオーダ動作することによりデットロックを回避できる。なお、チャネルが1個しかない場合はこの問題は発生しない。
【0055】
以上のように、本実施の形態に係るLSI100のトレース収集方式によれば、アウトオブオーダ動作するバス2、アウトオブオーダ動作する複数チャネルを搭載したDMAコントローラ11により、デットロックを回避しつつ、トレースバッファ12をバスターゲット4としてトレースデータをDRAM13に簡単に転送できる。
【0056】
次に、2つ目の課題に対する効果について説明する。2つ目の課題は、トレース対象のデータ量が元々わからないことである。
DRAM13の書き込み領域のサイズをDMAで指定するが、実際の事象発生数はそれより小さいかもしれず、DMAコントローラ11は、終了条件がわからず待ち続ける可能性がある。
【0057】
本実施の形態では、プログラムがDMAコントローラ11に対して停止指令を指示するデータをレジスタに書き込む。その時点で、DMAコントローラ11のステートが(64)(
図8参照)であれば即時に停止する。
トレースバッファ12中のデータが、1回の転送データ長以上ある場合は1回分の転送後にDMAは停止する。1回の転送分にも満たないトレースデータしかない場合は、データが溜まり転送された後に停止できる。通常は、その方法でトレース全体が終了できる。
さらに、トレースバッファ12のトレースイネーブルビット49を0にして停止指示を行うと、トレースバッファ12はそのデータ残量に無関係にバッファ中の古いデータまたはダミーデータを転送し確実に終了させることができる。
図11は、転送単位データ90にダミーデータを付加した状態を示す図である。
【0058】
3つ目の課題は、トレースした場合にはDRAM13へのアクセスが増えて、トレース出力が発生に追いつかなくなるオーバラン現象を起こすことである。
まず、オーバランはトレース書き込みの優先度を通常のアクセスに比べて低い優先度で行うために発生する。その回避には、トレースの優先度を上げる方法があるが、原理的にはトレースに関わらず優先度制御として通常の技術である。しかし、この技術の適用は、トレースではない本来のアクセスが遅れてしまい、リアルタイム処理が間に合わなくなるという短所があり組み込み機器では受け入れられない場合がある。
【0059】
本実施の形態に係るLSI100のトレース収集方式では、トレース対象を絞り込む機構によりデータ量を静的に制限して、複数回に分けてトレースを採ることでリアルタイム性を確保する。トレースデータを複数回に分けて採取した場合には、その結果を併合しても都度、その合計が合わないなど再現性が悪いという課題も浮上する。
その主たる原因は、タイマーなどで規定された周期で動作する独立したプログラム単位(タスクと呼ぶ)の周期が、複数種類あり、ぶれが発生することによる。そこで、タスク間の遷移時に遷移情報を、トレースと同じ時刻情報源を用いた時刻情報とともに記録して併合時に突き合わせを行うと、ぶれの補正ができる。
例えば、周期同士の関係が2倍のときは、その組み込み機器の一番長い周期の2周期分の時間のトレース結果を採り、複数に分割したトレース結果を併合すれば少なくてもその1周期分のトレースを再現できる。また、このタスク遷移情報の格納もオーバヘッドを伴うが、その誤差を確認するためにパフォーマンスカウンタ(サイクル数カウンタ)を用いて、トレースした場合としない場合のそれぞれに対しクロックサイクル数やキャッシュミス回数などを比較判定する判定部を設けることにより、オーバヘッドを定量的に把握・確認できる。
【0060】
4つ目の課題は、オーバランやリアルタイム性に影響はないものの、トレースを採取したことにより、本来の動作より遅い動作となり分析結果の誤差が大きくなることである。
この課題は、3つ目の最初の課題(オーバーラン)と類似しており、トレース対象を絞り込むという対策も同様である。すなわち、誤差を減らすにはDRAM13にライトするデータを減らすのが効果的である。
本実施の形態に係るトレース収集方式では、トレースデータのライトもトレース対象となりうる。1バストランザクションあたりのトレースデータを8byte、バス転送を64byteとすると64byte転送のトレースにあたりトレースデータのリードとライトで計16byteつまり25%の無駄が発生する。
【0061】
トレースバッファ12からのリードは、バスターゲット4がトレースバッファ12であるという条件で、DRAM13への書き込みはバスイニシエータ3とチャネル番号とを比較判定することによりトレース対象から除外する。DRAM13への書き込み判定はプログラムから比較値であるチャネル番号をあらかじめセットできるようにすることで空いているDMAコントローラやチャネルを有効活用できる。転送先のDRAMアドレスを指定して領域を判別してもよい。アドレス指定により条件を絞り込むには
図6の事象発生判定部59のなかに、アドレスを指定する手段と比較する手段であるアドレス指定・比較部58aを設ければよい。
【0062】
上記のような無駄の範疇ではないが、パフォーマンスカウンタなど他の情報から補てんできるトレース情報は、3つ目の最初の課題で述べた選択機能(絞り込み機構)により除外できる。
図12は、本実施の形態に係るトレース要否の一例(トレース除外情報81)を示す図である。
図6の事象発生判定部59のなかには、トレース除外情報81に基づいてトレースの要否を選択するトレース選択部58bが設けられる。
図6のトレース選択部58bは、
図12のトレース除外情報81に基づいて、パフォーマンスカウンタなど他の情報から補てんできるトレース情報についてのトレースの取得を除外する。
【0063】
また、トレースデータには発生タイミングを知るために時刻方法が必須である。とくにプログラムからタスク遷移時にメモリに記録する時刻情報を記録するが、その時刻情報とトレースデータの時刻情報との突き合わせをするためには、トレース上の時刻情報にも長いビットが必要となる。
たとえば500MHzで動作するバスで20m秒間を計測するには24ビット必要であり、分解能を1μ秒に粗くしても15ビットは必須となる。しかし、平均して100μ秒ごとに事象が発生する場合には、7ビットあれば1μ秒の分解能で127μ秒までカウントでき、時間が1つ前の記録より小さくなったら1周分の128μ秒を加算して補正することが考えられる。しかし、必ずしも事象が発生しない場合には、1周後か2周後以降かの判別ができなくなる。
【0064】
そこで、以下のような時刻データの記録方法を実行する。
図13は、トレースにおける時刻データの記録方法について示す図である。
図13に示すように、時刻データを記録する92のタイミングまでに事象の記録がない場合には、92では時刻情報(時刻データ)を記録する。
図14は、時刻情報取得の回路例を示す図である。
図14の回路では、最後に記録した事象から1周時間が進み記録するべき事象がない場合には時刻情報のみを記録する。
これにより周期を間違えることなく短いビット幅で正確に記録ができる効果を得られる。
【0065】
LSI100では、タスク遷移にプログラムから繰り返し周期情報とタスク情報とがメモリ上に記録されるが、このときタスク遷移時に呼ばれたフック関数からトレースデータに付加される時刻情報と同じ時刻情報源が読み出され、メモリに記録される。
【0066】
パフォーマンスカウンタ70(
図5参照)は、一般に事象数をカウントするものである。その他にCPUのパイプラインストールサイクル数をカウントする事例は非特許文献1で開示されている。
【0067】
図15は、トレース動作対象を除外した待ち状態をカウントするパフォーマンスカウンタの回路例である。
トレーストランザクションが1サイクルでも先行したために、本来のバスアクセスやDRAMアクセスがそれ以上のサイクル間待たされるオーバヘッドであるレイテンシの増加は、
図15に示す回路を用いて、トレース動作対象を除外した待ち状態をカウントし、トレースした時とトレースしない時とのカウンタ値を比較することでその影響が判る。
【0068】
図15において、74aがバス2のレイテンシ、74bがDRAMコントローラ10のレイテンシサイクルの信号である。厳密には並列動作効果があるため、サイクル数の増加分はオーバヘッドの増加分そのものではないが、トラフィックが少ない場合は近似値として使えるため、増加分をサイクル数と近似できる。近似にしては誤差が大きい場合には、動作をシミュレータで再現しシミュレーション結果に表れるレイテンシが実測のレイテンシと一致するようにシミュレーション上のトランザクション発生タイミングを合わせこむことにより誤差を削減できる。レイテンシ計測用のカウンタを設ける場合は、パフォーマンスカウンタ70の他の情報も比較用に併用するためカウンタは複数本必要となる。
【0069】
以上のように、LSI100(トレース収集方式)は、命令実行回数やキャッシュミス回数などプログラム実行の性能の指標となる事象や、バスアクセス回数などオーバヘッドの指標となる事象の回数を選択してカウントしプログラムから読み出せるパフォーマンスカウンタ機能を搭載しかつ、トレースデータをDMA機能により記録する機能を併せ持ちかつ、プログラムが周期情報とタスク情報をメモリ上に記録とともにパフォーマンスカウンタ情報の値も記録することにより、それらの情報を相互に関連付けることが可能にする情報を提供できる。
【0070】
次に、本実施の形態において説明したLSI100のトレース収集方式についてまとめる。
【0071】
上記実施の形態に係るLSI100(トレース収集方式)は、バス、バスにリクエストを発行するバスイニシエータ、バスのリクエストに応答するバスターゲット、複数のバスイニシエータからのリクエストの調停機能、バースト転送を行えるDRAMコントローラ、DMAコントローラを含むLSI回路において、以下の手段をすべて備えている。
(a)バスのアドレス、バスのイニシエータ、リードとライトの区別、データ長、を全部または一部またはそれらを推定できる情報をトレースデータとしてメモリに記録するために、サンプルする機能。
(b)上記(a)の結果のバス転送を円滑に行うために一時的に蓄えるレジスタまたは小容量のメモリからなるバッファ。
(c)バスターゲットとしてDMAコントローラからのリクエストに対応して(b)のバッファからバスへ送出する機構。
(d)DMAコントローラにはデータ転送元として(c)を指定可能。
(e)データの転送元、データの転送先を指定できるメモリ間の転送を行うDMA機構。
(f)DMAコントローラはバスまたはDRAMが扱える転送単位に分割して(c)からのリードとDRAMコントローラへのライトを繰り返すDMA機能。
【0072】
上記実施の形態に係るLSI100(トレース収集方式)は、トレース対象のデータが揃わない状態でもバスがデットロックを起こさないバス機構を搭載した。
【0073】
上記実施の形態に係るLSI100(トレース収集方式)は、複数の領域への並行転送を行なう複数チャネルを搭載し、トレース対象のデータが揃わない状態でバスへリクエストまたはその準備を実施した状態でトレースデータの読み出しが遅延した場合でも他のチャネル動作が止まらずにトレースデータのDRAMへのライトを追い越して動作できることによりデットロックを起こさないDMAコントローラを搭載した。
【0074】
上記実施の形態に係るLSI100(トレース収集方式)は、トレース対象とするバストランザクションの種類をプログラムから選択または条件によりトレース可否を決める機能により、トレース事象の発生に対してDRAMへの転送が間に合わなくなるオーバラン状態を回避できる。
【0075】
上記実施の形態に係るLSI100(トレース収集方式)は、トレース対象とする必要のないバストランザクションの種類を固定条件またはプログラムから指定することにより除外し、トレース量を減らすことによりオーバランの抑制またトレーストランザクション発生による処理低下による計測結果の誤差を軽減できる。
【0076】
上記実施の形態に係るLSI100(トレース収集方式)は、トレースデータをDRAMに記録するために発生したバストランザクションが後続のバストランザクション動作を遅延させたことにより、システム全体の処理が遅延した影響の尺度としてバスの待ち時間を計測しプログラムから読みだし可能なカウンタを搭載した。
【0077】
上記実施の形態に係るLSI100(トレース収集方式)は、トレースデータをDRAMに記録するために発生したDRAMアクセスがバンクビジー、DRAMバスビジーなどの要因で次のDRAMへのリクエストを受信していてもDRAM起動を遅らせざるを得ない状態において、システム全体の処理が遅延した影響の尺度として遅延状態のクロックサイクル数を計測しプログラムから読みだし可能なカウンタ(待ち時間カウンタ)を搭載した。
【0078】
上記実施の形態に係るLSI100(トレース収集方式)は、バス動作におけるコマンドとアドレスからなるバス起動動作の順に関わらずに、リードデータの転送をおこないかつその動作を完了しバス動作に必要な資源を解放できるアウトオブオーダ機能を持ったバス、バスに接続されたイニシエータの調停、バスターゲットの調停を行うバスコントローラを備えた。これにより、トレース対象のデータが揃わない状態でもバスがデットロックを起こさないバス機構を実現した。
【0079】
また、上記実施の形態に係るLSI100のトレース収集方法は、バスとメモリと前記メモリを制御するメモリ制御部とを備え、トレース対象のトランザクションをトレースしたトレースデータを、前記バスを介して取得し、前記メモリに記憶するトレース収集回路のトレース収集方法において、バッファを備えるトレースバッファ回路が、前記トレースデータを取得し、取得した前記トレースデータを前記バッファに記録し、コントローラが、前記バッファから前記トレースデータを読み出すリードリクエストを、前記トレースバッファ回路をバスターゲットとして前記バスに発行し、前記トレースバッファ回路が、前記コントローラにより発行された前記リードリクエストに対応して、前記バッファに記録された前記トレースデータをリードデータとして前記バスに送出し、前記コントローラが、前記バスに送出された前記リードデータを前記メモリに書き込むライトリクエストを、前記メモリ制御部をバスターゲットとして前記バスに発行し、前記コントローラにより発行された前記ライトリクエストに対応して、前記リードデータを前記メモリに記録することを特徴とする。
【0080】
以上のように、本実施の形態に係るLSI100のトレース収集方式によれば、LSIに基本機能として搭載されているDRAMコントローラとDMAコントローラを用い、トレースバッファをバスターゲットとして簡易的に追加しても、デットロックの問題を回避し、トレース終了判断も容易にできる。一方、トレースバッファをバスイニシエータとして追加すると、バスの選択回路の増大、バス調停回路の複雑化に加えて、トレースバッファの設計量も過大となるため、本実施の形態の効果は明白である。また、本実施の形態で示したように、リアルタイム性を確保し、トレースなしの時と比べたトレース結果の事象発生数や挙動の誤差を最小にできるまたは誤差を把握し他の手段と合わせて補正ができるようになる効果がある。
【0081】
実施の形態2.
本実施の形態では、主に、実施の形態1と異なる点について説明する。
実施の形態1で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【0082】
実施の形態1では、アウトオブオーダバスの例について説明したが、本実施の形態では、インオーダバスを使った場合について説明する。
図16は、バス調停回路(バスコントローラ)を示す図である。
図16に示す回路は、バスのイニシエータが転送先として選んだターゲットと、そのターゲットが発するビジー信号群を用いて、ターゲットがビジーでないものの中からトランザクションを選択する回路である。
【0083】
本実施の形態では、
図16の回路を応用して、トレースバッファ12に転送可能なデータが揃っていなければ(リード可能通知を通知していない場合の一例)、トレースバッファ12がビジーをバスコントローラ5に発行することにより、アウトオブオーダと同様にデットロックを回避できる。
【0084】
図17は、
図16の回路を用いて、デットロックを回避する様子を示す図である、
図17では、DMA−2からの4回目の転送要求があるが、トレースバッファがビジーをアサートしているのでDMA−2にバス権を与えないためバスのデットロックは発生しない。
【0085】
次に、本実施の形態において説明したLSI100のトレース収集方式についてまとめる。
【0086】
上記実施の形態に係るLSI100(トレース収集方式)は、リードデータが揃っているまたは揃うことが確定しリード動作の準備ができていることをバスコントローラに知らせる機能を持つバスターゲットと、バス権を得る前にデータ転送のターゲットの識別情報をバスコントローラに知らせる機能を持つバスイニシエータと、それら2つの情報がともに成立するものの中からリード動作に係るバスイニシエータを選択しバス権を与える機能を備えた。
【0087】
以上のように、本実施の形態に係るLSI100のトレース収集方式によれば、インオーダバスを使ったLSI100においても、デットロックを回避することができる。
【0088】
実施の形態3.
本実施の形態では、主に、実施の形態1,2と異なる点について説明する。
実施の形態1,2で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【0089】
図18は、本実施の形態に係るDMAコントローラ11の状態遷移を示す図である。
実施の形態1で説明した
図8のDMAコントローラ11のステートに、
図18では新たなステート65が加わっている。
【0090】
図18に示すように、1回のリードバストランザクション発行前に、必ずトレースバッファ12からのキック信号を待つ制御を追加する。このキックは通常動作では必須でない場合もあり、使用の要否はプログラムからレジスタで設定する。
【0091】
通常の動作時は破線の遷移をする。この方法による回路量の増大は高々数ゲートで回路追加は容易である。
キック信号を1にする条件は、トレースバッファ12に転送できるデータが揃った時である。
【0092】
0にする条件は、転送方式により異なる。
このバスでトレースデータを連続してDRAM13に転送しないならば、1にするタイミングと同じでよい。このバスでトレースバッファ12がコマンドを受け付けた状態で、さらに次のコマンドを受け付け開始するならば、リードポインタをさらに1本追加してデータ読み出し用のリードポインタとデータ残量計算用のリードポインタに分け、コマンド受け付け時にデータ残量計算用のリードポインタを更新し、更新した結果との計算結果にてキック信号の値を決める。
【0093】
上記実施の形態に係るLSI100(トレース収集方式)は、1組のバスインターフェイスと、1組のDMA転送に対応した転送元と転送先アドレス情報を使用し、プログラムまたは専用信号などの起動機能、を持つDMA回路において、転送全体の起動とは別に、バスへのリクエストごとの起動タイミングをDMAコントローラ外部から入力し、それにより状態遷移してリードデータが揃った場合のみバスリクエストを出す機能を持つDMA回路を搭載した。
【0094】
実施の形態4.
本実施の形態では、主に、実施の形態3と異なる点について説明する。
実施の形態1〜3で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
実施の形態3では、単一チャネル動作の実施形態を示したが、ここでは複数チャネル構成のDMA回路に関する実施形態について述べる。
【0095】
図18で説明した機構を複数チャネル構成のDMAコントローラ11の各チャネルに付けると、実施の形態1で述べた各チャネルが別々の転送バッファを必要とせずに、チャネル間でバッファ共用が可能となる。
ステート65からステート61に遷移したチャネルの中からチャネルを選択すればデットロックなしに転送が可能となる。もともとチャネルごとにバッファを持たない複数チャネル実装においては回路量の増加も少なく回路変更も比較的容易である。
【0096】
上記実施の形態に係るLSI100(トレース収集方式)は、1組のバスインターフェイスと、複数組のDMA転送に対応した転送元と転送先アドレス情報と、複数組のデータバッファと、複数組の転送状態の示すレジスタを持ち、1つの組の転送が滞っても、バス起動とデータの送信と受信が他の組に影響なく行える複数チャネルの機能を持つ。
【0097】
上記実施の形態に係るLSI100(トレース収集方式)は、1組のバスインターフェイスと、複数組のDMA転送に対応した転送元と転送先アドレス情報と、プログラムまたは専用信号などの起動機能、を持つDMA回路において、転送全体の起動機能に加えて、バスへのリクエストごとの起動タイミングをDMAコントローラ外部から入力し、その起動に基づいて状態遷移しリードデータが揃った場合のみバスリクエストを出す機能を少なくても1組は持つ、複数チャネルの機能を持つ。
【0098】
実施の形態5.
本実施の形態では、主に、実施の形態1〜4と異なる点について説明する。
実施の形態1〜4で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【0099】
トレースデータとして記録する事象に、アドレスではなくデータが重要な意味を持つ場合もある。
図19は、本実施の形態に係る事象データ91を示す図である。
図19において、カッコ内の数字はビット長の例を示す。
実施の形態4まではアドレスを記録対象にしていたが、
図19の例では、アドレスではなくライトデータまたはリードデータをその記録対象とする。アドレスとデータを判別ために、事象データ91に専用のビットを設けてもよい。
【0100】
また、イニシエータを示す3ビットが特定の値のときにデータを示すことにして、解析プログラムで先行するアドレス事象と関連付けてもよい。バスに現れたすべてのトランザクションに対してデータを記録するとアドレスを記録する場合の数倍の事象量となる。
しかし、I/Oに限定すると、メモリに比べて頻度が少ないため、数パーセント増で済む。I/Oであるか否か判定には、アドレスの上位部の上限の比較、上下限の範囲比較、上位部のビットマスク後の値との一致比較をレジスタ指定した値とバスアドレス(パイプラインバスではそれを遅延させたもの)を
図6のアドレス指定・比較部58a相当の回路で比較すればよい。
【0101】
対象I/Oを全部にするか、あるいは、限定した場合は、レジスタ指定を使わずに結線論理でデコードすればよい。いずれにしろ、それらの結果を
図6のトレース候補信号40相当の信号として与えて、アドレス指定・比較部58aによる比較、または有効信号41aを生成する。
特に、メモリと異なりI/Oの場合はそのデータ挙動をプログラムからシミュレーションで再現するのが困難である。また、特に、リードデータ値によりその後のプログラム挙動が大きく変わるためデータをトレース記録する効果は大きい。
【0102】
上記実施の形態に係るLSI100(トレース収集方式)は、バスのトレース対象を選択するためにバスアドレスの全部または一部に関してその範囲を示す上限と下限を指定するレジスタ、または、アドレスの全部または一部に論理積を取った後に一致比較する対象を指定するレジスタを持ち、プログラムから書き込むことによりその選択範囲のアドレスに合致する領域へのライトデータまたはその一部のビットをトレースデータとしてRAMに記録することができる。
【0103】
実施の形態6.
本実施の形態では、主に、実施の形態1〜5と異なる点について説明する。
実施の形態1〜5で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【0104】
実施の形態5までは、
図7に示すトレースバッファ12からのDMAのデータ送信単位(データ90)1つに、複数個の事象データ91が端数なく含まれる例を示した。
図20では、1つの事象データ91がトレースバッファ12への書き込み単位と異なる一例を示す。
【0105】
図20に示すように、端数はデータ93のように無効な領域であり、転送単位データ90に対し、1か所でも複数個所でもよい。複数個所の端数を許すと、計算量が減りシフト回路は単純になるがデータ格納の利用効率は低下する場合が多くなる。逆に1か所にするとシフト回路は複雑化するがデータ効率は向上しやすい。
【0106】
図21は、(a)は事象データ91の書き込み回路の一例、(b)は事象データ91の書き込み回路の他例である。
【0107】
図21は、データの一時バッファとなるRAMのビット幅をx、事象データ長をyとし、x≧y>0.5xの場合の事象データ91の書き込み回路の例を
図21(a)と
図21(b)に示す。
【0108】
図21(a)(b)において、書き込み回路は、一時バッファRAM50、その前段または後段に置いたレジスタ53、選択回路から構成されるシフタ54である。
【0109】
図21(a)のシフタ54は、事象データ91の複数組の中から一時バッファRAM50への書き込みデータを選択する。
図21(b)のレジスタ53では、事象データ91をレジスタ53に格納するときに、レジスタ53のクロックを制御する。
なお、
図21(b)のレジスタ53のクロック制御の代わりに、一時バッファRAM50のライトイネーブルを複数に分割し、複数に分割したライトイネーブルを制御しても同様な効果が得られる。
【0110】
図22は、転送単位を跨いで事象データ91を詰める例を示す。
図22の「事象データ7」は、転送単位データ90に納まらず、転送単位データ90を跨いで格納されている。
図22では、転送単位データ90には「事象データ7」の60%程度しか格納されていない状態を示している。
これを実現する回路の構成は、
図21(a)や
図21(b)と同等であるが、データが詰まっている状態を示すカウンタ(図示なし)のビットを短く省略できないこと、また動作が複雑化することが差異点ではある。
【0111】
いずれの場合も一時バッファRAM50、レジスタ53、シフタ54ともに、1960年代から1980年代のコンピュータのCPUのシフト回路またはアライメント回路として実装された技術であるデータの加工方法である。本実施の形態では、トレースデータの配置方法が特徴である。
【0112】
上記実施の形態に係るトレースバッファ回路は、バッファに記録されたデータ量をビット単位で記録するカウンタと、データのシフト回路と、過去に記録したデータとマージする手段を持ち、トレースデータをRAMに転送する前にシフト操作を行ないデータ長の端数を詰めてRAMの空きビットを無くすことにより、トレースデータ長がRAMのビット幅に合わない、またはトレースデータ長が一定でなくても記録の効率を高める効果を持つ。
【0113】
実施の形態7.
本実施の形態では、主に、実施の形態1〜6と異なる点について説明する。
実施の形態1〜6で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【0114】
実施の形態6まではトレースデータは圧縮してない。本実施の形態では、トレースデータの圧縮について説明する。
図23は、トレースデータの格納方法として圧縮した例を示し、(a)は圧縮したトレースデータの構成、(b)〜(e)は圧縮として差分方式の一例を示す。
図23において、カッコ内の数字はビット長の例を示す。
【0115】
図23(a)に示すように、トレースデータは、圧縮方式を示す部分(91a)と圧縮後のデータ部(91b)からなる。
【0116】
図23(b)〜(e)を用いて、圧縮方法として差分方式を用いた場合の例について説明する。
図23(b)は、圧縮方式を示す部分(91a)の実施例である。
図23(c)〜
図23(e)に圧縮後のデータ部(91b)の実施例である。
【0117】
図23(b)では、圧縮方式を示す部分(91a)を3つのフィールドに分割し、アドレスの差分を示す2ビットのフィールド、リード・ライトと転送長とイニシエータを示す1ビットのフィールド、時刻を示す1ビットのフィールドがある。ともに値ゼロは、圧縮のない状態を示す。
【0118】
アドレスのビット30:3の28ビットに対し前回のアドレスとの差分計算した結果を符号付きの20ビット、12ビット、4ビットで形式を定義し、そのアドレスを表現できる最短の形式を選択する。
リード・ライトと転送長とイニシエータは前回と異なる場合のみ合計7ビットのデータ用いる。
時刻は前回との差分を符号なし4ビットで表現できれば4ビットを、そうでなければ16ビットを用いる。
【0119】
これらの差分方式を用いることにより、最悪時には4ビット増加するが、最良時には39ビット削減できる。
図24は、本実施の形態に係るトレース差分計算機構の一例を示す図である。
図24に示すトレース差分計算機構を、
図21(a)または
図21(b)の入力に挿入することにより、上述した機能を実現することができる。このトレース差分計算機構は、前回の事象データ91を記録する前回値レジスタ55と今回の事象データ91との差分を計算する差分演算器56から構成され、圧縮方式を示す部分91aと圧縮後のデータ部91bとを生成する。
【0120】
なお、前回値レジスタ55(
図24参照)とレジスタ53(
図21(a)(b)参照)を兼用してもよい。このような簡単な演算回路で圧縮することにより、バス2とDRAM13のトラフィックを軽減でき、DRAM13の領域をより小さくできるとともに、バス2やDRAM13の負荷が減り、トレースを行った場合と行わなかった場合の性能の誤差を軽減できる効果がある。
【0121】
上記実施の形態に係るトレースバッファ回路は、前回またはその近傍のトレースデータを蓄積しそられと新たなトレースデータの差分を計算し、より短いビット数で表現可能なトレースデータに圧縮した後に、バスを使って転送することにより、トレースデータ転送に伴うバス負荷を軽減しRAMの必要帯域を低くしRAMの必要領域を小さくする。
【0122】
実施の形態8.
本実施の形態では、主に、実施の形態1〜7と異なる点について説明する。
実施の形態1〜7で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【0123】
実施の形態7では差分を採取する方法による圧縮例を示したが、本実施の形態では、符号化理論を組み合わせた実施例を示す。差分ではなく、CPUのアクセス率が高いなど一般的な特性とその組み込み機器固有の特性から事前に確率計算を行い、シャノン・ファノ法による符号化方法などを適用する。
【0124】
図25は、本実施の形態に係る圧縮方式を説明するための図である。
図25に示すように、圧縮後の事象データ91cと圧縮後の事象データ長91dを圧縮演算器57が算出する。しかし、確率が低いデータでは圧縮後の事象データ長91dが長くなることがあり、それがバッファRAMの格納単位のビット幅を超えるとその実装は複雑になる。
【0125】
そこで、本実施の形態では、圧縮後の事象データ長91dが圧縮前の事象データ長91fを超えた場合には圧縮しないことを示す信号91eを生成する。信号91eが圧縮しないことを示す場合には、生のトレースデータ(圧縮前の事象データ91)と圧縮前の事象データ長91fとを、圧縮後の事象データ91cと圧縮後の事象データ長91dとして選択する。圧縮後の事象データ長91dが圧縮前の事象データ長91fを超えない場合(つまり、信号91eが圧縮することを示す場合)には、圧縮後の事象データ91cと圧縮後の事象データ長91dとを選択する。トレースデータの解析時には、圧縮の有無を示すフィールド(本実施の形態では、1ビットのフィールド91e)の記録結果から判別できる。
【0126】
上記実施の形態に係るトレースバッファ回路は、事前に採取したトレースデータのビットパタン例をもとにその出現頻度の統計をとり、その確率を利用した符号化によるデータ圧縮方法を利用した演算回路(圧縮演算器57)によるトレースデータの加工結果と、加工していないトレースデータを選択して記録することにより、より短いビット数で表現可能なトレースデータに圧縮する。
【0127】
以上のように、本実施の形態に係る圧縮方式によれば、計測対象の組み込み機器がランダムな動作をする場合には、実施の形態7の圧縮方式に比べて、この符号理論に基づく圧縮が効果的に働く一方、回路が複雑化することなく実現できる。なお、バッファRAMへの書き込みは
図21(a)または
図21(b)と同様の方式で実現できる。
【0128】
実施の形態9.
本実施の形態では、主に、実施の形態1〜8と異なる点について説明する。
実施の形態1〜8で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【0129】
本実施の形態では、実施の形態8と異なる圧縮方式の適用例を示す。
トレースデータの圧縮にLZ77など辞書を用いた圧縮方式も適用できる。これらの方式では、一般にRAM上に辞書データ用の領域を設けて辞書を参照・更新しながら圧縮をする。しかし、出現頻度の測定を行うと、(a)そのカウント用の回路とカウント値を格納するデータが辞書のエントリ数分必要となる、(b)出力待ちのバッファが多く必要となる、(c)バスとDRAMへのアクセス頻度が均等ではなく一時期に集中しやすくなる等の課題が出てくる。
【0130】
本実施の形態では、まず、圧縮したトレースデータの後に辞書を送信することにより、データを長時間蓄えるバッファの必要性を排除している。また、頻度測定による辞書の生成は行わずに、連続したデータに対する圧縮を行う。辞書があふれた時点で辞書を出力する。
【0131】
たとえば、2ビットで繰り返し回数を1,2,3,4の4種類を表し、6ビットで64種類の8ビットデータを表す。そうすると効率最大では25%に圧縮できる。辞書が満杯になると辞書を出力する方式のため、最悪効率下では、64byteのデータに対し64byteの辞書を出力し200%となる。
【0132】
図26は、本実施の形態において、圧縮対象のトレースデータを32ビット幅としたときの圧縮方式の例を示した図である。
図26に示すように、トレースデータが0xABAB5555の場合に、1byteごとに「1byte圧縮演算器103」を用いて圧縮データを得る。
【0133】
各1byte圧縮演算器103は、8ビット幅の信号109を、8ビット幅×64エントリの幅の辞書RAM101に与えて辞書検索をする。
図26において、1byte圧縮演算器103と辞書RAM101との「*1」同士は接続されていることを意味し、1byte圧縮演算器103から辞書RAM101に8ビット幅の信号109が与えられることを示す。
辞書のヒットは辞書の中身とデータが一致し、その一致したエントリ番号と有効数を示すカウンタ値から判断される。
ヒットすればエントリ番号110が辞書RAM101より返され、ヒットしなければ辞書に登録後のエントリ番号110が返されるとともに辞書カウンタを+1する。
図26において、1byte圧縮演算器103と辞書RAM101との「*2」同士は接続されていることを意味し、辞書RAM101から1byte圧縮演算器103にエントリ番号110が返されることを示す。
8ビット幅の信号109、エントリ番号110は各byteごとにある。
辞書があふれる場合は、あふれ信号107を1にして、辞書データ108を辞書RAM101から一時バッファRAM50に順に吐き出す。
【0134】
圧縮後のデータは1byte圧縮演算器103からシフト回路106に送られる。
また、元のトレースデータ(事象データ91)の各byte値(91f)は1つ前のbyte値と比較器104で比較され、連続長計算器105で何byte同じ値が連続するか決定される。
【0135】
この例では2組の2byteデータが検出され、それぞれのエントリ番号3と4が出力される。連続長はそれぞれ2byteであるがそのbyte数より1減じた2ビットの値1がデータ長として出力される。これらが一時バッファRAM50に格納される。
【0136】
この圧縮では、カウンタあふれ信号107が発生すると辞書RAM101の内容を一時バッファRAM50に吐き出すため、その間新たなトレース発生を受け付けられなくなる。それを避けるために、辞書RAM101は2倍の容量または2面持っていて、吐き出しと新たな登録・参照を継続できる。登録と参照用の辞書カウンタは1組でもよいが、吐き出し用に別カウンタを設けるか2組持つ。また、一時バッファRAM50の残数管理では、辞書データの容量分(z)の余裕をもった残数計算を行う。
【0137】
一時バッファRAM50も通常のトレースデータ書き込みと辞書データ書き込みが発生するが、時分割による並行的な書き込みをする、書き込みポートを2つにする、アドレスによりインターリブを行い隣接した領域はインターリブ機能による同時書き込みをする等、古典的な並列アクセス方式で実現できる。
【0138】
以上のような構成をとることにより、トレースデータの圧縮の長所を取り入れつつ、バスとDRAMのトラフィック増大を緩和し誤差を小さくすることができる。辞書をデータの後に吐き出すことで辞書容量を除く余分なバッファを不要とし、また辞書吐き出し時にトレースデータ採取ができなくなることはない。
【0139】
上記実施の形態に係るトレースバッファ回路は、辞書を用いたデータ圧縮アルゴリズムを適用した回路を用いてトレースデータを小さくして、より短いビット数で表現可能なトレースデータに圧縮する手法において、頻度測定を行わずに出現順に辞書に登録しつつ圧縮対象データを出力し、辞書のエントリ数をカウンタで計数し辞書があふれたら辞書をトレースデータの一部として出力し、辞書の容量分をバッファの空き容量計算に使用し、古い辞書データの出力中にも新たな辞書の更新と参照を可能にする。
【0140】
実施の形態10.
本実施の形態では、主に、実施の形態1〜9と異なる点について説明する。
実施の形態1〜9で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【0141】
実施の形態9まではトレースデータを暗号化してないものとして扱った。本実施の形態では、トレースデータを暗号化する形態について示す。
【0142】
性能を細かく分析できる機能のため詳細な動作がわかり、リバースエンジニアリングされてソフトウェアの知的財産を盗まれる恐れがある。それに対応するため、トレースデータの暗号化が有効であるが、複雑な暗号化はデータ長の増大と処理時間の増大を招くのでトレースデータには適さない。
データ長を変更しない暗号化方式としては、ビットの反転、ビットの入れ替え、複数ビット単位での補数計算、複数ビット間での値のデータ位置の入れ替えが考えられる。しかし、時刻情報やアドレスなどは、その特性から暗号化のアルゴリズムを見破られやすい。
【0143】
そこで、本実施の形態では、ビット反転による暗号化において、ビット反転のパターンを、生成多項式を循環させることにより切り替える。
図27は、ビット反転のパターンを生成多項式を循環させることにより切り替える方式を示す。これは乱数発生回路として排他論理和とシフトを繰り返す方式である。
図27に示すように、生成多項式演算部110N(Nは1以上の整数)により生成された乱数値の中で1の立っているビットに対しトレースデータのビット反転を施す。しかし、1種類の多項式である場合は、見破られる可能性が高い。そこで、生成式または初期値の異なる生成多項式を複数組(K個)持ち、一定期間ごとに使用する多項式を信号117により切り替える。
【0144】
各多項式での新たな乱数生成は、トレースデータの格納信号116が1で該当する多項式の選択信号をデコードした結果をANDした信号115で行う。どの組の多項式を使用したかを示すビットまたはフィールド値114は、平文で格納している。
【0145】
この方法のほかに、現在のトレースデータ中に次のトレース用の多項式の組を暗文として持ってもよい。本実施の形態ではビット反転の例を示したが、ビット入れ替えなどに適用しても同様な効果が得られる。このように遅延が少なく簡単な回路の組み合わせにて、トレースデータの量を増やさずに容易に暗号化し、ソフトウェアの知的財産を守ることが出来る。
【0146】
上記実施の形態に係るトレースバッファ回路は、トレースデータをバッファに記録またはバス転送する前に暗号化に必要な多項式を生成する回路(生成多項式演算部1101〜110K)を複数持ち、それらの切り替え情報もトレース出力して頻度分析による解読を困難にし、不正コピーや改竄を目的としたプログラム挙動の解析を防止する機構を持つ。
【0147】
実施の形態11.
本実施の形態では、主に、実施の形態1〜10と異なる点について説明する。
実施の形態1〜10で説明した機能構成と同様の機能構成については、同一の符号を付し、その説明を省略する。
【0148】
実施の形態10では、トレースデータそのものの暗号化について示したが、本実施の形態では、暗号によらない保護について示す。
【0149】
図28は、トレースデータのリバースエンジニアリングを防ぐ方式を示す図であり、(a)は状態遷移を示す図、(b)は回路構成(保護機能及び保護機能の解除手段(解除部))を示す図である。
図28(b)に示すように、回路は、ステート値レジスタ120により、ステートマシンを構成する。選択回路121によりステート値ごとのキー値を選択し、選択したキー値とデータバス2bよりセットされたデータ値とを比較器125により比較する。比較が一致したら比較器出力信号124によりステートが進む。
【0150】
図28(a)に示す例では、3回キーが正しく推移すると、トレースイネーブル発生回路123によりトレースイネーブルビット49をセットする信号122が1になり、
図6のトレースイネーブルビット49がイネーブル状態になる。
本実施の形態によれば、上記のような正しいシーケンスを踏まないとトレースを開始できないため、簡易な回路で防御することができる。
【0151】
上記実施の形態に係るトレースバッファ回路は、予め定めた複数回のレジスタアクセス手順、または、アクセス保護を解除するためにプログラムからセットしたキーデータとの比較により、トレース動作自体を制限する保護機能を解除する手段を持ち、それによりトレースデータの採取を禁止する保護機能を解除してから、トレース起動を行なう手順により、不正コピーを目的としたプログラム挙動の解析を防止する機構を持つ。
【0152】
以上、本発明の実施の形態について説明したが、これらの実施の形態のうち、2つ以上を組み合わせて実施しても構わない。あるいは、これらの実施の形態のうち、1つを部分的に実施しても構わない。あるいは、これらの実施の形態のうち、2つ以上を部分的に組み合わせて実施しても構わない。なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。