(57)【要約】【課題】効率的かつ正確な協調シミュレーションを実現させること。【解決手段】検証支援装置１００は、ソフトウェアシミュレータ１１０や、ハードウェアシミュレータ１２０それぞれから他のシミュレータに対して実行対象データの転送を行う際に、各シミュレータの仕様に応じた処理時間のズレを特定し、特定したズレを調整したスケジューリングを行う。また、検証支援装置１００は、ソフトウェアシミュレータ１１０からハードウェアシミュレータ１２０への通信ポート数に制限がある場合、通信ポートのビジー状態を把握して適切な通信経路を選択する機能も備えている。したがって、効率的な通信処理が可能となり、他のシミュレータの機能を活かした協調シミュレーションが可能となる。【選択図】図１
2011076191.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェアシミュレータとソフトウェアシミュレータとを用いた協調シミュレーションを実行するコンピュータを、
前記協調シミュレーションの実行対象データを取得する取得手段、
前記取得手段によって取得された実行対象データの形式に応じて前記実行対象データの抽象度を判別する判別手段、
前記実行対象データについて、前記判別手段によって判別された抽象度に応じたシミュレーション時間と、前記ハードウェアシミュレータと前記ソフトウェアシミュレータとの仕様に基づいて前記ハードウェアシミュレータと前記ソフトウェアシミュレータの間での通信時間とを特定する特定手段、
前記ハードウェアシミュレータと前記ソフトウェアシミュレータとの間で前記実行対象データの通信処理を行う場合に、前記特定手段によって特定されたシミュレーション時間と通信時間との加算時間と、前記通信処理を行わない場合の前記実行対象データのシミュレーション時間との差分時間を算出する算出手段、
前記算出手段によって算出された差分時間の待機処理を発生させながら前記実行対象データを用いて前記協調シミュレーションを実行する実行手段、
として機能させることを特徴とする検証支援プログラム。
【請求項２】
前記コンピュータを、さらに、
前記実行対象データを送信先のシミュレータに応じたデータ形式に変換する変換手段として機能させ、
前記実行手段は、前記変換手段による変換後の実行対象データを用いて前記協調シミュレーションを実行することを特徴とする請求項１に記載の検証支援プログラム。
【請求項３】
前記コンピュータを、さらに、
前記ハードウェアシミュレータと前記ソフトウェアシミュレータとの通信処理を行うための通信チャネルが複数ある場合に、各通信チャネルの使用状態に応じて通信中以外の通信チャンネルを選択する選択手段として機能させ、
前記実行手段は、
前記選択手段によって選択された通信チャネルを用いて前記通信処理を実行することを特徴とする請求項１または２に記載の検証支援プログラム。
【請求項４】
ハードウェアシミュレータとソフトウェアシミュレータとを用いた協調シミュレーションを実行するコンピュータに接続された検証支援装置であって、
前記協調シミュレーションの実行対象データを取得する取得手段と、
前記取得手段によって取得された実行対象データの形式に応じて前記実行対象データの抽象度を判別する判別手段と、
前記実行対象データについて、前記判別手段によって判別された抽象度に応じたシミュレーション時間と、前記ハードウェアシミュレータと前記ソフトウェアシミュレータとの仕様に基づいて前記ハードウェアシミュレータと前記ソフトウェアシミュレータの間での通信時間とを特定する特定手段と、
前記ハードウェアシミュレータと前記ソフトウェアシミュレータとの間で前記実行対象データの通信処理を行う場合に、前記特定手段によって特定されたシミュレーション時間と通信時間との加算時間と、前記通信処理を行わない場合の前記実行対象データのシミュレーション時間との差分時間を算出する算出手段と、
前記算出手段によって算出された差分時間の待機処理を発生させながら前記実行対象データを用いて前記協調シミュレーションを実行する実行手段と、
を備えることを特徴とする検証支援装置。
【請求項５】
ハードウェアシミュレータとソフトウェアシミュレータとを用いた協調シミュレーションを実行するコンピュータが、
前記協調シミュレーションの実行対象データを取得する取得工程と、
前記取得工程によって取得された実行対象データの形式に応じて前記実行対象データの抽象度を判別する判別工程と、
前記実行対象データについて、前記判別工程によって判別された抽象度に応じたシミュレーション時間と、前記ハードウェアシミュレータと前記ソフトウェアシミュレータとの仕様に基づいて前記ハードウェアシミュレータと前記ソフトウェアシミュレータの間での通信時間とを特定する特定工程と、
前記ハードウェアシミュレータと前記ソフトウェアシミュレータとの間で前記実行対象データの通信処理を行う場合に、前記特定工程によって特定されたシミュレーション時間と通信時間との加算時間と、前記通信処理を行わない場合の前記実行対象データのシミュレーション時間との差分時間を算出する算出工程と、
前記算出工程によって算出された差分時間の待機処理を発生させながら前記実行対象データを用いて前記協調シミュレーションを実行する実行工程と、
を実行することを特徴とする検証支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示技術は、協調シミュレーションの実行を支援する検証支援プログラム、検証支援装置および検証支援方法に関する。
【背景技術】
【０００２】
近年、協調シミュレーションの需要が高まっている。協調シミュレーションとは、ＥＳＬ（Ｅｌｅｃｔｒｏｎｉｃ  Ｓｙｓｔｅｍ  Ｌｅｖｅｌ）モデルなどソフトウェアによって実現したソフトウェアシミュレータと、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）などの設計変更が可能な集積回路などによって実現したハードウェアシミュレータとの双方を利用するシミュレーションである（たとえば、下記特許文献１参照。）。そして、ＥＳＬモデルについても多用な仕様が提供されており、特に高速なシミュレーションが可能なテンポラル・デカップリング、クァンタム、アーリーコンプリション、タイミングアノテーションといったＴＬＭ２．０に準拠した方式が提供され、シミュレータへの採用が広がっている。
【０００３】
図３３は、従来の協調シミュレーションの構成例を示す説明図である。従来より採用されている協調シミュレーション１０では、通常、図３３のように、ＥＳＬモデルとＦＰＧＡとが１対１の関係でマッピングされた構成での通信処理が主流となっている。従来の協調シミュレーションではソフトウェア側のシミュレーションとＦＰＧＡ側の通信の手法は１対１のため各シミュレータ間のスケジューリングは不要であった。ところが、上記のようなＴＬＭ２．０に準拠したシミュレーション方式の場合、高速なシミュレーションが可能となり、ＥＳＬモデルとＦＰＧＡとが多入力対多出力になるような構成への適応も期待されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−２７５５６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述したように協調シミュレーションにおいて、ソフトウェアシミュレータとハードウェアシミュレータとを多入力対多出力の関係の構成にしたい場合、各シミュレータ間の通信にはスケジューリングによる同期処理が必要となる。具体的には、各シミュレータ内での処理実行時間とシミュレータ間での通信時間を調整するための通信装置が必要となる。
【０００６】
しかしながら、従来技術では、各シミュレータ間のスケジューリングを実現する装置は提供されていなかった。また、仮にソフトウェアシミュレータとハードウェアシミュレータを単純にそのまま実装したとしても、シミュレーション時間と各ブロックモデルの計算実行時間は一致しない。このような計算実行時間のズレの発生は、シミュレーション実行時にＥＳＬモデルによるＴＬＭ２．０のシミュレーション時間に加えて、各ブロックの実処理時間が生じていることに起因する。
【０００７】
具体的には、たとえば、ＥＳＬモデルを構成するある処理ブロックＡにて実行される処理は処理時間がかからないファンクションであり、他の処理ブロックＢで実行される処理は所定の処理時間を要するファンクションとする。ところが、シミュレーション時間の仕様によって処理ブロックＢによるシミュレーション時間Ｔ２が処理ブロックＡによるシミュレーション時間Ｔ１よりも早くＦＰＧＡ側に到達すると設定されていれば、実際の処理時間の関係にかかわらず、処理ブロックＢからの転送データがＦＰＧＡ側に早く到達したものとして処理されてしまう。すなわち、ＦＰＧＡ側では間違った順に処理が実行されてしまう。結果として、アクセス順序の誤りによってデータレースやデッドロックなどの障害を引き起こしてしまう。
【０００８】
上述のように、従来の協調シミュレーションの場合、高速シミュレーションが可能なＴＬＭ２．０の方式が提供されても、機能を活かした高速処理を望めない。さらに、ＥＳＬモデルとＦＰＧＡとが多入力対多出力の関係の場合、正確なシミュレーションの実行も担保できないという問題があった。
【０００９】
本開示技術は、上述した従来技術による問題点を解消するため、効率的かつ正確な協調シミュレーションの実行を支援する検証支援プログラム、検証支援装置および検証支援方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、本開示技術は、ハードウェアシミュレータとソフトウェアシミュレータとを用いた協調シミュレーションを実行するコンピュータにおいて、前記協調シミュレーションの実行対象データを取得する処理と、取得された実行対象データの形式に応じて前記実行対象データの抽象度を判別する処理と、前記実行対象データについて、判別された抽象度に応じたシミュレーション時間と、前記ハードウェアシミュレータと前記ソフトウェアシミュレータとの仕様に基づいて前記ハードウェアシミュレータと前記ソフトウェアシミュレータの間での通信時間とを特定する処理と、前記ハードウェアシミュレータと前記ソフトウェアシミュレータとの間で前記実行対象データの通信処理を行う場合に、特定されたシミュレーション時間と通信時間との加算時間と、前記通信処理を行わない場合の前記実行対象データのシミュレーション時間との差分時間を算出する処理と、算出された差分時間の待機処理を発生させながら前記実行対象データを用いて前記協調シミュレーションを実行する処理と、を含むことを要件とする。
【発明の効果】
【００１１】
本検証支援プログラム、検証支援装置および検証支援方法によれば、効率的かつ正確な協調シミュレーションを実現させることができるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】本実施の形態にかかる検証支援処理の一例を示す説明図である。
【図２】検証支援装置のハードウェア構成を示すブロック図である。
【図３】検証支援装置の機能的構成を示すブロック図である。
【図４】検証支援処理の手順を示すフローチャートである。
【図５】本実施の形態にかかる協調シミュレーションの構成例（その１）を示す説明図である。
【図６】本実施の形態にかかる協調シミュレーションの構成例（その２）を示す説明図である。
【図７】ソフトウェアシミュレータとハードウェアシミュレータとの通信例を示す説明図である。
【図８】ＭＤ１，ＭＤ３のシミュレーションの動作例を示すタイミングチャートである。
【図９】各シミュレータ内の機能ブロックの構成例を示すブロック図である。
【図１０】マルチレイヤバスの構成例を示す説明図である。
【図１１】シングルレイヤバスの構成例を示す説明図である。
【図１２】通信用の処理データの構成を示す図表である。
【図１３】実行対象データの変換例を示す図表である。
【図１４】メッセージポート実装例（通信チャネルが１つの場合）を示す説明図である。
【図１５】データ転送例（通信チャネルが１つの場合）を示す説明図である。
【図１６】データ転送例（通信チャネルが１つでマルチレイヤバスの場合）を示す説明図である。
【図１７】メッセージポート実装例（通信チャネルが複数の場合）を示す説明図である。
【図１８】データ転送例（通信チャネルが複数の場合）を示す説明図である。
【図１９】データ転送例（通信チャネルが複数でマルチレイヤバスの場合）を示す説明図である。
【図２０】ＥＳＬモデルのシミュレーション実行順の一例を示す説明図である。
【図２１】データ転送順とシミュレーション実行順とが異なるデータ転送例を示す説明図である。
【図２２】マルチレイヤの場合のＦＰＧＡモデルの機能ブロックの構成例を示すブロック図である。
【図２３】ＥＳＬモデルからの送信処理の手順を示すフローチャートである。
【図２４】バスアクセス権チェックの手順を示すフローチャートである。
【図２５−１】転送キュー登録（送信時）の手順を示すフローチャートである。
【図２５−２】転送キュー登録（受信時）の手順を示すフローチャートである。
【図２６】空きチャネルチェックの手順を示すフローチャートである。
【図２７】ＦＰＧＡによる受信処理の手順を示すフローチャートである。
【図２８】ＦＰＧＡからの送信処理の手順を示すフローチャートである。
【図２９】ＥＳＬモデルによる受信処理の手順を示すフローチャートである。
【図３０】ＣＡによる正確なシミュレーションタイミングを示す説明図である。
【図３１】ＥＳＬモデルによる理想的なシミュレーションタイミングを示す説明図である。
【図３２】ＥＳＬモデルによる処理時間の違いによるシミュレーションタイミングのズレを示す説明図である。
【図３３】従来の協調シミュレーションの構成例を示す説明図である。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、この発明にかかる検証支援プログラム、検証支援装置および検証支援方法の好適な実施の形態を詳細に説明する。
【００１４】
（実施の形態）
図１は、本実施の形態にかかる検証支援処理の一例を示す説明図である。図１のように、本実施の形態は、ＥＳＬモデルなどによって実現されたソフトウェアシミュレータ１１０と、ＦＰＧＡなどによって実現されたハードウェアシミュレータ１２０による協働シミュレーションの実行環境によって利用される。
【００１５】
検証支援装置１００は、ソフトウェアシミュレータ１１０とハードウェアシミュレータ１２０との間の実行対象データの通信処理のスケジュールを調整する機能を備えている。具体的には、ソフトウェアシミュレータ１１０によって実現されたＥＳＬモデル側の通信ブロックからハードウェアシミュレータ１２０によって実現されたＦＰＧＡ側の通信ブロックへのデータ転送の際にオーダリング機能により適切な実行シミュレーションタイミングを実現する。
【００１６】
したがって、検証支援装置１００は、ソフトウェアシミュレータ１１０や、ハードウェアシミュレータ１２０それぞれから他のシミュレータに対して実行対象データの転送を行う際に、各シミュレータの仕様に応じた処理時間のズレを特定する。そして、特定したズレを調整したスケジューリングを行う。
【００１７】
また、検証支援装置１００は、ソフトウェアシミュレータ１１０からハードウェアシミュレータ１２０への通信ポート数に制限がある場合、通信ポートのビジー状態を把握して適切な通信経路を選択する機能も備えている。したがって、効率的な通信処理が可能となり、他のシミュレータの機能を活かした協調シミュレーションが可能となる。
【００１８】
なお、図１に例示した構成の場合、検証支援装置１００は、ソフトウェアシミュレータ１１０やハードウェアシミュレータ１２０から独立した構成になっているが、他の構成であってもよい。すなわち、検証支援装置１００の処理を実現するための機能部が用意されていればよく、検証支援装置１００相当の機能部を、ソフトウェアシミュレータ１１０を実現する汎用コンピュータ内に設けてもよい。
【００１９】
以下には、上述した検証支援装置１００の機能を実現するための具体的な構成と処理手順について説明する。
【００２０】
（検証支援装置のハードウェア構成）
図２は、検証支援装置のハードウェア構成を示すブロック図である。図２において、検証支援装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、磁気ディスクドライブ２０４と、磁気ディスク２０５と、光ディスクドライブ２０６と、光ディスク２０７と、ディスプレイ２０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０９と、キーボード２１０と、マウス２１１と、スキャナ２１２と、プリンタ２１３と、を備えている。また、各構成部はバス２００によってそれぞれ接続されている。
【００２１】
ここで、ＣＰＵ２０１は、検証支援装置１００の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムや、検証支援処理を実現するための検証支援プログラムなどの各種プログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される。磁気ディスクドライブ２０４は、ＣＰＵ２０１の制御にしたがって磁気ディスク２０５に対するデータのリード／ライトを制御する。磁気ディスク２０５は、磁気ディスクドライブ２０４の制御で書き込まれたデータを記憶する。
【００２２】
光ディスクドライブ２０６は、ＣＰＵ２０１の制御にしたがって光ディスク２０７に対するデータのリード／ライトを制御する。光ディスク２０７は、光ディスクドライブ２０６の制御で書き込まれたデータを記憶したり、光ディスク２０７に記憶されたデータをコンピュータに読み取らせたりする。
【００２３】
ディスプレイ２０８は、カーソル、アイコンあるいはツールボックスをはじめ、協調シミュレーションの実行結果に関する文書、画像、機能情報などのデータを表示する。このディスプレイ２０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００２４】
インターフェース（以下、「Ｉ／Ｆ」と略する。）２０９は、通信用のＩＦであり、ＰＣＩやＬＡＮなど様々デバイス通信部となる。たとえばＬＡＮ接続の場合であれば、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１４に接続する。そして、このネットワーク２１４を介して他の装置に接続される。そして、Ｉ／Ｆ２０９は、ネットワーク２１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２５】
キーボード２１０は、文字、数字、各種指示などの協調シミュレーションの際の入力処理に利用するためのキーを備え、各種データの入力を行う。また、キーボード２１０に限らず、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００２６】
スキャナ２１２は、画像を光学的に読み取り、検証支援装置１００内に協調シミュレーションに用いる画像データを取り込む。なお、スキャナ２１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ２１３は、画像データや文書データを印刷する。プリンタ２１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００２７】
（検証支援装置の機能的構成）
図３は、検証支援装置の機能的構成を示すブロック図である。検証支援装置１００は、取得部３０１と、判別部３０２と、特定部３０３と、算出部３０４と、実行部３０５と、変換部３０６と、選択部３０７と、を含む構成である。この制御部となる機能（取得部３０１〜選択部３０７）は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをＣＰＵ２０１に実行させることにより、または、Ｉ／Ｆ２０９により、その機能を実現する。また、検証支援装置１００は、ハードウェアシミュレータ１２０とソフトウェアシミュレータ１１０とを用いた協調シミュレーションを実行する。
【００２８】
取得部３０１は、協調シミュレーションの実行対象データを取得する機能を有する。実行対象データとは、協調シミュレーションによって検証される情報を指す。したがって、取得部３０１は、実行対象データとして、ソフトウェアシミュレータ１１０もしくはハードウェアシミュレータ１２０によって扱われる実行対象データを取得する。なお、取得された実行対象データは、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００２９】
判別部３０２は、取得部３０１によって取得された実行対象データの抽象度を判別する機能を有する。具体的には、判別部３０２は、取得された実行対象データの形式を特定する。そして、特定されたデータの形式に応じて実行対象データの抽象度を判別する。通常、実行対象データには、データ自体の形式を表す情報が含まれている。したがって、データ形式から一意的に抽象度を判別することができる。
【００３０】
また、判別部３０２は、特定の抽象度のデータ以外であればシミュレーション時の処理に変化がない場合には、特定の抽象度のデータであるか否かの判別を行ってもよい。なお、判別された抽象度は、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００３１】
特定部３０３は、実行対象データの処理時間と、ハードウェアシミュレータ１２０とソフトウェアシミュレータ１１０との間の通信時間とを特定する機能を有する。なお、特定部３０３は、実行対象データの送信先を参照して、他のシミュレータに転送する場合にのみ、通信時間を特定する。すなわち、実行対象データがハードウェアシミュレータ１２０からソフトウェアシミュレータ１１０に転送される場合や、反対に、ソフトウェアシミュレータ１１０からハードウェアシミュレータ１２０へ転送される場合が該当する。
【００３２】
具体的には、特定部３０３は、判別部３０２によって判別された抽象度に応じたシミュレーション時間と、ハードウェアシミュレータ１２０とソフトウェアシミュレータ１１０との仕様に基づいて２つのシミュレータ間での通信時間とを特定する。なお、特定部３０３による特定結果は、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００３３】
算出部３０４は、シミュレータの違いによるズレを算出する機能を有する。具体的には、算出部３０４は、ハードウェアシミュレータ１２０とソフトウェアシミュレータ１１０との間で実行対象データの通信処理を行う場合に、特定部３０３によって特定されたシミュレーション時間と通信時間との加算時間と、通信処理を行わない場合の実行対象データのシミュレーション時間との差分時間を算出する。算出部３０４による算出処理によって、通信処理を経て実行される実行対象データのシミュレーションタイミングのズレを特定することができる。なお、算出部３０４による算出結果は、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００３４】
実行部３０５は、算出部３０４によって算出された差分時間の待機処理を発生させながら実行対象データを用いて協調シミュレーションを実行する。なお、算出部３０５による算出結果から待機処理を必要としない場合には、通常の協調シミュレーションを実行させる。以上説明した各機能部３０１〜３０５によって、正確な協調シミュレーションの実行が可能になる。検証支援装置１００では、さらに、下記の変換部３０６、選択部３０７を備えることによって、効率的なシミュレーションが実行される。
【００３５】
変換部３０６は、実行対象データを送信先となるシミュレータ（ソフトウェアシミュレータ１１０またはハードウェアシミュレータ１２０）に応じたデータ形式に変換する機能を有する。具体的には、変換部３０６は、取得部３０１によって取得された実行対象データがあらかじめ設定されたデータ形式ではない場合、自動的にデータ形式を所定のデータ形式に変換する。実行部３０５は、変換部３０６によってデータ形式が変換された場合、変換後の実行対象データを用いて協調シミュレーションを実行する。なお、変換された実行対象データは、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００３６】
選択部３０７は、シミュレータ間（ソフトウェアシミュレータ１１０とハードウェアシミュレータ１２０との間）の通信処理を行う際に、適切な通信チャネルを選択する機能を有する。具体的には、シミュレータ間に通信処理を行うための通信チャネルが複数ある場合に、選択部３０７は、各通信チャネルの使用状態に応じて通信中以外の通信チャンネルを選択する。したがって、検証支援装置１００は、通信処理に関する待機時間の発生を防ぎ効率的なシミュレーションを実行することができる。なお、選択された通信チャネルの情報は、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００３７】
（検証支援処理の手順）
図４は、検証支援処理の手順を示すフローチャートである。図４のフローチャートは、協調シミュレーションを実行するシミュレータにおける実行対象データのスケジューリング手順を示している。図４の各処理を実行することによって、ソフトウェアシミュレータ１１０とハードウェアシミュレータ１２０との処理時間の違いや扱う実行対象データの抽象度の違いにかかわらずに、検証意図に沿った正確な協調シミュレーションを実行させることができる。
【００３８】
図４において、検証支援装置１００は、まず、取得部３０１が、協調シミュレーションの実行対象データを取得したか否かを判断する（ステップＳ４０１）。ステップＳ４０１では、実行対象データを取得するまで待ち（ステップＳ４０１：Ｎｏのループ）、取得すると（ステップＳ４０１：Ｙｅｓ）、つぎに、判別部３０２では、実行対象データの抽象度を判別する（ステップＳ４０２）。
【００３９】
その後、実行対象データのデータ形式に応じて要変換か否かを判断する（ステップＳ４０３）。ステップＳ４０３では、実行対象データが所定のデータ形式ではない場合に、要変換であると判断を下す。したがって、すでに所定のデータ形式である場合は、変換する必要がないと判断する。
【００４０】
ステップＳ４０３によって実行対象データのデータ形式が要変換であると判断された場合（ステップＳ４０３：Ｙｅｓ）、変換部３０６では、実行対象データを所定の形式のデータに変換する（ステップＳ４０４）。一方、ステップＳ４０３において、要変換ではないと判断された場合（ステップＳ４０３：Ｎｏ）、ステップＳ４０４の処理をスキップしてステップＳ４０５の処理に移行する。
【００４１】
つぎに、特定部３０３および算出部３０４では、ステップＳ４０２によって判別された抽象度を参照して、実行対象データの処理と転送に関する時間を特定する（ステップＳ４０５）。最後に、実行部３０５では、ソフトウェアシミュレータ１１０とハードウェアシミュレータ１２０とを用いて、ステップＳ４０５によって特定した時間に応じた待機処理を含むシミュレーションを実行させ（ステップＳ４０６）、一連の処理を終了する。
【００４２】
以上説明したように、本実施の形態にかかる検証支援装置１００を用いることによって、シミュレータの処理時間を考慮した待機時間を発生させながら協調シミュレーションを実行する。したがって、実行対象データの実行順序が逆転するような事態を防ぎ、検証意図に沿った正確なシミュレーションが実行される。また、適切な通信チャネルを選択して待機時間の発生を防ぐため、ソフトウェアシミュレータ１１０の処理性能を活かした効率的なシミュレーションが可能となる。
【００４３】
（実施例）
実施例ではソフトウェアシミュレータ１１０としてＥＳＬモデルを採用し、ハードウェアシミュレータ１２０としてＦＰＧＡによるエミュレーションを採用した協調シミュレーションに検証支援処理を適用させた場合について説明する。正確かつ効率的な協調シミュレーションを実行するには、ＥＳＬモデルの動作とＦＰＧＡの動作の違いによる双方向の通信処理のスケジューリングが重要になる。
【００４４】
＜協調シミュレーションの構成例＞
図５、図６は、本実施の形態にかかる協調シミュレーションの構成例を示す説明図である。なお、実施例では、ＥＳＬモデルによるシミュレーションとして、ＭＤ１：ＵＴ，ＭＤ２：ＬＴ／ＡＴ，ＭＤ３：ＣＡを用い、ＥＳＬモデルとＦＰＧＡとの接続の手法としては、多入力対多出力の構成を採用する。課題でも説明したように、従来は１対１の接続の技術が主流であり、複数の処理ブロックによるシミュレーションは実現困難であった。したがって、デッドロックやデータレースなどのタイミング設計ができなかった。実施例では、多入力対多出力の接続例として、図５に例示した構成について説明する。なお、多入力対多出力の接続例としては、図６に例示した構成もあり、図５の構成による実施例をそのまま適用することができるため詳細な処理の説明は割愛する。
【００４５】
＜ＥＳＬモデルについて＞
図７は、ソフトウェアシミュレータとハードウェアシミュレータとの通信例を示す説明図である。また、図８は、ＭＤ１，ＭＤ３のシミュレーションの動作例を示すタイミングチャートである。上述したように、実施例にて用いるＥＳＬモデルのシミュレーションは、下記の３つの方式に分類される。
【００４６】
１．シミュレーションモード１（ＭＤ１）：ＵｎＴｉｍｅｄ（ＵＴ），  ＰＶ（Ｐｒｏｇｒａｍｍｅｒ‘ｓ  Ｖｉｅｗ）
２．シミュレーションモード２（ＭＤ２）：ＴＬＭ２．０のＬＴ／ＡＴのＴｅｍｐｏｒａｌ  Ｄｅｃｏｕｐｌｉｎｇ，Ｑｕａｎｔｕｍ，Ｅａｒｌｙ  ｃｏｍｐｌｅｔｉｏｎ，ｔｉｍｉｎｇ  ａｎｎｏｔａｔｉｏｎ
３．シミュレーションモード３（ＭＤ３）：Ｃｙｃｌｅ  Ａｃｃｕｒａｔｅ（ＣＡ）  サイクル精度
【００４７】
そして、ソフトウェアシミュレータ１１０（ブロックＭ１）とハードウェアシミュレータ１２０（ブロックＰ１）との間に図７のような接続関係がある場合、ＭＤ１およびＭＤ３では図８に示すようなシミュレーション動作を行う。図８の下段のタイミングチャート８１０が表すＭＤ１は、シミュレーション動作時に遅延が計算されない。一方、図８の上段のタイミングチャート８００が表すＭＤ３は、実際のハードウェアと同様にＰ１の計算時間を算出し、サイクルレベルで正確にシミュレーション動作を行うことができる。なお、ＭＤ２は、ＴＬＭ．２．０ではテンポラル・デカップリング、クァンタム、アーリーコンプリション、タイミングアノテーションのシミュレーション方式が定義されている。
【００４８】
＜抽象度について＞
つぎに、各シミュレーションモードで扱われるデータの抽象度について説明する。本実施の形態では、ＥＳＬモデルによって扱うデータの抽象度をＵＴ（ＭＤ１）、ＬＴ／ＡＴ（ＭＤ２）、ＣＡ（ＭＤ３）と定義して説明を行う。それぞれ、下記のような特性を持つ。
【００４９】
・ＵＴ（ＵｎＴｉｍｅｄ）
時間概念はなく、機能の実行順序のみ正しい抽象度であるため、時間は不正確になる。
・ＬＴ（Ｌｏｏｓｅｌｙ−Ｔｉｍｅｄ）／ＡＴ（Ａｐｐｒｏｘｉｍａｔｅｌｙ−Ｔｉｍｅｄ）
ＴＬＭ２．０が定義するコーディングスタイルであり、抽象度はＬＴ＜ＡＴ（ＡＴの方が精度を合わせられる）の精度関係となっている。ＬＴは予測できる実行時間を持ち、同期ポイントが明確になっている。テンポラル・デカップリング、クォンタムのアルゴリズムを利用したシミュレーションが可能であり、正確なシステム同期を保証するためのものではない。また、ＡＴはアーキテクチャ探索、性能解析など精度を要求する場合に利用される。ＡＴの場合、通信部はリクエスト（開始、終了）とレスポンス（開始、終了）が分かれ、通信部の精度が向上する。なお、ＡＴではテンポラル・デカップリングを使わない。
・ＣＡ（Ｃｙｃｌｅ  Ａｃｃｕｒａｔｅ）
サイクル精度を意味し、正確な時間の概念が含まれる。
【００５０】
＜機能ブロックの構成例＞
図９は、各シミュレータ内の機能ブロックの構成例を示すブロック図である。以下にＥＳＬモデル９００およびＦＰＧＡ９１０を構成する機能ブロックについてそれぞれ説明する。
【００５１】
○ＥＳＬモデル側ブロック
ＥＳＬモデル９００は、ＩＦブロックＥ０と、処理部ブロックＥ１と、スケジューラＥ２と、通信部Ｅ３と、を含んだ構成になっている。
【００５２】
・ＩＦブロックＥ０
ＩＦブロックＥ０はＥＳＬツールベンダーのＡＰＩとなる。したがって、ＴＬＭ２．０の場合もＡＰＩとなる。各種ＥＳＬツールや独自ＡＰＩはＩＦブロックＥ０内に格納されることによって、ハンドシェイク処理機能を持つ。
【００５３】
・処理部ブロックＥ１
実行対象データの各抽象度（ＵＴ／ＬＴ／ＡＴ／ＣＡ）に応じたＥＳＬ‐ＡＰＩのデータ変換を行う。実行対象データをＦＰＧＡ９１０へ転送する場合：ＵＴおよびＬＴ／ＡＴではＥＳＬ‐ＡＰＩで扱うデータを所定のデータ構造（後述する図１２の図表１２００のデータ構造）に変換して転送する。抽象度がＣＡの場合では、実行対象データはシミュレーションサイクル単位で受信される。さらに、処理部ブロックＥ１では、受信が完了するまで実行対象データを蓄積し、通信が完了した後、所定のデータ構造に変換してＦＰＧＡ９１０に転送する。通信が完了するまではＩＦブロックＥ０と処理部ブロックＥ１との間によってＥＳＬモデル９００内の通信を処理する。
【００５４】
なお、ＦＰＧＡ９１０からＥＳＬモデル９００側へ送信する場合は、反対にＦＰＧＡ９１０からは蓄積された実行対象データが送られてくる。したがって、処理部ブロックＥ１では、送られてきた実行対象データにＥＳＬ‐ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）に適したデータ変換を施した後、ＩＦブロックＥ０に渡す。また、送られてきた実行対象データの抽象度がＣＡの場合は転送処理と逆に実行対象データをサイクル単位で１つ１つＥＳＬモデル９００側に送る。
【００５５】
・スケジューラＥ２
スケジューラＥ２のデータ転送に関する１つ目の機能としては、ＥＳＬシミュレーションの抽象度（ＵＴ／ＬＴ／ＡＴ／ＣＡ）にしたがってＦＰＧＡ９１０にシミュレーション時間（レイテンシ）と所定のデータとを伝達する。スケジューラＥ２の２つ目の機能としては、ＦＰＧＡ９１０からの遅延時間をＥＳＬモデル９００側へ伝達する。
【００５６】
また、スケジューラＥ２は、通信部Ｅ３からは通信チャネルの状態情報を入手して通信チャネルのスケジューリングを行う。なお、スケジューラＥ２は、ＥＳＬモデル９００側スケジューリング内容に応じたブロック間の通信も合わせて行う。これによりＦＰＧＡ９１０との通信効率を上げたシミュレーションが可能となる。このとき、ＥＳＬモデル９００バスのバスアクセス権情報もスケジューリング情報として扱う。
【００５７】
・通信部Ｅ３
通信部Ｅ３は各種ＦＰＧＡベンダーの通信用ＡＰＩドライバーあるいはＳＣＥ−ＭＩ（Ｓｔａｎｄａｒｄ  Ｃｏ−Ｅｍｕｌａｔｉｏｎ  Ｍｏｄｅｌｉｎｇ  Ｉｎｔｅｒｆａｃｅ）のメッセージポートＡＰＩに渡すブリッジとなる。したがって、通信部Ｅ３はスケジューラＥ２へ通信チャネルの情報を送る。
【００５８】
○ＦＰＧＡ側ブロック
ＦＰＧＡ９１０は、ＩＦブロックＦ０と、処理部ブロックＦ１と、スケジューラＦ２と、通信部Ｆ３とを含んだ構成になっている。また、ＦＰＧＡ９１０は、レイヤごとにスケジューラ、処理部ブロックを実装する。なお、図９は１レイヤの構成である。したがって、複数レイヤの場合には、スケジューラ、処理部ブロックをレイヤ数用意する。
【００５９】
・ＩＦブロックＦ０
ＤＵＴを構成する各ブロックＰ１，…，Ｐ３のＩＦに対応したものとなる。抽象度はＲＴＬのサイクルレベルである。ハンドシェイク処理機能を持つ。
【００６０】
・処理部ブロックＦ１
処理部ブロックＦ１では、ＲＴＬレベルよりＣＡサイクルで動作する。実行対象データは、所定のデータ構造（図１２の図表１２００のデータ構造）にデータを変換する。また処理所有サイクル時間とバスアクセス権などを付加する。処理部ブロックＦ１では、ＥＳＬモデル９００に依存したデータではなく、固定データ形式となる。なお、同一レイヤではレイヤ単位でデータを処理する。
【００６１】
・スケジューラＦ２
スケジューラＦ２は、スケジュールに応じて所定の単位時間で実行対象データの通信を行うことによって、ＥＳＬモデル９００側への転送スケジュールを調整する。
【００６２】
・通信部Ｆ３
通信部Ｆ３は各種ＦＰＧＡベンダーの通信用ＡＰＩドライバーあるいはＳＣＥ−ＭＩメッセージポートＡＰＩに渡すブリッジとして機能する。
【００６３】
＜レイヤの構成＞
図１０は、マルチレイヤバスの構成例を示す説明図であり、図１１は、シングルレイヤバスの構成例を示す説明図である。図１０、図１１を用いて、レイヤの構成について説明する。図１０のように、マルチレイヤの場合、各レイヤにはＬ１，Ｌ２，Ｌ３とレイヤＩＤが付与されている。そして、ＥＳＬモデル９００内のバスモデルＢ１がこのレイヤＩＤに関する情報を持ち、通信部Ｅ３に情報を渡す。
【００６４】
ＥＳＬモデル９００からの送信処理の際には、データ転送時に、どのターゲット（Ｐ１，Ｐ２，Ｐ３）にアクセスするのかをデコードし、アクセスされていないレイヤを選択する。なお、データ転送時に他のデータと競合する場合は、ＥＳＬモデル５０内のバスモデルＢ１であらかじめ設定される優先順位にしたがってアクセスを行う。なお、マルチレイヤで同じレイヤＩＤが設定されていれば、図１１のようなシングルレイヤと同じ扱いになる。
【００６５】
＜データ転送について＞
図１２は、通信用の処理データの構成を示す図表である。図１２を参照して、データ転送の際の詳細な処理について説明する。各シミュレータ（ＥＳＬモデル９００、ＦＰＧＡ９１０）がプライオリティの関係でデータ転送を受け付けない場合には、待ち状態となる。また割り込み状態やキャンセルされる場合も想定しなければならない。スケジューラＥ２において、上述のようなビジー状態が発生した場合に、ＩＦブロックＥ０から情報を得て、通信状態を、ＦＰＧＡ９１０側のスケジューラＦ２に伝送する。バスの状態を判断するには、図１２の図表１２００を構成する処理データの中のＮｏ．１１を参照する。以上説明したように、ＥＳＬモデル９００側ではＦＰＧＡ９１０側にバスの状態を伝える必要があるため常時アクセスの状態を把握している。
【００６６】
反対に、ＦＰＧＡ９１０側からＥＳＬモデル９００側にアクセスがある場合、スケジューラＥ２がＩＦブロックＥ０と通信を行い、転送できるかどうかを判断する。そして、転送できる場合は、ＦＰＧＡ９１０側スケジューラＦ２によって転送準備が開始される。したがって、ＥＳＬモデル９００内のバスモデルＢ１とＦＰＧＡ９１０のＤＵＴとが通信をするためには、実行対象データについてバスの状態（図表１２００のＮｏ．１１の「Ｓｔａｔｕｓ」の情報）と遅延データ（図表１２００のＮｏ．７の「レイテンシ」の情報）を取得しておく必要がある。遅延データを参照することによって、いつ通信を開始してよいかを特定することができる。
【００６７】
＜データ変換例＞
図１３は、実行対象データの変換例を示す図表である。ここでは、図１３を用いて実行対象データの変換について具体例を挙げて説明する。図１３の図表１３００の変換例を用いた場合、実行対象データには、図１２の図表１２００に例示したようにアドレス情報が含まれている。たとえば、アドレス情報として、ＥＳＬモデル９００側で、「ｓｔａｒｔ＿ａｄｄｒ」と、「ｅｎｄ＿ａｄｄｒ」とが提供された場合、ＦＰＧＡ９１０側に転送するために、先頭アドレスのみのパラメータに変換される。また、「ｅｎｄ＿ａｄｄｒ」は転送サイズｌｅｎとｓｉｚｅで計算され、下記のように変換される。
【００６８】
ｅｎｄ＿ａｄｄｒ＝ｓｔａｒｔ＿ａｄｄｒ＋ｓｉｚｅ＊ｌｅｎ
【００６９】
反対に、ＦＰＧＡ９１０側からＥＳＬモデル９００に転送する際にも、実行対象データには同様の変換が施される。たとえば、図表１２００に例示したバーストに関する情報である「ＨＢＵＲＳＴ」は、「ｌｅｎ」と「ｂｕｒｓｔ＿ｔｙｐｅ」とにより再現される。「ＨＢＵＲＳＴ」はバースト数からバーストタイプをどのくらい出すかが決定できる。
【００７０】
＜スケジューラについて＞
つぎに、スケジューラについて詳しく説明する。以下には、通信チャネルが１つの場合と複数の場合とに分けてそれぞれ説明する。
【００７１】
図１４は、メッセージポート実装例（通信チャネルが１つの場合）を示す説明図である。また、図１５は、データ転送例（通信チャネルが１つの場合）を示す説明図である。図１４では、ＥＳＬモデル１４００とＦＰＧＡ１４１０との通信処理を通信チャネル１４２０によって実行する。図１５のＤ１〜Ｄ３は、処理単位ごとの実行対象データを表している。ＥＳＬモデル１４００によってＤ１〜Ｄ３がタイミングチャート１５００の順番で処理された場合、通信チャネル１４２０は、実行順にＤ１〜Ｄ３を転送する。ＦＰＧＡ１４１０では、タイミングチャート１５１０が示すように転送されたＤ１〜Ｄ３の処理を行う。タイミングチャート１５００の処理順序では転送時間が重なっていないため、正しい順序での転送が可能となる。
【００７２】
図１６は、データ転送例（通信チャネルが１つでマルチレイヤバスの場合）を示す説明図である。図１６のタイミングチャート１６００のようにＥＳＬモデル１４００からの転送タイミングが重複する場合には、レイヤ番号と遅延時間とをデータ構造（図１２の図表１２００参照）に含めて転送を行う。ＦＰＧＡ１４１０側では、データ構造を参照することによって、タイミングチャート１６１０の順序でのＤ１〜Ｄ３の処理が可能となる。なお、上述した説明と逆にＦＰＧＡ１４１０からＥＳＬモデル１４００への転送の際にも、同様に処理を行えばよい。
【００７３】
図１７は、メッセージポート実装例（通信チャネルが複数の場合）を示す説明図である。また、図１８は、データ転送例（通信チャネルが複数の場合）を示す説明図である。図１７では、ＥＳＬモデル１７００とＦＰＧＡ１７１０との通信処理を通信チャネル１７２０によって実行する。図１８のＤ１〜Ｄ３は、処理単位ごとの実行対象データを表している。ＥＳＬモデル１７００から転送されるＤ１〜Ｄ３の各実行対象データは、通信チャネル１７２０の使用状況に応じて、適宜選択された通信チャネルを経てＦＰＧＡ１７１０へ転送される。したがって、図１８のように、ＥＳＬモデル１７００において、タイミングチャート１８００のタイミングでＤ１〜Ｄ３が処理された場合、通信チャネル１７２０を経てＦＰＧＡ１７１０に転送される。ＦＰＧＡ１７１０では、タイミングチャート１８１０のタイミングで順番にＤ１〜Ｄ３の処理を行う。
【００７４】
また、図１９は、データ転送例（通信チャネルが複数でマルチレイヤバスの場合）を示す説明図である。図１９の場合、ＥＳＬモデル１７００において、タイミングチャート１９００のタイミングでＤ１〜Ｄ３が処理された場合、Ｄ１とＤ２の転送タイミングが重複する。したがって、通信チャネル１７２０では、Ｄ１とＤ２とを異なるレイヤによって転送する。ＦＰＧＡ１７１０では、タイミングチャート１９１０のタイミングで転送された順序に沿って、Ｄ１〜Ｄ３の処理を行う。通信チャネル１７２０のように複数の通信チャネルの場合も、上述した説明と逆にＦＰＧＡ１７１０からＥＳＬモデル１７００への転送の際には同様に処理を行えばよい。
【００７５】
図２０は、ＥＳＬモデルのシミュレーション実行順の一例を示す説明図であり、図２１は、データ転送順とシミュレーション実行順とが異なるデータ転送例を示す説明図である。上述した実装例と異なり、ＥＳＬ側モデルの到着時間がシミュレーション時間の順番でない場合も想定される。たとえば、受信側のＦＰＧＡ１７１０にて、図２０のタイミングチャート２０００のようなタイミングにてシミュレーションを実行したい場合について説明する。しかしながら、ＥＳＬモデル１７００では、図２１のタイミングチャート２１００のような順序でＤ１〜Ｄ３が実行されるため、Ｄ１〜Ｄ３のＦＰＧＡ１７１０への到着時間がシミュレーション時間の順番と相違してしまう。このような場合、Ｄ１〜Ｄ３のデータ構造に含まれたレイテンシやバスアクセス権情報を参照することで、ＦＰＧＡ１７１０は、タイミングチャート２１１０のような所望の実行順序を実現することができる。
【００７６】
図２２は、マルチレイヤの場合のＦＰＧＡモデルの機能ブロックの構成例を示すブロック図である。ＦＰＧＡ２２１０の構成も、メッセージポートの数に応じて、異なる場合がある。バスがシングルレイヤの場合、ＦＰＧＡ２２１０は通常と同じ処理を実行すればよい。一方、マルチレイヤの場合、ＦＰＧＡ２２１０は、通信ブロックの構成において図２２のようにスケジューラＦ２を変更する必要がある。具体的には、スケジューラＦ２間はＥＳＬモデル２２００から与えられた遅延情報（レイテンシ）をもとに同期することでＰ１，Ｐ２，Ｐ３の論理ＬＳＩに対してサイクルレベルで同期した転送を行うことができる。ＦＰＧＡ２２１０の構成の場合、レイヤは並列度を増している。各ペリフェラルブロックにとってはバスアクセス権だけが見える。
【００７７】
＜ＥＳＬモデルからの送信処理＞
図２３は、ＥＳＬモデルからの送信処理の手順を示すフローチャートである。図２３のフローチャートは、ＥＳＬモデルから、ＦＰＧＡ上のいずれかの処理ブロックに対して実行対象データを送信する手順を示している。図２３の各処理を実行することによって、適切なタイミングで実行対象データを転送することができる。
【００７８】
図２３において、まず、シミュレーションのモード選択をトリガとして処理を開始する。そして、実行対象データの抽象度がＣＡか否かを判断する（ステップＳ２３０１）。通常、ＥＳＬモデルではＭＤ３とそれ以外では処理が異なる。したがって、ステップＳ２３０１では、ＣＡの場合とそれ以外かを判断する。
【００７９】
ステップＳ２３０１において、処理対象データの抽象度がＣＡであると判断された場合（ステップＳ２３０１：Ｙｅｓ）、つぎに、ブロックＰに対してＲ／Ｗアクセスを行う（ステップＳ２３０２）。その後、ＥＳＬ−ＡＰＩよりデータを抽出して（ステップＳ２３０３）、所定データに変換する（ステップＳ２３０４）。
【００８０】
実行対象データの抽象度がＣＡの場合は、サイクルごとにアクセスがあるため、送受信が完了したか否かを判断し（ステップＳ２３０５）、送受信が完了するまでステップＳ２３０２〜ステップＳ２３０４の処理を繰り返す（ステップＳ２３０５：Ｎｏのループ）。そして、ステップＳ２３０５において、送受信が完了したと判断されると（ステップＳ２３０５：Ｙｅｓ）、ステップＳ２３０９の処理に移行する。
【００８１】
一方、ステップＳ２３０１において、実行対象データの抽象度がＣＡではないと判断された場合（ステップＳ２３０１：Ｎｏ）、ブロックＰに対してＲ／Ｗアクセスを行う（ステップＳ２３０６）。その後、ＥＳＬ−ＡＰＩよりデータを抽出して（ステップＳ２３０７）、所定データに変換する（ステップＳ２３０８）。
【００８２】
ステップＳ２３０５もしくはＳ２３０８の処理が終了すると、実行対象データの転送準備に移行する。まず、バスアクセス権をチェックして（ステップＳ２３０９）、バスアクセス可能か否かをチェックする。その後、ＥＳＬモデルで与えられたブロックの遅延時間を所定のデータ構造に情報として載せるため、転送キューに登録する（ステップＳ２３１０）。そして、空きチャネルをチェックして（ステップＳ２３１１）、チェックしたチャネル状況に応じて実行対象データをチャネル転送し（ステップＳ２３１２）、一連の送信処理を終了する。
【００８３】
つぎに、図２３にて説明したステップＳ２３０９〜Ｓ２３１１の処理について詳しく説明する。
【００８４】
＜バスアクセス権チェック＞
図２４は、バスアクセス権チェックの手順を示すフローチャートである。図２４のフローチャートは、図２３のステップＳ２３０９のバスアクセス権チェックの詳細な手順を示している。図２４の各処理を実行することによって、実行対象データを転送するためのバスアクセス権の有無を確認し、転送可能か否かを判断することができる。
【００８５】
図２４において、まず、実行対象データに対してＲ／Ｗアクセスを行う（ステップＳ２４０１）。そして、ステップＳ２４０１によって、実行対象データのデータ構造（図１２の図表１２００参照）からバスアクセス権をチェックして、第１パラメータを反映する（ステップＳ２４０２）。バスアクセス権パラメータはＥＳＬモデルに設定される調停機能により決定される。すなわち、バスアクセス権の有無はバスモデルＢ１に依存する。
【００８６】
その後、バスアクセス権があるか否かを判断し（ステップＳ２４０３）、アクセス権があると判断された場合には（ステップＳ２４０３：Ｙｅｓ）、そのまま、ステップＳ２３１０の処理に移行する。
【００８７】
一方、ステップＳ２４０３において、バスアクセス権がないと判断された場合（ステップＳ２４０３：Ｎｏ）、バスアクセス権が取れない場合の処理（ペリフェラルブロック）を実行し（ステップＳ２４０４）、アクセス終了か否かを判断する（ステップＳ２４０５）。ステップＳ２４０５において、アクセスが終了したと判断された場合には（ステップＳ２４０５：Ｙｅｓ）、そのままステップＳ２３１０の処理に移行する。
【００８８】
一方、ステップＳ２４０５において、アクセスが終了していないと判断された場合には（ステップＳ２４０５：Ｎｏ）、ステップＳ２４０１に移行して、再度バスアクセス権チェックを繰り返す。なお、ＥＳＬモデルのバスモデルＢ１のステータスあるいはレスポンス（ＯＫ）の応答の有無がアクセス権の値として反映される。
【００８９】
＜転送キュー登録（送信時）＞
図２５−１、図２５−２は、転送キュー登録の手順を示すフローチャートである。図２５−１、図２５−２のフローチャートは、転送キュー登録の詳細な手順を示す。なお、図２５−１は、送信時の転送キュー登録の手順を示し、図２５−２は、受信時の転送キュー登録の手順を示す。したがって、図２５−１は、図２３のステップＳ２３１０の処理に相当し、図２５−２は、後述する図２７のステップＳ２７０４に相当する。ここでは、図２５−１について説明し、図２５−２については後述の受信時に説明する。
【００９０】
図２５−１において、まず、実行対象データを受け付ける（ステップＳ２５０１）。その後、届いたデータ（ここでは、実行対象データ）を転送キューにセットして（ステップＳ２５０２）、ステップＳ２３１１の処理に移行する。
【００９１】
＜空きチャネルチェック＞
図２６は、空きチャネルチェックの手順を示すフローチャートである。図２６のフローチャートは、図２３のステップＳ２３１１の詳細な手順を示している、図２６では、まず、空きチャネルがあるかチェックする（ステップＳ２６０１）。ステップＳ２６０１において、空きチャネルがあると判断されると（ステップＳ２６０１：Ｙｅｓ）、転送処理に移行可能と判断される。したがって、まず、チャネルフラグに通信個数をカウントするため、空きチャンネルのフラグのカウントアップ（＋１）を行う（ステップＳ２６０２）。そして、転送するチャネフラグを通知して（ステップＳ２６０３）、ステップＳ２３１２の処理に移行する。なお、各チャネルにおいて各チャネルの通信がすべて完了した時点でチャネルフラグはリセットされる。
【００９２】
一方、ステップＳ２６０１において、空きチャネルがないと判断された場合（ステップＳ２６０１：Ｎｏ）、各チャネルで転送数の少ない、すなわち、転送量が最小値のチャネルを検索する（ステップＳ２６０４）。そして、実行対象データのデータ構造（図１２の図表１２００参照）に設定されている転送量をチェックし、転送量が最小値のチャネルがあるか否かを判断する（ステップＳ２６０５）。
【００９３】
ステップＳ２６０５において、最小値チャネルがあると判断された場合には（ステップＳ２６０５：Ｙｅｓ）、このチャネルを転送に利用するため、そのままステップＳ２６０２の処理に移行する。一方、ステップＳ２６０５において、最小値チャネルがないと判断された場合（ステップＳ２６０５：Ｎｏ）、転送量の少ないチャネルをもしくは任意（たとえば、チェックの少ない）のチャネルを選択して（ステップＳ２６０６）、ステップＳ２６０２の処理に移行する。
【００９４】
＜ＦＰＧＡによる受信処理＞
図２７は、ＦＰＧＡによる受信処理の手順を示すフローチャートである。図２７のフローチャートは、ＥＳＬモデルから送信された実行対象データをＦＰＧＡによって受信する際の手順を示している。図２７の処理を実行することによって、適切なタイミングで対応する処理ブロックに実行対処データを転送することができる。
【００９５】
図２７において、まず、ＥＳＬモデルからのチャネル通信アクセスを受け付ける（ステップＳ２７０１）。そして、ステップＳ２７０１のアクセスから所定のデータを受信する（ステップＳ２７０２）。その後、受信した所定のデータのデータ構造からバス仕様にしたがってプロトコルに変換する（ステップＳ２７０３）。
【００９６】
そして、ＦＰＧＡ内の転送用に転送キューに登録し（ステップＳ２７０４）、プロトコル通信を開始する（ステップＳ２７０５）。その後、ステップＳ２７０５の送受信が完了したか否かを判断し（ステップＳ２７０６）、送受信が完了するまでステップＳ２７０５のプロトコル通信を繰り返す（ステップＳ２７０６：Ｎｏのループ）。そして、ステップＳ２７０６の送受信が完了すると（ステップＳ２７０６：Ｙｅｓ）、そのまま、一連の受信処理を終了する。
【００９７】
＜転送キューの登録（受信時）＞
図２５−２は、転送キュー登録（受信時）の手順を示すフローチャートである。図２５−２は、図２７のステップＳ２７０４の詳細な手順を示している。図２５において、まず、実行対象データを受信する（ステップＳ２５１１）。その後、所定の待ち時間に達したか否かを判断する（ステップＳ２５１２）。ステップＳ２５１２において、所定の待ち時間に達するまで、ステップＳ２５１１の処理を繰り返して、待機状態となる（ステップＳ２５１２：Ｎｏのループ）。その後、所定の待ち時間に達した場合（ステップＳ２５１２：Ｙｅｓ）、届いたデータ（ここでは実行対象データ）のレイテンシを転送キューにセットして（ステップＳ２５１３）、ステップＳ２７０５の処理に移行する。
【００９８】
＜ＦＰＧＡからの送信処理＞
図２８は、ＦＰＧＡからの送信処理の手順を示すフローチャートである。図２８のフローチャートは、ＦＰＧＡからＥＳＬモデル上の処理ブロックに対して実行対象データを送信する際の手順を示している。図２８の各処理を実行することによって、適切な転送処理を効率的に実行することができる。
【００９９】
図２８において、ＦＰＧＡ上の各ブロックからのＲ／Ｗアクセスが発生すると（ステップＳ２８０１）、つぎに、プロトコルデータを取得し（ステップＳ２８０２）、プロトコルデータを所定データへ変換する（ステップＳ２８０３）。そして、変換後のデータの送受信処理を行い、送受信が完了したか否かを判断する（ステップＳ２８０４）。
【０１００】
ステップＳ２８０４において、変換後のデータの送受信が完了するまでステップＳ２８０１〜Ｓ２８０３の処理を繰り返し（ステップＳ２８０４：Ｎｏのループ）、送受信が完了すると（ステップＳ２８０４：Ｙｅｓ）、バスアクセス権チェック（ステップＳ２８０５）、他のブロックのタイミングのチェック（ステップＳ２８０６）を順に行う。なお、ステップＳ２８０５のバスアクセス権チェックの手順は、図２４にて説明した手順と同様であるためここでは詳細な説明は省略する。
【０１０１】
その後、空きチャネルをチェックし（ステップＳ２８０７）、アクセス権を得た後、実行対象データを該当する空きチャネルからＥＳＬモデルに対してチャネル転送し（ステップＳ２８０８）、一連の送信処理を終了する。
【０１０２】
＜ＥＳＬモデルによる受信処理＞
図２９は、ＥＳＬモデルによる受信処理の手順を示すフローチャートである。図２９のフローチャートは、ＥＳＬモデル上のいずれかの処理ブロックが、ＦＰＧＡから送信された実行対象データを受信する際の手順を示している。図２９の各処理を実行することによって、受信した実行対象データを適切なタイミングで処理することができる。
【０１０３】
図２９において、ＥＳＬモデルは、ＦＰＧＡ側からアクセス発生をトリガに処理を開始させる。まず、アクセスされた実行対象データの抽象度がＣＡか否かを判断する（ステップＳ２９０１）。ステップＳ２９０１において、実行対象データの抽象度がＣＡであると判断された場合（ステップＳ２９０１：Ｙｅｓ）、つぎに、受信アクセスを行い（ステップＳ２９０２）、所定データを受信する（ステップＳ２９０３）。
【０１０４】
その後、ステップＳ２９０３にて受信した所定データをＥＳＬ−ＡＰＩのデータ形式に変換し（ステップＳ２９０４）、バスアクセス権をチェックする（ステップＳ２９０５）。バスアクセス権のチェックの手順は、図２４にて説明した手順と同様であるため、ここでは詳細な説明は省略する。
【０１０５】
そして、実行対象データを転送キューに登録し（ステップＳ２９０６）、プロトコル通信によって転送を開始する（ステップＳ２９０７）。なお、ステップＳ２９０６における転送キューの登録処理は、図２５−２にて説明した手順と同様であるため、ここでは詳細な説明は省略する。
【０１０６】
そして、転送処理に伴う送受信が完了したか否かを判断する（ステップＳ２９０８）。ステップＳ２９０８では、送受信が完了するまで（ステップＳ２９０８：Ｎｏのループ）、ステップＳ２９０７のプロトコル通信を繰り返す。その後、ステップＳ２９０８において、送受信が完了したと判断されると（ステップＳ２９０８：Ｙｅｓ）、そのままＣＡの場合の一連の受信処理を終了する。
【０１０７】
一方、ステップＳ２９０１において、実行対象データの抽象度がＣＡ以外であると判断された場合（ステップＳ２９０１：Ｎｏ）、ＣＡの場合と同様に受信アクセスを行い（ステップＳ２９０９）、所定データを受信する（ステップＳ２９１０）。その後、ステップＳ２９１０にて受信した所定データをＥＳＬ−ＡＰＩのデータ形式に変換し（ステップＳ２９１１）、バスアクセス権をチェックする（ステップＳ２９１２）。
【０１０８】
そして、実行対象データを転送キューに登録し（ステップＳ２９１３）、プロトコル通信によって転送を開始し（ステップＳ２９１４）、ＣＡ以外の場合は、そのまま一連の受信処理を終了する。
【０１０９】
（シミュレーションタイミング）
図３０は、ＣＡによる正確なシミュレーションタイミングを示す説明図である。また、  図３１は、ＥＳＬモデルによる理想的なシミュレーションタイミングを示す説明図である。図３０、図３１の実施例を挙げて、ＥＳＬモデル側のタイミングとＦＰＧＡ側とのシミュレーションタイミングについて説明する。
【０１１０】
図３０、図３１ではマルチレイヤを想定してＣＰＵ１からＰ１へのアクセスと、ＣＰＵ２からＰ２へのアクセスが同時に発生した場合を例示している。図３０に示したように、ＣＡの場合、ＣＰＵ＃（＃は１または２）とＰ＃（＃は１または２）間は通信時間Ｔｓが存在する。ＦＰＧＡ側ではクロックで動作する回路であるため上図のように通信時間が存在する。
【０１１１】
しかし、図３１に示したように、ＥＳＬモデルのシミュレーションでは、実際にはＣＡモデルでない限りＣＡによる動作をさせていない。すでに説明したように、テンポラル・デカップリング、クァンタム、アーリーコンプリション、タイミングアノテーションといった高速シミュレーションでは、通信時間がＥＳＬモデルとＦＰＧＡとで異なってしまう。すなわち、図３１のように、処理１−１→処理１−２、処理１−２→処理１−３や、処理２−１→処理２−２、処理２−２→処理２−３ではＣＰＵ１ブロック、ＣＰＵ２ブロックから即座にＰ１ブロックやＰ２ブロックに届くわけではない。そこで、図３０のように、Ｐ１ブロックやＰ２ブロックへの通信時間の調整が必要となる。
【０１１２】
一方、図３２は、ＥＳＬモデルによる処理時間の違いによるシミュレーションタイミングのズレを示す説明図である。従来はソフトウェアであるテストベンチあるいはＥＳＬモデルの実行順序が異なることを想定していない。そのためＥＳＬモデルにＴＬＭ２．０のテンポラル・デカップリング、クァンタム、アーリーコンプリート、タイミングアノテーションなどの方式の高速シミュレーションが採用された場合、シミュレーション時間と各ブロックモデルの計算実行時間は一致しない。したがって、図３２に示すように各処理ブロックは計算時間が同じであると仮定しても、その処理ブロックに関係する処理時間は把握できない。
【０１１３】
したがって、処理１−１にしても、シミュレーション時間Ｔｓ１は同じでも計算時間では到達時間にＴｃ１，Ｔｃ２と差が生じる。シミュレーション時間と実際の到達時間との差が生じる場合、ＦＰＧＡ内の処理ブロックへの実行対象データの伝達の順序がずれ、間違った順序によって実行されてしまう。結果として、従来の課題にて説明したように、アクセス順序の誤りによるデータレースやデッドロックなどの障害が発生してしまう。
【０１１４】
以上説明したように、本実施の形態にかかる検証支援装置１００を適用したシミュレータ（ソフトウェアシミュレータ１１０、ハードウェアシミュレータ１２０）によって協調シミュレーションを実行することによって、ＥＳＬ‐ＡＰＩの対応によりツールに依存せず、抽象度がＵＴ／ＬＴ／ＡＴ／ＣＡと混在することも可能となる。すなわち、柔軟な協調シミュレーション環境を提供することができる。
【０１１５】
また、従来の協調シミュレーションにおいて、ＴＬＭ２．０のテンポラル・デカップリング、クァンタム、アーリーコンプリション、タイミングアノテーションなどの方式が採用され高速シミュレーションがエミュレーションと協調できない場合は、ＥＳＬモデルを別のシミュレーション方式に変更しなければならなかった。これでは、ＥＳＬモデルを書き替えなければならず、設計者にとって処理負担が大きいとともに、開発スケジュールの見直しを迫られるといった問題が生じていた。本実施の形態にかかる検証支援処理を適用させることにより、提供されたＥＳＬモデルは、書き替えることなくそのままエミュレーションと接続して協調シミュレーションを実行させることが可能となる。
【０１１６】
以上説明したように、本実施の形態にかかる検証支援プログラム、検証支援装置および検証支援方法によれば、実行対象データからシミュレーションの抽象度を特定して、各シミュレータ間に生じる通信時間の誤差を特定する。したがって、誤差を待機した適切なタイミングによってシミュレーションが実行される。したがって、検証意図に沿った適切なシミュレーションを実行させることができる。
【０１１７】
また、上記技術は、実行対象データを送信先のシミュレータに応じたデータ形式に変換する機能を備えている。したがって、取得した実行対象データを自動的にシミュレーションに適したデータ形式に変換してシミュレーションを実行させることができる。
【０１１８】
また、上記技術は、ソフトウェアシミュレータ１１０とハードウェアシミュレータ１２０との通信チャネルの使用状況に応じて通信チャネルを選択する機能を備えている。したがって、自動的に空きチャネルを選択して、待機時間のない効率的な通信処理が可能となり、シミュレーション効率を上げることができる。
【０１１９】
また、上記技術は、複数のレイヤを備える構成であってもよい。複数レイヤを備えることによって、実行対象データの処理時間が重複する場合であっても、適切なタイミングにおけるデータ転送が可能となる。
【０１２０】
なお、本実施の形態で説明した検証支援方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。本検証支援プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本検証支援プログラムは、インターネットなどのネットワークを介して配布してもよい。
【０１２１】
また、本実施の形態で説明した検証支援装置１００は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、たとえば、上述した検証支援装置１００の機能（取得部３０１〜選択部３０７）をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、検証支援装置１００を製造することができる。
【０１２２】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１２３】
（付記１）ハードウェアシミュレータとソフトウェアシミュレータとを用いた協調シミュレーションを実行するコンピュータを、
前記協調シミュレーションの実行対象データを取得する取得手段、
前記取得手段によって取得された実行対象データの形式に応じて前記実行対象データの抽象度を判別する判別手段、
前記実行対象データについて、前記判別手段によって判別された抽象度に応じたシミュレーション時間と、前記ハードウェアシミュレータと前記ソフトウェアシミュレータとの仕様に基づいて前記ハードウェアシミュレータと前記ソフトウェアシミュレータの間での通信時間とを特定する特定手段、
前記ハードウェアシミュレータと前記ソフトウェアシミュレータとの間で前記実行対象データの通信処理を行う場合に、前記特定手段によって特定されたシミュレーション時間と通信時間との加算時間と、前記通信処理を行わない場合の前記実行対象データのシミュレーション時間との差分時間を算出する算出手段、
前記算出手段によって算出された差分時間の待機処理を発生させながら前記実行対象データを用いて前記協調シミュレーションを実行する実行手段、
として機能させることを特徴とする検証支援プログラム。
【０１２４】
（付記２）前記コンピュータを、さらに、
前記実行対象データを送信先のシミュレータに応じたデータ形式に変換する変換手段として機能させ、
前記実行手段は、前記変換手段による変換後の実行対象データを用いて前記協調シミュレーションを実行することを特徴とする付記１に記載の検証支援プログラム。
【０１２５】
（付記３）前記コンピュータを、さらに、
前記ハードウェアシミュレータと前記ソフトウェアシミュレータとの通信処理を行うための通信チャネルが複数ある場合に、各通信チャネルの使用状態に応じて通信中以外の通信チャンネルを選択する選択手段として機能させ、
前記実行手段は、
前記選択手段によって選択された通信チャネルを用いて前記通信処理を実行することを特徴とする付記１または２に記載の検証支援プログラム。
【０１２６】
（付記４）前記取得手段は、
前記協調シミュレーションにおいて複数のレイヤの処理が実行される場合、レイヤごとに前記実行対象データを取得し、
前記実行手段は、
前記レイヤごとに前記実行対象データを用いて前記協調シミュレーションを実行することを特徴とする付記１〜３のいずれか一つに記載の検証支援プログラム。
【０１２７】
（付記５）ハードウェアシミュレータとソフトウェアシミュレータとを用いた協調シミュレーションを実行するコンピュータに接続された検証支援装置であって、
前記協調シミュレーションの実行対象データを取得する取得手段と、
前記取得手段によって取得された実行対象データの形式に応じて前記実行対象データの抽象度を判別する判別手段と、
前記実行対象データについて、前記判別手段によって判別された抽象度に応じたシミュレーション時間と、前記ハードウェアシミュレータと前記ソフトウェアシミュレータとの仕様に基づいて前記ハードウェアシミュレータと前記ソフトウェアシミュレータの間での通信時間とを特定する特定手段と、
前記ハードウェアシミュレータと前記ソフトウェアシミュレータとの間で前記実行対象データの通信処理を行う場合に、前記特定手段によって特定されたシミュレーション時間と通信時間との加算時間と、前記通信処理を行わない場合の前記実行対象データのシミュレーション時間との差分時間を算出する算出手段と、
前記算出手段によって算出された差分時間の待機処理を発生させながら前記実行対象データを用いて前記協調シミュレーションを実行する実行手段と、
を備えることを特徴とする検証支援装置。
【０１２８】
（付記６）ハードウェアシミュレータとソフトウェアシミュレータとを用いた協調シミュレーションを実行するコンピュータが、
前記協調シミュレーションの実行対象データを取得する取得工程と、
前記取得工程によって取得された実行対象データの形式に応じて前記実行対象データの抽象度を判別する判別工程と、
前記実行対象データについて、前記判別工程によって判別された抽象度に応じたシミュレーション時間と、前記ハードウェアシミュレータと前記ソフトウェアシミュレータとの仕様に基づいて前記ハードウェアシミュレータと前記ソフトウェアシミュレータの間での通信時間とを特定する特定工程と、
前記ハードウェアシミュレータと前記ソフトウェアシミュレータとの間で前記実行対象データの通信処理を行う場合に、前記特定工程によって特定されたシミュレーション時間と通信時間との加算時間と、前記通信処理を行わない場合の前記実行対象データのシミュレーション時間との差分時間を算出する算出工程と、
前記算出工程によって算出された差分時間の待機処理を発生させながら前記実行対象データを用いて前記協調シミュレーションを実行する実行工程と、
を実行することを特徴とする検証支援方法。
【符号の説明】
【０１２９】
１００  検証支援装置
１１０  ソフトウェアシミュレータ
１２０  ハードウェアシミュレータ
３０１  取得部
３０２  判別部
３０３  特定部
３０４  算出部
３０５  実行部
３０６  変換部
３０７  選択部
【図１】
2011076191.tif 000003
【図２】
2011076191.tif 000004
【図３】
2011076191.tif 000005
【図４】
2011076191.tif 000006
【図５】
2011076191.tif 000007
【図６】
2011076191.tif 000008
【図７】
2011076191.tif 000009
【図８】
2011076191.tif 000010
【図９】
2011076191.tif 000011
【図１０】
2011076191.tif 000012
【図１１】
2011076191.tif 000013
【図１２】
2011076191.tif 000014
【図１３】
2011076191.tif 000015
【図１４】
2011076191.tif 000016
【図１５】
2011076191.tif 000017
【図１６】
2011076191.tif 000018
【図１７】
2011076191.tif 000019
【図１８】
2011076191.tif 000020
【図１９】
2011076191.tif 000021
【図２０】
2011076191.tif 000022
【図２１】
2011076191.tif 000023
【図２２】
2011076191.tif 000024
【図２３】
2011076191.tif 000025
【図２４】
2011076191.tif 000026
【図２５−１】
2011076191.tif 000027
【図２５−２】
2011076191.tif 000028
【図２６】
2011076191.tif 000029
【図２７】
2011076191.tif 000030
【図２８】
2011076191.tif 000031
【図２９】
2011076191.tif 000032
【図３０】
2011076191.tif 000033
【図３１】
2011076191.tif 000034
【図３２】
2011076191.tif 000035
【図３３】
2011076191.tif 000036