(57)【要約】【課題】  協調検証の速度を向上させる。【解決手段】  ソフトウェアシミュレーションとハードウェアエミュレーションを組み合わせて電子回路の動作を検証する協調検証装置において、ハードウェアエミュレーションを行うＦＰＧＡ２０にＣＰＵ３０を内蔵し、ＣＰＵ３０にソフトウェアシミュレーションを実行させるようにした。そして、ＣＰＵ３０が、上記電子回路の一部の動作をシミュレートし、ＦＰＧＡ２０が上記電子回路の他の部分の動作をエミュレートし、ＦＰＧＡ２０とＣＰＵ３０との間での信号送受信により、上記電子回路の一部と他の部分との間の信号送受信をシミュレートするようにした。【選択図】        図３
2015011363.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアシミュレーションとハードウェアエミュレーションを組み合わせて電子回路の動作を検証する協調検証装置であって、
前記ハードウェアエミュレーションを行うプログラマブル回路にＣＰＵを内蔵し、該ＣＰＵに前記ソフトウェアシミュレーションを実行させることを特徴とする協調検証装置。
【請求項２】
請求項１に記載の協調検証装置であって、
前記ＣＰＵが、前記電子回路の一部の動作をシミュレートし、前記プログラマブル回路が前記電子回路の他の部分の動作をエミュレートし、前記プログラマブル回路と前記ＣＰＵとの間での信号送受信により、前記電子回路の一部と他の部分との間の信号送受信をシミュレートすることを特徴とする協調検証装置。
【請求項３】
請求項２に記載の協調検証装置であって、
前記プログラマブル回路が、エミュレートした前記電子回路の前記他の部分が送受信するデータを一旦保持する第１転送手段を備え、
前記ＣＰＵが、シミュレートした前記電子回路の前記一部が送受信するデータを一旦保持する第２転送手段の機能を実現し、
前記電子回路の一部と他の部分との間の信号送受信を、前記第１転送手段と前記第２転送手段との間の信号送受信によりシミュレートすることを特徴とする協調検証装置。
【請求項４】
請求項３に記載の協調検証装置であって、
前記第１転送手段及び前記第２転送手段が、送受信したデータを後で送受信順に参照できるように記憶手段に蓄積する蓄積手段を備えることを特徴とする協調検証装置。
【請求項５】
請求項３又は４に記載の協調検証装置であって、
前記第１転送手段及び前記第２転送手段の少なくとも一方が、
送信するデータの順序を変更する手段、送信するデータのヘッダ情報を変更する手段、及びデータの送信を遅延させる手段の少なくとも１つを備えることを特徴とする協調検証装置。
【請求項６】
請求項１に記載の協調検証装置であって、
前記ＣＰＵが、前記ハードウェアエミュレーションによりエミュレートする電子回路と同じ電子回路の動作をシミュレートするソフトウェアシミュレーションを実行し、前記ソフトウェアシミュレーションの結果と前記ハードウェアエミュレーションの結果とを比較して等価性検証を行うことを特徴とする協調検証装置。
【請求項７】
ソフトウェアシミュレーションとハードウェアエミュレーションを組み合わせて電子回路の動作を検証する協調検証方法であって、
ＣＰＵを内蔵したプログラマブル回路のうち、前記プログラマブル回路に前記ハードウェアエミュレーションを実行させ、前記ＣＰＵに前記ソフトウェアシミュレーションを実行させることを特徴とする協調検証方法。
【請求項８】
請求項７に記載の協調検証方法であって、
前記ＣＰＵに、前記電子回路の一部の動作をシミュレートさせ、前記プログラマブル回路に前記電子回路の他の部分の動作をエミュレートさせ、前記プログラマブル回路と前記ＣＰＵとの間での信号送受信により、前記電子回路の一部と他の部分との間の信号送受信をシミュレートさせることを特徴とする協調検証方法。
【請求項９】
請求項８に記載の協調検証方法であって、
前記プログラマブル回路に、エミュレートした前記電子回路の前記他の部分が送受信するデータを一旦保持する第１転送手段の機能を実現させ、
前記ＣＰＵに、シミュレートした前記電子回路の前記一部が送受信するデータを一旦保持する第２転送手段の機能を実現させ、
前記電子回路の一部と他の部分との間の信号送受信を、前記第１転送手段と前記第２転送手段との間の信号送受信によりシミュレートさせることを特徴とする協調検証方法。
【請求項１０】
請求項７に記載の協調検証方法であって、
前記ＣＰＵに、前記ハードウェアエミュレーションによりエミュレートする電子回路と同じ電子回路の動作をシミュレートするソフトウェアシミュレーションを実行させ、前記ソフトウェアシミュレーションの結果と前記ハードウェアエミュレーションの結果とを比較して等価性検証を行うことを特徴とする協調検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ソフトウェアシミュレーションとハードウェアエミュレーションを組み合わせて電子回路の動作を検証する協調検証装置及び協調検証方法に関する。
【背景技術】
【０００２】
従来から、集積回路を設計する際に、その集積回路の機能や性能が期待通りに発揮されるか否かをシミュレーションにより検証することが行われている。そして、このシミュレーションは、回路の構造をＨＤＬ（Hardware Description Language）により記述し、コンピュータ上でその回路の動作をシミュレートするＨＤＬシミュレーションにより行われていた。このＨＤＬシミュレーションには、デバッグ性がよいという利点がある。
【０００３】
しかし、ＳＯＣ（System On a Chip）など、回路に多数の機能を搭載する場合、回路の規模が大きくなり、それに伴ってＨＤＬシミュレーションに必要なデータやプログラムが増加して、処理に長時間がかかるようになってきた。そしてこのため、ＯＳ（Operating System）込みの検証や網羅的な検証項目の検証を行うのが難しく、ＨＤＬシミュレーションにより回路の全ての動作を検証することが難しくなってきた。
【０００４】
このような問題に対処するため、検証対象回路の論理の一部をＦＰＧＡ（Field-Programmable Gate Array）に組み込み、このＦＰＧＡによるエミュレーションとＨＤＬシミュレーションとを組み合わせて検証を行う協調検証という手法が用いられるようになってきた。
この協調検証に関する技術としては、例えば特許文献１乃至３に記載のものが知られている。
【０００５】
特許文献１には、ＦＰＧＡエミュレータがエミュレートする回路とＨＤＬシミュレータがシミュレートする回路の構成を動的に変更することにより、協調検証装置の処理速度を向上させる技術が開示されている。
特許文献２には、ハードウェアエミュレータからシステムシミュレータに出力する出力信号が変化した場合のみシステムシミュレータがその出力信号を取り込むようにすることにより、ハードウェアエミュレータとシステムシミュレータとの間の通信量を減らす技術が開示されている。
【０００６】
特許文献３には、エミュレータにＣＰＵコアを除く検証対象回路とＣＰＵコアをマッピングしつつ、通常動作モードとデバッグモードを切り替えながら検証を行うことが開示されている。このうち通常動作モードはエミュレータのＣＰＵコアが動作させて高速処理を可能とし、デバッグモードは、エミュレータを動かしながらソフトウェアの実行はコンピュータ上の命令セットシミュレータで検証することにより、効果的なデバッグを行うものである。
なお、特許文献３の技術は、高速性を優先したモードとデバッグ性を優先したモードとを切り替えることができるものであるが、高速性とデバッグ性を兼ね備えたモードが用意されているものではない。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、協調検証を行うための協調検証装置は、従来、例えば図１７乃至図１９に示す構成であった。図１７は、その協調検証装置のハードウェア構成を示す図である。図１８は、図１７のＰＣが備える機能を示す図である。図１９は、図１７の協調検証装置による検証動作の様子を模式的に示す図である。
【０００８】
まず、ハードウェアとしては、図１７に示すように、ハードウェアエミュレーションに用いるＦＰＧＡ２２０を搭載したＦＰＧＡボード２１０を、ＨＤＬシミュレーションを行うコンピュータであるＰＣ（パーソナルコンピュータ）２３０と、通信ケーブル２４０により接続により接続していた。
【０００９】
またＰＣ２３０においては、図１８に示すように、ＣＰＵ２３１がＬｉｎｕｘ（登録商標）等のＯＳ（オペレーティングシステム）２５０を実行すると共に、そのＯＳ２５０上で動作するアプリケーションであるＨＤＬシミュレータ２６０及びテストベンチアプリ
２７０を実行する。また、ＣＰＵ２３１はＦＰＧＡボード２１０及びＦＰＧＡ２２０との間のデータ送受信を、ＰＣ２３０が備えるバス及び通信Ｉ／Ｆを介し、さらに通信ケーブル２４０を介して行う。
【００１０】
ＨＤＬシミュレータ２６０は、回路の構成をＨＤＬにより記述したＨＤＬデータに基づき、その回路の動作をシミュレートする機能を備える。
テストベンチアプリ２７０は、回路の動作を検証するための入力信号あるいは入力データを生成してＨＤＬシミュレータ２６０又はＦＰＧＡ２２０に供給する機能を備える。また、その入力信号あるいは入力データに応じてＨＤＬシミュレータ２６０及びＦＰＧＡ２２０が出力する出力データ及び出力信号し、その内容が適切であるかを監視する機能を備える。ＨＤＬシミュレータ２６０及びＦＰＧＡ２２０から、入力に対して想定通りの出力が帰ってくれば、検証対象の回路は想定通りに動作すると判断することができる。
【００１１】
ここで、検証対象の回路が第１〜第３モジュールにより構成されるとする。
この場合、図１９に示すように、そのうち一部のモジュール（ここでは第１及び第２モジュール）と対応する回路を、ＦＰＧＡ２２０をプログラムすることにより第１モジュール２２１及び第２モジュール２２２としてＦＰＧＡ２２０中に形成する。このことにより、ＦＰＧＡ２２０はこれらのモジュールの機能をエミュレートする。
また、残りの第３モジュールの構成をＨＤＬにより記述し、ＰＣ２３０が実行するアプリケーション（アプリ）であるＨＤＬシミュレータ２６０に入力する。このことにより、ＨＤＬシミュレータは第３モジュールの機能を第３モジュール２３３としてシミュレートする。
【００１２】
そして、テストベンチアプリ２７０により実現されるテストベンチ１３２が、第１モジュール２２１、第２モジュール２２２及び第３モジュール２３３にそれぞれ入力データあるいは入力信号を供給する。また、テストベンチ２３２は、これらの各モジュールから出力データ及び出力信号を収集する。さらに、各モジュールは、動作中に他のモジュールとの間でデータあるいは信号を送受信する場合もある。
【００１３】
これらのうち、第１モジュール２２１と第２モジュール２２２との間の送受信は、ＦＰＧＡ２２０内の信号線を用いて行うことができる。第３モジュール２３３とテストベンチ２３２との間の送受信は、ＰＣ２３０内のプロセス間通信により行うことができる。これらの通信路については、ＦＰＧＡ２２０のプログラムあるいはＨＤＬシミュレータ２６０及びテストベンチアプリ２７０のプログラムにより、比較的容易に広い通信帯域を確保することができる。
【００１４】
しかし、ＰＣ２３０とＦＰＧＡ２２０をまたぐ送受信、すなわち、第３モジュール２３３及びテストベンチ２３２と、第１及び第２モジュール２２１，２２２との間の通信は、通信ケーブル２４０を介して行うことになる。この通信ケーブル２４０を介した通信については、通信ケーブル２４０の通信規格に従ったデータ形式の変換が必要であったり、構成の変更が困難であったりすることから、通信帯域に制約があり、またその拡張も容易に行うことができなかった。
【００１５】
従って、ＰＣ２３０とＦＰＧＡ２２０をまたぐ送受信の回数やデータ量が大きくなる場合、通信速度が制約となり、協調検証の速度が低下してしまうという問題があった。
このような問題を解決する技術については、特許文献１乃至３にも記載されていない。
この発明は、このような問題を解決し、協調検証の速度を向上させることを目的とする。
【課題を解決するための手段】
【００１６】
以上の目的を達成するため、この発明は、ソフトウェアシミュレーションとハードウェアエミュレーションを組み合わせて電子回路の動作を検証する協調検証装置において、上記ハードウェアエミュレーションを行うプログラマブル回路にＣＰＵを内蔵し、そのＣＰＵに上記ソフトウェアシミュレーションを実行させるようにしたものである。
【発明の効果】
【００１７】
上記構成によれば、協調検証の速度を向上させることができる。
【図面の簡単な説明】
【００１８】
【図１】この発明の協調検証装置の第１の実施形態のハードウェア構成を示す図である。
【図２】図１に示したＣＰＵの動作環境について説明するための図である。
【図３】図１の協調検証装置による検証動作の様子を模式的に示す図である。
【図４】ＣＰＵの動作環境の別の例について説明するための図２と対応する図である。
【図５】協調検証装置による検証動作の別の例を模式的に示す図３と対応する図である。
【図６】ＣＰＵの動作環境のさらに別の例について説明するための図２と対応する図である。
【図７】協調検証装置による検証動作のさらに別の例を模式的に示す図３と対応する図である。
【図８】ＣＰＵの動作環境のさらに別の例について説明するための図２と対応する図である。
【図９】協調検証装置による検証動作のさらに別の例を模式的に示す図３と対応する図である。
【図１０】この発明の協調検証装置の第２の実施形態による検証動作の様子を模式的に示す図である。
【図１１】図１０に示した協調検証装置における、第１送受信モジュールが第２送受信モジュールにデータを送信する際の各部の動作を示すフローチャートである。
【図１２】同じく、第２送受信モジュールが第１送受信モジュールにデータを送信する際の各部の動作を示すフローチャートである。
【図１３】同じく、第２送受信モジュールがエラーモードで第１送受信モジュールにデータを送信する際の各部の動作を示すフローチャートである。
【図１４】図１３の続きを示すフローチャートである。
【図１５】第１の比較例のハードウェア構成及び各ハードウェアに実現させる機能の構成を示す図である。
【図１６】第２の比較例のハードウェア構成及び各ハードウェアに実現させる機能の構成を示す図である。
【図１７】従来の協調検証装置の一例のハードウェア構成を示す図である。
【図１８】図１７に示したＰＣ中のＣＰＵの動作環境について説明するための図である。
【図１９】図１７に示した協調検証装置による検証動作の様子を模式的に示す図である。
【発明を実施するための形態】
【００１９】
以下、この発明を実施するための形態について、具体的に説明する。
〔第１の実施形態：図１乃至図９〕
まず、図１に、この発明の協調検証装置の一実施形態のハードウェア構成を示す。
この実施形態の協調検証装置は、図１に示すＦＰＧＡ（Field-Programmable Gate Array）ボード１０及びメモリ４０として構成される。また、ＦＰＧＡボード１０は、接続ケーブル６０によりＰＣ５０と接続され、ＰＣ５０が協調検証装置のユーザインタフェースとして機能する。従って、ＰＣ５０も含めて協調検証装置であると捉えることもできる。
【００２０】
このうちＦＰＧＡボード１０は、通信インタフェース（Ｉ／Ｆ）１１及びＦＰＧＡ２０を備える。
通信Ｉ／Ｆ１１は、ＰＣ５０と通信するための通信線６０を接続するインタフェースであり、任意の規格のものを採用することができる。ここでは有線で示したが、無線通信も採用可能である。
【００２１】
ＦＰＧＡ２０は、論理ゲートを多数配置すると共にゲート間の接続回路をプログラムにより書き換え可能としたプログラマブル回路である。このプログラムの設定は、ＰＣ５０から通信Ｉ／Ｆ１１を介して行うことができる。
また、ＦＰＧＡ２０はＣＰＵ３０を内蔵している。ＣＰＵ３０は、回路構成は固定であるが、所望のプログラムを読み込ませて実行させることにより、様々な情報処理を柔軟に実行させることができる。
【００２２】
また、ＦＰＧＡボード１０には、メモリ４０が接続される。このメモリ４０は、ＣＰＵ３０が実行するプログラム、協調検証に用いるデータ及び協調検証の実行結果ログ等を記憶する記憶手段である。ＤＤＲ（Double-Data-Rate）ＲＡＭ、ＳＤ（Synchronous Dynamic）ＲＡＭ、ＵＳＢ（Universal Serial Bus）メモリ、ＮＡＮＤ型フラッシュメモリなど、任意の規格のメモリを用いることができる。
【００２３】
メモリ４０に記憶させるプログラムには、ＣＰＵ３０に回路の動作をシミュレートする機能を実現させるためのＨＤＬシミュレータ、ＣＰＵ３０にテストベンチの機能を実現させるためのテストベンチアプリ、及びこれらの実行環境を提供するＯＳが含まれる。ＯＳとしては、例えばＬｉｎｕｘ（登録商標）を用いることができる。
また、メモリ４０に記憶させるデータには、ＨＤＬシミュレータのアプリデータであるＨＤＬデータ、およびＨＤＬシミュレータにシミュレートさせる回路の構成をＲＴＬ（Register Transfer Level）で記述したＲＴＬデータが含まれる。また、テストベンチアプリに各モジュールへの入力を行わせる信号及びデータや、想定される出力信号及び出力データを記述したテストベンチデータも含まれる。
【００２４】
図２に模式的に示すように、ＣＰＵ３０は、ＦＰＧＡ２０上の配線を通じてデータ及び信号を入出力する。メモリ４０へのアクセスもこれに含まれる。そして、ＣＰＵ３０はＯＳ３６、ＨＤＬシミュレータ３７及びテストベンチアプリ３８をメモリ４０から読み出して実行することにより、検証対象の回路の機能をシミュレートする機能及びテストベンチの機能を実現する。
【００２５】
なお、メモリ４０へは、ＰＣ５０からもＦＰＧＡボート１０を介してアクセス可能である。従って、ＨＤＬデータ及びテストベンチデータは、ユーザがＰＣ５０を操作してメモリ４０へ設定することができる。また、ユーザは、ＰＣ５０を操作してメモリ４０から協調検証の実行ログを読み出すことにより、実行結果を参照することができる。
【００２６】
また、協調検証の実行開始指示や中断指示も、ＰＣ５０からＦＰＧＡボード１０に必要な信号を送信することにより、行うことができる。ＦＰＧＡボード１０は、この信号を受け取ると、ＦＰＧＡ２０の配線を通じてＣＰＵ３０に実行開始や中断を指示する信号を入力する。ＣＰＵ３０は、例えば検証の開始を指示する信号の入力を受け付けると、メモリ４０から必要なプログラム及びデータを読み出して、回路の動作のシミュレートを開始すると共に、テストベンチによる動作検証を開始する。また、その結果をログとしてメモリ４０に記録する。
【００２７】
ここで、図３に、図１の協調検証装置による検証動作の様子を模式的に示す。
ここで、検証対象の回路は、図１９の場合と同様に第１〜第３モジュールにより構成されるとする。
【００２８】
この場合、図３に示すように、そのうち一部のモジュール（ここでは第１及び第２モジュール）と対応する回路を、ＦＰＧＡ２０をプログラムすることにより第１モジュール２１及び第２モジュール２２としてＦＰＧＡ２０中に形成する。このことにより、ＦＰＧＡ２０はこれらのモジュールの機能をエミュレートする。ＦＰＧＡ２０へのプログラムの設定は、ＰＣ５０から通信Ｉ／Ｆ１１を介して行うことができる。
また、残りの第３モジュールの構成をＨＤＬにより記述し、そのＨＤＬデータをメモリ４０に記憶させておく。このことにより、ＣＰＵ３０がそのＨＤＬデータを読み出し、第３モジュールの動作を第３モジュール３１としてシミュレートする。
【００２９】
そして、テストベンチアプリ３８により実現されるテストベンチ３２が、第１モジュール２１、第２モジュール２２及び第３モジュール３１にそれぞれ入力データあるいは入力信号を供給する。また、テストベンチ３２は、これらの各モジュールから出力データ及び出力信号を収集する。さらに、各モジュールは、動作中に他のモジュールとの間でデータあるいは信号を送受信する場合もある。
【００３０】
これらのうち、第１モジュール２１と第２モジュール２２との間の送受信は、ＦＰＧＡ２０内の信号線を用いた信号送受信によりシミュレートすることができる。第３モジュール３１とテストベンチ３２との間の送受信は、ＰＣ３０内のプロセス間通信によりシミュレートすることができる。
また、ＣＰＵ３０とＦＰＧＡ２０をまたぐ送受信、すなわち、第３モジュール３１及びテストベンチ３２と、第１及び第２モジュール２１，２２との間の信号送受信は、ＣＰＵ３０とＦＰＧＡ２０との間の信号送受信によりシミュレートすることができる。この信号送受信は、図では破線で示しており、ＣＰＵ３０が接続されるＦＰＧＡ２０の配線を介して行うことができる。
【００３１】
従って、通信線６０のように通信Ｉ／Ｆ１１を介して通信を行う場合に比べ、高速に通信を行うことができる。また、通信すべきデータ及び信号の量や通信の頻度が多い場合、ＦＰＧＡ２０のプログラムを変更することにより、ＣＰＵ３０の端子数の制約はあるものの、通信バッファを増加させる等して、帯域の拡大を比較的容易に行うことができる。
【００３２】
このため、ＣＰＵ３０をＦＰＧＡ２０の外部、特にＦＰＧＡボード１０の外部に設ける図１７のような構成の場合と比べ、ＣＰＵとＦＰＧＡとの間の通信速度の制約による検証速度の低下が起こりにくくなる。そして、ソフトウェアシミュレーションとハードウェアエミュレーションを組み合わせて電子回路の動作を協調検証する場合の検証速度を向上させることができる。
【００３３】
なお、図１に示した協調検証装置は、メモリ４０に記憶させるプログラムやデータを変更することにより、図３とは異なる環境での協調検証を行うこともできる。
例えば、図４に示すように、ＣＰＵ３０に、回路の動作をシミュレートするためのアプリとして、ＨＤＬシミュレータ３７に加えて仮想ハードウェア（ＨＷ）アプリ３９を実行させることが考えられる。仮想ＨＷアプリ３９は、ＳｙｓｔｅｍＣ等の言語で書かれた、ＲＴＬ記述よりも抽象度の高いモデルを用いたシミュレーション環境を提供するアプリである。
【００３４】
この場合、図５に示すように、ＣＰＵ３０内において、ＨＤＬシミュレータ３７と仮想ＨＷアプリ３９とにより、それぞれ別個のモジュールの動作をシミュレートすることができる。
図５の例では、検証対象の回路は、第１〜第４のモジュールにより構成されるとしている。そのうち第１，第２モジュールの機能は図３の場合と同じくＦＰＧＡ２０がエミュレートする。第３モジュールの動作はＣＰＵ３０がＨＤＬシミュレータ３７によりシミュレートする。第４モジュールの動作はＣＰＵ３０が仮想ＨＷアプリ３９によりシミュレートする。テストベンチについては図３の場合と同様である。
【００３５】
この場合、ＣＰＵ３０が複数のモジュールの動作をシミュレートするが、それらのモジュール間の通信については、ＣＰＵ３０が実行するプロセス同士のプロセス間通信によりシミュレートすることができる。
また、ＦＰＧＡ２０がエミュレートするモジュールと、ＣＰＵ３０がシミュレートするモジュールとの間の信号送受信は、図３の場合と同様ＣＰＵ３０とＦＰＧＡ２０との間の信号送受信によりシミュレートすることができる。もちろん、この信号送受信をＣＰＵ３０が接続されるＦＰＧＡ２０の配線を介して行うことができることも図３の場合と同様である。従って、図３の場合と同様、協調検証の速度を向上させることができる。
【００３６】
また、図６に示すように、ＣＰＵ３０における回路の動作のシミュレートを、仮想ＨＷアプリ３９のみにより行うこともできる。しかし、シミュレートに用いるアプリが変わっても、図７に示すように、シミュレートの大枠は図５の場合と変わらない。
すなわち、ＣＰＵ３０が、検証対象回路のうち一部のモジュールの動作をシミュレートし、ＦＰＧＡ２０が検証対象回路のうち他のモジュールの動作をエミュレートする。また、ＦＰＧＡ２０とＣＰＵ３０との間での信号送受信により、ＣＰＵ３０がシミュレートするモジュールとＦＰＧＡ２０がエミュレートするモジュールとの間の信号送受信をシミュレートする。
図５との違いは、第３モジュール３１′を仮想ＨＷアプリ３９によりシミュレートする点のみである。
【００３７】
そして、協調検証の速度向上の効果は、ＣＰＵ３０がシミュレートに用いるアプリの種類によらず得ることができる。
実際の電子回路の設計に当たっては、抽象度の違う記述方式を用いて回路の構成を記載し、それぞれその動作を検証することが行われる。しかし、本実施形態の協調検証装置を用いることにより、メモリ４０に、適当なアプリ及び回路構成のデータ等を記憶させておくことにより、抽象度によらず、高速な協調検証が可能である。
【００３８】
また、本実施形態の協調検証装置は、等価性検証にも用いることができる。等価性検証とは、異なる方式の記述に基づきシミュレートあるいはエミュレートした回路が同じ入力に対して同じ出力を返すかに基づき、各方式の記述が等価であるか否かを検証するものである。
この等価性検証を行う場合、図８に示すように、ＣＰＵ３０にはテストベンチアプリ３８に代えて等価性検証アプリ４１を実行させる。回路の動作をシミュレートするためのアプリについては、ＦＰＧＡ２０の回路構成を記述するゲートレベル記述との間で等価性を検証したい記述方式に対応したアプリを用いる。
【００３９】
そして、図９に示すように、ＦＰＧＡ２０にはある回路モジュール（ここでは第１モジュール）の動作をエミュレートさせ、ＣＰＵ３０にも、それと同じ回路モジュールの動作をシミュレートさせる。ここで、ＦＰＧＡ２０においてエミュレーション回路を形成する際には、回路の構成はゲートレベルで記述する。ＣＰＵ３０にシミュレーションを行わせる際には、回路の構成はこれより抽象度の高いＨＤＬ又はＲＴＬで記述する。仮想ＨＷ環境を用いれば、さらに抽象度の高い方式で記述することもできる。
【００４０】
また、ＣＰＵ３０は等価性検証アプリ４１を実行することにより等価性検証用テストベンチ３５の機能を実現する。そして、ＦＰＧＡ２０がエミュレートする第１モジュール２１と、ＣＰＵ３０がシミュレートする第１モジュール３４に対し、同じ入力信号（又はそのデータ）を与え、出力信号（又はそのデータ）を取得する。そして、等価性検証用テストベンチ３５は、双方からの出力信号を比較して、一致していれば、ＦＰＧＡ２０に与えたゲートレベルの記述とＣＰＵ３０に与えたより抽象度の高い記述とは等価であると判断する。一致していなければ、等価でないと判断する。
【００４１】
このとき、等価性検証用テストベンチ３５は、ＣＰＵ３０側の第１モジュール３４との通信は、ＣＰＵ３０内のプロセス間通信により行い、ＦＰＧＡ２０側の第１モジュール２１との通信は、ＣＰＵ３０が接続されるＦＰＧＡ２０の配線を介して行う。
ここで、等価性検証用テストベンチ３５が、多種類の入力を各モジュールに与えてその出力を逐一取得する場合、ＦＰＧＡ２０とＣＰＵ３０との間で多量の通信が発生することになる。しかし、本実施形態のようにＦＰＧＡ２０にＣＰＵ３０を内蔵することにより、ＣＰＵとＦＰＧＡとの間の通信速度の制約による検証速度の低下が起こりにくくなる。従って、等価性検証の速度も図３の場合と同様に向上させることができる。
【００４２】
〔第２の実施形態：図１０乃至図１４〕
次に、この発明の協調検証装置の第２の実施形態について説明する。
図１０に、この発明の協調検証装置の第２の実施形態による検証動作の様子を模式的に示す。
第２の実施形態においても、ＦＰＧＡボード１０上にＣＰＵ３０を内蔵したＦＰＧＡ２０を設け、さらにＦＰＧＡボード１０にメモリ４０を接続して協調検証装置を構成している点は、第１の実施形態の場合と同様である。
【００４３】
ただし、ユーザインタフェースとしては、第１の実施形態におけるＰＣ５０に代えて、モニタ５１を設けている。このモニタ５１は、ＦＰＧＡボード１０から送信される検証結果のデータに基づき、その内容をユーザが参照できるように波形や数値等として表示する機能を備える。また、検証内容を示すパラメータ等の設定を受け付けるＧＵＩを表示すると共に、そのＧＵＩに対するユーザの操作を受け付け、操作内容をＦＰＧＡボード１０に渡す機能を備える。
【００４４】
モニタ５１に対して表示に必要なデータを提供し、またモニタ５１から送信される操作内容のデータに従いＦＰＧＡ２０を含むＦＰＧＡボード１０の各部の設定を行う機能は、ＣＰＵ３０が必要なプログラムを実行することにより実現する。
ところで、この第２の実施形態において、協調検証装置は、２つの送受信モジュール間のデータ送受信機能に関する検証を行う。そして、その一方のモジュールの機能を、第１送受信モジュール６１としてＦＰＧＡ２０がエミュレートする。また、他方のモジュールの機能を、第２送受信モジュール７１としてＣＰＵ３０がシミュレートする。
【００４５】
また、これらの送受信モジュールの間には、通信状況の監視及び操作を行うための転送部を設けている。第１送受信モジュール６１側では、第１転送手段である第１転送部６２の機能をＦＰＧＡ２０に実現させる。第２送受信モジュール７１側では、第２転送手段である第２転送部７２の機能をＣＰＵ３０に実現させる。
【００４６】
そして、第１送受信モジュール６１から第２送受信モジュール７１へのデータ送信をシミュレートする場合、第１送受信モジュール６１にはまず第２送受信モジュール７１へ送信すべきデータを第１転送部６２へ送信させる。ここで、第１転送部６２はそのデータを一旦保持し、後でポストデバッグ等の際にログとして送受信順に参照できるように第１蓄積部６３に蓄積する。第１蓄積部６３は、メモリ４０に設けることができる。
【００４７】
また、第１転送部６２は、第１送受信モジュール６１から受け取ったデータを第２転送部７２に転送する。第２転送部７２は、そのデータを一旦保持し、後でポストデバッグ等の際にログとして送受信順に参照できるように第２蓄積部７３に蓄積する。第２蓄積部７３は、ＣＰＵ３０が実現する機能として示したが、ＣＰＵ３０の内部メモリではなく、メモリ４０に設けてもよい。
その後、第２転送部７２は、第１転送部６２から受け取ったデータを第２送受信モジュール７１に転送する。
【００４８】
以上で、第１送受信モジュール６１から第２送受信モジュール７１へのデータ送信が完了する。第２送受信モジュール７１から第１送受信モジュール６１へのデータ送信は、この逆順で行う。以上の送信過程において、第１転送部６２及び第２転送部７２は、送受信したデータを後で送受信順に参照できるように記憶手段に蓄積する蓄積手段としても機能する。
【００４９】
なお、以上の送信過程において、第１転送部６２及び第２転送部７２は、連続して送信されるデータの転送順序を故意に変更したり、データのヘッダ情報を変更したり、データの送信を遅延させたりするといった、エラーモードの動作を行うことができる。各蓄積部に蓄積したデータは、これらの動作を行う際のデータの転送順管理に用いることができる。もちろん、正常な送信を行う場合の送信順管理にも用いることができる。
後でログを参照する必要がないのであれば、蓄積部を設ける記憶手段の容量に制約が大きい等の場合、上記の送信順管理に必要な量のデータのみ各蓄積部に蓄積するようにしてもよい。
【００５０】
また、図１０において、ＩＳＳ（Instruction Set Simulator）７４は、インストラクション精度で動くＣＰＵモデルである。ＦＰＧＡボード１０を用いた検証を行う場合、このＩＳＳ７４が、シミュレーション対象の各モジュール（ＦＰＧＡ２０がエミュレートするものも含む）の動作を制御する。図１０では、第１送受信モジュール６１、第１転送部６２、第２送受信モジュール７１及び第２転送部７２が制御対象に該当する。
【００５１】
ワークメモリ７５は、ＩＳＳ７４が制御動作に使用するメモリである。
周辺機器７６は、ＵＡＲＴ（Universal Asynchronous Receiver Transmitter）やタイマなど、ＩＳＳ７４が制御を行うために用いる高抽象度のモジュール群である。
これらのＩＳＳ７４、ワークメモリ７５及び周辺機器７６の機能も、ＣＰＵ３０が所要のプログラムを実行することにより実現する。
【００５２】
次に、図１０に示した協調検証装置において第１送受信モジュール６１と第２送受信モジュール７１との間のデータ送受信をシミュレートする際に図１０に示した各部が実行する動作について、図１１乃至図１３のフローチャートを用いて説明する。
これらのフローチャートに示す動作のうち、ＦＰＧＡ２０に設けた各部が実行する動作は、ＦＰＧＡ２０がプログラムされたハードウェアロジックにより、ＩＳＳ７４の制御に基づき行うものである。ＣＰＵ３０に設けた各部が実行する動作は、ＣＰＵ３０が所要のプログラムを実行することにより行うものである。
【００５３】
まず図１１に、第１送受信モジュール６１が第２送受信モジュール７１にデータを送信する際の動作を示す。
この動作においてはまず、ＩＳＳ７４が第１送受信モジュール６１へデータ送信を指示する（Ｓ１１）。このとき、送信すべきデータの指定も行う。
【００５４】
第１送受信モジュール６１はこれを受けて、自身がデータ送信可能な状態か否か判断する（Ｓ１２）。送信可能な状態であれば、送信すべきデータに対し、送信時処理を行う（Ｓ１３）。この処理は、例えばＴＯＥ（TCP/IP Offload Engine）を用いる場合にはヘッダ処理等である。この送受信処理が完了すると、第１送受信モジュール６１は第１転送部６２へ処理後のデータを送信する（Ｓ１４）。
【００５５】
これを受信した第１転送部６２は、第１蓄積部６３へそのデータを書き込む（Ｓ１５）。そして、第１転送部６２において前のデータ転送が完了しているか否か判断する（Ｓ１６）。ここで完了していれば、第１転送部６２はステップＳ１４で受信したデータを第２転送部７２へ送信する（Ｓ１７）。
【００５６】
これを受信した第２転送部７２は、第２蓄積部７３へそのデータを書き込む（Ｓ１８）と共に、受信したデータを第２送受信モジュール７１の受信部へ送信する（Ｓ１９）。
第２送受信モジュール７１がここで受信したデータに対して受信時処理を実行し（Ｓ２０）、以上で第１送受信モジュール６１から第２送受信モジュール７１への１回のデータ送信のシミュレートが完了する。
【００５７】
なお、ステップＳ１２でＮＯの場合、第１送受信モジュール６１は直ちにデータ送信を行うことができない。この場合、レジスタにおいて第１送受信モジュール６１が送信不能時にデータを破棄する設定がなされていれば（Ｓ２１のＹＥＳ）、第１送受信モジュール６１は送信を指示されたデータを破棄する（Ｓ２２）。この場合、ここまででステップＳ１１のＩＳＳ７４からの指示に係るデータ送信動作は終了する。
ステップＳ２１で破棄する設定がされていなければ、ステップＳ１２に戻って処理を繰り返す。
【００５８】
また、ステップＳ１６でＮＯの場合、第１転送部６２は直ちにデータ送信を行うことができない。この場合、レジスタにおいて第１転送部６２が送信不能時にデータを破棄する設定がなされていれば（Ｓ２３のＹＥＳ）、第１転送部６２は送信を指示されたデータを破棄する（Ｓ２４）。この場合、ここまででステップＳ１１のＩＳＳ７４からの指示に係るデータ送信動作は終了する。
【００５９】
ステップＳ２３で破棄する設定がされていなければ、ステップＳ１６に戻って処理を繰り返す。
第１送受信モジュール６１と第１転送部６２のいずれにおいてもデータを破棄する設定がなされていなければ、最終的にはステップＳ１７以下に進んで第１送受信モジュール６１から第２送受信モジュール７１へのデータ送信が実行されることになる。
【００６０】
次に図１２に、第２送受信モジュール７１が第１送受信モジュール６１にデータを送信する際の動作を示す。この動作は、図１１と逆向きに同様な手順でデータを送信するものである。
この動作においてはまず、ＩＳＳ７４が第２送受信モジュール７１へデータ送信を指示する（Ｓ３１）。このとき、送信すべきデータの指定も行う。
【００６１】
第２送受信モジュール７１はこれを受けて、自身がデータ送信可能な状態か否か判断する（Ｓ３２）。送信可能な状態であれば、送信すべきデータに対し、送信時処理を行う（Ｓ３３）。この処理は、例えばＴＯＥ（TCP/IP Offload Engine）を用いる場合にはヘッダ処理等である。この送受信処理が完了すると、第２送受信モジュール７１は第２転送部７２へ処理後のデータを送信する（Ｓ３４）。
【００６２】
これを受信した第２転送部７２は、第２蓄積部７３へそのデータを書き込む（Ｓ３５）。そして、第２転送部７２において前のデータ転送が完了しているか否か判断する（Ｓ３６）。ここで完了していれば、第２転送部７２はステップＳ３４で受信したデータを第１転送部６２へ送信する（Ｓ３７）。
【００６３】
これを受信した第１転送部６２は、第１蓄積部６３へそのデータを書き込む（Ｓ３８）と共に、受信したデータを第１送受信モジュール６１の受信部へ送信する（Ｓ３９）。
第１送受信モジュール６１がここで受信したデータに対して受信時処理を実行し（Ｓ４０）、以上で第２送受信モジュール７１から第１送受信モジュール６１への１回のデータ送信のシミュレートが完了する。
【００６４】
なお、ステップＳ３２でＮＯの場合、第２送受信モジュール７１は直ちにデータ送信を行うことができない。この場合、レジスタにおいて第２送受信モジュール７１が送信不能時にデータを破棄する設定がなされていれば（Ｓ４１のＹＥＳ）、第２送受信モジュール７１は送信を指示されたデータを破棄する（Ｓ４２）。この場合、ここまででステップＳ３１のＩＳＳ７４からの指示に係るデータ送信動作は終了する。
【００６５】
ステップＳ４１で破棄する設定がされていなければ、ステップＳ３２に戻って処理を繰り返す。
また、ステップＳ３６でＮＯの場合、第２転送部７２は直ちにデータ送信を行うことができない。この場合、レジスタにおいて第２転送部７２が送信不能時にデータを破棄する設定がなされていれば（Ｓ４３のＹＥＳ）、第２転送部７２は送信を指示されたデータを破棄する（Ｓ４４）。この場合、ここまででステップＳ３１のＩＳＳ７４からの指示に係るデータ送信動作は終了する。
【００６６】
ステップＳ４３で破棄する設定がされていなければ、ステップＳ３６に戻って処理を繰り返す。
第１送受信モジュール６１と第１転送部６２のいずれにおいてもデータを破棄する設定がなされていなければ、最終的にはステップＳ３７以下に進んで第１送受信モジュール６１から第２送受信モジュール７１へのデータ送信が実行されることになる。
【００６７】
次に図１３及び図１４に、第２送受信モジュール７１がエラーモードで第１送受信モジュール６１にデータを送信する際の動作を示す。
この動作においてはまず、ＩＳＳ７４がレジスタにエラーモードを設定する（Ｓ５１）。このとき、発生させるエラーの種類も設定する。
【００６８】
その後、ＩＳＳ７４が第２送受信モジュール７１へデータ送信を指示してから、第２転送部７２が第２蓄積部７３へ送信データを書き込む動作までは、図１２のステップＳ３１乃至Ｓ３５及びＳ４１、Ｓ４２と同様である（Ｓ５２〜Ｓ５８）。
ステップＳ５６の後は、動作は図１４に示す部分に進む。そして、第２転送部７２が、設定されているエラーモードの種類を判定し、以下、エラーモードの種類に応じた動作を行う。なお、図示を省略したが、エラーモードが設定されていない場合には図１２の場合と同じ処理を行う。
【００６９】
ステップＳ５９で順序変更である場合、第２転送部７２は、次のデータが第２送受信モジュール７１から送信されてくるまで待機する（Ｓ６０）。順序変更のエラーモードは、シーケンシャルに複数のデータを送信する場合に設定されるものであり、第２送受信モジュール７１からは、ＩＳＳ７４の指示に基づき次のデータが送信されてくるはずである。
【００７０】
この次のデータを受信すると、第２転送部７２は、第１転送部６２へ後から送信されてきた（次の）データを送信する（Ｓ６１）。これを受信した第１転送部６２は、第１蓄積部６３へそのデータを書き込む（Ｓ６２）と共に、受信したデータを第１送受信モジュール６１の受信部へ送信する（Ｓ６３）。
【００７１】
第１送受信モジュール６１がここで受信したデータに対して受信時処理を実行し（Ｓ４０）、以上で第２送受信モジュール７１から第１送受信モジュール６１への「次のデータ」の送信のシミュレートが完了する。なお、第２転送部７２は、ステップＳ６１で後から送信されてきたデータを送信する際にも、そのデータを第２蓄積部７３に書き込むようにしてもよい。
【００７２】
ステップＳ６４の後、第２転送部７２は、ステップＳ５５で受信した「先に送信されてきたデータ」を、第１転送部６２へ送信する（Ｓ６５）。第２転送部７２に、このデータをステップＳ６１〜Ｓ６４の間保持しておくメモリがない場合、送信すべきデータは、第２蓄積部７３から読み出してくればよい。
【００７３】
これを受信した第１転送部６２は、第１蓄積部６３へそのデータを書き込む（Ｓ７０）と共に、受信したデータを第１送受信モジュール６１の受信部へ送信する（Ｓ７１）。
第１送受信モジュール６１がここで受信したデータに対して受信時処理を実行し（Ｓ７２）、以上で第２送受信モジュール７１から第１送受信モジュール６１への「先に送信されてきたデータ」の送信のシミュレートが完了する。
また、以上で、第２送受信モジュール７１から第１送受信モジュール６１への、エラーにより２つのデータの順序が入れ替わってしまった送信のシミュレートが完了する。
【００７４】
また、ステップＳ５９でヘッダ情報変更の場合、第２転送部７２は、ステップＳ５５で受信したデータのヘッダ情報を変更する。ヘッダ情報とは、例えばデータ転送にＩＰ(Internet Protocol)を用いる場合はＩＰアドレスやバージョン等である。ヘッダの任意の箇所を変更可能である。
【００７５】
その後、第２転送部７２は、ヘッダ情報変更後のデータを第１転送部６２へ送信する（Ｓ６７）。以後、第１転送部６２及び第１送受信モジュール６１は上述の順序変更の場合と同じステップＳ７０乃至Ｓ７２の動作を実行する。
以上で、第２送受信モジュール７１から第１送受信モジュール６１への、エラーによりヘッダ情報が変更されてしまった送信のシミュレートが完了する。
【００７６】
また、ステップＳ５９で遅延の場合、第２転送部７２は、通常の送信時よりも長い所定時間だけ待機することにより、データ送信に遅延を付与する（Ｓ６８）。その後、第２転送部７２は、ステップＳ５５で受信したデータを第１転送部６２へ送信する（Ｓ６９）。以後、第１転送部６２及び第１送受信モジュール６１は上述の順序変更の場合と同じステップＳ７０乃至Ｓ７２の動作を実行する。
【００７７】
以上で、第２送受信モジュール７１から第１送受信モジュール６１への、エラーや処理集中等により遅延が発生してしまった送信のシミュレートが完了する。なお、ここでは第２転送部７２がエラーモードの動作を行う例について説明したが、第１送受信モジュール６１から第２送受信モジュール７１にデータを送信する場合に、第１転送部６２が同様なエラーモードの動作を行うことができるようにするとよい。
【００７８】
第２の実施形態の協調検証装置によれば、以上のようなエラーの発生も考慮したモジュール間通信動作の検証を行うことができる。
また、以上の構成でも、第１の実施形態の場合と同様、シミュレータを起動するＰＣは必要なく、また、ＰＣとＦＰＧＡとの間のデータ転送を行う必要がないため、ＣＰＵとＦＰＧＡとの間の通信速度の制約による検証速度の低下が起こりにくくなる。すなわち、検証速度を向上させることができる。
【００７９】
さらに、ＦＰＧＡに設ける送受信モジュールの対向となる送受信モジュールも、同じＦＰＧＡボード内に設けることができるため、１つのＦＰＧＡボードで検証が行える。このため、対向モジュールを設けるために追加のＦＰＧＡボードを用意する必要がなく、手間とコストが低減する。
【００８０】
また、ＣＰＵにシミュレートさせる送受信モジュールについては、レジスタアクセスや関数実行やメモリ情報等を容易に可視化でき、解析情報を取得することができる。さらに、第１及び第２の転送部を設け、これによって転送するデータを蓄積するようにしているため、転送内容を後で容易に分析することができる。
【００８１】
〔第２の実施形態の比較例：図１５及び図１６〕
次に、上述した第２の実施形態の比較例について説明する。
まず図１５に、第１の比較例のハードウェア構成及び各ハードウェアに実現させる機能の構成を示す。
この第１の比較例は、ＰＣ１５０に、第１ＦＰＧＡボード１１０及び第２ＦＰＧＡボード１３０を順次接続して構成している。このうち第１ＦＰＧＡボード１１０のＦＰＧＡ１２０にはＣＰＵを内蔵せず、第２ＦＰＧＡボード１３０のＦＰＧＡ１４０はＣＰＵ１４２を内蔵している。
【００８２】
そして、ＦＰＧＡ１２０をプログラムすることにより、第１送受信モジュール１２１の機能をエミュレートさせる。また、ＦＰＧＡ１４０をプログラムすることにより、第１送受信モジュール１２１の対向となる第２送受信モジュール１４１の機能をエミュレートさせる。
【００８３】
また。ＰＣ１５０においては、ＣＰＵに所要のプログラムを実行させることにより、ＩＳＳ１６１、ワークメモリ１６２及び周辺装置１６３の機能を実現させる。これらの各部の機能は、図１０に示したものと同様である。第２送受信モジュール１４１の制御は、ＩＳＳ１６１が担当しても、ＣＰＵ１４２が担当してもよい。
【００８４】
このように、ＦＰＧＡに送受信モジュールの機能をエミュレートさせる構成では、ＦＰＧＡボードを２枚用いて、２つの送受信モジュールの機能をエミュレートすることになる。このため、協調検証装置を構築する手間とコストが大きくなる。さらに、ＩＳＳ１６１の機能をＰＣ１５０に実現させるとすると、ＰＣ１５０を用意する分コスト高となる。さらに、送受信モジュール間のデータ転送をシミュレータで可視化できないため、デバッグ性が悪いという課題がある。さらに、ＰＣ１５０とＦＰＧＡボード１１０，１３０間のデータ転送が多くなると、通信速度の制約により検証速度が低下してしまう。
【００８５】
次に図１６に、第２の比較例のハードウェア構成及び各ハードウェアに実現させる機能の構成を示す。
この第２の比較例は、第１のＦＰＧＡボード１１０に搭載するＦＰＧＡ１２０′にＣＰＵ１２２を内蔵し、ＣＰＵ１２２に所要のプログラムを実行させることにより、ＩＳＳ１６１、ワークメモリ１６２及び周辺装置１６３の機能を実現させる点が第１の比較例と異なる。
このため、ＰＣ１５０は不要であり、これに代えて、第２の実施形態の場合と同様なモニタ５１を設けている。
【００８６】
この構成では、シミュレータを起動するＰＣは必要なく、また、ＰＣとＦＰＧＡボード間のデータ転送がないので、第１の比較例の構成と比べ、検証速度の低下は起こりにくい。しかし、ＦＰＧＡボードを２枚用いて、２つの送受信モジュールの機能をエミュレートする点は変わらない。このため、協調検証装置を構築する手間とコストが大きくなる。また、送受信モジュール間のデータ転送をシミュレータで可視化できないため、デバッグ性が悪いという課題も同じく残る。
しかしながら、上述した第２の実施形態の構成であれば、１枚のＦＰＧＡボードで検証が行えるため、また、第１及び第２の転送部を設けているため、このような問題は発生しない。
【００８７】
〔変形例〕
以上で実施形態の説明を終了するが、この発明において、各部の具体的な構成や処理の内容、データの形式、検証対象回路の構成等は、実施形態で説明したものに限るものではない。
例えば、上述の実施形態ではＦＰＧＡボード１０の外部にメモリ４０を設ける例について説明したが、メモリ４０はＦＰＧＡボード１０に搭載されていてもよい。
【００８８】
また、ＣＰＵ３０が回路の動作のシミュレートに用いるアプリは、ＨＤＬシミュレータ３７及び仮想ＨＷアプリ３９には限られない。
また、仮想ＨＷアプリは、仮想モデルとしてＣＰＵやバス等をシミュレートすることができる。仮想ＨＷモデルを繋げて仮想プラットフォームを構築し、その環境でＯＳを動かすこともできる。従って、仮想ＨＷアプリにテストベンチの振る舞いをさせることもできる。
【００８９】
また、協調検証装置のユーザインタフェースは、ＰＣ５０には限られず、表示手段と操作手段とを備えた専用の制御装置であってもよい。例えば、ＦＰＧＡボード１０にキーボード（あるいはコンソール）及びディスプレイを接続するためのインタフェースを設けることが考えられる。そして、キーボードの操作によりこのインタフェースを介してＣＰＵ３０に実行開始や中断を指示する信号を入力し、ＣＰＵ３０が生成した実行結果をディスプレイに表示できるようにすることが考えられる。このようにすれば、ＰＣ５０を設ける必要はない。
【００９０】
また、協調検証装置が行う検証は、上述の実施形態で説明したものに限られない。ＦＰＧＡ２０がエミュレートするモジュールの数及びＣＰＵ３０がシミュレートするモジュールの数も、上述の実施形態で説明したものに限られない。
また、検証対象回路のエミュレートを行うプログラマブル回路も、ＦＰＧＡに限られない。さらに、プログラマブル回路にＣＰＵを複数内蔵することも可能である。
また、以上説明してきた実施形態及び変形例の構成は、相互に矛盾しない限り任意に組み合わせて実施可能であることは勿論である。
【符号の説明】
【００９１】
１０，２１０：ＦＰＧＡボード、１１：通信Ｉ／Ｆ、２０，１２０，１４０，２２０：ＦＰＧＡ、２１，３４，２２１：第１モジュール、２２，２２２：第２モジュール、３０，１２２，１４２，２３１：ＣＰＵ、３１，３１′，２３３：第３モジュール、３２，２３２：テストベンチ、３３：第４モジュール、３５：等価性検証用テストベンチ、３６，２５０：ＯＳ、３７，２６０：ＨＤＬシミュレータ、３８，２７０：テストベンチアプリ、３９：仮想ＨＷアプリ、４０：メモリ、４１：等価性検証アプリ、５０，１５０，２３０：ＰＣ、５１：ディスプレイ、６０：通信線、２４０：通信ケーブル、６１、１２１：第１送受信モジュール、６２：第１転送部、６３：第１蓄積部、７１，１４１：第２送受信モジュール、７２：第２転送部、７３：第２蓄積部、７４，１６１：ＩＳＳ、７５，１６２：ワークメモリ、７６，１６３：周辺装置、１１０：第１ＦＰＧＡボード、１３０：第２ＦＰＧＡボード、１６０：シミュレータ
【先行技術文献】
【特許文献】
【００９２】
【特許文献１】特開２００９−２２３７６２号公報
【特許文献２】特許第４４７０５８２号公報
【特許文献３】特開２００７−５８８１３号公報
【図１】
2015011363.tif 000003
【図２】
2015011363.tif 000004
【図３】
2015011363.tif 000005
【図４】
2015011363.tif 000006
【図５】
2015011363.tif 000007
【図６】
2015011363.tif 000008
【図７】
2015011363.tif 000009
【図８】
2015011363.tif 000010
【図９】
2015011363.tif 000011
【図１０】
2015011363.tif 000012
【図１１】
2015011363.tif 000013
【図１２】
2015011363.tif 000014
【図１３】
2015011363.tif 000015
【図１４】
2015011363.tif 000016
【図１５】
2015011363.tif 000017
【図１６】
2015011363.tif 000018
【図１７】
2015011363.tif 000019
【図１８】
2015011363.tif 000020
【図１９】
2015011363.tif 000021