(57)【特許請求の範囲】
【請求項１】
Ｍ個のアドレスそれぞれにＮビット幅の記憶領域を有し、データを記憶するメモリと、
イベントデータの前記メモリへの記憶優先度が高いビットほど最上位ビット側または最下位ビット側のうち第１ビット側に並べ替えする符号化を行い前記Ｎビット幅のイベント符号を生成する符号化部と、
最初の第０のサイクルにおいて、順に生成される前記Ｎビット幅の前記イベント符号を前記メモリの前記Ｍ個のアドレスの前記Ｎビット幅の記憶領域に順次書き込み、
第Ｋのサイクル（Ｋは、１以上の整数）において、引き続き順に生成される前記Ｎビット幅の前記イベント符号のうちの前記第１ビット側のＮ／２Ｋビット幅の部分データを、各アドレスにおける前記Ｎビット幅の前記記憶領域を２Ｋ個に分割したＮ／２Ｋビット幅の部分領域のうちの前記第１ビット側の第１番目の部分領域から数えて第２Ｊ番目（Ｊは、１以上２Ｋ-1以下の整数）の部分領域に順次上書きしていき、当該上書きのラウンドを、Ｊを１から２Ｋ-1まで増加しながら実行し、
前記Ｋを１から順に増加しながら、前記第Ｋのサイクルの上書き処理を繰り返すメモリコントローラとを有する、データ記録装置。
【請求項２】
前記メモリコントローラは、
前記第Ｋのサイクルで、前記上書きのラウンドの少なくとも一部の上書きのラウンドにおいて、前記Ｍ個のアドレスのうち一部のアドレスを除く各アドレスにおける前記第２Ｊ番目の部分領域に順次上書きする、請求項１に記載のデータ記録装置。
【請求項３】
前記メモリコントローラは、前記第Ｋのサイクルにおける前記上書きを、所定の条件が満たされるまで繰り返す、請求項１に記載のデータ記録装置。
【請求項４】
前記メモリコントローラは、前記第Ｋのサイクルにおける前記上書きを、前記Ｎ／２Ｋビット幅が基準値に達するまで繰り返す、請求項１に記載のデータ記録装置。
【請求項５】
Ｍ個のアドレスそれぞれにＮビット幅の記憶領域を有するメモリへのデータ記録方法であって、
測定対象から順次発生するイベントデータの前記メモリへの記憶優先度が高いビットほど最上位ビット側または最下位ビット側のうち第１ビット側に並べ替えする符号化を行い前記Ｎビット幅のイベント符号を生成し、
最初の第０のサイクルにおいて、順に生成される前記Ｎビット幅の前記イベント符号を前記メモリの前記Ｍ個のアドレスの前記Ｎビット幅の記憶領域に順次書き込み、
第Ｋのサイクル（Ｋは、１以上の整数）において、引き続き順に生成される前記Ｎビット幅の前記イベント符号のうちの前記第１ビット側のＮ／２Ｋビット幅の部分データを、各アドレスにおける前記Ｎビット幅の前記記憶領域を２Ｋ個に分割したＮ／２Ｋビット幅の部分領域のうちの前記第１ビット側の第１番目の部分領域から数えて第２Ｊ番目（Ｊは、１以上２Ｋ-1以下の整数）の部分領域に順次上書きしていき、当該上書きのラウンドを、Ｊを１から２Ｋ-1まで増加しながら実行し、
前記Ｋを１から順に増加しながら、前記第Ｋのサイクルの上書き処理を繰り返す、データ記録方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ記録装置及びデータ記録方法に関する。
【背景技術】
【０００２】
データ記録装置は、測定対象のデータを所定のイベントのタイミングで採取し、採取したデータをメモリなどの記憶媒体に書き込む。そして、所定のタイミングでメモリ内のデータを出力し、出力されたイベントデータに対して、所定の解析が行われ、測定対象の状態判定等に利用される。
【０００３】
例えば、集積回路装置内の特定の回路が出力するデータをトレースして解析するロジックアナライザや、IoT分野におけるセンサのデータを記録し続けるデータロガーなどが、データ記録装置の例である。
【０００４】
データ記録装置については、以下の特許文献に記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平０９−１８５５３１号公報
【特許文献２】特開平１０−４０１４０号公報
【特許文献３】特開２００７−１４１０７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
データ記録装置は、小容量のメモリに大量のデータをできるだけ取りこぼすことなく記憶することが望ましい。しかしながら、メモリの容量は限られているので記憶できるデータの数には限界がある。データを圧縮して記憶することが考えられるが、測定対象のデータが高速に変化する場合は、データ圧縮に時間をかけると全てのデータを記憶できなくなる。
【０００７】
また、複数回に分けて測定データを収集することも考えられるが、観測しているイベントがまれにしか発生しない場合、何回もデータを収集することは難しい。さらに、採取したデータ量が増えるに伴い、メモリ領域の確保や開放などのメモリ管理を動的に実行することが考えられるが、メモリ管理の処理が観測しているイベントの発生に間に合わない場合は、採用できない。
【０００８】
そこで、実施の形態の第１の側面の目的は、限られた容量のメモリにイベントデータをできるだけ多く且つできるだけ多くのビットで記録するデータ記録装置及びデータ記録方法を提供することにある。
【課題を解決するための手段】
【０００９】
本開示の第１の側面は、
データを記憶するメモリと、
イベントデータの所定のビットを最上位ビット側または最下位ビット側のうち第１ビット側に並べ替えする符号化を行いイベント符号を生成する符号化部と、
第1のサイクルにおいて、前記イベント符号のうち前記第１ビット側の第１ビット幅のビット列を有する複数の第１のデータを前記メモリに順次書き込み、前記第1のサイクル後の第２のサイクルにおいて、前記イベント符号のうち前記第1ビット側のビット列を有し、前記第１ビット幅より小さいビット幅の複数の第２のデータを、前記メモリ内に書込み済みの前記複数の第１のデータの前記第１ビット側とは逆の第２ビット側の記憶領域に、順次上書きするメモリコントローラとを有する、データ記録装置である。
【発明の効果】
【００１０】
第１の側面によれば、限られた容量のメモリにイベントデータをできるだけ多く且つできるだけ多くのビットで記録することができる。
【図面の簡単な説明】
【００１１】
【図１】本実施の形態のデータ記録装置を有する半導体装置の構成を示す図である。
【図２】測定対象回路の一例を示す図である。
【図３】本実施におけるデータ記録装置によるデータ記録の例を示す図である。
【図４】本実施の形態におけるデータ記録装置の構成を示す図である。
【図５】イベント符号化部１４の符号化の一例を示す図である。
【図６】バッファメモリの構成を示す図である。
【図７】カウンタユニット１６の動作を示すフローチャート図である
【図８】カウンタユニットの構成例を示す図である。
【図９】図７，８のアドレス巻き戻し回路の例を示す図である。
【図１０】図７，８のアドレス巻き戻し回路の例を示す図である。
【図１１】第1の実施の形態におけるメモリコントローラによる書き込み処理を示すフローチャート図である。
【図１２】第1の実施の形態におけるサイクル０，１，２の書き込み処理を示す図である。
【図１３】第1の実施の形態におけるサイクル３の書き込み処理を示す図である。
【図１４】第1の実施の形態におけるサイクル４の書き込み処理を示す図である。
【図１５】第1の実施の形態におけるサイクル４の書き込み処理を示す図である。
【図１６】第２の実施の形態におけるメモリコントローラによるイベント符号の書き込み処理のフローチャート図である。
【図１７】第２の実施の形態おけるサイクル０，１，２での書き込み処理を示す図である。
【図１８】第２の実施の形態におけるサイクル３での書き込み処理を示す図である。
【図１９】第３の実施の形態におけるメモリコントローラによるイベント符号の書き込み処理のフローチャート図である。
【図２０】第３の実施の形態おけるサイクル０，１，２での書き込み処理を示す図である。
【図２１】第３の実施の形態におけるサイクル３での書き込み処理を示す図である。
【図２２】第１、第２、第３の実施の形態のバッファメモリ内に記憶されるイベント符号のビット幅とそのデータ数を示す図である。
【図２３】第３の実施の形態のバッファメモリ内に記憶されるイベント符号のビット幅とそのデータ数を示す図である。
【図２４】バッファメモリのマップを生成するプログラムのフローチャート図である。
【図２５】バッファメモリのマップを生成するプログラムのフローチャート図である。
【図２６】マップのデータ構造を示す図である。
【発明を実施するための形態】
【００１２】
図１は、本実施の形態のデータ記録装置を有する半導体装置の構成を示す図である。半導体装置１は、測定対象回路２と、測定対象回路から順次発生するイベントデータを記録するデータ記録装置１０とを有する。データ記録装置１０は、測定対象回路から順次発生するイベントデータを取得するデータ取得部１１と、取得したイベントデータを記憶するデータバッファユニット１２と、記憶されているイベントデータを半導体装置の外部に出力するデータ出力部１３を有する。
【００１３】
データ出力部１３は、有線または無線の通信路５を介して受信装置４にイベントデータを出力する。そして、イベントデータが解析される。データ出力部１３は、例えばシリアル通信でイベントデータを出力する。
【００１４】
図２は、測定対象回路の一例を示す図である。この例は、マイクロプロセッサの例である。マイクロプロセッサは、プロセッサ（CPU）６と、バス７と、周辺モジュール８と、メモリ９などを有する。プロセッサ６は、プログラムカウンタPCを有し、プログラムカウンタPCのアドレスに対応する命令をメモリ９からフェッチし、フェッチした命令を図示しないデコーダでデコードし、図示しない演算回路が命令を実行する。または、演算回路が周辺モジュール８に所定の処理を実行させる。
【００１５】
このようなマイクロプロセッサにおいて、データ記録装置１０が、プログラムカウンタのカウンタ値（アドレス）や、バスに流れるデータをイベントデータとして採取しバッファメモリに記憶し、受信装置４が記憶されたイベントデータをデータ記録装置１０から抽出して動作の解析に利用することが行われる。
【００１６】
図１、２の例おいて、測定対象回路２から取得するデータ量が、通信路５の通信帯域より十分に大きい場合、データ記録装置１０が測定対象回路のイベントデータを記録しながら、受信装置４にイベントデータを出力することは困難である。その結果、データバッファユニット１２内のデータバッファメモリの容量が限られていと、データバッファメモリが全てのイベントデータを記憶できず、データが溢れてしまうことが予想される。
【００１７】
図３は、本実施におけるデータ記録装置によるデータ記録の例を示す図である。図３の例は、データ記録装置１０は、IoT分野のデータ採取装置である。データ記録装置１０は、観測対象のデータを取得し記録する気象観測装置や道路交通量調査装置などである。データ記録装置１０は、図１と同様の構成を有し、観測対象から出力されるイベントデータを取得するデータ取得部１１と、イベントデータを記憶するデータバッファユニット１２と、そのイベントデータを出力するデータ出力部１３を有する。データ取得部１１は、観測対象のイベントデータを検出するセンサを有し、さまざまなイベントデータがセンサを介して取得される。受信装置４と、通信媒体５も、図１と同様である。
【００１８】
図３の例において、データ記録装置１０は、監視対象３のデータを取得し記憶し続ける。しかし、データバッファユニット１２内のデータバッファメモリの容量に限りがあると、通信路５の帯域や動作間隔に限界がある場合、やがてデータバッファメモリが全てのイベントデータを記憶できず、データが溢れてしまう。
【００１９】
上記の例から理解できるとおり、データ記録装置１０は、データバッファメモリにできるだけ全てのまたは多くのイベントデータを記憶すると共に、できるだけ各イベントデータの重要なデータを漏らさず記憶することが求められる。
【００２０】
図４は、本実施の形態におけるデータ記録装置の構成を示す図である。本実施の形態のデータ記録装置は、バッファメモリの容量に余裕がある場合は各イベントデータの多くのビットをメモリに記憶し、イベントデータの累積数が増大するにつれて各イベントデータのビットを所定の規則に従って間引いて短いビット幅でメモリに記憶する。これにより、データ記録装置は、データ出力部がデータバッファメモリからイベントデータを出力するタイミングが到来するまでのイベントデータの数が少なければ、各イベントデータのより多くのビットを記憶し、イベントデータの数が多ければ、各イベントデータのビット数を減らして記憶する。これにより、イベントデータの数に見合ったベストエフォートなビット幅のイベントデータを記録できる。
【００２１】
図４には、測定対象３と、データ記録装置１０と、受信装置４と、通信路５が示される。測定対象３は、前述の通り、測定対象回路や、気象状況、交通状況などである。
【００２２】
データ記録装置１０は、測定対象３の各種の状態を採取するサンプリングユニット１１を有する。サンプリングユニット１１は、図１、３のデータ取得部１１に対応する。サンプリングユニット１１は、採取したデジタルデータをイベントデータIV0-IV7として、イベントの発生を知らせるイベント信号EVENTと共に出力する。イベントデータIV0-IV7は一例として８ビットのデータである。サンプリングユニット１１は、サンプリング設定値SPに基づいて、たとえば、特定の信号値が出たときだけサンプリングする、または、サンプリングする時間帯や時間間隔といった、サンプリングするタイミングの条件を設定される。タイミング設定値SPは例えば外部から入力される。
【００２３】
データ記録装置１０は、イベント信号に同期して入力されるイベントデータIV0-IV7を符号化し、符号化されたイベント符号C0-C7を出力するイベント符号化部１４を有する。イベント符号部１４は、符号化設定値CDに基づいてイベントデータIV0-IV7を符号化し、イベント符号C0-C7に変換する。符号化とは、nビットの入力データを受け取り、ビット単位でデータの並べ替えを行った後、nビットの出力データを出力することである。符号化設定値CDは、並べ替えの規則を指示する情報である。符号化設定値CDは例えば外部から設定される。符号化設定値CDは、データ採取動作の開始以前に設定されるとし、データ採取動作中に変更されることはない。
【００２４】
図５は、イベント符号化部１４の符号化の一例を示す図である。イベント符号化部１４は、８ビットのイベントデータIV0-IV7を入力し、符号化設定値CDの並べ替え規則に基づいて、イベントデータの下位ビットIV3-IV0をイベント符号の上位ビットC7-C4に、イベントデータの上位ビットIV7-IV4をイベント符号の下位ビットC3-C0にそれぞれ配置替えする。また、イベント符号化部１４は、イベント信号EVENTを出力する。
【００２５】
図５のイベント符号化部１４は、イベントデータIV0-IV7のうち、バッファメモリ１７への記憶優先度が高いビットほど最上位ビット（MSB：Most significant bit）側に配置替えする。このような配置側規則に対応して、メモリコントローラ１５は、後述する通り、イベント符号S0-S7のMSB側のビットを優先してバッファメモリ１７に書き込む。つまり、メモリコントローラ１５は、イベント符号S0-S7のMSB側のビット列を有し、イベントの回数が多いほどそれに対応して少ないビット幅のデータを、バッファメモリ１７に書き込む。したがって、イベントの回数が増大するにしたがい、バッファメモリに書き込まれるイベント符号のビット幅は小さくなるものの、イベントの記録を継続できる。
【００２６】
イベント符号化部１４は、イベントデータのうち、記憶優先度が高いビットほど最下位ビット（LSB：Least significant bit）側に配置替えするようにしても良い。その場合は、メモリコントローラ１５は、イベント符号S0-S7のLSB側のビットを優先してバッファメモリ１７に書き込む。イベント符号化部１４の意図は、優先度に応じてビットを並べ替えることにあり、その並び順は、昇順でも降順でもその他の順序規則でも構わず、どれかに限定はされない。
【００２７】
以下の実施の形態では、イベント符号化部１４がイベントデータの記憶優先度が高いビットほどMSB側に配置替えする例について説明する。従って、本実施の形態例では、符号化設定値CDはイベントデータのどのビットが記憶優先度が高いかを示す設定値であり、イベント符号化部１４は、符号化設定値CDが指定したビットをMSB側に配置替えする。
【００２８】
データ記録装置１０は、イベント符号の全ビットまたは一部のビットを記憶するバッファメモリ１７と、バッファメモリ１７への書き込みと読み出しを制御するメモリコントローラ１５とを有する。
【００２９】
さらに、データ記録装置１０は、メモリコントローラにイベント符号のどのビットを、バッファメモリ１７内のどのビット位置に書き込むかを示す各種制御情報を生成するカウンタユニット１６を有する。カウンタユニット１６は、イベント信号EVENTに応答して、バッファメモリ１７のどのアドレスのどのビット位置に、イベント符号のどのビット幅のビット列を書き込むかの制御情報を生成し、メモリコントローラ１５に出力する。メモリコントローラは、カウンタユニットから入力される制御情報に基づいて、イベント符号をバッファメモリ１７に書き込む。
【００３０】
そして、データ記録装置１０は、バッファメモリ１７に書き込まれたイベント符号をメモリコントローラ１５を介して読み出し、外部の受信装置４に出力する、データ出力部１３を有する。
【００３１】
次に、バッファメモリ１７の構成を説明した上で、カウンタユニット１６の動作と構成と、メモリコントローラ１５によるイベント符号のバッファメモリへの書き込み動作の例を説明する。
【００３２】
以下の説明では、イベントデータは1024ビット幅（IV0-IV1023）を有する。イベントデータのうち記憶優先度が高いビットはMSB側に配置替えされ、イベント符号のMSB側の所定ビット幅のビット列がバッファメモリに書き込まれる。したがって、イベントデータのビット幅が1024の場合は、メモリコントローラは、最初はイベント符号の全ての1024ビットをバッファメモリに書き込み、イベントIDの数値が増大するにしたがい、イベント符号の上位１／２、１／４のビット幅のビット列をバッファメモリに書き込む。
【００３３】
イベントデータのビット幅は、データ採取動作中は一定である。また、どのデータをサンプリングしているかも、動作中は一定である。もしも動作中に増減させたい場合は、採取したいすべてのデータを含めた最大長をビット幅として設定しておけばよい。もしも動作中に減少する場合は、定数0や1などあらかじめ定めたダミーデータで補填すればよい。
【００３４】
図６は、バッファメモリの構成を示す図である。説明をわかりやすくするために、バッファメモリのワード幅を、イベント符号のビット数と同じ(1024)にしているが、それに限定されるものではない。現実のメモリ（RAM: Random Access Memory）のワード幅が、イベント符号のビット数より少ない場合は、複数回にわけてRAMアクセスを行えばよい。バッファメモリは、アドレス0-63それぞれに1024ビット幅のデータを記憶する。図６中、横方向に1024ビットを16分割したビット位置が示され、縦方向に64のアドレス0-63が示される。メモリコントローラは、アドレスと、書き込まれるイベント符号のビット幅と、書き込まれる開始ビット位置に基づいて、イベント符号のMSB側のあるビット幅のビット列データを、バッファメモリに書き込む。
【００３５】
図７は、カウンタユニット１６の動作を示すフローチャート図である。あらかじめ以下の定数が設定されている。
バッファメモリのビット幅：RAM_WIDTH = 1024
アドレス数（ワード数）：RAM_WORD = 64
【００３６】
さらに、カウンタユニット内のカウンタやレジスタの初期値は以下の値である。
分割数（またはサイクル数）：ndiv = 0
イベント数：nevent = 0
ラウンド数（周回数）：nround = 0
アドレス：addr = 0
開始ビット位置：sbit = 0
ビット幅：width = RAM_WIDTH = 1024
【００３７】
図７において、初めに、カウンタユニットが初期化される（S10）。すなわち、カウンタユニット内の分割数ndiv、イベント数nevent、ラウンド数nround、アドレスaddr、開始ビット位置sbit、ビット幅widthが上記の初期値に初期化される。そして、停止判定条件が満たされなければ（S11のNO）、それ以下の処理S12-S21が行われる。停止判定条件が満たされれば（S11のYES）、停止する。
【００３８】
次に、メモリコントローラがイベント符号化部からイベント符号を受信するとき（S12のYES）、カウンタユニット１６は、カウンタユニット内の制御値をメモリコントローラに出力する（S13）。制御値は、上記のアドレスaddr、開始ビット位置sbit、ビット幅widthなどである。これにより、メモリコントローラ１５は、カウンタユニットからの制御値に基づいて、受信したイベント符号をバッファメモリ内に書き込む。また、カウンタユニットはイベント数neventを＋１増加する（S14）。
【００３９】
そして、カウンタユニットは、アドレスaddrを＋１増加したaddr+1が、メモリのワード数RAM_WORDに達したか否か判定し（S15）、達していなければ（S15のNO）、アドレスaddrを＋１インクリメントする（S16）。以上が、１つのイベント符号が入力されるイベント発生時に行われる処理であり、addr+1がメモリのワード数RAM_WORDに達するまで繰り返される。イベントの発生のたびに、メモリコントローラ１５は、受信したイベント符号のMSB側のビット幅widthのビット列を、メモリバッファ１７内のアドレスaddrの記憶領域の開始ビット位置sbitに書き込む。
【００４０】
工程S15のaddr+1がワード数RAM_WORD（＝６４）に達したか否かの判定は、アドレスaddrを0-63までイベント符号を書き込んだか否かの判定、すなわちラウンド数nroundを更新するか否かの判定である。したがって、addr+1がワード数RAM_WORDに達した場合（S15のYES）、カウンタユニットは、ラウンド数nroundを＋１インクリメントする（S17）。
【００４１】
そして、カウンタユニットは、ラウンド数が更新されるたびに、開始ビット位置sbitにビット幅widthを加えたsbit+widthがバッファメモリのビット幅RAM_WIDTH(=1024)に達したか否かを判定する（S18）。この判定は、メモリバッファメモリへの書き込みサイクル（分割数ndiv）が更新されるか否かの判定である。
【００４２】
工程S18にて、sbit+widthがバッファメモリのビット幅RAM_WIDTH(=1024)に達してない間は（S18のNO）、カウンタユニットは、開始ビット位置sbitにビット幅の２倍width*2を加算して、前述のアドレスaddr＝0-63のワード領域への書き込みを行うラウンド(周回)を実行する。
【００４３】
工程S18にて、sbit+widthがバッファメモリのビット幅RAM_WIDTH(=1024)に達した場合（S18のYES）、カウンタユニットは、サイクル(分割数ndiv)を更新し（ndiv=ndiv+1）、ビット幅を1/2にし（width=width/2）、開始ビット位置をビット幅に設定（sbit=width）する（S20）。
【００４４】
そして、工程S18がいずれの判定であっても、カウンタユニットは、アドレスaddrを巻き戻し（S21）、停止判定S11に戻る。アドレスaddrの巻き戻しとは、例えば、アドレスaddrを初期値０に戻す処理である。または、後述する実施の形態２，３では、イベント数に基づいてアドレスaddrを各ラウンドの初期値、例えば０，１，２等、に戻す処理である。
【００４５】
図８は、カウンタユニットの構成例を示す図である。カウンタユニットは、例えば、プログラム可能な再構成可能デバイス（FPGA(Field Programable Gate Array)や、専用ハードウェア回路、例えば特定用途向け半導体(ASIC: Application Specific Integrated Circuit)や、SoC（System on Chip）などにより実現される。その場合、図７のフローチャートに対応するハードウェア記述言語に基づいて、ハードウェア回路として図８に示す構成のカウンタユニットを実現する。図８中、Cはカウンタを、Rはレジスタを意味する。カウンタは入力信号に応答してカウントアップし、レジスタは入力信号を記憶するものとする。図４のデータ記録装置もFPGA等で実現されるのが好ましい。
【００４６】
図８のカウンタユニット１６は、図７の工程S11の停止判定を実行する停止判定回路２５を有する。この例では、停止判定回路２５は、ビット幅widthが最少ビット幅width_ninに達した場合に、動作を停止し、停止信号STOPをメモリコントローラに出力する。なお停止判定で用いる条件判定は、これに限らない。記憶するデータ数が増加するとビット幅が短くなるが、あまりにも短くなると、記憶データがもはや意味をなさなくなるため、ビット幅を採用することには合理性がある。他の実施例として、記録できるイベント数の最大個数を制限する方法や、あらかじめ定めた信号が測定対象３内にて観測された時点で停止する方法も考えられる。
【００４７】
次に、図７のイベント符号が発生する工程S12については、カウンタユニットは、例えばイベント信号EVENTの受信により検出する。イベント信号EVENTに応答して、カウンタユニットは、アドレスのカウンタC_addrと、開始ビット位置のレジスタR_sbitと、ビット幅のレジスタR_witdhのそれぞれの値を制御値としてメモリコントローラに出力する。この出力動作S13に対応する出力配線等ついては、図８には省略されている。
【００４８】
そして、イベント信号EVENTに応答して、イベント数カウンタC_neventが＋１カウントアップする。この動作は工程S14に対応する。
【００４９】
第1の比較器CMP_1は、工程S15のラウンドの更新（または終了）を判定する回路である。第1の比較器CMP_1は、イベント信号EVENTに応答して動作し、アドレスのカウンタC_addrのアドレスaddrに＋１加算したaddr+1がバッファメモリのワード数RAM_WORD以上か否か（addr+1 ≧ RAM_WORD）を判定する。第1の比較器CMP_1は、判定結果が否定の場合（addr < RAM_WORD）、否定信号C1nを１にし、アドレスのカウンタC_addrがアドレスaddrをカウントアップする。これは工程S16に対応する。
【００５０】
第1の比較器CMP_1は、判定結果が肯定の場合（addr+1 ＝ RAM_WORD）、肯定信号C1pを１にし、ラウンド数のカウンタC_nroundをカウントアップし、第２の比較器CMP_2を動作状態に制御する。この動作は工程S18に対応する。
【００５１】
第２の比較器CMP_2は、工程S18のサイクルの更新（または終了）を判定回路である。第２の比較器CMP_2は、加算器２１の出力であるsbit+widthがメモリビット幅RAM_WIDTH以上か否か（sbit_width ≧ RAM_WIDTH）を判定する。第２の比較器は、判定結果が否定の場合、否定信号C2nを１にし、２倍回路２２を動作させ、加算器２３の出力sbit+width*2が、開始ビットレジスタR_sbitに記憶される。この場合、肯定信号C2pは０であり、セレクタSELは加算器２３の出力を選択する。また、開始ビットレジスタR_sbitは否定信号C2nを遅延させた信号に応答して記憶動作を行うようにしてもよい。以上は工程S19に対応する。
【００５２】
一方、第２の比較器CMP_2は、判定結果が肯定の場合（sbit+width = RAM_WIDTH）、肯定信号C2pを１にし、分割数のカウンタC_ndivをカウントアップし、ビット幅のレジスタR_widthにビット幅widthを１／２倍にして記憶させ、開始ビット位置のレジスタR_sbitに更新されたビット幅widthを記憶させる。開始ビット位置のレジスタR_sbitは、例えば肯定信号C2pを遅延した信号で記憶動作するようにされる。
【００５３】
最後に、カウンタユニット内のアドレス巻き戻し回路２０は、第１の比較器CMP_1の肯定信号C1pに応答してアドレスaddrの巻き戻し動作を行い、アドレスのカウンタC_addrに巻き戻したアドレスaddrがリセット値として設定される。
【００５４】
図９、図１０は、図７，８のアドレス巻き戻し回路の例を示す図である。図９に示すとおり、第1の実施の形態では、アドレス巻き戻し回路は、アドレスaddrを初期値０に巻き戻す（addr=0）。第２、第３の実施の形態については後述する。
【００５５】
［第1の実施の形態］
図１１は、第1の実施の形態におけるメモリコントローラによる書き込み処理を示すフローチャート図である。図１１には、書き込み処理のサイクル数CYC0-CYC_Kそれぞれの処理が示される。
【００５６】
図１２は、第1の実施の形態におけるサイクル０，１，２の書き込み処理を示す図である。図１３は、第1の実施の形態におけるサイクル３の書き込み処理を示す図である。図１４、図１５は、第1の実施の形態におけるサイクル４の書き込み処理を示す図である。図１２〜１５において、灰色で示された位置にイベント符号が書き込まれることが示される。記載されている0,63,64,127,128等の数値は、イベント符号ごとに割り当てられる通し番号のうち、境界部分のみを図示したものである。サンプリングされイベント符号が出力されるときに、イベント符号には0,1,2,…の通し番号（以下、イベントID(Identification)）が、識別用に割りふられているものとしている。以下、図１１乃至１４を参照して、第1の実施の形態でのメモリコントローラによるイベント符号のバッファメモリ１７への書き込み処理を説明する。
【００５７】
［サイクル０］
図１２において、まず、メモリコントローラは、サイクル０（CYC0）で、ラウンド(周回)０の書き込みを行う。ラウンド(周回)０では、メモリコントローラは、バッファメモリ１７内のアドレスaddr＝0-63に、開始ビット位置sbit=0から、イベントID0-63のビット幅width=1024のイベント符号を順次書き込む。このサイクル０では、イベント符号は分割比1/1で分割される（つまり1024ビットのイベント符号は分割されずに全てのビットが書き込まれる）。図１２のサイクル０の行に、アドレス０から６３まで、開始ビット位置０から、１０２４ビット幅のイベント符号が書き込まれているのが示される。
【００５８】
［サイクル１］
次に、メモリコントローラは、サイクル１（CYC1）で、ラウンド(周回)１の書き込みを行う。ラウンド１では、メモリコントローラは、バッファメモリ１７内のアドレスaddr＝0-63に、開始ビット位置sbit=512から、イベントID64-127のイベント符号のMSB側のビット幅width=512のビット列を順次書き込む。このサイクル１では、イベント符号は分割比1/2で分割される。図１２のサイクル１の行に示されるとおり、アドレス０から６３まで、開始ビット位置５１２から、５１２ビット幅のイベント符号が書き込まれる。
【００５９】
その結果、サイクル０、ラウンド０で書き込み済みのイベント符号の下位ビット側に、新たなイベント符号のMSB側５１２ビットのビット列が上書きされ、バッファメモリは、サイクル０、ラウンド０のイベント符号のMSB側５１２ビットだけをMSB側のビット０−５１１の位置に残し、LSB側のビット５１２−１０２３は、新たなイベント符号のMSB側５１２ビットに置き換えられる。つまり、サイクル１、ラウンド１が終了した時点で、バッファメモリに記憶されているイベント符号は、全てイベント符号のMSB側のビット幅width=RAM_WIDTH/2=512のビット列だけになる。
【００６０】
［サイクル２］
次に、メモリコントローラは、サイクル２（CYC2）で、ラウンド(周回)２，３の書き込みを行う。ラウンド２では、メモリコントローラは、バッファメモリ１７内のアドレスaddr＝0-63に、開始ビット位置sbit=256から、イベントID128-191のイベント符号のMSB側のビット幅width=256のビット列を順次書き込む。
【００６１】
さらに、ラウンド３では、メモリコントローラは、バッファメモリ１７内のアドレスaddr＝0-63に、開始ビット位置sbit=768から、イベント数192-255のイベント符号のMSB側のビット幅width=256のビット列を順次書き込む。このサイクル２では、イベント符号は分割比1/4で分割される。
【００６２】
その結果、従前に書き込まれたイベント符号の下位ビット側に、新たなイベント符号のMSB側２５６ビットのビット列が上書きされる。サイクル２、ラウンド２，３が終了した時点で、バッファメモリに記憶されているイベント符号は、全てイベント符号のMSB側のビット幅width=RAM_WIDTH/4=256のビット列だけになる。
【００６３】
［サイクル３］
図１３において、メモリコントローラは、サイクル３（CYC3）で、ラウンド(周回)４−７の書き込みを行う。ラウンド４では、メモリコントローラは、バッファメモリ１７内のアドレスaddr＝0-63に、開始ビット位置sbit=128から、イベントID256-319のイベント符号のMSB側のビット幅width=128のビット列を順次書き込む。さらに、ラウンド５では、メモリコントローラは、バッファメモリ１７内のアドレスaddr＝0-63に、開始ビット位置sbit=384から、イベントID320-383のイベント符号のMSB側のビット幅width=128のビット列を順次書き込む。ラウンド６，７も同様に、開始ビット位置sbit=640, 869からイベントID384-447, 448-511のイベント符号のMSB側128ビット幅のビット列を順次書き込む。このサイクル３では、イベント符号は分割比1/8で分割される。
【００６４】
その結果、従前に書き込まれたイベント符号の下位ビット側に、新たなイベント符号のMSB側１２８ビットのビット列が上書きされる。サイクル３、ラウンド４−７が終了した時点で、バッファメモリに記憶されているイベント符号は、全てイベント符号のMSB側のビット幅width=RAM_WIDTH/8=128のビット列だけになる。イベント数は６４×８−１＝５１１である。
【００６５】
［サイクル４］
図１４、図１５において、メモリコントローラは、サイクル４（CYC4）で、ラウンド(周回)８−１５の書き込みを行う。ラウンド８では、メモリコントローラは、バッファメモリ１７内のアドレスaddr＝0-63に、開始ビット位置sbit=64から、イベントID512-575のイベント符号のMSB側のビット幅width=64のビット列を順次書き込む。ラウンド９−１５も同様である。
【００６６】
その結果、従前に書き込まれたイベント符号の下位ビット側に、新たなイベント符号のMSB側６４ビットのビット列が上書きされる。サイクル４、ラウンド８−１５が終了した時点で、バッファメモリに記憶されているイベント符号は、全てイベント符号のMSB側のビット幅width=RAM_WIDTH/16=64のビット列だけになる。
【００６７】
［サイクル５］
図１１には、サイクル５、ラウンド（周回）16-31の書き込み処理（CYC5）、サイクル６、ラウンド（周回）25-(26-1)の書き込み処理（CYC6）が示される。さらに、一般化して、サイクルK、ラウンド(周回) 2（K-1）-(2K-1)の書き込み処理（CYCK）が示される。サイクルKは前述の分割数ndivに対応する。そして、サイクルKが、K=K+1しながら停止条件を満たすまで繰り返される。
【００６８】
［サイクルK］
一般化すると、サイクルK（=ndiv）において、メモリコントローラは、アドレス0-63に、開始ビット位置210-K, 210-K+2*width, 210-K+4*width, 210-K+6*width, ...210-widthそれぞれから、イベント符号のMSB側210-Kビット幅のビット列を順次書き込む。
【００６９】
第１の実施の形態によれば、メモリコントローラは、イベントデータの記憶優先度が高いビットをMSB側に配置替えしたイベント符号のMSB側のビット列を、イベント番号が増加するにしたがいそのビット幅widthを狭くしながら、従前にメモリに書き込まれたイベント符号のLSB側の記憶領域に上書きする。これにより、記憶済みイベント数が少ない間は、記憶されているイベント符号には記憶優先度が高いビットを含めてより多くのビットが含まれる。一方、記憶済みイベント数が増加すると、記憶されるイベント符号には、少なくとも記憶優先度が高いビットをすべてまたはできる限り多くを残している。全てのイベント符号の優先度の高い側の部分ビットデータが必ず含まれており、イベント符号の全ビットデータが失われることは無い。
【００７０】
したがって、LSIのロジックアナライザや、IoTにおけるデータロガーとして有利な特徴を有する。特に、イベントデータを記録している場合にバッファメモリ１７から記憶済みイベント符号を読み出すタイミングが早ければ、より多くのビットを有するイベント符号を読み出すことができ、タイミングが遅ければ、遅いタイミングに見合ったベストエフォートなビット幅を有するイベント符号を読み出すことができる。また、イベント発生頻度が低かったり、発生頻度が変動する場合にも、ベストエフォートな効果を提供できる。
【００７１】
［第２の実施の形態］
第１の実施の形態では、全てのイベント符号のビット幅widthがサイクルが更新されるたびに1/2される。この場合、バッファメモリに記憶されているイベント符号を読み出して、解析する工程において、読み出されたイベント符号は、LSB側のビットが失われた状態になっている。イベント符号のMSB側のビット列は残されているので、重要なビットを読み出したイベント符号から抽出することができる。しかし、読み出したイベント符号のLSB側の消失したビットを復元することはできない。
【００７２】
そこで、第２の実施の形態では、メモリコントローラは、メモリに書込み済みのイベント符号の一部には、新たなイベント符号を上書きしないように書き込みを制御する。それにより、バッファメモリに残される一部のイベント符号のLSB側のビット列に基づいて、他のイベントのイベント符号のLSB側の消失されたビット列を推測して補完しながら復元することができる。
【００７３】
たとえば、ビット値の遷移確率が高いビットを記憶優先度が高いビットとしてMSB側に配置替えしておけば、LSB側の消失されたビット列は、遷移確率が低いので、上記一部のイベントのイベント符号のLSB側のビット列と同じであると推測して、そのLSB側のビット列をそのまま復元ビットに採用する、補助的な手段を実現できる。
【００７４】
図１６は、第２の実施の形態におけるメモリコントローラによるイベント符号の書き込み処理のフローチャート図である。図１６には、サイクル０（CYC0）、１（CYC1）、２（CYC2）、３（CYC3）における書き込み処理が示される。
【００７５】
また、図１７は、第２の実施の形態おけるサイクル０，１，２での書き込み処理を示す図である。そして、図１８は、第２の実施の形態におけるサイクル３での書き込み処理を示す図である。
【００７６】
第２の実施の形態では、メモリコントローラは、以前のサイクルでバッファメモリ１７内の最も下位側（つまり最後）に書き込まれた複数のイベント符号のうち、先頭アドレスのイベント符号のLSB側には、新たなイベント符号を上書きしない。これにより、当該以前のサイクルで最も下位側に書き込まれた先頭アドレスのイベント符号は、その後の書き込み処理で下位ビット側が消失されることはない。その結果、図１７のイベントIDが０，６４のイベント符号と、図１８のイベントIDが１９０のイベント符号は、書きこまれた全てのビットがバッファメモリ内に残される。なお、イベントID、64、190等は、当初から1024より少ないビット数を書き込み記録していて、第2、第3の実施形態においても、1024ビットすべてのイベント符号が残されるわけではないことを、補足しておく。
【００７７】
これにより、バッファメモリから読み出されて受信装置４に出力されたイベント符号の、上書きにより消失した下位側のビットの値を、上記のバッファメモリ内にそのまま残されていたイベント符号の下位側のビットを抽出して充当することで、推測データとして復元することができる。
【００７８】
図１６、図１７、図１８を参照して、第２の実施の形態のメモリコントローラによるイベント符号のバッファメモリへの書き込み動作を説明する。
【００７９】
［サイクル０］
まず、サイクル０（CYC0）、ラウンド(周回)０では、メモリコントローラは、バッファメモリ１７内のアドレスaddr＝0-63に、開始ビット位置sbit=0から、イベントID0-63のビット幅width=1024のイベント符号を順次書き込む。
【００８０】
［サイクル１］
次に、サイクル１（CYC1）、ラウンド（周回）１では、メモリコントローラは、バッファメモリ１７内のアドレスaddr＝1-63に、開始ビット位置sbit=512から、イベントID64-126のビット幅width=512のイベント符号を順次書き込む。その結果、全サイクル０の最後のラウンド（周回）０で書き込まれたイベント符号のうち、先頭アドレスaddr=0のイベントIDが０の1024ビット幅のイベント符号は、書き込み時のままバッファメモリ内に残される。
【００８１】
［サイクル２］
次に、サイクル２、ラウンド（周回）２では（CYC2_R2）、メモリコントローラは、バッファメモリ１７内のアドレスaddr＝1-63に、開始ビット位置sbit=256から、イベントID127-189のビット幅width=256のイベント符号を順次書き込む。さらに、サイクル２、ラウンド(周回)３では（CYC2_R3）、メモリコントローラは、バッファメモリ１７内のアドレスaddr＝2-63に、開始ビット位置sbit=768から、イベントID190-251のビット幅width=256のイベント符号を順次書き込む。その結果、前サイクル１の最後のラウンド(周回)１（CYC1）で書き込まれたイベント符号のうち、先頭アドレスaddr=１のイベントIDが６４の512ビット幅のイベント符号は、書き込み時のままバッファメモリ内に残される。
【００８２】
［サイクル３］
図１８に示されるとおり、サイクル３、ラウンド(周回)４では（CYC3_R4）では、メモリコントローラは、バッファメモリ１７内のアドレスaddr＝1-63に、開始ビット位置sbit=128から、イベントID252-314のビット幅width=128のイベント符号を順次書き込む。さらに、サイクル３、ラウンド(周回)５（CYC3_R5）も同様に、メモリコントローラは、バッファメモリ１７内のアドレスaddr＝1-63に、開始ビット位置sbit=384から、イベントID315-377のビット幅width=128のイベント符号を順次書き込む。このラウンド４，５では、アドレスaddr＝1-63に新たなイベント符号が上書きされるので、ラウンド０の1024ビット幅のイベントIDが０のイベント符号はバッファメモリから消失しないで書き込まれたまま残される。
【００８３】
さらに、サイクル３、ラウンド(周回)６では（CYC3_R6）では、メモリコントローラは、バッファメモリ１７内のアドレスaddr＝2-63に、開始ビット位置sbit=640から、イベントID378-439のビット幅width=128のイベント符号を順次書き込む。このラウンド６によれば、アドレスaddr＝１には新たなイベント符号を上書きしない。したがって、サイクル１の最後のラウンド１で書き込んだイベントIDが６４のイベント符号は、バッファメモリから消失しないで書き込まれたときのデータのまま残される。
【００８４】
そして、サイクル３、ラウンド(周回)７では（CYC3_R7）では、メモリコントローラは、バッファメモリ１７内のアドレスaddr＝3-63に、開始ビット位置sbit=896から、イベントID440-500のビット幅width=128のイベント符号を順次書き込む。このラウンド７によれば、アドレスaddr＝２には新たなイベント符号を上書きしない。したがって、直前のサイクル２の最後のラウンド３で書き込んだイベントIDが１９０のイベント符号は、バッファメモリから消失しないで書き込まれたときのデータのまま残される。
【００８５】
［サイクルK］
上記のとおり、第２の実施の形態では、カウンタユニットから供給される制御値のうち、ビット幅width、開始ビット位置sbitは、第1の実施の形態と同じである。但し、制御値のアドレスaddrがループ処理内で再設定されるときの値、つまりアドレスの巻き戻し処理によりリセットされるアドレスaddrが、第1の実施の形態とは異なる。
【００８６】
図９には、第２の実施の形態でのアドレスの巻き戻しの演算例が示される。巻き戻されるアドレスは、addr = F(sbit)で求められる。ここで、sbit=X、addr = F(X)とされ、開始ビット位置sbit=Xが大きくなるにしたがい、リセットされるアドレスaddr = F(X)が徐々に増加する。前述のサイクル３のラウンド７の例では、開始ビット位置sbit=896であったので、図９の演算例によれば、addr=F(X)=F(896)=3となり、前述の説明と一致している。
【００８７】
図１０には、第２の実施の形態でのアドレスの巻き戻しの別の演算例が示される。図１０の例では、アドレス巻き戻し処理の演算例が一般化されて示される。これによれば、開始ビット位置sbit=Xが０を超えW/2以下では、巻き戻されたアドレスaddrは、F(X)=1である。これにより、サイクル０、ラウンド０で、アドレス０に書き込まれたイベントIDが０の1024ビット幅のイベント符号は、全てバッファメモリ内に残される。
【００８８】
同様に、開始ビットsbit=XがW/2を超えW/22以下では、巻き戻されたアドレスaddrは、F(X)=2である。これにより、サイクル１、ラウンド１でアドレス1に書き込まれたイベントIDが64の512ビット幅のイベント符号は、全てバッファメモリ内に残される。
【００８９】
したがって、第２の実施の形態では、第1の実施の形態と同様に、サイクルK（=ndiv）において、メモリコントローラが、アドレス0-63に、開始ビット位置210-K, 210-K+2*width, 210-K+4*width, 210-K+6*width, ...210-widthそれぞれから、イベント符号のMSB側210-Kビット幅のビット列を順次書き込む。但し、上記の開始ビット位置に応じて、巻き戻されるアドレスaddrは、図１０の各条件に対応するアドレスF(X)にリセットされる。
【００９０】
第２の実施の形態では、バッファメモリからイベント符号を読み出して、受信装置４で失われた下位ビットを復元する際、図１７に示したイベント1-63のイベント符号に、イベント０のイベント符号の下位側のビット列を付加してもよい。これにより、推測値で補った上での1024ビット幅のイベント符号を復元できる。同様に、イベントIDが65-189のイベント符号に、イベントIDが０の下位側のビット列と、イベントIDが６４の下位側のビット列を付加してもよい。同様に、読み出したイベント符号の消失した下位側のビットを、以前に書き込まれ消失していないイベント符号の下位側のビット列を付加して、推測値で補った上で復元することができる。
【００９１】
［第３の実施の形態］
第２の実施の形態と同様に、第３の実施の形態では、メモリコントローラは、メモリに書込み済みの一部のイベントのイベント符号のLSB側には、新たなイベント符号を上書きしないように書き込みを制御する。それにより、バッファメモリに残されていた一部のイベントのイベント符号のLSB側のビット列を推測値として補うことで、他のイベントのイベント符号のLSB側の消失されたビット列を推測しつつ復元することができる。
【００９２】
図１９は、第３の実施の形態におけるメモリコントローラによるイベント符号の書き込み処理のフローチャート図である。図１９には、サイクル０（CYC0）、１（CYC1）、２（CYC2）、３（CYC3）における書き込み処理が示される。
【００９３】
また、図２０は、第３の実施の形態おけるサイクル０，１，２での書き込み処理を示す図である。そして、図２１は、第３の実施の形態におけるサイクル３での書き込み処理を示す図である。
【００９４】
第３の実施の形態では、メモリコントローラは、以前のサイクルの各ラウンド（周回）でバッファメモリ１７内に書き込まれた複数のイベント符号のうち、先頭アドレスのイベント符号のLSB側には、新たなイベント符号を上書きしない。したがって、以前のサイクルの各ラウンド書き込まれた先頭アドレスのイベント符号は、その後の書き込み処理で下位ビット側が消失されることはない。その結果、図２０のイベント０，１，６４のイベント符号と、図２１のイベント２，６５，１２７，１８９のイベント符号は、書きこまれた全てのビットがバッファメモリ内に残される。
【００９５】
したがって、図９に示されるとおり、第３の実施の形態では、アドレスの巻き戻し処理が、アドレスaddrをサイクルK(=ndiv)のアドレス値にリセットする。すなわち、addr=ndivにリセットする。
【００９６】
図１９、図２０、図２１を参照して、第３の実施の形態のメモリコントローラによるイベント符号のバッファメモリへの書き込み動作を説明する。
【００９７】
図１９に示したサイクル０、ラウンド（周回）０では（CYC0）、メモリコントローラは、アドレスaddr=0-63に、開始ビット位置sbit=0に、イベントIDが0-63のイベント符号のビット幅1024のビット列を書き込む。この書き込みは、第１、第２の実施の形態と同じである。
【００９８】
［サイクル１］
次に、サイクル１、ラウンド１では（CYC1）、開始アドレスaddrがaddr=ndiv=1にリセットされるので、メモリコントローラは、アドレスaddr=1-63に、開始ビット位置sbit=512に、イベントIDが64-128のイベント符号のMSB側ビット幅512のビット列を書き込む。これにより、イベントIDが０のイベント符号には上書きされず、書き込まれた全てのビットが残される。
【００９９】
［サイクル２］
サイクル２、ラウンド２，３では（CYC2_R2, CYC2_R3）、開始アドレスaddrがaddr=ndiv=2にリセットされる。そして、メモリコントローラは、アドレスaddr=2-63に、開始ビット位置sbit=256, 768それぞれに、イベントIDが127-188、189-250のイベント符号のMSB側ビット幅256のビット列をそれぞれ書き込む。これにより、イベントIDが１，６４のイベント符号には上書きされず、書き込まれた全てのビットが残される。
【０１００】
［サイクル３］
サイクル３、ラウンド４−７では（CYC3_R4, CYC3_R5, CYC3_R6, CYC3_R7）、開始アドレスaddrがaddr=ndiv=3にリセットされる。そして、メモリコントローラは、アドレスaddr=3-63に、開始ビット位置sbit=128, 384, 640, 860それぞれに、イベントIDが251-311、312-372、373-433、434-494のイベント符号のMSB側ビット幅128のビット列をそれぞれ書き込む。これにより、イベントIDが２，６５，１２７，１８９のイベント符号には上書きされず、書き込まれた全てのビットが残される。
【０１０１】
［サイクルK］
サイクルKでは、メモリコントローラは、アドレスaddr=K-63に、開始ビット位置210-K, 210-K+2*width, 210-K+4*width, 210-K+6*width, ...210-widthそれぞれから、イベント符号のMSB側210-Kビット幅のビット列を順次書き込む。
【０１０２】
第３の実施の形態では、アドレスの巻き戻し処理が、addr=ndiv（＝K）となっていて、第2の実施形態のときよりもシンプルである。そして、以前の各サイクルの先頭アドレスのイベント符号は、新たなイベント符号で上書きされず、書き込み時の全てのビットがメモリ内に残される。これにより、バッファメモリから読み出されたイベント符号の消失している下位側のビットは、時間的に近い以前のラウンドの先頭アドレスのイベント符号のビットを補完することで、推測データを加えた上で復元してもよい。
【０１０３】
［実施の形態の比較］
図２２は、第１、第２、第３の実施の形態のバッファメモリ内に記憶されるイベント符号のビット幅とそのデータ数を示す図である。縦軸は、バッファメモリ内のイベント符号のビット幅を、横軸は、イベントIDの番号をそれぞれ示す。縦軸は対数であり、グラフ中に書き加えた数値は、そのプロット点における縦軸の値である。プロット点が近いために横向きの棒グラフのように見えてしまうが、実際には散布図である。図２２の３つのグラフは、いずれも、約8000個のイベント符号を記憶したときの様子を示している。
【０１０４】
記憶済みイベント数が約8000個となった時点で、第１の実施の形態では、全てのイベント符号は、MSB側の８ビットのみが残されている。それに対して、第２の実施の形態では、イベントID番号によって、バッファメモリ内に記憶されるビット数が異なる。、メモリ内に記憶されているイベント符号は、ビット幅８の数が最も多いものの、それより長いビット幅１６，３２，６４，２５６，５１２，１０２４のイベント符号もそれぞれ１個ずつ残されている。
【０１０５】
そして、第３の実施の形態では、メモリ内に記憶されているイベント符号は、８ビット幅よりも長く残されているものが増加する。この例では、ビット幅１０２４は１個、ビット幅５１２は２個、ビット幅２５６は４個（以下省略）が残される。失われたビットデータを補う目的において、ビット数が多いデータを多数残せるほうが、推測が的中する可能性が高くなることが期待できるため、その点で、第２の実施形態よりも第３の実施形態はより効果的である。しかし同じ個数のデータを記憶させる場合では、第２と第３を比較すると、第２の実施形態のほうが、最短のビット幅を長めに残すことができる。
【０１０６】
図２３は、第３の実施の形態のバッファメモリ内に記憶されるイベント符号のビット幅とそのデータ数を示す図である。縦軸と横軸は、図２２と同じである。図２３の３つのグラフはそれぞれ、記憶済みイベント数（データ数）が２０３４個、１０３３個、５５４個のときを示している。
【０１０７】
記録済みイベント数が２０３４個と多いとき、データ数が最も多いイベント符号のビット幅は３２ビットになり、イベント符号が1024ビットあったことを考慮すると、かなりのデータが失われていることがわかる。イベント数が１０３３個の時点では６４ビット幅のデータ数が多く残っており、2034個のときよりも失われるデータが少ない。イベント数が５５４個の時点では１２８ビットのデータが多く残っている。つまり、記録するイベント数が少なければ、より長いビット幅のイベント符号をメモリ内に記憶できて、イベント数が多くなると、メモリ内のイベント符号はより短いビット幅になることを、図２３で示している。バッファメモリ内に記録するイベント数は、いつバッファメモリの内容を転送するか（これはデータ転送能力と関連する）、イベントの発生頻度、といった外的要因によって決まるが、その外的要因に対してベストエフォートで適合的なデータ記録手段を提供できることが、図２３からわかる。
【０１０８】
［イベント符号の復号処理］
実施の形態では、バッファメモリ１７内には、前述した書き込み方法により書き込まれまたは上書きされたイベント符号があり、それに加えて、カウンタユニット１６内には、現在書き込み済みのイベント数neventが記憶される。
【０１０９】
そして、受信装置４（または受信装置４からイベント符号を取得した解析装置）は、バッファメモリ１７から読み出したイベント符号と、カウンタユニットから抽出したイベント数neventを受け取る。次に、受け取ったデータを用いて、バッファメモリ内のデータフォーマットを決定する。その後、データフォーマットに従って、バッファメモリのデータ（イベント符号のMSB側部分データ）を読み出し、必要に応じて補間をしつつ、イベント符号を復元する。最後に、イベント符号に対して復号処理（符号化時と逆のビットの並べ替え）を行い、元の（イベント発生時の）イベントデータに近いデータを出力して、処理を終了する。上書き失われたビットがあるときは、元通りのイベントデータには戻せないが、残っていたビットについては正確なデータとして利用できる。
【０１１０】
本実施の形態では、受信装置または解析装置は、イベント数neventに基づいて、バッファメモリ内の各ビットと、イベントIDとの対応表である、マップを生成する。このマップは、バッファメモリ内のデータフォーマットを示す。そして、受信装置または解析装置は、そのマップを参照して、バッファメモリから読み出されたビット列から各イベントIDのイベント符号を抽出する。
【０１１１】
図２４、図２５は、バッファメモリのマップを生成する手続きのフローチャート図である。図２４のフローチャートは、図７のカウンタユニットのフローチャートと類似する。図２４には、図７のカウンタを初期化する工程S10の代わりに、パラメータを初期化する工程S10Aを有し、図７のイベント符号受信工程S12がなく、図７のカウンタの値を出力する工程S13の代わりに、マップ更新工程S13Aを有する。図２５は、マップ更新工程S13Aの詳細を示す。
【０１１２】
そして、図２４の停止判定工程S11の停止条件は、イベント数neventがバッファメモリから読み出したまたはカウンタユニットから抽出したイベント番号neventと一致するときである。この工程も、図７とは異なる。
【０１１３】
図２４、２５の手続きは、高速動作を必要としないため、ソフトウェアで実装することが可能であるが、ハードウェア回路として実現しても構わない。実施例の１つとしては、受信装置または解析装置は、図２４，２５の手続きに相当するプログラムを実行するプロセッサを有し、そのプロセッサがプログラムを実行する前に、以下の定数を設定する。
バッファメモリのビット幅：RAM_WIDTH = 1024
アドレス数（ワード数）：RAM_WORD = 64
【０１１４】
そして、プロセッサは、プログラムを実行開始し、最初に以下のパラメータを初期値に初期化する（S10）。
分割数（またはサイクル数）：ndiv = 0
イベント数：nevent = 0
ラウンド数（周回数）：nround = 0
アドレス：addr = 0
開始ビット位置：sbit = 0
ビット幅：width = RAM_WIDTH = 1024
【０１１５】
そして、プロセッサがフローチャートのプログラムを実行すると、イベント数neventがカウンタユニットから抽出したイベント数neventに達するまで、工程S13-S21を繰り返し実行する。そして、イベント数neventが更新されるたびに（S14）、マップMAPを更新する（S13）。
【０１１６】
それ以外の工程S14乃至S21は、図７の各工程と同じである。つまり、イベント数がインクリメントされるたびに、イベント符号が書き込まれるアドレスaddrと、開始ビット位置sbitと、ビット幅widthとが生成される。
【０１１７】
すなわち、前述のカウンタユニットの制御信号に基づく書き込み方法によれば、バッファメモリ内のデータフォーマットは、イベント数neventがインクリメントされる毎に更新される。マップ更新処理S13Aでは、マップ内のアドレスaddrの開始ビット位置sbitからビット幅widthまでそのイベント番号neventを書き込むことで、データフォーマットを更新している。
【０１１８】
図２５のマップ更新処理S13Aによれば、プロセッサは、まず、パラメータのアドレスaddrと、開始ビット位置sbitと、ビット幅widthと、現在のイベント数（イベントIDの番号に等しい）neventを取得し（S131）、変数iを０に初期化し（S132）、変数ｉがビット幅widthに達しない間(S131のYES)、バッファメモリのビット位置sbit+i, アドレスaddrに対応するアドレスのMAPメモリに、イベント番号neventを書き込む（S134）。そして、変数ｉをインクリメントしながら、工程S133,S134を繰り返す。実施例の１つとしては、MAPメモリは、S134のプログラミング言語風表記MAP[x,y]のように、２次元配列変数として実現可能であり、2次元配列変数の横方向(x)サイズはRAM_WIDTH、縦方向(y)サイズはRAM_WORDとなる。２次元配列変数の１要素には、neventの最大値（非負の整数）を格納するのに十分なビット幅を必要とする。
【０１１９】
図２６は、マップ（2次元配列変数MAP[x,y]）のデータ構造を示す図である。マップの縦方向yのインデックス値（バッファメモリ１７のアドレスに対応）と、横方向xのインデックス値（バッファメモリ１７のビット位置に対応）は、図６、図１２等と対応している。図２６においてxrは、同一行yにおいて、同じ値が連続するときのもっとも右位置のインデックス値を示している。(xr+1)列からは別の値が右方向に連続して格納されている。つまり、…＝MAP[xr-2,y]＝MAP[xr-1,y]＝MAP[xr,y]、MAP[xr,y]≠MAP[xr+1,y]、MAP[xr+1,y]＝MAP[xr+2,y]＝…、である。このような性質をもつxrは、同一行y中には複数存在しうるが、図２６では図示を省略した。
【０１２０】
図２６の例では、バッファメモリの、アドレス3の、ビット位置0からビット位置xrに、イベントID番号が3のイベント符号が書き込まれている、ことを示している。このように、マップは、図１２等に示されたバッファメモリ１７のワードとビットが、イベント符号のどのイベントIDに対応しているかを示し、従って、バッファメモリのデータフォーマット（データ構造）を示す。
【０１２１】
受信装置または解析装置は、上記のようにして生成されたマップを参照して、バッファメモリから読み出されたイベント符号を、イベントID毎に抽出する。そして必要に応じて、各イベント符号のビット幅に基づいて、消失された下位側のビットを、他のイベント符号の下位側のビットを参考にして補間する（補完しないときは、失われたビット位置を不定値xとして別扱いする）。さらに、受信装置または解析装置は、イベント符号化部に設定した符号化設定値（配置替え対象ビット）に基づいて、復元されたイベント符号を復号し、つまり元の配置に戻し、イベントデータを生成する。失われたビットがあるとき、生成されたイベントデータは、図４サンプリングユニット１１が出力したデータIVxとは必ずしも一致しないが、優先順位が高く設定されたデータは正しく生成できる。
【０１２２】
［実施の形態の変形例］
上記の実施の形態では、イベント符号化でイベントデータの重要度の高いビットをMSB側に並べ替えし、そして、メモリコントローラは、イベント符号のビット幅を短くする際にMSB側のビット列を選択してメモリバッファに書き込む。
【０１２３】
但し、MSB側ではなく、イベント符号化で重要度の高いビットをLSB側に並べ替えし、LSB側のビット列を選択してメモリバッファに書き込んでも良い。その場合、既に書き込まれたイベント符号の上位ビット側に、新たなイベント符号が上書きされる。
【０１２４】
さらに、より一般化すれば、ビット位置を読み替える変換規則を新たに導入することで、MSB側、LSB側に限定されない、別のビット位置に並べ替えしてメモリに記憶してそのビット位置には上書きされないようにしてもよい。
【０１２５】
上記の第２の実施の形態では、メモリコントローラは、前のサイクルの最後のラウンドの先頭アドレスに書き込まれたイベント符号の領域には、次のサイクルで新たなイベント符号を上書きせず、書き込まれたイベント符号の全ビットをメモリ内に残した。しかし、前のサイクルの任意のランドの任意のアドレスに書き込まれたイベント符号の領域には、次のサイクルで新たなイベント符号を上書きしないようにしてもよい。
【０１２６】
以上の通り、本実施の形態によれば、監視対象または測定対象から取得したイベントデータを、ビット単位で重要度の高い順序で並べ替えする符号化を行い、符号化されたイベント符号をバッファメモリに書き込む。また、イベントデータのイベントIDの番号が増加するにしたがい、バッファメモリに書き込むイベント符号のビット列を短くしつつ、すでに記録済みのデータの重要度が低い側のビット位置へ、上書きをしていく。これにより、できるだけ多くのイベント符号をバッファメモリに書き込む。その結果、バッファメモリからイベント符号を読み出すタイミングが早ければ、読み出されたイベント符号はより多くのビットを含み、タイミングが遅くなったときでも重要度の高いビットは含まれるので、できるだけ多くのイベントデータをベストエフォートなビット幅で記録することができる。重要度とは、できるだけ最後まで残しておきたいビットデータ、の意味だと解釈してよい。
【０１２７】
以上の実施の形態をまとめると、次の付記のとおりである。
【０１２８】
（付記１）
データを記憶するメモリと、
イベントデータの所定のビットを最上位ビット側または最下位ビット側のうち第１ビット側に並べ替えする符号化を行いイベント符号を生成する符号化部と、
第1のサイクルにおいて、前記イベント符号のうち前記第１ビット側の第１ビット幅のビット列を有する複数の第１のデータを前記メモリに順次書き込み、前記第1のサイクル後の第２のサイクルにおいて、前記イベント符号のうち前記第1ビット側のビット列を有し、前記第１ビット幅より小さいビット幅の複数の第２のデータを、前記メモリ内に書込み済みの前記複数の第１のデータの前記第１ビット側とは逆の第２ビット側の記憶領域に、順次上書きするメモリコントローラとを有する、データ記録装置。
【０１２９】
(付記２)
前記メモリコントローラは、最初のサイクルにおいて、複数の前記イベント符号を前記メモリに順次書き込み、前記最初のサイクルの次のサイクルにおいて、前記イベント符号のうち前記第1ビット側のビット列を有し、前記イベント符号より小さいビット幅の複数の第３のデータを、前記メモリ内に書込み済みの前記複数のイベント符号の前記第１ビット側とは逆の第２ビット側の記憶領域に、順次上書きする、付記１に記載のデータ記録装置。
【０１３０】
（付記３）
前記メモリは、Ｍ個のアドレスそれぞれに、Ｎビット幅の記憶領域を有し、
前記各サイクルは、１乃至Ｍのアドレスに前記複数のデータであって前記Ｎビット幅より小さいビット幅のデータを順次上書きするラウンドを複数回有し、
前記各サイクルは、前サイクルのラウンド数の２倍の回数のラウンドを有する、付記１に記載のデータ記録装置。
【０１３１】
（付記４）
前記メモリコントローラは、
前記第２のサイクルで、前記第２のサイクルより前のサイクルで前記メモリに書き込まれた複数のデータのうち一部のデータを除く複数のデータの前記第２ビット側の記憶領域に、前記第２のデータを上書きする、付記１に記載のデータ記録装置。
【０１３２】
（付記５）
前記メモリは、Ｍ個のアドレスそれぞれに、Ｎビット幅の記憶領域を有し、
前記メモリコントローラは、
前記第１のサイクルにおいて、前記イベント符号のうち前記第1ビット側のビット列を有し、前サイクルで前記メモリに上書きしたデータの１／２のビット幅を有する複数の前記第１のデータを、前記メモリ内の複数のアドレスにおいて書込み済みの前記複数のデータの前記第２ビット側の記憶領域に、順次上書きし、
前記第２のサイクルにおいて、前記イベント符号のうち前記第1ビット側のビット列を有し、第１のサイクルで前記メモリに上書きした第１のデータの１／２のビット幅を有する複数の前記第２のデータを、前記メモリ内の複数のアドレスにおいて書込み済みの前記複数のデータの前記第２ビット側の記憶領域に、順次上書きする、付記１に記載のデータ記録装置。
【０１３３】
（付記６）
前記メモリコントローラは、
前記第２のサイクルで、前記第２のサイクルより前のサイクルで書き込まれたデータの一部を除くデータの前記第２ビット側の記憶領域に、前記第２のデータを上書きする、付記５に記載のデータ記録装置。
【０１３４】
(付記７)
前記第２のサイクルは、１乃至Ｍのアドレスに前記複数の第２のデータを順次上書きするラウンドを、前記第１のデータが前記Ｎビット幅方向に書き込まれた数の２倍の回数有し、
前記メモリコントローラは、前記第２のサイクルで、前記第２のサイクルより前のサイクルの一部のラウンドで書き込まれたデータの一部を除くデータの前記第２のビット側の記憶領域に、前記第２のデータを上書きする、付記５に記載のデータ記録装置。
【０１３５】
（付記８）
前記メモリコントローラは、前記第２のサイクルにおける前記上書きを、所定の条件が満たされるまで繰り返す、付記１に記載のデータ記録装置。
【０１３６】
（付記９）
前記メモリコントローラは、前記第２のサイクルにおける前記上書きを、前記第２のデータのビット幅が基準値に達するまで繰り返す、付記１に記載のデータ記録装置。
【０１３７】
（付記１０）
前記メモリコントローラは、前記第２のサイクルにおける前記上書きを、前記イベントデータのイベント数が基準回数に達するまで繰り返す、付記１に記載のデータ記録装置。
【０１３８】
（付記１１）
さらに、
測定対象から順次発生するイベントデータを取得するデータ取得部と、
前記メモリに記憶されたイベント符号を出力する出力部とを有する、付記１に記載のデータ記録装置。
【０１３９】
（付記１２）
測定対象から順次発生するイベントデータの所定のビットを最上位ビット側または最下位ビット側のうち第１ビット側に並べ替えする符号化を行いイベント符号を生成し、
第1のサイクルにおいて、前記イベント符号のうち前記第１ビット側の第１ビット幅のビット列を有する複数の第１のデータをメモリに順次書き込み、
前記第1のサイクル後の第２のサイクルにおいて、前記イベント符号のうち前記第1ビット側のビット列を有し、前記第１ビット幅より小さいビット幅の複数の第２のデータを、前記メモリ内に書込み済みの前記複数の第１のデータの前記第１ビット側とは逆の第２ビット側の記憶領域に、順次上書きする、データ記録方法。
【０１４０】
（付記１３）
さらに、
最初のサイクルにおいて、複数の前記イベント符号を前記メモリに順次書き込み、前記最初のサイクルの次のサイクルにおいて、前記イベント符号のうち前記第1ビット側のビット列を有し、前記イベント符号より小さいビット幅の複数の第３のデータを、前記メモリ内に書込み済みの前記複数のイベント符号の前記第１ビット側とは逆の第２ビット側の記憶領域に、順次上書きする、付記１２に記載のデータ記録方法。
【符号の説明】
【０１４１】
１：半導体装置
２：測定対象回路
３：観測対象
４：受信装置
５：通信路
１０：データ記録装置
１１：データ取得部
１２：データバッファユニット
１３：データ出力部
１４：イベント符号化部
IV0-IV7：イベントデータ
S0-S7：イベント符号
１５：メモリコントローラ
１６：カウンタユニット
１７：バッファメモリ
ＳＰ：サンプリング設定値
ＣＤ：符号化設定値
RAM_WIDTH：バッファメモリのビット幅
RAM_WORD：アドレス数（ワード数）
ndiv：分割数（またはサイクル数）
nevent：イベント数
nround：ラウンド数（周回数）
addr：イベント符号が書き込まれるメモリ内のアドレス
sbit：イベント符号が書き込まれるメモリ内の開始ビット位置
width：メモリに書き込まれるイベント符号のビット幅
【図１】
0006687837.tif 000002
【図２】
0006687837.tif 000003
【図３】
0006687837.tif 000004
【図４】
0006687837.tif 000005
【図５】
0006687837.tif 000006
【図６】
0006687837.tif 000007
【図７】
0006687837.tif 000008
【図８】
0006687837.tif 000009
【図９】
0006687837.tif 000010
【図１０】
0006687837.tif 000011
【図１１】
0006687837.tif 000012
【図１２】
0006687837.tif 000013
【図１３】
0006687837.tif 000014
【図１４】
0006687837.tif 000015
【図１５】
0006687837.tif 000016
【図１６】
0006687837.tif 000017
【図１７】
0006687837.tif 000018
【図１８】
0006687837.tif 000019
【図１９】
0006687837.tif 000020
【図２０】
0006687837.tif 000021
【図２１】
0006687837.tif 000022
【図２２】
0006687837.tif 000023
【図２３】
0006687837.tif 000024
【図２４】
0006687837.tif 000025
【図２５】
0006687837.tif 000026
【図２６】
0006687837.tif 000027