(57)【特許請求の範囲】
【請求項１】
第１の検証対象の動作をシミュレートする第１の検証対象シミュレート手段と、前記第１の検証対象に接続される第２の検証対象の動作をシミュレートする第２の検証対象シミュレート手段との論理検証を行う論理検証プログラムに用いられると共に、前記第１の検証対象シミュレート手段と前記第２の検証対象シミュレート手段との間の通信経路の動作をコンピュータにシミュレートさせる通信経路シミュレートプログラムにおいて、
前記コンピュータを、
ライトポインタ値を保持するライトポインタ、
リードポインタ値を保持するリードポインタ、
複数のエントリを有し、前記第１の検証対象シミュレート手段が出力した第１の通信情報を前記ライトポインタが保持するライトポインタ値が示す第１のエントリに保持すると共に、前記リードポインタが保持するリードポインタ値が示す第２のエントリに保持された第２の通信情報を前記第２の検証対象シミュレート手段に出力するバッファ、
前記第１の検証対象シミュレート手段が出力した第１の通信情報に含まれるリクエストコードに基づいて、前記第１の検証対象シミュレート手段からアドレスまたはデータが第１の通信情報として出力される時期を判断し、該時期に前記第１の検証対象シミュレート手段から出力された第１の通信情報を保持する履歴データ保持手段、
として機能させることを特徴とする通信経路シミュレートプログラム。
【請求項２】
前記通信経路シミュレートプログラムはさらに、
前記コンピュータを、
ライトポインタ値を設定すると共に、リードポインタ値を設定する制御手段として機能させることを特徴とする請求項１記載の通信経路シミュレートプログラム。
【請求項３】
前記通信経路シミュレートプログラムはさらに、
前記コンピュータを、
前記バッファに接続され、前記バッファが出力する第２の通信情報の全部または一部を所定の値に書き換えるエラー挿入手段として機能させることを特徴とする請求項１または２記載の通信経路シミュレートプログラム。
【請求項４】
論理検証を行う論理検証プログラムにおいて、
コンピュータを、
第１の検証対象の動作をシミュレートし、第１の通信情報を出力する第１の検証対象シミュレート手段、
第２の検証対象の動作をシミュレートし、第２の通信情報を入力を受け付ける第２の検証対象シミュレート手段、
ライトポインタ値を保持するライトポインタと、リードポインタ値を保持するリードポインタと、前記第１の検証対象シミュレート手段と前記第２の検証対象シミュレート手段との間の通信経路に挿入されると共に複数のエントリを有し、前記第１の検証対象シミュレート手段が出力した第１の通信情報を前記ライトポインタが保持するライトポインタ値が示す第１のエントリに保持すると共に、前記リードポインタが保持するリードポインタ値が示す第２のエントリに保持された第２の通信情報を前記第２の検証対象シミュレート手段に出力するバッファと、前記第１の検証対象シミュレート手段が出力した第１の通信情報に含まれるリクエストコードに基づいて、前記第１の検証対象シミュレート手段からアドレスまたはデータが第１の通信情報として出力される時期を判断し、該時期に前記第１の検証対象シミュレート手段から出力された第１の通信情報を保持する履歴データ保持手段とを有する通信経路シミュレート手段、
として機能させることを特徴とする論理検証プログラム。
【請求項５】
前記論理検証プログラムはさらに、
前記コンピュータを、
前記ライトポインタにライトポインタ値を設定すると共に、前記リードポインタにリードポインタ値を設定する制御手段として機能させることを特徴とする請求項４記載の論理検証プログラム。
【請求項６】
前記論理検証プログラムにおいて、
前記通信経路シミュレート手段はさらに、
前記コンピュータを、
前記バッファに接続され、前記バッファが出力する第２の通信情報の全部または一部を所定の値に書き換えるエラー挿入手段として機能させることを特徴とする請求項４または５記載の論理検証プログラム。
【請求項７】
第１の検証対象の動作をシミュレートする第１の検証対象シミュレート手段と、前記第１の検証対象に接続される第２の検証対象の動作をシミュレートする第２の検証対象シミュレート手段とを通信させて、前記第１の検証対象シミュレート手段と前記第２の検証対象シミュレート手段との論理検証を行う論理検証方法において、
コンピュータが、
ライトポインタに、ライトポインタ値を保持し、
リードポインタに、リードポインタ値を保持し、
前記第１の検証対象モジュールから、第１の通信情報を出力させ、
前記第１の検証対象モジュールが出力した第１の通信情報に含まれるリクエストコードに基づいて、前記第１の検証対象モジュールからアドレスまたはデータが第１の通信情報として出力される時期を判断し、該時期に前記第１の検証対象モジュールから出力された第１の通信情報を保持し、
バッファが有する複数のエントリのうち、前記第１の検証対象モジュールが出力した第１の通信情報を、前記ライトポインタが保持するライトポインタ値が示す第１のエントリに保持し、
前記バッファ内の、前記リードポインタが保持するリードポインタ値が示す第２のエントリに保持された第２の通信情報を出力し、
前記第２の検証対象シミュレート手段に、出力された第２の通信情報を入力する、
ことを特徴とする論理検証方法。
【請求項８】
前記論理検証方法はさらに、
前記コンピュータが、
前記ライトポインタにライトポインタ値を設定すると共に、前記リードポインタにリードポインタ値を設定することを特徴とする請求項７記載の論理検証方法。
【請求項９】
前記論理検証方法はさらに、
前記コンピュータが、
前記バッファが出力する第２の通信情報の全部または一部を所定の値に書き換えることを特徴とする請求項７または８記載の論理検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は論理検証に用いられる通信経路モジュール、論理検証プログラム、および論理検証方法に関する。
【背景技術】
【０００２】
電子回路のハードウェアの論理検証作業では、論理シミュレーションが行われる。論理シミュレーションにおいては、当該電子回路を含む現実の製品にて起こり得る様々な動作、状態を発生させ、想定通りの動作をするかどうかの確認が行われる。各種バスを用いて通信を行うモジュールの論理シミュレーションについても同様である。
【０００３】
例えば、バスアクセス機能の論理検証を行う場合、仮想バスモデルで任意サイクルだけ待たせてバスアクセス許可信号を発行する技術がある。また、プロセッサモデルがバス使用リクエストなどをバスモデルへ渡し、当該バスモデルからバス使用許可を得るシミュレーションモデルも考えられている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−１１３８６２号公報
【特許文献２】特開２００６−３１８２０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、従来の論理シミュレーション技術では、複数の回路間でバスを介して受け渡す通信情報の伝送時に発生するレイテンシ（遅延）、レイテンシのばらつき、および伝送エラーの発生等はシミュレーションの対象とされていなかった。そのため、バスを介して複数の回路間でレイテンシを伴った通信が行われる場合の動作の論理検証が不十分であった。
【０００６】
本発明はこのような点に鑑みてなされたものであり、複数の回路間の通信に任意のレイテンシ、および伝送エラーがある場合の動作の論理検証を可能とする通信経路モジュール、論理検証プログラム、および論理検証方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、通信経路モジュールが提供される。通信経路モジュールは、第１の検証対象モジュールと第１の検証対象モジュールに接続される第２の検証対象モジュールとの論理検証を行う論理検証プログラムに用いられる。また通信経路モジュールは、第１の検証対象モジュールと第２の検証対象モジュールとの間の通信経路に挿入される。そして通信経路モジュールは、コンピュータをライトポインタ手段、リードポインタ手段、およびバッファ手段として機能させる。ライトポインタ手段は、ライトポインタ値を保持する。リードポインタ手段は、リードポインタ値を保持する。バッファ手段は、複数のエントリを有し、第１の検証対象モジュールが出力した第１の通信情報をライトポインタ手段が保持するライトポインタ値が示す第１のエントリに保持する。またバッファ手段は、リードポインタ手段が保持するリードポインタ値が示す第２のエントリに保持された第２の通信情報を第２の検証対象モジュールに出力する。
【発明の効果】
【０００８】
上記通信経路モジュールによれば、複数の回路間の通信に任意のレイテンシ、および伝送エラーがある場合の動作の論理検証が可能となる。
【図面の簡単な説明】
【０００９】
【図１】第１の実施の形態の機能を示すブロック図である。
【図２】第２の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。
【図３】検証対象のハードウェア構成の一例を示す図である。
【図４】擬似バスモジュールを含むシミュレーションモデルを示すブロック図である。
【図５】テストベンチが有する機能を示すブロック図である。
【図６】レイテンシ情報記憶部のデータ構造の一例を示す図である。
【図７】変更対象データの選択例を示す図である。
【図８】エラー挿入フラグとエラー挿入動作との対応関係を示す図である。
【図９】挿入エラー情報記憶部のデータ構造の一例を示す図である。
【図１０】テストベンチの処理手順の一例を示すフローチャートである。
【図１１】パラメータ記憶部のデータ構造の一例を示す図である。
【図１２】擬似バスモジュールの機能を示すブロック図である。
【図１３】レイテンシ発生時のライトポインタとリードポインタとの状況を示す図である。
【図１４】シミュレーション手順の一例を示すフローチャートである。
【図１５】リクエストコードのコード種別を示す図である。
【図１６】通信情報の採取例を示す図である。
【図１７】バストレースデータ記憶部に格納される情報のデータ構造の一例を示す図である。
【図１８】バストレース処理の手順の一例を示すフローチャートである。
【図１９】エラー挿入処理の手順を示すフローチャートである。
【図２０】第３の実施の形態の検証対象のハードウェア構成を示す図である。
【図２１】パラレル・シリアル変換前の信号同士のパラレル接続を行ったハードウェア構成を示す図である。
【図２２】パケットの通信例を示す図である。
【図２３】第３の実施の形態のシミュレーションモデルを示す図である。
【図２４】擬似バスモジュールの機能を示すブロック図である。
【図２５】レイテンシ発生時のライトポインタとリードポインタとの状況を示す図である。
【図２６】エミュレーションシステムの構成例を示す図である。
【発明を実施するための形態】
【００１０】
以下、本実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
第１の実施の形態では、ハードウェアの論理検証作業時の論理シミュレーションにおいて、現実の製品にて起こり得る様々な動作、状態を発生させ、想定通りの動作をするかどうか確認する。例えば、論理シミュレーションにおいて、各種バスでの通信にて現実の製品で起こり得るレイテンシや伝送エラーを発生させないと、検証としては不十分となってしまう。そこで、第１の実施の形態では、現実の製品で起こり得るレイテンシとレイテンシのばらつきや、伝送エラーの発生についてもシミュレーション可能としている。このようなシミュレーションを行えば、検証カバレッジ（どのような範囲で、どの程度詳しくテストが行われたか）が向上する。
【００１１】
また、障害検出時の障害調査や想定通りの試験が行われているかどうかの確認時に、各種バスにて行われる通信について内容を解析する場合がある。このとき、各種バスの動作には長いサイクルかかることも多いため、検証対象モジュールについてバスの入出力信号をトレースする等、シミュレーション時の全動作状態を記録することは現実的ではない。そこで、第１の実施の形態では、各種バスのシミュレーション結果について、必要最小限の情報を取得することを可能としている。
【００１２】
図１は、第１の実施の形態の機能を示すブロック図である。論理検証プログラムは、第１の検証対象モジュール手段１、第２の検証対象モジュール手段２、および通信経路モジュール手段３を含む。通信経路モジュール手段３で実現される機能は、第１の検証対象モジュール手段１と第２の検証対象モジュール手段２とで実現される機能間の通信経路に挿入される。そして、通信経路モジュール手段３は、コンピュータを、ライトポインタ手段３ａ、リードポインタ手段３ｂ、バッファ手段３ｃ、制御モジュール手段３ｄ、履歴データ保持モジュール手段３ｅ、およびエラー挿入モジュール手段３ｆとして機能させる。
【００１３】
ライトポインタ手段３ａは、データを書き込むバッファ手段３ｃのエントリを指定するライトポインタ値を保持する。リードポインタ手段３ｂは、データを読み出すバッファ手段３ｃのエントリを指定するリードポインタ値を保持する。例えば、ライトポインタ手段３ａが保持するライトポインタ値の初期値と、リードポインタ手段３ｂが保持するリードポインタ値の初期値とは、互いに異なる値である。またライトポインタ手段３ａは、例えば、通信経路における通信情報の転送周期の１サイクルごとに、ライトポインタ値を所定値ずつカウントアップする。ライトポインタ値がバッファ手段３ｃの最後のエントリに達すると、ライトポインタ手段３ａは、次のサイクルでライトポインタ値をバッファ手段３ｃの最初のエントリに変更する。リードポインタ手段３ｂも、通信経路における通信情報の転送周期の１サイクルごとに、リードポインタ値を所定値ずつカウントアップする。リードポインタ値がバッファ手段３ｃの最後のエントリに達すると、リードポインタ手段３ｂは、次のサイクルでリードポインタ値をバッファ手段３ｃの最初のエントリに変更する。
【００１４】
上述の通り、バッファ手段３ｃは、複数のエントリを有する。エントリは、バッファ手段３ｃの単位記憶領域である。例えばエントリは、通信経路を介して１サイクルで送信可能なデータ量に相当する記憶容量を有する。バッファ手段３ｃは、第１の検証対象モジュール手段１が出力した第１の通信情報５を、ライトポインタ手段３ａが保持するライトポインタ値が示す第１のエントリに保持する。またバッファ手段３ｃは、リードポインタ手段３ｂが保持するリードポインタ値が示す第２のエントリに保持された第２の通信情報６を、第２の検証対象モジュール手段２に出力する。
【００１５】
制御モジュール手段３ｄは、通信経路モジュール手段３を制御する。制御モジュール手段３ｄは、ライトポインタ手段３ａにライトポインタ値を設定すると共に、リードポインタ手段３ｂにリードポインタ値を設定する。
【００１６】
エラー挿入モジュール手段３ｆは、バッファ手段３ｃに接続され、バッファ手段３ｃが出力する第２の通信情報６の全部または一部を所定の値に書き換える。例えばエラー挿入モジュール手段３ｆは、所定の頻度で通信情報を選択し、選択した通信情報の内容を書き換える。すると書き換え後の第２の通信情報６ａが、第２の検証対象モジュール手段２に出力される。なお、エラー挿入モジュール手段３ｆがエラー挿入対象として通信情報６を選択しなかった場合は、バッファ手段３ｃから出力された通信情報６が第２の検証対象モジュール手段２にそのまま出力される。
【００１７】
履歴データ保持モジュール手段３ｅは、第１の検証対象モジュール手段１に接続され、第１の検証対象モジュールが出力した通信情報を保持する。例えば履歴データ保持モジュール手段３ｅは、アドレスまたはデータを含む通信情報を保持する。その場合、例えば履歴データ保持モジュール手段３ｅは、通信情報に含まれる一種のコマンドであるリクエストコードに基づいて、第１の検証対象モジュール手段１からアドレスまたはデータが通信情報として出力される時期を判断する。そして履歴データ保持モジュール手段３ｅは、判断した時期に第１の検証対象モジュール手段１から出力された通信情報を保持する。
【００１８】
このような通信経路モジュール手段３によれば、第１の検証対象モジュール手段１から出力された第１の通信情報５が、通信経路モジュール手段３に入力される。通信経路モジュール手段３では、履歴データ保持モジュール手段３ｅにより、第１の通信情報５が有意な情報か否かが判断される。例えばアドレスまたデータであれば有意な情報と判断される。有意な情報であれば、履歴データ保持モジュール手段３ｅにより第１の通信情報５が保持される。
【００１９】
また第１の通信情報５は、ライトポインタ手段３ａが保持するライトポインタ値で示されるバッファ手段３ｃ内のエントリに格納される。他方、リードポインタ手段３ｂが保持するリードポインタ値で示されるバッファ手段３ｃ内のエントリからは第２の通信情報６が出力される。
【００２０】
出力された第２の通信情報６は、エラー挿入モジュール手段３ｆによってエラー挿入の要否が判定される。エラー挿入を行う場合、エラー挿入モジュール手段３ｆは、第２の通信情報６内のデータ「data#0」をデータ「data#99」に変更する。そして、変更後のデータ「data#99」を含む第２の通信情報６ａが、第２の検証対象モジュール手段２に出力される。第２の検証対象モジュール手段２は、通信経路モジュール手段３から出力された第２の通信情報６ａの入力を受け付ける。
【００２１】
なお、第１の検証対象モジュール手段１からの第１の通信情報５の出力から、第２の検証対象モジュール手段２への第２の通信情報６ａの入力までの一連の処理は、例えばシミュレーションの１サイクル内で実行される。
【００２２】
このように、バスなどの通信経路の通信環境に注目し、これを擬似的に表現する通信経路モジュール手段３により論理シミュレーションを行うことにより、実際の製品を用いることなく、各種バスを持つハードウェア開発における論理検証の効率的な実現が可能となる。すなわち、バスが任意のレイテンシを有する場合の動作の検証、通信情報の内容が通信中に変化してしまった場合の動作の検証が可能となる。例えばライトポインタ値とリードポインタ値とが、バッファ手段３ｃのエントリで２つ分ずれている場合を想定する。この場合、バッファ手段３ｃに保持された第１の通信情報がバッファ手段３ｃから出力されるのは、バッファ手段３ｃに第１の通信情報を保持したサイクルの２サイクル後である。すなわち、２サイクルのレイテンシを伴った通信がシミュレートされる。
【００２３】
しかも、通信情報のすべてを履歴として保持するのではなく、シミュレーション結果の解析に有用な通信情報のみを履歴として保存することで、通信情報の履歴保存用の記憶容量の削減が可能となる。
【００２４】
なお、第１の実施の形態では通信経路モジュール手段３内に制御モジュール手段３ｄを設けているが、制御モジュール手段３ｄは、通信経路モジュール手段３外に設けてもよい。
【００２５】
〔第２の実施の形態〕
次に、２の実施の形態について説明する。第２の実施の形態は、論理検証シミュレーションの機能をより詳細に示すものである。
【００２６】
図２は、第２の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。コンピュータ１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０８を介してＲＡＭ（Random Access Memory）１０２と複数の周辺機器が接続されている。
【００２７】
ＲＡＭ１０２は、コンピュータ１００の主記憶装置として使用される。ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。
【００２８】
バス１０８に接続されている周辺機器としては、ハードディスクドライブ（ＨＤＤ:Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、および通信インタフェース１０７がある。
【００２９】
ＨＤＤ１０３は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３は、コンピュータ１００の二次記憶装置として使用される。ＨＤＤ１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、二次記憶装置としては、フラッシュメモリなどの半導体記憶装置を使用することもできる。
【００３０】
グラフィック処理装置１０４には、モニタ１１が接続されている。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って、画像をモニタ１１の画面に表示させる。モニタ１１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００３１】
入力インタフェース１０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース１０５は、キーボード１２やマウス１３から送られてくる信号をＣＰＵ１０１に送信する。なお、マウス１３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３２】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク１４に記録されたデータの読み取りを行う。光ディスク１４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク１４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００３３】
通信インタフェース１０７は、ネットワーク１０に接続されている。通信インタフェース１０７は、ネットワーク１０を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００３４】
以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。すなわち、設計されたハードウェアの回路が正しく動作するかどうかを、ソフトウェアによるシミュレーションによって検証することができる。シミュレーションによる検証対象となるハードウェアは、例えば、複数の回路と、それらの回路を接続するバスとで構成される。
【００３５】
図３は、検証対象のハードウェア構成の一例を示す図である。図３の例では、第１の回路２１と第２の回路２２とがバス３０，４０でそれぞれ接続されている。バス３０は、第１の回路２１から出力された通信情報を、第２の回路２２に転送するバスである。バス４０は、第２の回路から出力された通信情報を、第１の回路２１に転送するバスである。なお、通信情報には、データ（Data）、当該データの有効／無効を示すＶＡＬＩＤ信号、一種のコマンドであるリクエストコード（Request Code）、データの送信先を示す送信先アドレス（Destination Address）などが含まれる。
【００３６】
バス３０は、複数の経路３１，３２，３３，・・・を有している。経路３１，３２，３３，・・・は、それぞれ複数の伝送線を有している。そして経路３１，３２，３３，・・・ごとに個別の通信情報が転送可能である。
【００３７】
バス４０は、複数の経路４１，４２，４３，・・・を有している。経路４１，４２，４３，・・・は、それぞれ複数の伝送線を有している。そして経路４１，４２，４３，・・・ごとに個別の通信情報が転送可能である。
【００３８】
このようなハードウェアの動作をシミュレーションによって検証する場合、第１の回路２１と第２の回路２２とのそれぞれの機能をシミュレートするモジュールを含むシミュレーションモデルが作成される。その際、以下の特徴を持つ擬似（pseudo）バスモジュールをシミュレーションモデルに組み込むことにより、現実の製品では起こり得るバスの通信環境のシミュレーション、および必要最小限の通信内容のトレース結果の取得が可能となる。
１．レイテンシ設定機能
２．バストレース機能
３．エラー挿入機能
次に、擬似バスモジュールを含むシミュレーションモデルについて説明する。
【００３９】
図４は、擬似バスモジュールを含むシミュレーションモデルを示すブロック図である。コンピュータ１００は、複数の回路の論理検証機能として、それぞれ後述するテストベンチ１１０、第１の検証対象モジュール１２０、第２の検証対象モジュール１３０、および擬似バスモジュール１４０を有している。このシミュレーションモデルでは、バスを用いて相互に通信を行う第１の検証対象モジュール１２０と第２の検証対象モジュール１３０とが検証対象となっている。検証対象となるモジュール間を接続するバスの途中に、レイテンシの発生、エラーの挿入、およびバストレースを行う擬似バスモジュール１４０が挿入されている。
【００４０】
テストベンチ１１０は、第１の検証対象モジュール１２０、第２の検証対象モジュール１３０、および擬似バスモジュール１４０の動作シミュレーションの実行環境を管理すると共に、シミュレーションの結果を示す情報を収集する。例えばテストベンチ１１０は、第１の検証対象モジュール１２０、第２の検証対象モジュール１３０、および擬似バスモジュール１４０に対して、初期状態や各種パラメータの設定を行う。また、テストベンチ１１０は、第１の検証対象モジュール１２０、第２の検証対象モジュール１３０、および擬似バスモジュール１４０に対して、シミュレーション実行指示を行い、テスト全体を制御する。
【００４１】
テストベンチ１１０が擬似バスモジュール１４０に対して、次のような処理を行うことができる。例えば、テストベンチ１１０は、擬似バスモジュール１４０に対して、バスを介した通信の意図的なレイテンシを設定することができる。またテストベンチ１１０は、擬似バスモジュール１４０に対して、バスを介して通信される情報に意図的に挿入するエラーの内容を設定することができる。さらにテストベンチ１１０は、擬似バスモジュール１４０によって採取された通信情報を、擬似バスモジュール１４０から取得することができる。
【００４２】
第１の検証対象モジュール１２０は、論理検証対象となる第１の回路２１の動作をシミュレートする。第１の検証対象モジュール１２０は、シミュレート中にバス３０へ送出する通信情報が発生すると、該当する通信情報を擬似バスモジュール１４０に対して出力する。また、第１の検証対象モジュール１２０は、擬似バスモジュール１４０から渡された通信情報を、バス４０から入力された通信情報として受け取る。
【００４３】
第２の検証対象モジュール１３０は、論理検証対象となる第２の回路２２の動作をシミュレートする。第２の検証対象モジュール１３０は、シミュレート中にバス４０へ送出する通信情報が発生すると、該当する通信情報を擬似バスモジュール１４０に対して出力する。また、第２の検証対象モジュール１３０は、擬似バスモジュール１４０から渡された通信情報を、バス３０から入力された通信情報として受け取る。
【００４４】
擬似バスモジュール１４０は、第１の回路２１と第２の回路２２とを接続するバス３０，４０の動作をシミュレートする。例えば擬似バスモジュール１４０は、第１の検証対象モジュール１２０から出力された通信情報を第２の検証対象モジュール１３０に転送する。また、擬似バスモジュール１４０は、第２の検証対象モジュール１３０から出力された通信情報を第１の検証対象モジュール１２０に転送する。
【００４５】
なお擬似バスモジュール１４０は、通信情報を転送する際に、レイテンシ機能により、所定のレイテンシ（遅延）を付加して通信情報を転送することができる。また擬似バスモジュール１４０は、エラー挿入機能により、通信情報をそのまま転送するのではなく、任意のビットの反転などのエラーを挿入して転送することができる。さらに擬似バスモジュール１４０は、バストレース機能により、転送した通信情報を採取してメモリに格納することができる。
【００４６】
図４に示したシミュレーションモデルの第１の検証対象モジュール１２０、第２の検証対象モジュール１３０、および擬似バスモジュール１４０の回路構成は、例えば回路接続情報であるネットリストとして、コンピュータ１００のＨＤＤ１０３に格納されている。またコンピュータ１００は、ＣＡＤ（Computer Aided Design）機能（設計支援機能）を有していてもよい。その場合、ユーザは、コンピュータ１００のＣＡＤ機能によって、第１の回路２１と第２の回路２２それぞれの回路設計を行うことができる。また、コンピュータ１００は、ネットリストに基づいてシミュレーションモデルを作成することができる。
【００４７】
ところで、擬似バスモジュール１４０のレイテンシ機能におけるレイテンシの時間（遅延時間）や、エラー挿入機能におけるエラー挿入頻度などを示すパラメータは、例えばテストベンチ１１０によって設定される。またテストベンチ１１０は、例えば擬似バスモジュール１４０がバストレース機能によって採取した通信情報を読み出すことができる。以下、擬似バスモジュール１４０が有するレイテンシ設定機能、エラー挿入機能、およびバストレース機能を支援する、テストベンチ１１０の機能について説明する。
【００４８】
図５は、テストベンチが有する機能を示すブロック図である。テストベンチ１１０は、レイテンシ情報記憶部１１１、挿入エラー情報記憶部１１２、パラメータ設定部１１３、トレースデータ読み出し部１１４、バストレース履歴記憶部１１５、およびテスト制御部１１６を有している。
【００４９】
レイテンシ情報記憶部１１１は、擬似バスモジュール１４０において通信情報を転送する際におけるデータ転送のレイテンシを示すレイテンシ情報を記憶する。例えば、ＲＡＭ１０２またはＨＤＤ１０３の記憶領域の一部が、レイテンシ情報記憶部１１１として使用される。
【００５０】
挿入エラー情報記憶部１１２は、擬似バスモジュール１４０において通信情報を転送する際に、転送される通信情報に挿入するエラーの内容を定義する挿入エラー情報を記憶する。例えば、ＲＡＭ１０２またはＨＤＤ１０３の記憶領域の一部が、挿入エラー情報記憶部１１２として使用される。
【００５１】
パラメータ設定部１１３は、レイテンシ情報と挿入エラー情報とから、シミュレーション実行時のパラメータを生成し、生成したパラメータを、擬似バスモジュール１４０内のパラメータ記憶部１４１に格納する。
【００５２】
トレースデータ読み出し部１１４は、擬似バスモジュール１４０内のバストレースデータ記憶部１４７−１，１４７−２からトレースデータを読み出す。トレースデータ読み出し部１１４は、読み出したトレースデータを、バストレース履歴記憶部１１５に格納する。
【００５３】
バストレース履歴記憶部１１５は、トレースデータ読み出し部１１４が読み出したトレースデータを記憶する。例えばＲＡＭ１０２またはＨＤＤ１０３の記憶領域の一部がバストレース履歴記憶部１１５として使用される。
【００５４】
擬似バスモジュール１４０には、テストベンチ１１０との間のパラメータおよびトレースデータの受け渡しに使用する記憶部として、パラメータ記憶部１４１、バストレースデータ記憶部１４７−１，１４７−２を有している。
【００５５】
パラメータ記憶部１４１は、シミュレーション実行時に擬似バスモジュール１４０で実行する処理に用いられるパラメータを記憶する。例えばＲＡＭ１０２またはＨＤＤ１０３の記憶領域の一部がパラメータ記憶部１４１として使用される。
【００５６】
バストレースデータ記憶部１４７−１，１４７−２は、シミュレーション実行時に擬似バスモジュール１４０が採取した通信情報をそれぞれ記憶する。例えばＲＡＭ１０２またはＨＤＤ１０３の記憶領域の一部がバストレースデータ記憶部１４７−１，１４７−２としてそれぞれ使用される。
【００５７】
テスト制御部１１６は、シミュレーションによる論理回路のテストを制御する。例えば、テスト制御部１１６は、パラメータ設定部１１３によるパラメータ設定が完了すると、第１の検証対象モジュール１２０、第２の検証対象モジュール１３０、および擬似バスモジュール１４０に対してシミュレーション開始指示を出力する。また、テスト制御部１１６は、第１の検証対象モジュール１２０、第２の検証対象モジュール１３０、および擬似バスモジュール１４０によるシミュレーションの進行状況を監視し、所定のシミュレーション区間毎にシミュレーションの終了の有無を判断する。
【００５８】
なお、テスト制御部１１６から擬似バスモジュール１４０へのシミュレーション開始指示は、シミュレーション制御部１４９が取得する。シミュレーション制御部１４９は、擬似バスモジュール１４０によるシミュレーションを制御する。例えば、シミュレーション制御部１４９は、テスト制御部１１６からシミュレーション開始指示を受け取ると、第１の検証対象モジュール１２０および第２の検証対象モジュール１３０のそれぞれと同期した回路シミュレーションを開始する。
【００５９】
次に、テストベンチ１１０が有する各記憶部内のデータ構造例について説明する。
図６は、レイテンシ情報記憶部のデータ構造の一例を示す図である。図６の例では、レイテンシ情報記憶部１１１内にレイテンシ管理テーブル１１１ａが設けられている。レイテンシ管理テーブル１１１ａは、シミュレーション区間、経路番号、およびレイテンシの欄が設けられている。レイテンシ管理テーブル１１１ａ内の横方向に並べられた情報は、互いに関連付けられている。互いに関連付けられた情報を含むレコードが、シミュレーション区間と経路との組に対応するレイテンシ情報となる。
【００６０】
シミュレーション区間には、レイテンシを発生させるシミュレーション上の時間帯が設定される。図６の例では、シミュレーションにおいて進行させるバス３０，４０のサイクル数の範囲によって、レイテンシを発生させる時間帯が指定されている。例えば、「１〜１００００」と設定されている場合、バス３０，４０の動作の１サイクル目から、１００００サイクル目に進めるまでのシミュレーションの期間中、対応するレイテンシ情報に示されたレイテンシが設定される。
【００６１】
経路番号の欄には、レイテンシを設定するバス３０，４０内の経路の識別番号（経路番号）が設定される。なお経路番号は、例えば、バス３０の経路の経路番号と、バス４０の経路の経路番号とで重複しないように設定される。なお、バス３０の経路の経路番号と、バス４０の経路の経路番号との間で経路番号の重複を許容する場合、経路の識別番号と、バス３０，４０を識別するバス識別番号との組により、経路を特定することができる。
【００６２】
レイテンシの欄には、対応する経路に対してシミュレーション中に発生させるレイテンシが設定される。
ところでエラーの挿入は、例えば通信情報の書き換えによって行われる。またエラー挿入処理による通信情報の書き換えは、一部の通信情報のみに対して実行することができる。その場合、例えば、データ変更実施周期、データ変更期間、データ変更頻度をパラメータとして設定し、その設定内容に応じた擬似バスモジュール１４０において書き換え対象の通信情報が選択される。そして、擬似バスモジュール１４０は、選択した通信情報のみに対して書き換えを行う。
【００６３】
図７は、図５に示したテストベンチ１１０によるエラーの挿入の際の変更対象データの選択例を示す図である。図７には、特定の経路を介して連続して転送される通信情報のうち、変更対象データとして選択される通信情報の例を示している。図中、シミュレーションにおける転送時刻が早い通信情報ほど、左に示している。また、変更対象データ５１〜５６を網掛で示している。
【００６４】
変更対象データの選択は、データ変更開始時刻から開始される。データ変更開始時刻は、データ変更実施周期で設定される。データ変更開始時刻から、データ変更期間だけ、変更対象データの選択処理が実行される。データ変更期間が終了すると、次のデータ変更開始時刻が到来するまで、変更対象データの選択は行われない。データ変更期間内では、所定のデータ変更頻度に応じた確率で、変更対象データが選択される。図７の例では、所定のデータ変更頻度が「１／２」である。そのため、データ変更期間内の各通信情報のうち、１つのおきの通信情報が変更対象データ５１〜５６として選択されている。
【００６５】
次に、挿入エラー情報記憶部１１２に格納される挿入エラー情報について説明する。挿入エラー情報では、各経路を介して転送される通信情報に対してエラーを挿入する際における処理内容が、エラー挿入フラグによって識別される。
【００６６】
図８は、エラー挿入フラグとエラー挿入動作との対応関係を示す図である。エラー挿入フラグが「０ｘ０」の場合、エラー挿入は行われず、通信情報がそのまま転送される。エラー挿入フラグが「０ｘ１」の場合、転送された通信情報の中からランダムに１ビットが選択され、選択されたビットの値が反転される。なお、ビットの値の反転処理とは、「０」を「１」へ、「１」を「０」へ書き換える処理である。エラー挿入フラグが「０ｘ２」の場合、転送された通信情報の中からランダムに複数のビットが選択され、選択されたビットの値が反転される。エラー挿入フラグが「０ｘ３」の場合、転送された通信情報の全ビットの値が「０」に書き換えられる。エラー挿入フラグが「０ｘ４」の場合、転送された通信情報の全ビットの値が「１」に書き換えられる。エラー挿入フラグが「０ｘ５」の場合、転送された通信情報の全ビットの値が反転される。エラー挿入フラグが「０ｘ６」の場合、転送された通信情報のリクエストコード部が書き換えられる。エラー挿入フラグが「０ｘ７」の場合、転送された通信情報の送信先アドレス部が書き換えられる。エラー挿入フラグが「０ｘ８」の場合、転送された通信情報のバス制御コードが書き換えられる。バス制御コードについては、後述する。
【００６７】
このようなエラー挿入フラグによってエラー挿入動作を指定した挿入エラー情報が、挿入エラー情報記憶部１１２に格納されている。
図９は、挿入エラー情報記憶部のデータ構造の一例を示す図である。図９の例では、挿入エラー情報記憶部１１２内に挿入エラー管理テーブル１１２ａが格納されている。挿入エラー管理テーブル１１２ａには、シミュレーション区間、経路番号、エラー挿入フラグ、データ変更開始間隔、データ変更期間、およびデータ変更頻度の欄がそれぞれ設けられている。挿入エラー管理テーブル１１２ａ内の横方向に並べられた情報が互いに関連付けられている。互いに関連付けられた情報を含むレコードが、挿入エラー情報となる。
【００６８】
シミュレーション区間の欄には、エラーを挿入するシミュレーション上の時間帯が設定される。図９の例では、シミュレーションにおいて進行させるバス３０，４０のサイクル数の範囲によって、エラーを挿入する時間帯が指定されている。
【００６９】
経路番号の欄には、エラーを挿入する経路の経路番号が設定される。
エラー挿入フラグの欄には、挿入するエラーの種別を示す識別子（エラー挿入フラグ）が設定される。
【００７０】
データ変更開始間隔の欄には、エラー挿入フラグに応じたデータ変更処理を開始する周期が設定される。周期は、例えばバス３０，４０の動作クロック１周期分のシミュレーションを１サイクルとしたときのサイクル数によって設定される。
【００７１】
データ変更期間の欄には、エラー挿入フラグに応じたデータ変更処理を開始してから、その処理の実行を継続する期間が設定される。期間は、例えばバス３０，４０の動作クロック１周期分のシミュレーションを１サイクルとしたときのサイクル数によって設定される。
【００７２】
データ変更頻度の欄には、転送される通信情報のうち、エラー挿入の対象とする通信情報の選択頻度が設定される。例えば、データ変更頻度が１／２であれば、転送された通信情報から１／２の確率で通信情報が選択され、選択した通信情報に対してエラーが挿入される。
【００７３】
テストベンチ１１０のパラメータ設定部１１３は、例えば、シミュレーション全体を複数の区間に区切ったうえで、各区間のシミュレーションを開始するときに、擬似バスモジュール１４０に対してパラメータを設定する。その場合、次に実行されるシミュレーション区間に関するレイテンシ情報や挿入エラー情報が、パラメータ設定部１１３によってパラメータ記憶部１４１に格納される。
【００７４】
図１０は、テストベンチの処理手順の一例を示すフローチャートである。なお、図１０に示す処理は、テストベンチ１１０が実行する全体の処理のうち、レイテンシ設定、エラー挿入、およびバストレースに関連する処理を抜き出したものである。以下の処理は、テストベンチ１１０として機能するコンピュータ１００に、ユーザからキーボード１２またはマウス１３を用いてテスト開始指示が入力された場合に実行される。テスト開始指示では、例えば、シミュレーションの実行サイクル数が指定される。
【００７５】
［ステップＳ１１］パラメータ設定部１１３は、現在のサイクル（ＣＣ（Current Cycle））を初期化する。例えばパラメータ設定部１１３は、擬似バスモジュール１４０のパラメータ記憶部１４１に、現在のサイクル（ＣＣ）の初期値「１」を設定する。なお現在のサイクル（ＣＣ）は、現在実行しているサイクルが、シミュレーション開始から何サイクル目かを示す値である。現在のサイクル（ＣＣ）は、テスト実行開始からシミュレーションが、バス３０，４０の動作における１サイクル分進行するごとに１ずつカウントアップされる。
【００７６】
［ステップＳ１２］トレースデータ読み出し部１１４は、擬似バスモジュール１４０のバストレースデータ記憶部１４７−１，１４７−２の内容を初期化する。
［ステップＳ１３］テスト制御部１１６は、テストが終了したか否かを判断する。例えばテスト制御部１１６は、現在のサイクルが、テスト開始指示で指定されたシミュレーションの実行サイクル数に達した場合、テスト終了と判断する。テストが終了した場合、処理がステップＳ２２に進められる。テストが終了していなければ、処理がステップＳ１４に進められる。
【００７７】
［ステップＳ１４］パラメータ設定部１１３は、擬似バスモジュール１４０のパラメータ記憶部１４１に、各経路のレイテンシ（Ｌ）を設定する。例えば、パラメータ設定部１１３は、シミュレーションの現在のサイクルから始まるシミュレーション区間に対応する経路ごとのレイテンシ情報を、レイテンシ情報記憶部１１１から抽出する。そして、パラメータ設定部１１３は、抽出した経路ごとのレイテンシ情報に含まれるレイテンシに応じた差を有するライトポインタ値とリードポインタ値とを、経路番号に関連付けて擬似バスモジュール１４０のパラメータ記憶部１４１に格納する。
【００７８】
［ステップＳ１５］パラメータ設定部１１３は、現在のサイクル（ＣＣ）を、パラメータ記憶部１４１内の各経路のデータ変更基準サイクル（ＤＣ（Data change base point Cycle））に設定する。
【００７９】
［ステップＳ１６］パラメータ設定部１１３は、擬似バスモジュール１４０のパラメータ記憶部１４１に、各経路のエラー挿入フラグ（ＥＦ（Error insertion Flag））、データ変更開始間隔（ＤＩ（Data change start Interval））、データ変更期間（ＤＬ（Data change Length））、およびデータ変更頻度（ＤＦ（Data change Frequency））を設定する。例えば、パラメータ設定部１１３は、シミュレーションの現在のサイクルから始まるシミュレーション区間に対応する経路ごとの挿入エラー情報を、挿入エラー情報記憶部１１２から抽出する。そして、パラメータ設定部１１３は、抽出した経路ごとの挿入エラー情報に含まれるエラー挿入フラグ（ＥＦ）、データ変更開始間隔（ＤＩ）、データ変更期間（ＤＬ）、およびデータ変更頻度（ＤＦ）を、経路番号に関連付けてパラメータ記憶部１４１にそれぞれ格納する。
【００８０】
［ステップＳ１７］パラメータ設定部１１３は、現在のサイクル（ＣＣ）を、パラメータ記憶部１４１内の基準サイクル（ＢＣ（Base point Cycle））に設定する。
［ステップＳ１８］パラメータ設定部１１３は、パラメータ記憶部１４１に、シミュレーション走行サイクル数（ＲＣ（Running Cycle））を設定する。例えばパラメータ設定部１１３は、現在のサイクルから始まるシミュレーション区間のサイクル数を、シミュレーション走行サイクル数（ＲＣ）とする。
【００８１】
［ステップＳ１９］テスト制御部１１６は、パラメータの設定が完了すると、第１の検証対象モジュール１２０、第２の検証対象モジュール１３０、および擬似バスモジュール１４０に対して、シミュレーションの開始を指示する。
【００８２】
［ステップＳ２０］テスト制御部１１６は、実行中のシミュレーション区間のシミュレーションが終了したか否かを判断する。例えばテスト制御部１１６は、第１の検証対象モジュール１２０、第２の検証対象モジュール１３０、および擬似バスモジュール１４０を監視し、実行中のシミュレーション区間のシミュレーションが終了したか否かを判断する。実行中のシミュレーション区間のシミュレーションが終了した場合、処理がステップＳ２１に進められる。実行中のシミュレーション区間のシミュレーションが終了していなければ、ステップＳ２０の処理が繰り返され、テスト制御部１１６は、実行中のシミュレーション区間のシミュレーションが終了するのを待つ。
【００８３】
［ステップＳ２１］パラメータ設定部１１３は、擬似バスモジュール１４０のパラメータ記憶部１４１から、現在のサイクル（ＣＣ）の値を取得する。
［ステップＳ２２］トレースデータ読み出し部１１４は、テストが終了すると、バストレースデータ記憶部１４７−１，１４７−２の内容をバストレース履歴記憶部１１５にダンプする。すなわちトレースデータ読み出し部１１４は、バストレースデータ記憶部１４７−１，１４７−２内のデータを読み出し、バストレース履歴記憶部１１５に格納する。その後、処理が終了する。
【００８４】
このようにして、テストベンチ１１０からの指示に従って第１の検証対象モジュール１２０、第２の検証対象モジュール１３０、および擬似バスモジュール１４０において、シミュレーションが実行される。このとき、パラメータ記憶部１４１に設定したパラメータに従った経路ごとのレイテンシで、バス３０，４０を介した通信が行われる。またバス３０，４０を介して転送される所定の通信情報が採取され、保持される。しかも、シミュレーション中は、テストベンチ１１０がパラメータ記憶部１４１に設定したパラメータに従って、エラー挿入が行われる。
【００８５】
図１１は、パラメータ記憶部のデータ構造の一例を示す図である。パラメータ記憶部１４１には、経路別パラメータリスト１４１ａ，１４１ｂ，１４１ｃ，・・・と、共通パラメータリスト１４１ｘとがそれぞれ格納されている。経路別パラメータリスト１４１ａ，１４１ｂ，１４１ｃ，・・・は、バス３０，４０の経路ごとに設けられている。
【００８６】
経路別パラメータリスト１４１ａには、経路番号、ライトポインタ値、リードポインタ値、データ変更基準サイクル（ＤＣ）、エラー挿入フラグ（ＥＦ）、データ変更期間（ＤＬ）、データ変更開始間隔（ＤＩ）、データ変更頻度（ＤＦ）などのパラメータが設定されている。他の経路別パラメータリスト１４１ｂ，１４１ｃ，・・・にも、経路別パラメータリスト１４１ａと同種のパラメータが設定されている。
【００８７】
ライトポインタ値としては、シミュレーションの１つの区間の開始前に、パラメータ設定部１１３により初期値が設定される。
リードポインタ値には、シミュレーションの１区間の開始前に、パラメータ設定部１１３により初期値が設定される。
【００８８】
なお、パラメータ設定部１１３は、ライトポイン値とリードポインタとの初期値に、レイテンシに対応した差を設けることで、擬似バスモジュール１４０に対して各経路のレイテンシを指示する。すなわち、レイテンシは、ライトポインタ値とリードポインタ値との初期値の差で表される。
【００８９】
共通パラメータリスト１４１ｘは、シミュレーション全体で使用されるパラメータのリストである。例えば共通パラメータリスト１４１ｘには、現在のサイクル（ＣＣ）、基準サイクル（ＢＣ）、シミュレーション走行サイクル数（ＲＣ）などが設定される。共通パラメータリスト１４１ｘ内のパラメータと同じパラメータが、第１の検証対象モジュール１２０および第２の検証対象モジュール１３０にも設定される。
【００９０】
次に、擬似バスモジュール１４０が有する機能について説明する。
図１２は、擬似バスモジュールの機能を示すブロック図である。擬似バスモジュール１４０は、パラメータ記憶部１４１、バッファ１４２ａ，１４２ｂ，１４２ｃ，・・・，１４３ａ，１４３ｂ，１４３ｃ，・・・、ライトポインタ制御部１４４ａ，１４４ｂ、リードポインタ制御部１４５ａ，１４５ｂ、バストレースモジュール１４６−１，１４６−２、バストレースデータ記憶部１４７−１，１４７−２、エラー挿入モジュール１４８−１，１４８−２、およびシミュレーション制御部１４９をそれぞれ有している。
【００９１】
パラメータ記憶部１４１、バストレースデータ記憶部１４７−１，１４７−２、およびシミュレーション制御部１４９の機能については、図５において説明した通りである。なお、図１２の例では、バストレースデータ記憶部１４７−１，１４７−２は、バストレースモジュール１４６−１，１４６−２内にそれぞれ設けられている。
【００９２】
バッファ１４２ａ，１４２ｂ，１４２ｃ，・・・は、第１の検証対象モジュール１２０から第２の検証対象モジュール１３０へ転送される通信情報をそれぞれ一時的に記憶する。バッファ１４２ａ，１４２ｂ，１４２ｃ，・・・は、バス３０内の経路３１，３２，３３，・・・ごとに設けられている。
【００９３】
バッファ１４３ａ，１４３ｂ，１４３ｃ，・・・は、第２の検証対象モジュール１３０から第１の検証対象モジュール１２０へ転送される通信情報をそれぞれ一時的に記憶する。バッファ１４３ａ，１４３ｂ，１４３ｃ，・・・は、バス４０内の経路４１，４２，４３，・・・ごとに設けられている。
【００９４】
ライトポインタ制御部１４４ａは、バッファ１４２ａ，１４２ｂ，１４２ｃ，・・・それぞれに対応するライトポインタを有している。そしてライトポインタ制御部１４４ａは、各ライトポインタに設定するライトポインタ値を制御する。ライトポインタは、次に入力された通信情報を格納する記憶領域（エントリ）を示す情報である。具体的には、ライトポインタ制御部１４４ａは、バス３０を介した通信の１サイクルごとに、ライトポインタで示すエントリを、１つ分ずつ移動させる。１つのエントリの記憶容量は、例えば、バス３０内の個々の経路３１，３２，３３，・・・のデータ幅分のデータ量である。エントリごとにアドレスが設定されている場合、ライトポインタ制御部１４４ａは、シミュレーションにおけるバス３０を介した通信の１サイクルごとに、ライトポインタに設定されたライトポインタ値を１ずつカウントアップする。
【００９５】
ライトポインタ制御部１４４ｂは、バッファ１４３ａ，１４３ｂ，１４３ｃ，・・・それぞれのライトポインタを制御する。例えばライトポインタ制御部１４４ｂは、シミュレーションにおけるバス４０を介した通信の１サイクルごとに、ライトポインタに設定されたライトポインタ値をカウントアップする。
【００９６】
リードポインタ制御部１４５ａは、バッファ１４２ａ，１４２ｂ，１４２ｃ，・・・それぞれに対応するリードポインタを有している。そしてリードポインタ制御部１４５ａは、各リードポインタに設定するリードポインタ値を制御する。リードポインタは、次に出力する通信情報を読み出すエントリを示す情報である。具体的には、リードポインタ制御部１４５ａは、バス３０を介した通信の１サイクルごとに、リードポインタで示すエントリを、１つ分ずつ移動させる。エントリごとにアドレスが設定されている場合、リードポインタ制御部１４５ａは、シミュレーションにおけるバス３０を介した通信の１サイクルごとに、リードポインタに設定されたリードポインタ値をカウントアップする。
【００９７】
リードポインタ制御部１４５ｂは、バッファ１４３ａ，１４３ｂ，１４３ｃ，・・・それぞれのリードポインタを制御する。例えばリードポインタ制御部１４５ｂは、シミュレーションにおけるバス４０を介した通信の１サイクルごとに、リードポインタに設定されたリードポインタ値をカウントアップする。
【００９８】
なお、ライトポインタ制御部１４４ａは、個々のシミュレーション区間のシミュレーション開始時に、ライトポインタを初期化する。同様に、リードポインタ制御部１４５ａは、個々のシミュレーション区間のシミュレーション開始時に、リードポインタを初期化する。
【００９９】
ライトポインタとリードポインタとを初期化する場合、ライトポインタ制御部１４４ａは、パラメータ記憶部１４１に設定された経路ごとのライトポインタ値を、対応するそれぞれの経路のライトポインタに設定する。またリードポインタ制御部１４５ａは、パラメータ記憶部１４１に設定された経路ごとのリードポインタ値を、対応するそれぞれの経路のリードポインタに設定する。このとき、パラメータ記憶部１４１のライトポインタ値とリードポインタ値とに、レイテンシに相当する差を設けることにより、ライトポインタとリードポインタとの間にレイテンシが設定される。例えば、レイテンシが２サイクルであれば、ライトポインタ値とリードポインタ値との差は、「２」となる。
【０１００】
この際、リードポインタで示すエントリの位置は、各ポインタの移動方向に対し、レイテンシに相当する分だけライトポインタから遅れた位置である。例えば、ライトポインタ値が、１サイクルごとに１ずつカウントアップする場合、リードポインタ値は、レイテンシで示されるサイクル数分、ライトポインタ値よりも小さい値となる。
【０１０１】
ライトポインタ制御部１４４ｂはライトポインタ制御部１４４ａと同様に、個々のシミュレーション区間のシミュレーション開始時に、パラメータ記憶部１４１に設定されたレイテンシを参照し、ライトポインタを初期化する。リードポインタ制御部１４５ｂはリードポインタ制御部１４５ａと同様に、個々のシミュレーション区間のシミュレーション開始時に、パラメータ記憶部１４１に設定されたレイテンシを参照し、リードポインタを初期化する。
【０１０２】
バストレースモジュール１４６−１は、第１の検証対象モジュール１２０から出力された通信情報をバッファ１４２ａ，１４２ｂ，１４２ｃ，・・・にそれぞれ格納する。例えばバストレースモジュール１４６−１は、第１の検証対象モジュール１２０から通信情報を取得すると、その通信情報が出力された経路を判断する。そしてバストレースモジュール１４６−１は、判断した経路に対応するバッファ内のライトポインタで示されたエントリに、取得した通信情報を格納する。
【０１０３】
またバストレースモジュール１４６−１は、第１の検証対象モジュール１２０から出力された通信情報を取得すると、その通信情報のうちの有意な通信情報のみを抽出して、バストレースデータ記憶部１４７−１に格納する。その際、バストレースモジュール１４６−１は、リクエストコードの種別に基づいて、有意な通信情報が出力されるタイミングを判断する。そして、バストレースモジュール１４６−１は、有効なデータが出力されるタイミングにおいて、バス３０に出力されたデータを、バストレースデータ記憶部１４７−１に格納する。なおバストレースモジュール１４６−１は、ストレースデータ記憶部１４７−１の記憶領域が使い切られた場合には、例えば最も古い通信情報に対して最新の通信情報を上書きしていく。
【０１０４】
バストレースモジュール１４６−２は、第２の検証対象モジュール１３０から出力された通信情報を、通信情報が出力された経路に対応するバッファ内のライトポインタで示されたエントリに格納する。またバストレースモジュール１４６−２は、第２の検証対象モジュール１３０から出力された通信情報を取得すると、その通信情報のうちのデータのみを抽出して、バストレースデータ記憶部１４７−２に格納する。
【０１０５】
エラー挿入モジュール１４８−１は、バッファ１４２ａ，１４２ｂ，１４２ｃ，・・・内のリードポインタで示されたエントリから通信情報を取り出し、第２の検証対象モジュール１３０にそれぞれ出力する。その際、エラー挿入モジュール１４８−１は、出力する通信情報にエラーを挿入することができる。エラーの挿入処理としては、例えば、通信情報の内容の書き換えが行われる。エラー挿入モジュール１４８−１は、パラメータ記憶部１４１に設定されているデータ変更期間、データ変更実施周期、データ変更頻度などのパラメータに従って、各経路から出力する通信情報の書き換えを行う。
【０１０６】
エラー挿入モジュール１４８−２は、バッファ１４３ａ，１４３ｂ，１４３ｃ，・・・内のリードポインタで示されたエントリから通信情報をそれぞれ取り出し、第１の検証対象モジュール１２０に出力する。通信情報の第１の検証対象モジュール１２０への出力の際、エラー挿入モジュール１４８−２は、出力する通信情報にエラーを挿入することができる。
【０１０７】
上述した機能により、擬似バスモジュール１４０においてレイテンシ設定機能、エラー挿入機能、およびバストレース機能が実現される。
以下、レイテンシ設定機能について詳細に説明する。
【０１０８】
図１３は、レイテンシ発生時のライトポインタとリードポインタとの状況を示す図である。図１３の例では、バス３０，４０内にそれぞれｍ個（ｍは１以上の整数）の経路がある。バス３０の経路から順に、昇順の識別番号が付されている。従って、バス３０内の経路には、それぞれ「１」〜「ｍ」の識別番号が付されている。また、バス４０内の経路には、それぞれ「ｍ＋１」〜「２ｍ」の識別番号が付されている。
【０１０９】
第１の検証対象モジュール１２０から第２の検証対象モジュール１３０へ転送される通信情報の格納用に、ｍ個のバッファ１４２ａ，・・・，１４２ｍがそれぞれ設けられている。また、第２の検証対象モジュール１３０から第１の検証対象モジュール１２０へ転送される通信情報の格納用に、ｍ個のバッファ１４３ａ，・・・，１４３ｍがそれぞれ設けられている。
【０１１０】
各バッファは、通信経路に対して１対１に対応して設けられている。例えばバッファ１４２ａは、経路番号「１」の経路に対応して設けられる。バッファ１４２ｍは、経路番号「ｍ」の経路に対応して設けられる。バッファ１４３ａは、経路番号「ｍ＋１」の経路に対応して設けられる。バッファ１４２ｍは、経路番号「２ｍ」の経路に対応して設けられる。
【０１１１】
各バッファは、１サイクルで通信される通信情報のデータ量に相当する記憶領域を、エントリとし、エントリごとにアドレスが付されている。さらに各バッファには、ライトポインタ（Write Pointer）とリードポインタ（Read Pointer）とが設定されている。ライトポインタおよびリードポインタは、１サイクルごとにインクリメントされる。またライトポインタおよびリードポインタは、バッファの終端に達すると、次のサイクルでバッファの先頭にラップアラウンド（wrap around）する。
【０１１２】
ライトポインタとリードポインタとは、異なるエントリを示している。このように、ライトポインタとリードポインタとの差により、任意のレイテンシが設定される。また、ライトポインタ制御部１４４ａ，１４４ｂとリードポインタ制御部１４５ａ，１４５ｂとは、１サイクルごとにライトポインタとリードポインタとのそれぞれを１ずつインクリメントする。そのため、シミュレーションが進行してもライトポインタとリードポインタとの差が保たれる。すなわち、初期設定されたレイテンシが継続して設定される。
【０１１３】
すなわち、バストレースモジュール１４６−１，１４６−２は、１サイクルごとにライトポインタで指定されたエントリに、各通信経路に出力された通信情報をそれぞれ格納する。また、エラー挿入モジュール１４８−１，１４８−２は、１サイクルごとに、各バッファ内のリードポインタで指定されたエントリから通信情報をそれぞれ読み出す。すると、バストレースモジュール１４６−１，１４６−２が書き込んだ通信情報をエラー挿入モジュール１４８−１，１４８−２が読み出すまでに、ライトポインタとリードポインタとの差に応じた時間（サイクル数）を要する。その時間が、経路のレイテンシとして現れる。
【０１１４】
しかも、第２の実施の形態では、図１３に示すように、複数の経路それぞれにバッファ、ライトポインタ、およびリードポインタを備える。これにより、経路ごとに異なるレイテンシが設定可能となっている。
【０１１５】
図１４は、シミュレーション手順の一例を示すフローチャートである。以下、図１４に示す処理をステップ番号に沿って説明する。この処理は、テストベンチ１１０からシミュレーション開始指示が入力されたときに実行される。
【０１１６】
［ステップＳ３１］ライトポインタ制御部１４４ａは、バッファ１４２ａ，１４２ｂ，１４２ｃ，・・・それぞれのライトポインタを初期化する。例えば、ライトポインタ制御部１４４ａは、パラメータ記憶部１４１を参照し、バッファ１４２ａ，１４２ｂ，１４２ｃ，・・・それぞれのレイテンシを取得する。そしてライトポインタ制御部１４４ａは、バッファ１４２ａ，１４２ｂ，１４２ｃ，・・・の先頭からレイテンシのサイクル数分カウントアップしたアドレスを、ライトポインタの値とする。同様に、ライトポインタ制御部１４４ｂは、バッファ１４３ａ，１４３ｂ，１４３ｃ，・・・それぞれのライトポインタを初期化する。
【０１１７】
［ステップＳ３２］リードポインタ制御部１４５ａは、バッファ１４２ａ，１４２ｂ，１４２ｃ，・・・それぞれのリードポインタを初期化する。例えば、リードポインタ制御部１４５ａは、バッファ１４２ａ，１４２ｂ，１４２ｃ，・・・それぞれの先頭のアドレスを、リードポインタの値とする。同様に、リードポインタ制御部１４５ｂは、バッファ１４３ａ，１４３ｂ，１４３ｃ，・・・それぞれのリードポインタを初期化する。
【０１１８】
［ステップＳ３３］シミュレーション制御部１４９は、現在のサイクル（ＣＣ）を取得する。例えばシミュレーション制御部１４９は、パラメータ記憶部１４１内の共通パラメータリスト１４１ｘから現在のサイクル（ＣＣ）を取得する。
【０１１９】
［ステップＳ３４］バストレースモジュール１４６−１は、第１の検証対象モジュール１２０から出力された経路ごとの通信情報を取得する。バストレースモジュール１４６−２は、第２の検証対象モジュール１３０から出力された経路ごとの通信情報を取得する。
【０１２０】
［ステップＳ３５］バストレースモジュール１４６−１は、第１の検証対象モジュール１２０から入力された通信情報のバストレース処理を行う。同様に、バストレースモジュール１４６−２は、第２の検証対象モジュール１３０から入力された通信情報のバストレース処理を行う。バストレース処理の詳細は後述する（図１８参照）。
【０１２１】
［ステップＳ３６］バストレースモジュール１４６−１は、バス３０内の各経路の通信情報を、その経路に対応するバッファのライトポインタで示されているエントリに格納する。同様に、バストレースモジュール１４６−２は、バス４０内の各経路の通信情報を、その経路に対応するバッファのライトポインタで示されているエントリにそれぞれ格納する。
【０１２２】
［ステップＳ３７］エラー挿入モジュール１４８−１は、バス３０内の各経路の通信情報を、その経路に対応するバッファのリードポインタで示されているエントリからそれぞれ読み出す。エラー挿入モジュール１４８−２は、バス４０内の各経路の通信情報を、その経路に対応するバッファのリードポインタで示されているエントリからそれぞれ読み出す。
【０１２３】
［ステップＳ３８］ライトポインタ制御部１４４ａは、各バッファ１４２ａ，１４２ｂ，１４２ｃ，・・・のライトポインタに設定されたライトポインタ値をそれぞれカウントアップする。なお、ライトポインタがバッファの終端を示していた場合、ライトポインタ制御部１４４ａは、そのライトポインタのライトポインタ値を、バッファの先頭のアドレスの値に変更する。同様に、ライトポインタ制御部１４４ｂは、各バッファ１４３ａ，１４３ｂ，１４３ｃ，・・・のライトポインタに設定されたライトポインタ値をそれぞれカウントアップする。
【０１２４】
［ステップＳ３９］リードポインタ制御部１４５ａは、各バッファ１４２ａ，１４２ｂ，１４２ｃ，・・・のリードポインタに設定されたリードポインタ値をそれぞれカウントアップする。なお、リードポインタがバッファの終端を指し示していた場合、リードポインタ制御部１４５ａは、そのリードポインタに設定されたリードポインタ値を、バッファの先頭のアドレスの値に変更する。同様に、リードポインタ制御部１４５ｂは、各バッファ１４３ａ，１４３ｂ，１４３ｃ，・・・のリードポインタに設定されたリードポインタ値をそれぞれカウントアップする。
【０１２５】
［ステップＳ４０］エラー挿入モジュール１４８−１は、バッファから読み出した通信情報に対してエラー挿入処理を行う。同様に、エラー挿入モジュール１４８−２は、バッファから読み出した通信情報に対してエラー挿入処理を行う。エラー挿入処理の詳細は後述する（図１９参照）。
【０１２６】
［ステップＳ４１］エラー挿入モジュール１４８−１は、第２の検証対象モジュール１３０に対してエラー挿入処理後の通信情報を出力する。同様に、エラー挿入モジュール１４８−２は、第１の検証対象モジュール１２０に対してエラー挿入処理後の通信情報を出力する。
【０１２７】
［ステップＳ４２］シミュレーション制御部１４９は、シミュレーション終了条件が満たされているか否かを判断する。具体的には、シミュレーション制御部１４９は、現在のサイクル（ＣＣ）が、基準サイクルにシミュレーション走行サイクル数を加算した値以上となった場合、シミュレーション終了条件が満たされたと判断する。シミュレーション終了条件が満たされた場合、シミュレーションの処理が終了する。シミュレーション終了条件が満たされていない場合、処理がステップＳ４３に進められる。
【０１２８】
［ステップＳ４３］シミュレーション制御部１４９は、次のサイクルの処理に移行する。この際、シミュレーション制御部１４９は、現在のサイクル（ＣＣ）をカウントアップする。その後、処理がステップＳ３３に進められる。
【０１２９】
次に、バストレース処理について詳細に説明する。第２の実施の形態では、通信情報にリクエストコードが含まれ、データが有効であることを示すＶＡＬＩＤがアサートされているサイクルのリクエストコードが有効となるプロトコルによって通信が行われるものとする。この場合、有効であるリクエストコードのコード種別に基づいて採取する通信情報が判断される。
【０１３０】
図１５は、リクエストコードのコード種別を示す図である。図１５には、リクエストコードのコード種別と、そのリクエストコードが出力された場合の出力側の回路での通信動作が示されている。
【０１３１】
リクエストコードが「０ｘ００」のコード種別は「ＮＯＰ（No Operation）」である。リクエストコードが「０ｘ００」の場合、通信情報の出力側の回路における通信動作は行われない。
【０１３２】
リクエストコードが「０ｘ０１」のコード種別は「ＲＥＡＤ」である。リクエストコードが「０ｘ０１」の場合、通信情報の出力側の回路は、ＶＡＬＩＤと同サイクルにリードアドレスを送信する。
【０１３３】
リクエストコードが「０ｘ０２」のコード種別は「ＷＲＩＴＥ８」である。リクエストコードが「０ｘ０２」の場合、通信情報の出力側の回路は、ＶＡＬＩＤと同サイクルにライトアドレスを送信する。さらに通信情報の出力側の回路は、ＶＡＬＩＤの２サイクル後に８バイトのライトデータを送信する。
【０１３４】
リクエストコードが「０ｘ０３」のコード種別は「ＷＲＩＴＥ１６」である。リクエストコードが「０ｘ０３」の場合、通信情報の出力側の回路は、ＶＡＬＩＤと同サイクルにライトアドレスを送信する。さらに通信情報の出力側の回路は、ＶＡＬＩＤの２〜３サイクル後にそれぞれ８バイトずつ、合計１６バイトのライトデータを送信する。
【０１３５】
リクエストコードが「０ｘ０４」のコード種別は「ＷＲＩＴＥ６４」である。リクエストコードが「０ｘ０４」の場合、通信情報の出力側の回路は、ＶＡＬＩＤと同サイクルにライトアドレスを送信する。さらに通信情報の出力側の回路は、ＶＡＬＩＤの２〜９サイクル後にそれぞれ８バイトずつ、合計６４バイトのライトデータを送信する。
【０１３６】
バストレースモジュール１４６−１，１４６−２は、このようなリクエストコードを参照して、採取する通信情報を判断する。なおリクエストコードの送信に使用されるバス３０，４０内の経路は、例えば通信プロトコルによって規定されている。
【０１３７】
例えばバストレースモジュール１４６−１，１４６−２は、ＶＡＬＩＤがアサートされたサイクルであっても、リクエストコードが「０ｘ００」（ＮＯＰ）のサイクルにおいては通信情報を採取しない。バストレースモジュール１４６−１，１４６−２は、ＶＡＬＩＤがアサートされ、リクエストコードが「０ｘ０１」、「０ｘ０２」、「０ｘ０３」、「０ｘ０４」のそれぞれのサイクルにおいては、通信情報を採取する。このとき採取される通信情報の内容は、リードアドレス、またはライトアドレスのいずれかである。バストレースモジュール１４６−１，１４６−２は、ＶＡＬＩＤがアサートされ、リクエストコードが「０ｘ０２」のサイクルの２サイクル後のデータを採取する。このとき採取される通信情報の内容は、ライトデータである。バストレースモジュール１４６−１，１４６−２は、ＶＡＬＩＤがアサートされ、リクエストコードが「０ｘ０３」のサイクルの２〜３サイクル後のデータを採取する。このとき採取される通信情報の内容は、ライトデータである。バストレースモジュール１４６−１，１４６−２は、ＶＡＬＩＤがアサートされ、リクエストコードが「０ｘ０４」のサイクルの２〜９サイクル後の通信情報を採取する。このとき採取される通信情報の内容は、ライトデータである。
【０１３８】
このようにバストレースモジュール１４６−１，１４６−２は、バス３０，４０を介して通信される通信情報内のリクエストコードに基づいて、採取する通信情報を特定できる。
【０１３９】
図１６は、通信情報の採取例を示す図である。図１６の例では、サイクル数ごとの、ＶＡＬＩＤ信号、リクエストコード（Request Code）、アドレス（Address）、およびデータ（Data）それぞれの出力状況の変化を示している。
【０１４０】
図１６の例では、サイクル「２」にリクエストコード「０ｘ０１」（ＲＥＡＤ）、サイクル「３」にリクエストコード「０ｘ０３」（ＷＲＩＴＥ１６）、サイクル８にリクエストコード「０ｘ０２」（ＷＲＩＴＥ８）の通信がそれぞれ行われている。この場合、サイクル「３」のリクエストコード「０ｘ０３」（ＷＲＩＴＥ１６）によるデータ転送がサイクル「５，６」に行われている。また、サイクル「８」のリクエストコード「０ｘ０２」（ＷＲＩＴＥ８）によるデータ転送がサイクル「１０」に行われている。このため、バストレースが必要なのはサイクル「２，３，５，６，８，１０」となる。図１６に示す通信が、バス３０を介した通信であれば、サイクル「２，３，５，６，８，１０」の各経路の通信情報が、バストレースモジュール１４６−１によってバストレースデータ記憶部１４７−１に格納される。
【０１４１】
図１７は、バストレースデータ記憶部に格納される情報のデータ構造の一例を示す図である。図１７の例では、バストレースデータ記憶部１４７−１には、リクエストコード管理テーブル１４７ａ、採取対象リスト１４７ｂ、およびトレースデータ登録テーブル１４７ｃがそれぞれ設けられている。
【０１４２】
リクエストコード管理テーブル１４７ａには、有効なリクエストコードの内容と、そのリクエストコードが出力されたサイクル数とがそれぞれ記憶される。リクエストコード管理テーブル１４７ａには、サイクル数、ＶＡＬＩＤ、リクエストコード（RequestCode）の欄がそれぞれ設けられている。サイクル数の欄には、有効なリクエストコードが出力されたサイクル数が設定される。ＶＡＬＩＤの欄には、リクエストコードが出力されたときのＶＡＬＩＤの値が設定される。例えば、ＶＡＬＩＤの欄には、ＶＡＬＩＤがアサートされていれば「１」、ネゲートされていれば「０」がそれぞれ設定される。リクエストコードの欄には、出力されたリクエストコードが設定される。
【０１４３】
採取対象リスト１４７ｂには、通信情報を採取すべきサイクルのサイクル数が設定される。採取対象リスト１４７ｂのサイクル数は、通信情報の採取を行う有効なリクエストコードが検出された場合に設定される。また採取対象リスト１４７ｂに設定されたサイクル数は、そのサイクルで通信情報の採取が完了すると、採取対象リスト１４７ｂから削除される。
【０１４４】
トレースデータ登録テーブル１４７ｃは、採取した通信情報が登録される。登録される通信情報には、アドレスやデータがある。
次に、バストレース処理の手順を詳細に説明する。
【０１４５】
図１８は、バストレース処理の手順の一例を示すフローチャートである。以下、図１８に示す処理をステップ番号に沿って説明する。
［ステップＳ５１］バストレースモジュール１４６−１は、バス３０を介して入力されたＶＡＬＩＤ信号の値が「１」が否かを判断する。例えばバストレースモジュール１４６−１には、ＶＡＬＩＤ信号がどの経路のどの信号線を介して通信されるのかが予め定義されている。そしてバストレースモジュール１４６−１は、ＶＡＬＩＤ信号を通信する信号線の値として第１の検証対象モジュール１２０から出力された値が「０」か「１」によって、ＶＡＬＩＤ信号の値を判断する。ＶＡＬＩＤ信号が「０」であれば、処理がステップＳ５４に進められる。ＶＡＬＩＤ信号が「１」であれば、処理がステップＳ５２に進められる。
【０１４６】
［ステップＳ５２］バストレースモジュール１４６−１は、ＶＡＬＩＤ信号が「１」であれば、現在のサイクル（ＣＣ）、ＶＡＬＩＤ、リクエストコードを保存する。例えばバストレースモジュール１４６−１は、現在のサイクル（ＣＣ）を、リクエストコード管理テーブル１４７ａのサイクル数の欄に設定する。またバストレースモジュール１４６−１は、ＶＡＬＩＤ信号の値を、リクエストコード管理テーブル１４７ａのＶＡＬＩＤの欄に設定する。
【０１４７】
さらにバストレースモジュール１４６−１は、経路を開始して取得したリクエストコードをリクエストコード管理テーブル１４７ａに設定する。例えばバストレースモジュール１４６−１には、リクエストコードがどの経路のどの信号線を介して通信されるのかを予め定義しておく。そして、バストレースモジュール１４６−１は、リクエストコードが通信される経路に関する通信情報を、リクエストコードとしてリクエストコード管理テーブル１４７ａに設定する。
【０１４８】
［ステップＳ５３］バストレースモジュール１４６−１は、採取対象リスト１４７ｂに、通信情報を採取するサイクルのサイクル数を追加する。通信情報を採取するサイクルのサイクル数は、ステップＳ５２で保存したリクエストコードに基づいて判断される。例えば、リクエストコードが「０ｘ０３」（ＷＲＩＴＥ１６）であり現在のサイクルが「３」の場合、「３，５，６」の各サイクル数が採取対象リスト１４７ｂに追加される。
【０１４９】
［ステップＳ５４］バストレースモジュール１４６−１は、採取対象リスト１４７ｂに、現在のサイクル（ＣＣ）と同じ値が登録されているか否かを判断する。登録されていれば、処理がステップＳ５５に進められる。登録されていなければ、バストレース処理が終了する。
【０１５０】
［ステップＳ５５］バストレースモジュール１４６−１は、現在のサイクル（ＣＣ）と、バス３０の各経路の通信情報との組を、トレースデータ登録テーブル１４７ｃに格納する。
【０１５１】
［ステップＳ５６］バストレースモジュール１４６−１は、採取対象リスト１４７ｂから、現在のサイクル（ＣＣ）と同じ値のサイクル数を削除する。その後、バストレース処理が終了する。
【０１５２】
このように、実際にアドレスやデータの転送が行われた場合にのみ通信情報を保存することで、バストレースにおけるデータ量の肥大化を抑制できる。すなわち、データ転送が行われていない間の、例えばすべてのビットが「０」の通信情報を保存せずに済む。その結果、バストレースデータ記憶部１４７−１，１４７−２として使用する記憶容量が少なく済む。
【０１５３】
次に、エラー挿入処理について説明する。
図１９は、エラー挿入処理の手順を示すフローチャートである。以下、図１９に示す処理をステップ番号に沿って説明する。なお、以下の処理は、経路の通信情報ごとに実行される。
【０１５４】
［ステップＳ６１］エラー挿入モジュール１４８−１は、現在のサイクル（ＣＣ）が、データ変更基準サイクル（ＤＣ）とデータ変更期間（ＤＬ）とを加算した値である加算値以下か否かを判断する。現在のサイクル（ＣＣ）が加算値以下の場合、処理がステップＳ６４に進められる。現在のサイクル（ＣＣ）が加算値より大きい場合、処理がステップＳ６２に進められる。
【０１５５】
［ステップＳ６２］エラー挿入モジュール１４８−１は、現在のサイクル（ＣＣ）が、データ変更基準サイクル（ＤＣ）とデータ変更開始間隔（ＤＩ）との加算値以上か否かを判断する。現在のサイクル（ＣＣ）が加算値以上の場合、処理がステップＳ６３に進められる。現在のサイクル（ＣＣ）が加算値より小さい場合、エラー挿入処理が終了する。
【０１５６】
［ステップＳ６３］エラー挿入モジュール１４８−１は、データ変更基準サイクル（ＤＣ）に、現在のサイクル（ＣＣ）の値を設定する。その後、エラー挿入処理が終了する。
［ステップＳ６４］エラー挿入モジュール１４８−１は、現在のサイクル（ＣＣ）からデータ変更基準サイクル（ＤＣ）を減算した値を、データ変更頻度（ＤＦ）の逆数（ｄｆ）で除算した余りが「０」か否かを判断する。なお図１９の「％」は、剰余を求める演算子である。余りが「０」であれば、処理がステップＳ６５に進められる。余りが「０」でなければ、エラー挿入処理が終了する。例えば、データ変更頻度が「１／２」の場合、現在のサイクル（ＣＣ）からデータ変更基準サイクル（ＤＣ）を減算した値が２（データ変更頻度の逆数）の倍数となっていれば、剰余が「０」となり、処理がステップＳ６５に進められる。
【０１５７】
［ステップＳ６５］エラー挿入モジュール１４８−１は、エラー挿入フラグ（ＥＦ）に従って、通信情報の内容を変更する。その後、エラー挿入処理が終了する。
このようにして、通信情報に任意のエラーを挿入することができる。
【０１５８】
以上説明したように、第２の実施の形態では、レイテンシ設定機能を実現するために、擬似バスモジュール１４０内に通信情報用のバッファが用意されている。そして擬似バスモジュール１４０が通信情報を受信した際にはこのバッファへ通信情報の蓄積を行い、任意のサイクル後に蓄積してあった通信情報を送信することで、経路にレイテンシを生じさせている。このレイテンシは、ライトポインタ値およびリードポインタ値を１サイクルごとにインクリメントし、バッファの終端に達した際には最初に戻るように制御することで、シミュレーション中継続される。また、ライトポインタ値とリードポインタ値との差を任意に設定することにより、レイテンシの量を任意の値に設定することが可能となっている。
【０１５９】
しかも、バス３０，４０内の複数の経路それぞれに個別のレイテンシを設定することができる。これにより現実の製品で起こり得るレイテンシのばらつきをシミュレートできる。すなわち現実の製品の回路では、１つのバス内の複数の経路でレイテンシが異なる場合もあり得る。このようなレイテンシのばらつきをシミュレートすることで、レイテンシのばらつきが生じた場合の回路の動作を検証可能となる。例えば、一部の経路でのレイテンシの増大が発生した場合に、エラー検出が正しく実行されることに関して回路の論理検証を行うことができ、回路の信頼性を向上させることができる。
【０１６０】
また第２の実施の形態では、バストレース機能を実現するために、バストレースモジュール１４６−１，１４６−２が通信情報を監視し、有意な通信情報を抽出して保存している。また有意な通信情報のうち、アドレスやデータのように、より重要な一部の通信情報のみを抽出して、バストレースを行うこともできる。例えば、バストレースモジュール１４６−１，１４６−２は、受信した通信情報を解析し、ＶＡＬＩＤを見ることにより、有用な通信情報の通信が行われているタイミングを検出する。なお有用な通信情報の通信が行われているタイミングの検出については、ＶＡＬＩＤ以外の情報に基づいて判断することもできる。例えば、バストレースモジュール１４６−１，１４６−２が予め設定した期待値と通信情報を比較し、期待値に適合する通信情報については、有意な通信情報と判断するようにすることもできる。しかも、第２の実施の形態では、バストレースモジュール１４６−１，１４６−２は、シミュレーションの現在のサイクル数をカウントし、複数サイクルにまたがる通信情報を連続して取得することもできる。
【０１６１】
このように、バスを介して出力される情報のすべてではなく、有意な通信情報を選択して保存することで、バストレースデータ記憶部１４７−１，１４７−２の有効利用が図れる。なお、バストレースデータ記憶部１４７−１，１４７−２に記録された通信情報はシミュレーション後にテストベンチ１１０によりダンプされる。ダンプされた通信情報により、適宜テキスト化やデータベース化などの加工を行うことが可能となる。
【０１６２】
さらに第２の実施の形態では、経路ごとの通信情報に任意のエラーを挿入することができる。第２の実施の形態では、エラー挿入機能を実現するために、エラー挿入モジュール１４８−１，１４８−２が、受信した通信情報の内容を変更する。このデータ変更機能による変更対象とする通信情報は、「データ変更実施期間」、「データ変更実施周期」、「データ変更頻度」などのパラメータに応じて決定される。これらのパラメータに従ってデータ変更の対象とする通信情報を選択することで、様々な伝送エラー状態を表現することができる。また、エラー挿入フラグによって、どのようなデータ変更処理を施すのかを設定できる。これにより、検証に有用な様々エラーを発生させることができる。これにより、現実の製品で起こり得る伝送エラーや、設計論理を検証するのに有用な伝送エラーなどの様々なエラーの発生状況をシミュレートすることができ、エラー処理などの動作の確認を正確に行うことができる。その結果、回路の信頼性を向上させることができる。
【０１６３】
〔第３の実施の形態〕
次に、第３の実施の形態について説明する。第３の実施の形態は、ＣＰＵとインターコネクトチップとをバス接続した回路を、論理シミュレーションを用いて検証するものである。
【０１６４】
図２０は、第３の実施の形態の検証対象のハードウェア構成を示す図である。第３の実施の形態では、図３に示した第１の回路２１がＣＰＵ６１、第２の回路２２がインターコネクトチップ６２となっている。ＣＰＵ６１とインターコネクトチップ６２との間は、現実の製品では、双方向それぞれ複数のシリアルバス７０，８０で接続されている。ところが、論理シミュレーションではシリアルバスのシミュレーションは困難である。そこで、第３の実施の形態のシミュレーションモデルでは、パラレル・シリアル変換前の信号同士のパラレル接続を行う。例えば、片方向につきｂビット（ｂは１以上の整数）の幅を持つレーンｍ本（ｍは１以上の整数）よりなるバスｎ本（ｎは１以上の整数）により構成される。
【０１６５】
図２１は、パラレル・シリアル変換前の信号同士のパラレル接続を行ったハードウェア構成を示す図である。ＣＰＵ６１からインターコネクトチップ６２との間には、ＣＰＵ６１からインターコネクトチップ６２へ通信情報を送信するのに利用する複数のバス７０ａ，・・・，７０ｎが設けられている。また、ＣＰＵ６１からインターコネクトチップ６２との間には、インターコネクトチップ６２からＣＰＵ６１へ通信情報を送信するのに利用する複数のバス８０ａ，・・・，８０ｎが設けられている。
【０１６６】
バス７０ａ，・・・，７０ｎは、複数のレーンを有している。例えばバス７０ａはレーン７ａａ，・・・，７ａｍを有しており、バス７０ｎはレーン７ｎａ，・・・，７ｎｍを有している。バス８０ａ，・・・，８０ｎは、複数のレーンを有している。例えばバス８０ａはレーン８ａａ，・・・，８ａｍを有しており、バス８０ｎはレーン８ｎａ，・・・，８ｎｍを有している。個々のレーンで転送される通信情報が、シリアルバスにおける１つの信号線でシリアル転送される通信情報に相当する。
【０１６７】
通信に使用されるパケットは、パケットの種類によって１本のバス、もしくは複数本のバスを使用して通信が行われる。
図２２は、パケットの通信例を示す図である。パケットの送信が行われる時には、使用するバスのすべてのレーンが使用される。図２２の例では、リクエストコードは、「レーン１」を用いて通信される。また、データは、すべてのレーンを用いて通信される。図２２の例では、ｐサイクル（ｐは１以上の整数）の通信を行うことにより送信が完了する。そのうち、１サイクル目ではパケットのヘッダ部が転送される。そして２サイクル目以降にパケットのデータ部が転送される。また、このバスに流れるデータはシリアル通信用のコード変換が行われている。
【０１６８】
このようなハードウェア回路のシミュレーションを行うために、シミュレーションモデルが作成される。
図２３は、第３の実施の形態のシミュレーションモデルを示す図である。シミュレーションモデルは、テストベンチ２１０、ＣＰＵ論理回路モジュール２２０、インターコネクトチップ論理回路モジュール２３０、および擬似バスモジュール２４０を有している。
【０１６９】
テストベンチ２１０は、初期設定・実行制御・終了条件判定・エラーチェックなどを行うシミュレーション制御モジュールを有している。シミュレーション制御モジュールは、例えば所定のスクリプト言語によるスクリプトによって提供される。またテストベンチ２１０は、設定・エラーチェックなどで使用されるデータ、検証対象モジュールと検証対象モジュールに対する入出力を行う各種の擬似（pseudo）モジュールを有している。
【０１７０】
次に、擬似バスモジュール２４０内の構成について説明する。
図２４は、擬似バスモジュールの機能を示すブロック図である。図２４には、ＣＰＵ論理回路モジュール２２０からインターコネクトチップ論理回路モジュール２３０への通信部分の構成を示している。擬似バスモジュール２４０は、パラメータ記憶部２４１、バッファ２４ａａ，・・・，２４ａｍ，・・・，２４ｎａ，・・・，２４ｎｍ、ライトポインタ制御部２４４ａ，・・・，２４４ｎ、リードポインタ制御部２４５ａ，・・・，２４５ｎ、バストレースモジュール２４６、エラー挿入モジュール２４８ａ，・・・，２４８ｎ、およびシミュレーション制御部２４９を有している。
【０１７１】
パラメータ記憶部２４１は、レイテンシ設定、およびエラー挿入、およびシミュレーション実行に利用するパラメータを記憶する。シミュレーション制御部２４９は、シミュレーションの進行を制御する。
【０１７２】
第３の実施の形態では、各バスのレーンごとに、対応するバッファが設けられている。例えば、バス「０」のレーン「０」からレーン「ｍ」それぞれに対応するバッファ２４ａａ，・・・，２４ａｍが設けられている。また、バス「ｎ」のレーン「０」からレーン「ｍ」それぞれに対応するバッファ２４ｎａ，・・・，２４ｎｍが設けられている。また、バスごとにライトポインタ制御部２４４ａ，・・・，２４４ｎとリードポインタ制御部２４５ａ，・・・，２４５ｎとが設けられている。ライトポインタ制御部２４４ａ，・・・，２４４ｎは、対応するバスのレーンごとに設けられたバッファのライトポインタを制御する。リードポインタ制御部２４５ａ，・・・，２４５ｎは、対応するバスのレーンごとに設けられたバッファのリードポインタを制御する。このように、レーンごとのバッファを設け、ライトポインタとリードポインタとを制御することで、レイテンシ設定をレーン単位で行うことができる。
【０１７３】
また、ＣＰＵ論理回路モジュール２２０からインターコネクトチップ論理回路モジュール２３０への通信に対して、１つのバストレースモジュール２４６が設けられている。バストレースモジュール２４６によって、ＣＰＵ論理回路モジュール２２０からインターコネクトチップ論理回路モジュール２３０への通信全体に対してバストレースが行われる。
【０１７４】
バストレースモジュール２４６は、コード変換デコーダ２４６ａとバストレースデータ記憶部２４６ｂとを有している。コード変換デコーダ２４６ａは、シリアル通信用にコード変換された通信情報をデコードし、元のコードに戻す。バストレースデータ記憶部２４６ｂは、トレースした通信情報を記憶する。
【０１７５】
さらに、バスごとのエラー挿入モジュール２４８ａ，・・・，２４８ｎが設けられている。バスごとのエラー挿入モジュール２４８ａ，・・・，２４８ｎによって、通信情報へのエラー挿入がバス単位で行われる。
【０１７６】
図２４には、ＣＰＵ論理回路モジュール２２０からインターコネクトチップ論理回路モジュール２３０への通信部分を示したが、インターコネクトチップ論理回路モジュール２３０からＣＰＵ論理回路モジュール２２０への通信部分の構成も図２４と同様である。
【０１７７】
以下、第３の実施の形態におけるシミュレーションモデルで使用される擬似バスモジュール２４０のレイテンシ設定機能、バストレース機能、およびエラー挿入機能について説明する。
【０１７８】
まず、レイテンシ設定機能について説明する。
図２５は、レイテンシ発生時のライトポインタとリードポインタとの状況を示す図である。各レーンを介した通信のレイテンシに応じて、各バッファのライトポインタとリードポインタとの初期値がテストベンチ２１０によって設定される。この初期値が明示的に指定されない場合は、物理実装から推測されるレイテンシを標準状態のレイテンシの値とすることができる。例えば、パラメータ記憶部２４１に各レーンのレイテンシの標準値を予め設定しておく。レイテンシが変更されなければ、ライトポインタ制御部２４４ａ，・・・，２４４ｎとリードポインタ制御部２４５ａ，・・・，２４５ｎとは、標準値に応じてライトポインタとリードポインタとを設定する。
【０１７９】
レイテンシを制御することによる負荷試験として、例えば以下のテストケースが用意される。
［第１のテスト］テストベンチ２１０は、あるレーン単体について、同バスの他のレーンとのレイテンシの差が設計仕様で定められた基準値内となるように、ライトポインタとリードポインタとの初期値を標準状態の値から変更する。そしてテストベンチ２１０がシミュレーションモデルにシミュレーションを実行させる。この場合、シミュレーションを実行した際にエラーが発生しないことを確認することで、回路が正常に動作することを検証できる。
【０１８０】
［第２のテスト］テストベンチ２１０は、あるレーン単体について、同バスの他のレーンとのレイテンシの差が設計仕様で定められた基準値外となるようにライトポインタとリードポインタとの初期値を標準状態の値から変更する。そしてテストベンチ２１０がシミュレーションモデルにシミュレーションを実行させる。この場合、シミュレーションを実行した際に正しくエラー処理が行われることを確認することで、回路が正常に動作することを検証できる。
【０１８１】
［第３のテスト］テストベンチ２１０は、あるバスの全レーンについて、他のバスとのレイテンシの差が設計仕様で定められた基準値内となるようにライトポインタとリードポインタとの初期値を標準状態の値から変更する。そしてテストベンチ２１０がシミュレーションモデルにシミュレーションを実行させる。この場合、シミュレーションを実行した際にエラーが発生しないことを確認することで、回路が正常に動作することを検証できる。
【０１８２】
［第４のテスト］テストベンチ２１０は、あるバスの全レーンについて、他のバスとのレイテンシの差が設計仕様で定められた基準値外となるようにライトポインタとリードポインタとの初期値を標準状態の値から変更する。そしてテストベンチ２１０がシミュレーションモデルにシミュレーションを実行させる。この場合、シミュレーションを実行した際に正しくエラー処理が行われることを確認することで、回路が正常に動作することを検証できる。
【０１８３】
［第５のテスト］テストベンチ２１０は、上記第１・第３のテストの設定を複数組み合わせて、シミュレーションモデルにシミュレーションを実行させる。この場合、エラーが発生しないことを確認することで、回路が正常に動作することを検証できる。
【０１８４】
次に、バストレース機能について説明する。
［バストレース第１の処理］バストレースモジュール２４６は、バス７０ａ，・・・，７０ｎを介して入力された通信情報をデコードする。すなわち第３の実施の形態では、通信データはシリアル通信用にコード変換が行われている。そこで、バストレースモジュール２４６は、コード変換デコーダ２４６ａにより、シリアル通信用のコードを、元のコードに戻す。そして、バストレースモジュール２４６では、元のコードにデコードされた通信情報に対して、以下の処理を行う。
【０１８５】
［バストレース第２の処理］バストレースモジュール２４６は、バス制御コード、およびパケット中のリクエストコードを監視することにより、どのサイクルのデータについて採取する必要があるかを判断する。そしてバストレースモジュール２４６は、必要最小限のデータについてバストレースデータ記憶部２４６ｂに格納する。またバストレースモジュール２４６は、リクエストコードより、同じデータを複数のバスを使って通信する多重化パケットであるかどうかを判断する。そしてバストレースモジュール２４６は、多重化パケットである場合には、多重化パケットのうちの１つだけを選択し、バストレースデータ記憶部２４６ｂに格納する。バストレースデータ記憶部２４６ｂの空き容量がなくなった場合、バストレースモジュール２４６は、一番古いデータについて最新のデータで上書きを行う。
【０１８６】
［バストレース第３の処理］テストベンチ２１０は、バストレースデータの保存モードを、バストレースモジュール２４６に通知する。保存モードには、例えば、パケットのヘッダ部とデータ部の両方を保存するモードと、ヘッダ部のみを保存するモードとがある。バストレースモジュール２４６は、指定された保存モードに従って通信情報から保存対象情報を抽出し、バストレースデータ記憶部２４６ｂに格納する。パケットのヘッダ部とデータ部の両方を保存するモードは主にデバッグに用いられる。ヘッダ部とデータ部とをトレースすることで、デバッグ作業の作業効率が向上する。パケットのヘッダ部のみを保存するモードは主にカバレッジ測定に使用される。なおカバレッジ測定とは、どのような範囲で、どの程度詳しくテストが行われたかを数値化したものである。カバレッジ測定に利用する情報のみをトレースすることで、多くのパケットの情報を保存することが可能となる。
【０１８７】
バストレースデータ記憶部２４６ｂに保存された情報については、テストベンチ２１０により読み出され、外部記憶装置へ保存される。
次に、エラー挿入機能について説明する。エラー挿入モジュール２４８ａ，・・・，２４８ｎには、以下のエラー挿入機能がバスごとにそれぞれ実装されている。
【０１８８】
［機能１］エラー挿入モジュール２４８ａ，・・・，２４８ｎは、ランダムに１ビット反転する機能をそれぞれ有する。
［機能２］エラー挿入モジュール２４８ａ，・・・，２４８ｎは、ランダムに複数ビット反転する機能をそれぞれ有する。
【０１８９】
［機能３］エラー挿入モジュール２４８ａ，・・・，２４８ｎは、全ビットを０に書き換る機能をそれぞれ有する。
［機能４］エラー挿入モジュール２４８ａ，・・・，２４８ｎは、全ビットを１に書き換る機能をそれぞれ有する。
【０１９０】
［機能５］エラー挿入モジュール２４８ａ，・・・，２４８ｎは、全ビットを反転する機能をそれぞれ有する。
［機能６］図２２で示す通り、リクエストコードは「レーン１」で通信される。そこでエラー挿入モジュール２４８ａ，・・・，２４８ｎは、「レーン１」を監視し、リクエストコードを他のリクエストコードに書き換える機能をそれぞれ有する。
【０１９１】
［機能７］図２２で示す通り、リクエストＩＤは「レーンｍ−１」、「レーンｍ」で通信される。そこでエラー挿入モジュール２４８ａ，・・・，２４８ｎは、「レーンｍ−１」、「レーンｍ」を監視すると共に、リクエストＩＤを他のリクエストＩＤに書き換える機能をそれぞれ有する。
【０１９２】
［機能８］図２２で示す通り、バス制御コードは「レーン１」、「レーン２」で通信される。そこでエラー挿入モジュール２４８ａ，・・・，２４８ｎは、「レーン１」、「レーン２」を監視すると共に、バス制御コードを他のバス制御コードに書き換える機能をそれぞれ有する。
【０１９３】
テストベンチ２１０は、上記各機能について、対象とするバス、エラー挿入期間・頻度、機能の組み合わせに関するパラメータを、パラメータ記憶部２４１に設定する。そしてテストベンチ２１０は、設定したパラメータに従ったシミュレーションを、シミュレーションモデルに実行させる。この場合、エラー挿入の結果としてエラー訂正やパケット再送などのエラー処理が正しく行われることを確認することで、回路が正常に動作することを検証できる。
【０１９４】
〔その他の応用例〕
第１および第２の実施の形態では、シミュレーションによってハードウェア論理検証を行っているが、コンピュータが書き換え可能な回路を制御してエミュレーションを行うことによりハードウェアの論理検証を行うこともできる。書き換え可能な回路としては、例えばＦＰＧＡ（Field Programmable Gate Array）がある。
【０１９５】
図２６は、エミュレーションシステムの構成例を示す図である。コンピュータ９１には、インタフェース変換ユニット９２を介してＦＰＧＡ９３が接続されている。インタフェース変換ユニット９２は、コンピュータ９１が有する通信インタフェースとＦＰＧＡ９３へのデータ入出力用インタフェースの規格に沿ったインタフェースとの通信データを、相互に変換する。コンピュータ９１が有する通信インタフェースには、例えばＵＳＢ（Universal Serial Bus）がある。また、ＦＰＧＡ９３へのデータ入出力用インタフェースには、例えばＪＴＡＧ（Joint Test Action Group）がある。
【０１９６】
コンピュータ９１から送信されたデータは、インタフェース変換ユニット９２を介してＦＰＧＡ９３に入力される。また、ＦＰＧＡ９３から出力されたデータは、インタフェース変換ユニット９２を介してコンピュータ９１に入力される。
【０１９７】
このような構成のエミュレーションシステムにおいて、図４や図２３に示したシミュレーションモデルと同様の論理機能をエミュレートすることができる。ＦＰＧＡ９３を用いたエミュレーションを行うことで、コンピュータ１００によるシミュレーションに比べ、回路の論理検証時間を短縮することが可能となる。
【０１９８】
なお、上記の処理機能をコンピュータによって実現する場合、コンピュータ１００が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ／ＲＷなどがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disc）などがある。
【０１９９】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０２００】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０２０１】
また、上記の処理機能の少なくとも一部を、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現することもできる。
【０２０２】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【０２０３】
以上の実施の形態に開示された技術には、以下の付記に示す技術が含まれる。
（付記１）  第１の検証対象モジュールと前記第１の検証対象モジュールに接続される第２の検証対象モジュールとの論理検証を行う論理検証プログラムに用いられると共に、前記第１の検証対象モジュールと前記第２の検証対象モジュールとの間の通信経路に挿入される通信経路モジュールにおいて、
コンピュータを、
ライトポインタ値を保持するライトポインタ手段、
リードポインタ値を保持するリードポインタ手段、
複数のエントリを有し、前記第１の検証対象モジュールが出力した第１の通信情報を前記ライトポインタ手段が保持するライトポインタ値が示す第１のエントリに保持すると共に、前記リードポインタ手段が保持するリードポインタ値が示す第２のエントリに保持された第２の通信情報を前記第２の検証対象モジュールに出力するバッファ手段、
として機能させることを特徴とする通信経路モジュール。
【０２０４】
（付記２）  前記通信経路モジュールはさらに、
前記コンピュータを、
前記通信経路モジュールを制御する制御モジュール手段として機能させ、
前記制御モジュール手段は、前記ライトポインタ手段にライトポインタ値を設定すると共に、前記リードポインタ手段にリードポインタ値を設定することを特徴とする付記１記載の通信経路モジュール。
【０２０５】
（付記３）  前記通信経路モジュールはさらに、
前記コンピュータを、
前記バッファ手段に接続され、前記バッファ手段が出力する第２の通信情報の全部または一部を所定の値に書き換えるエラー挿入モジュール手段として機能させることを特徴とする付記１または２記載の通信経路モジュール。
【０２０６】
（付記４）  前記通信経路モジュールはさらに、
前記コンピュータを、
前記第１の検証対象モジュールに接続され、前記第１の検証対象モジュールが出力した通信情報を保持する履歴データ保持モジュール手段として機能させることを特徴とする付記１〜３のいずれかに記載の通信経路モジュール。
【０２０７】
（付記５）  前記ライトポインタ手段が保持するライトポインタ値の初期値と、前記リードポインタ手段が保持するリードポインタ値の初期値とは、互いに異なる値であることを特徴とする付記１〜４のいずれかに記載の通信経路モジュール。
【０２０８】
（付記６）  前記ライトポインタ手段は、前記通信経路における通信情報の転送周期の１サイクルごとに、ライトポインタ値を所定値ずつカウントアップし、
前記リードポインタ手段は、前記通信経路における通信情報の転送周期の１サイクルごとに、リードポインタ値を前記所定値ずつカウントアップすることを特徴とする付記１〜５のいずれかに記載の通信経路モジュール。
【０２０９】
（付記７）  前記エラー挿入モジュール手段は、所定の頻度で通信情報を選択し、選択した通信情報の内容を書き換えることを特徴とする付記３記載の通信経路モジュール。
（付記８）  前記履歴データ保持モジュール手段は、アドレスまたはデータを含む通信情報を保持することを特徴とする付記４記載の通信経路モジュール。
【０２１０】
（付記９）  前記履歴データ保持モジュール手段は、通信情報に含まれるリクエストコードに基づいて、前記第１の検証対象モジュールからアドレスまたはデータが通信情報として出力される時期を判断し、該時期に前記第１の検証対象モジュールから出力された通信情報を保持することを特徴とする付記８記載の通信経路モジュール。
【０２１１】
（付記１０）  論理検証を行う論理検証プログラムにおいて、
コンピュータを、
第１の通信情報を出力する第１の検証対象モジュール手段、
第２の通信情報を入力する第２の検証対象モジュール手段、
ライトポインタ値を保持するライトポインタ手段と、リードポインタ値を保持するリードポインタ手段と、前記第１の検証対象モジュールと前記第２の検証対象モジュールとの間の通信経路に挿入されると共に複数のエントリを有し、前記第１の検証対象モジュールが出力した第１の通信情報を前記ライトポインタ手段が保持するライトポインタ値が示す第１のエントリに保持すると共に、前記リードポインタ手段が保持するリードポインタ値が示す第２のエントリに保持された第２の通信情報を前記第２の検証対象モジュールに出力するバッファ手段と、を有する通信経路モジュール手段、
として機能させることを特徴とする論理検証プログラム。
【０２１２】
（付記１１）  前記論理検証プログラムはさらに、
前記コンピュータを、
前記通信経路モジュール手段を制御する制御モジュール手段として機能させ、
前記制御モジュール手段は、前記ライトポインタ手段にライトポインタ値を設定すると共に、前記リードポインタ手段にリードポインタ値を設定することを特徴とする付記１０記載の論理検証プログラム。
【０２１３】
（付記１２）  前記論理検証プログラムにおいて、
前記通信経路モジュール手段はさらに、
前記コンピュータを、
前記バッファ手段に接続され、前記バッファ手段が出力する第２の通信情報の全部または一部を所定の値に書き換えるエラー挿入モジュール手段として機能させることを特徴とする付記１０または１１記載の論理検証プログラム。
【０２１４】
（付記１３）  前記論理検証プログラムにおいて、
前記通信経路モジュール手段はさらに、
前記コンピュータを、
前記第１の検証対象モジュールに接続され、前記第１の検証対象モジュールが出力した通信情報を保持する履歴データ保持モジュール手段として機能させることを特徴とする付記１０〜１２のいずれかに記載の論理検証プログラム。
【０２１５】
（付記１４）  第１の検証対象モジュールと前記第１の検証対象モジュールに接続される第２の検証対象モジュールとの論理検証を、前記第１の検証対象モジュールと前記第２の検証対象モジュールとの間の通信経路に挿入される通信経路モジュールを用いて行う論理検証方法において、
コンピュータに、
前記通信経路モジュールが有するライトポインタに、ライトポインタ値を保持するステップと、
前記通信経路モジュールが有するリードポインタに、リードポインタ値を保持するステップと、
前記第１の検証対象モジュールが、第１の通信情報を出力するステップと、
前記通信経路モジュールが有するバッファが有する複数のエントリのうち、前記第１の検証対象モジュールが出力した第１の通信情報を前記ライトポインタが保持するライトポインタ値が示す第１のエントリに保持するステップと、
前記バッファが、前記リードポインタが保持するリードポインタ値が示す第２のエントリに保持された第２の通信情報を前記第２の検証対象モジュールに出力するステップと、
前記第２の検証対象モジュールが、第２の通信情報の入力を受け付けるステップを実行させることを特徴とする論理検証方法。
【０２１６】
（付記１５）  前記論理検証方法はさらに、
前記コンピュータに、
前記通信経路モジュールを制御する制御モジュールが、前記ライトポインタにライトポインタ値を設定すると共に、前記リードポインタにリードポインタ値を設定するステップを実行させることを特徴とする付記１４記載の論理検証方法。
【０２１７】
（付記１６）  前記論理検証方法はさらに、
前記コンピュータに、
前記バッファに接続されたエラー挿入モジュールが、前記バッファが出力する第２の通信情報の全部または一部を所定の値に書き換えるステップを実行させることを特徴とする付記１４または１５記載の論理検証方法。
【０２１８】
（付記１７）  前記論理検証方法はさらに、
前記コンピュータに、
前記第１の検証対象モジュールに接続された履歴データ保持モジュールが、前記第１の検証対象モジュールが出力したデータを保持するステップを実行させることを特徴とする付記１４〜１６のいずれかに記載の論理検証方法。
【符号の説明】
【０２１９】
１  第１の検証対象モジュール手段
２  第２の検証対象モジュール手段
３  通信経路モジュール手段
３ａ  ライトポインタ手段
３ｂ  リードポインタ手段
３ｃ  バッファ手段
３ｄ  制御モジュール手段
３ｅ  履歴データ保持モジュール手段
３ｆ  エラー挿入モジュール手段
５  第１の通信情報
６，６ａ  第２の通信情報
【図１】
0005521846.tif 000002
【図２】
0005521846.tif 000003
【図３】
0005521846.tif 000004
【図４】
0005521846.tif 000005
【図５】
0005521846.tif 000006
【図６】
0005521846.tif 000007
【図７】
0005521846.tif 000008
【図８】
0005521846.tif 000009
【図９】
0005521846.tif 000010
【図１０】
0005521846.tif 000011
【図１１】
0005521846.tif 000012
【図１２】
0005521846.tif 000013
【図１３】
0005521846.tif 000014
【図１４】
0005521846.tif 000015
【図１５】
0005521846.tif 000016
【図１６】
0005521846.tif 000017
【図１７】
0005521846.tif 000018
【図１８】
0005521846.tif 000019
【図１９】
0005521846.tif 000020
【図２０】
0005521846.tif 000021
【図２１】
0005521846.tif 000022
【図２２】
0005521846.tif 000023
【図２３】
0005521846.tif 000024
【図２４】
0005521846.tif 000025
【図２５】
0005521846.tif 000026
【図２６】
0005521846.tif 000027