(57)【特許請求の範囲】
【請求項１】
ハードウェアとソフトウェアとの両方で構成される機器に対して、前記ハードウェアの動作を検証するハードウェア回路またはハードウェアシミュレータと、前記ソフトウェアの動作を検証するソフトウェア実行装置との協調シミュレーションにおける前記ソフトウェア実行装置であって、
検証対象となるソフトウェアを実行するソフトウェア実行手段と、
前記ソフトウェアの実行を監視し、前記ソフトウェアの実行状態を表す情報を取得する実行監視手段と、
前記ソフトウェアの実行状態に基づき、前記ソフトウェア実行手段と、前記ハードウェア回路または前記ハードウェアシミュレータとを同期させるか否かを判定する判定手段と、
前記判定手段により同期させることが決定されたとき、前記ソフトウェア実行手段の内部時間の１サイクルと、前記ハードウェア回路または前記ハードウェアシミュレータのクロック信号の発生とを同期させる、同期制御手段と、
を備えたソフトウェア実行装置。
【請求項２】
前記判定手段は、同期を開始する開始条件、同期を終了する終了条件を前記ソフトウェアの実行状態に基づき記述した同期区間情報を用いて、前記同期の開始および終了を判定し、
前記同期制御手段は、前記同期の開始が判定されてから終了が判定されるまでの間、前記同期を実行する、
ことを特徴とする請求項１に記載のソフトウェア実行装置。
【請求項３】
時刻をカウントする時刻カウンタをさらに備え、
前記同期区間情報には、さらに前記時刻を用いた終了条件が記述されており、
前記判定手段は、前記同期区間情報と前記時刻カウンタとを用いて前記同期の終了を判定する、
ことを特徴とする請求項２に記載のソフトウェア実行装置。
【請求項４】
前記実行監視手段は、前記ソフトウェアの実行状態を表す情報として、プログラムカウンタ値、前記ソフトウェア実行手段によりアクセスされるアドレス、前記アクセスされるアドレスから読み出されるまたは前記アドレスに書き込まれるデータを取得する、
ことを特徴とする請求項１〜３のいずれか一項に記載のソフトウェア実行装置。
【請求項５】
ハードウェアとソフトウェアとの両方で構成される機器に対して、前記ハードウェアの動作を検証するハードウェア回路またはハードウェアシミュレータと、前記ソフトウェアの動作を検証するソフトウェア実行装置との協調シミュレーションにおける協調動作方法であって、
検証対象となるソフトウェアを前記ソフトウェア実行装置で実行し、
前記ソフトウェアの実行状態を監視し、
前記ソフトウェアの実行状態を表す情報を取得し、
前記ソフトウェアの実行状態に基づき、前記ソフトウェア実行装置と、前記ハードウェア回路または前記ハードウェアシミュレータとを同期させるか否かを判定し、
前記同期させることが決定されたとき、前記ソフトウェア実行装置の内部時間の１サイクルと、前記ハードウェア回路または前記ハードウェアシミュレータのクロック信号の発生とを同期させる、
ことを特徴とする協調動作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア実行装置および協調動作方法に関し、たとえばハードウェア/ソフトウェア協調シミュレーション環境に利用されるものである。
【背景技術】
【０００２】
ハードウェア/ソフトウェア協調シミュレーション（HW（Hardware）/SW(Software)協調シミュレーション）は、HWシミュレーションを利用してSoC(System On Chip：システムオンチップ)完成以前にソフトウェア／ファームウェア（SW(Software)/FW（Firmware））の検証を開始することでSoCのTTM(Time To Market)短縮を図る、あるいは、検証対象となるHW記述に対するテスト入力をSWシミュレーション環境のCPU(Central Processing Unit)モデルから与えることで、検証用テストベクタの作成工数の削減を図る、といった用途に用いられている。
【０００３】
SoC完成以前にソフトウェアの検証を開始するためには、ソフトウェアのシミュレーションを行う環境(以下、SWシミュレータと記述)以外に、ハードウェアの動作を模擬する必要がある。この模擬的な動作は大別して、既存HW記述そのものをシミュレーションする方法、または、より高速に動作するシミュレーション用HWモデルを作成する方法が用いられている。さらに、近年はFGPAボードなどに既存のHW記述を書き込み、これをシミュレータと協調させる方式が用いられ始めている(例えば、EVE社のZeBuシリーズのFPGAボード(http://www.eve-team.com/、日本法人:http://www.eve-japan.co.jp/)など)。
【０００４】
FGPAボードとSWシミュレータの協調シミュレーションを行うことで、HW記述を高速に動作させることが可能になり、また、既存のHW資産やIP（Intellectual Property）をそのまま利用できるメリットがある。
【０００５】
また新たにシミュレーション用HWモデルなどを作成する必要がなくなるため、ソフトウェア検証のためのTAT（Turn Around Time）短縮、コスト低減が期待できるのと同時に、シミュレーション用HWモデルの正確性の問題もクリアできるなどのメリットが考えられている。
【０００６】
一方、SWシミュレータとFGPAボードの協調シミュレーションにおいては、一方は汎用コンピュータ上で動作するソフトウェアであり、他方は専用のボードなどに実装され汎用コンピュータに接続されるハードウェアであるため、双方の間で動作をどのように同期させるかが重要となる。
【０００７】
従来において、SWシミュレータとFPGAボード間の同期については、たとえば毎サイクル同期方式、バストランザクタ利用方式、SWシミュレータ側同期間隔制御方式、割込み可能性有無判定方式などが知られている。
【０００８】
毎サイクル同期方式は、SWシミュレータ側からクロック信号を発生させ、このクロック信号をベースにFGPAボードを動作させる方式である。この方式は、精度の高いシミュレーションを行うためには、同期間隔を細かくする必要があり、これによりシミュレーション速度の低下を招く問題がある。
【０００９】
バストランザクタ利用方式は、SWシミュレータ側からFPGAボードへのアクセスはすべてバストランザクション(READ、WRITEなどのバスコマンドレベルの粒度)でアクセスし、FPGAボード上のバストランザクタにてバストランザクションをサイクルレベルの信号に変換し、FPGAボード上に書き込まれたHW記述を動作させる方式である。そして、バストランザクション発生中以外にもSWシミュレータ側から同期コマンド(例えば、「100クロック分進め」など)を発行することで、FPGAボード側の動作を制御する方式が上記SWシミュレータ側同期間隔制御方式である。これらの方式はいずれも、ソフトウェア側で同期の区間および間隔を制御する方式であり、ハードウェア側から発するイベント（割込み要求など）の発生時刻に対する正確な取り扱いが難しいことなどから、シミュレーション精度の低下の問題がある。
【００１０】
割込み可能性有無判定方式は、特開2001-290860公報に記載された方式であり、SWシミュレータ側で予めHWシミュレータ側からの割込み発生の可能性の有無を判定し、割込みの可能性の無いハードウェア部分とは同期を行わないことで、シミュレーションの処理速度を向上させるものである。この方式では、割込み発生の有無は、SWシミュレーション上でのHWシミュレータからの割込みの有無の判定に、シミュレーション実行時に「CPUシミュレーション手段」で動作する「組込みソフトウェア」が、割込みコントローラのレジスタにマップされているアドレスへどのような書き込みを行うかを監視し、「組込みソフトウェア」が個々の「周辺回路」の割込みをどのように設定したかを記録する。この方式では、個々のSoC毎に異なる「割込みコントローラ」の仕様(レジスタアドレス、個々の周辺回路の割込みの制御方法)をCPUシミュレーション部が内蔵するものとしており、SoC毎にCPUシミュレーション部を構築する、あるいは、SoC毎に異なる「割込みコントローラ」の仕様を模擬するような設定を行う必要があり、シミュレータとしての汎用性が低い。また、SoC毎に異なる「割込みコントローラ」の仕様を模擬する機構とは即ちシミュレーション用の割込みコントローラモデルを作成することに他ならず、前述のシミュレーション用HWモデル作成の問題と同等の問題を内包している。
【特許文献１】特開2001-290860公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
本発明は、高速かつ精度の高いハードウェア／ソフトウェア協調シミュレーションを実現可能としたソフトウェア実行装置および協調動作方法を提供する。
【課題を解決するための手段】
【００１２】
本発明のソフトウェア実行装置は、
ハードウェアとソフトウェアとの両方で構成される機器に対して、前記ハードウェアの動作を検証するハードウェア回路またはハードウェアシミュレータと、前記ソフトウェアの動作を検証するソフトウェア実行装置との協調シミュレーションにおける前記ソフトウェア実行装置であって、
検証対象となるソフトウェアを実行するソフトウェア実行手段と、
前記ソフトウェアの実行を監視し、前記ソフトウェアの実行状態を表す情報を取得する実行監視手段と、
前記ソフトウェアの実行状態に基づき、前記ソフトウェア実行手段と、前記ハードウェア回路または前記ハードウェアシミュレータとを同期させるか否かを判定する判定手段と、
前記判定手段により同期させることが決定されたとき、前記ソフトウェア実行手段の内部時間の１サイクルと、前記ハードウェア回路または前記ハードウェアシミュレータのクロック信号の発生とを同期させる、同期制御手段と、
を備える。
【００１３】
本発明の協調動作方法は、
ハードウェアとソフトウェアとの両方で構成される機器に対して、前記ハードウェアの動作を検証するハードウェア回路またはハードウェアシミュレータと、前記ソフトウェアの動作を検証するソフトウェア実行装置との協調シミュレーションにおける協調動作方法であって、
検証対象となるソフトウェアを前記ソフトウェア実行装置で実行し、
前記ソフトウェアの実行状態を監視し、
前記ソフトウェアの実行状態を表す情報を取得し、
前記ソフトウェアの実行状態に基づき、前記ソフトウェア実行装置と、前記ハードウェア回路または前記ハードウェアシミュレータとを同期させるか否かを判定し、
前記同期させることが決定されたとき、前記ソフトウェア実行装置の内部時間の１サイクルと、前記ハードウェア回路または前記ハードウェアシミュレータのクロック信号の発生とを同期させる、
ことを特徴とする。
【発明の効果】
【００１４】
本発明により、高速かつ精度の高いハードウェア／ソフトウェア協調シミュレーションが可能となる。
【発明を実施するための最良の形態】
【００１５】
まず、本発明者が本発明をなすに至った経緯について説明する。
【００１６】
ハードウェア／ソフトウェア（Hardware/Software）協調シミュレーションにおいて、SWシミュレータ（ソフトウェアのシミュレーションを行う環境）上で動作するソフトウェアの検証に主眼を置いた場合、ソフトウェア側から見たハードウェア側の動作への要求は、
（１）レジスタへの読み出し／書き込み（Read/Write）動作により、正しいデータがハードウェアとやり取り可能なこと
（２）レジスタへのRead/Write動作に起因するハードウェア側の動作が正しく実行され、正しい結果が得られること
（３）ハードウェア側動作の結果が正しい時刻に終了すること
の三点に集約できる。
【００１７】
（１）、（２）については、背景技術で説明したバストランザクタ利用方式でも十分実現可能であるが、（３）はバストランザクタ利用方式だけでは、SWシミュレータ側でハードウェア側動作の終了時刻を正確に検知することはできない。また、毎サイクル同期方式では、上記の（１）、（２）、（３）はすべて実現可能であるが、背景技術で述べた通り、シミュレーション速度の低下を招く問題がある。
【００１８】
ただし、（３）で問題となるハードウェア側動作の結果は、ほとんどの場合、（２）でのソフトウェア側からのハードウェア側への働きかけの結果である(そうでない場合も考えられるが、この場合はソフトウェア側動作と全く因果関係がなく外部からのイベントが発生する場合であり、ソフトウェア検証においてこのイベント発生の時刻は重要ではない)。
【００１９】
つまり、ハードウェア動作の論理的な正しさ以外にソフトウェア検証において重要なのは、（２）のソフトウェア側からの働きかけに対応して、（３）の正しい時刻が得られるかであり、言い換えれば、ソフトウェア側からのハードウェア動作の起動に対してハードウェア側の動作が終了するまでの区間のみ、毎サイクル同期を取り、ハードウェア側の正しい動作時間を得ることができれば、他の時間帯はソフトウェア側とハードウェア側の動作は同期を取る必要は無い。
【００２０】
また、ソフトウェア検証において、前述の同期が必要な区間はソフトウェアの検証項目によって異なり、かつ、検証に必要ないハードウェアの動作については、同期を取る必要が無い場合も多い。
【００２１】
本発明者は、以上の観点から、ソフトウェアの検証項目に応じて、ソフトウェアがあるハードウェア動作を起動する時点からその動作が終了する時点までを同期区間として設定し、同期区間のみ同期をとり他の区間は同期を取らないようにすることで、シミュレーション速度の大幅な向上できることを知得した。以下、このような知得に基づきなされた本発明の実施の形態について詳細に説明する。
【００２２】
（第１の実施の形態）
図１は、本発明の第１の実施の形態としてのソフトウェアシミュレータ（SWシミュレータ）１１を備えたハードウェア／ソフトウェア（HW/SW）協調シミュレータの全体構成を示すブロック図である。図示のSWシミュレータ１１は、本発明を実現するシミュレーションプログラムを汎用のコンピュータで実行させることにより得られる各機能をブロックによって表したものである。上記シミュレーションプログラムを搭載した装置は、本発明に係わるソフトウェア実行装置の１つの実施の形態に相当する。
【００２３】
このHW/SW協調シミュレータは、SWシミュレータ１１とFPGAボード（ハードウェア回路）１２とによる協調シミュレーションにより、SWシミュレータ１１におけるCPUシミュレーション手段２１上で実行されるソフトウェアの検証を行うものである。
【００２４】
図１に示す同期区間情報指定手段１３は、テキストエディタあるいは専用のGUI（Graphical User Interface）を持つプログラムであり、ユーザがSWシミュレータ１１とFPGAボード１２とを、「毎サイクル同期」させる区間の開始条件と終了条件を指定する。同期区間情報指定手段１３により指定された開始条件および終了条件は同期区間情報としてファイルなどに格納される。同期区間情報の例を図２に示す。
【００２５】
図２に示されるように、毎サイクル同期の開始条件（アクション“開始”をもつ条件）および終了条件（アクション“終了”をもつ条件）として、
・    PC（Program Counter：プログラムカウンタ）がある値と一致する(PC比較条件)
・    あるアドレスへのアクセスが発生する(アドレス比較条件)
・    あるアドレスのメモリ/レジスタの値もしくはその一部のビットがある値と一致する(メモリ/レジスタ値比較条件)、
・    PCがある区間に入る（PC区間条件）
などの条件が指定できる。また、ソフトウェアの実行状態以外に、毎サイクル同期されている期間(サイクル数)を監視し、この期間の上限を終了条件として指定することも可能とする(サイクル数比較条件)。ただし、本例では、サイクル数比較は終了の条件として、同期区間情報中に一箇所のみ（１つのみ）記載できるものとする。
【００２６】
ここで開始条件および終了条件は一対一の対応がなくても構わない。たとえば図２の同期区間情報の１行目の開始条件「PCが0x00000180と一致」に対する終了条件は、２行目の「PCが0xbfc00380と一致」であっても５行目の「アドレス0x80001000の第３ビットが１と一致」であってもよい。
【００２７】
図３は、SWシミュレータ１１の詳細構成を示すブロック図である。
【００２８】
CPUシミュレーション手段２１は、検証対象となるソフトウェア（インストラクションセット）の実行をシミュレーションする手段(ISS：Instruction Set Simulator)３１を備える。ISS３１には、上記検証対象となるソフトウェア（図示せず）と、実行すべきインストラクションのアドレスを示すプログラムカウンタ(PC：Program Counter)３２とが含まれる。
【００２９】
また、CPUシミュレーション手段２１はバスアクセスを模擬するバスアクセスシミュレーション手段３３を備える。バスアクセスシミュレーション手段３３は、バスアクセスを行う際のアクセス先となるアドレスを格納するアドレス格納手段３４と、アクセスにより読み出された読み出しデータおよびアクセスの際に書き込む書き込みデータを格納するデータ格納手段３５とを持つ。CPUシミュレーション手段２１は、内部のパイプライン状態のシミュレーションを行う手段、または内部のキャッシュメモリのシミュレーションを行う手段を備えたものでも良い。
【００３０】
バスアクセスシミュレーション手段３３は、メモリの動作をシミュレーションするメモリシミュレーション手段２４、周辺回路の動作をシミュレーションする周辺回路シミュレーション手段２５、さらにはFPGAボード１２と接続され、これらとの間で通信を行う。通常、周辺回路の動作はFPGAボード１２上に書き込んだRTLでのエミュレーションとなるが、本例のように、一部の周辺回路が周辺回路シミュレーション手段として、SWシミュレータ１１内部で動作させられる形態でもかまわない。
【００３１】
SW実行監視手段２２は、CPUシミュレーション手段２１での検証対象のソフトウェアの実行を同期区間情報に基づき監視する。SW実行監視手段２２は、毎サイクル同期の開始条件が満たされたらシミュレーション制御手段２６に対し毎サイクル同期の開始を指示し、毎サイクル同期の終了条件が満たされたらシミュレーション制御手段２６に対し毎サイクル同期の終了を指示する。
【００３２】
SW実行監視手段２２は、プログラムカウンタ３２を監視するPC監視手段３６、バスアクセス時のアドレスをアドレス格納手段３４に基づいて監視するアドレス監視手段３７、バスアクセス時のメモリ・レジスタへの読み出し/書き込みデータをデータ格納手段３５に基づき監視するメモリ・レジスタ値監視手段３８を持つ。さらに、SW実行監視手段２２は、同期区間情報に記載された毎サイクル同期の開始条件・終了条件と、各監視手段３６〜３８から得られたCPUシミュレーション手段２１の内部情報（ソフトウェアの実行状態）とを比較し、条件成立の真偽を判定する条件判定手段３９を持つ。この条件判定手段３９は、同期区間の終了条件として同期区間の長さ(クロックサイクル数)を指定されているとき、シミュレーション制御手段２６のシミュレータ内時間管理手段（時刻カウンタ）４０から１サイクル毎にその時点のサイクル数を取得し、終了条件に指定されているサイクル数に到達したか否か（すなわち同期区間に入ってから所定時間が経過したか否か）を検査することも行う。
【００３３】
図４は、条件判定手段３９の全体の処理フローを示すフローチャートである。
【００３４】
条件判定手段３９は、同期区間情報指定手段１３により指定される同期区間情報があるかどうかを検査し（S11）、同期区間情報あるときは該同期区間情報を読み込む（S12）。同期区間情報を読み込んだら、シミュレーションが終了したかどうかを検査し（S13）、シミュレーションが終了した場合は（S13のYES）本処理を終了する。シミュレーションが終了していない場合は(S13のNO)、同期区間情報を読み込んだかどうかを検査し（S14）、読み込んでいない場合は（S14のNO）あらかじめ指定した従来方式のシミュレーションを行う。一方、同期区間情報を読み込んだ場合は（S14のYES）、各監視手段３６〜３８およびシミュレータ内時間管理手段４０からのイベントを待つ（S15）。イベントが発生したらイベントの種類の検査し（S17）、イベントの種類がプログラムカウンタの変化であるときは図５のフローチャートに示す処理フロー（PC比較条件／PC区間条件に対する処理フロー）に進み、バスアクセスの発生であるときは図６のフローチャートに示す処理フロー（アドレス比較条件およびメモリ/レジスタ値比較条件に対する処理フロー）に進み、サイクル数の変化であるときは図７のフローチャートに示す処理フロー（サイクル数比較条件に対する処理フロー）に進む。各監視手段３６〜３８およびシミュレータ内時間管理手段４０から同時に複数のイベントが発生した場合は、発生したすべてのイベントについて各イベントに応じた処理をそれぞれ行う（S16、S17）。
【００３５】
図５に示すように、PC比較条件／PC区間条件に対する処理フローでは、条件判定手段３９がPC監視手段３６から現在のプログラムカウンタ値（PC値）を取得し（S21）、取得したプログラムカウンタ値を同期区間情報中のPC比較条件に記載されているプログラムカウンタ値と比較する（S22）。また、取得したプログラムカウンタ値が同期区間情報中のPC区間条件に記載されている区間に入るかどうかを検査する（S22）。
【００３６】
比較結果が不一致を示すときまたは取得したプログラムカウンタ値が上記区間に入らないときは（S23のNO）、すべてのPC比較条件／PC区間条件を調べたかどうかを検査し（S27）、まだのときは（S27のNO）、まだ調べていないPC比較条件／PC区間条件を調べる（S22）。すべてのPC比較条件／PC区間条件を調べたときは（S27のYES）図4のS13に戻る。
【００３７】
一方、比較結果が一致を示すときまたは上記取得したプログラムカウンタ値が上記区間に入るときは（S23のYES）、PC比較条件／PC区間条件に付帯されているアクションを調べ（S24）、アクションが開始を示すときはシミュレーション制御手段２６に毎サイクル同期の開始を指示する(S25)。アクションが終了を示すときは、シミュレーション制御手段２６に毎サイクル同期の終了を指示する（S26）。S25またはS26の後、図４のS13に戻る。なお、プログラムカウンタ値に対して、同期区間情報に記載されているPC比較条件およびPC区間条件が重複して満たされることはないものとする。
【００３８】
図６に示すように、アドレス比較条件およびメモリ/レジスタ値比較条件に対する処理フローでは、条件判定手段３９が、アドレス監視手段３７から、バスアクセスされたアドレスを取得し（S31）、取得したアドレスを、同期区間情報内のアドレス比較条件もしくはメモリ・レジスタ値比較条件に記載されているアドレスと比較する（S32）。
【００３９】
両者が一致しないときは(S33のNO)、すべてのアドレス比較条件もしくはメモリ・レジスタ値比較条件を調べたかどうかを検査し（S40）、まだのときは（S40のNO）、まだ調べていない条件を調べる（S32）。すべての条件を調べたときは（S40のYES）図4のS13に戻る。
【００４０】
両者が一致するときは(S33のYES)、当該条件がメモリ／レジスタ値比較条件であるかアドレス比較条件であるかを調べ（S34）、メモリ／レジスタ値比較条件であるときは（S34のYES）、取得したアドレスに格納された値または取得したアドレスに書き込んだ値を、メモリ／レジスタ値比較条件に記載されている値と比較する（S35）。比較結果が一致を示すとき（S36のYES）、または上記条件がアドレス比較条件であるときは（S34のNO）、当該条件に付帯されているアクションを調べ（S37）、アクションが開始を示すときはシミュレーション制御手段２６に毎サイクル同期の開始を指示する(S38)。アクションが終了を示すときは、シミュレーション制御手段２６に毎サイクル同期の終了を指示する（S39）。S38またはS39の後、図4のS13に戻る。S36において比較結果が不一致を示すときは（S36のNO）、S40に進み、すべてのアドレス比較条件もしくはメモリ・レジスタ値比較条件を調べたかどうかを検査する。まだのときは（S40のNO）まだ調べていない条件を調べ（S32）、すべての条件を調べたときは（S40のYES）図４のS13に戻る。
【００４１】
図７に示すように、サイクル数比較条件に対する処理フローでは、条件判定手段３９は、シミュレーション制御手段２６におけるシミュレーション内時間管理手段４０から現在の時刻（サイクルカウント数）を取得したら(S41)、同期区間情報中にサイクル数比較条件が記載されているか否かを調べ（S42）、記載されていないときは（S42のNO）図4のS13に戻る。記載されているときは（S42のYES）、取得したサイクルカウント数が、サイクル数比較条件に記載されたサイクル数と一致するかどうかを検査する（S43）。検査結果が不一致を示すときは（S43のNO）図4のS13に戻り、一致するときは（S43のYES）、当該条件に付帯されているアクションを調べる（S44）。アクションが開始を示すときはエラー処理を行い（S45）、アクションが終了を示すときは、シミュレーション制御手段２６に毎サイクル同期の終了を指示する（S46）。S45またはS46の後、図４のS13に戻る。
【００４２】
図８は、シミュレーション制御手段２６の処理フローを説明するフローチャートである。
【００４３】
本処理フローには、現在、毎サイクル同期区間の区間内および区間外のいずれであるのかを判定する処理と、毎サイクル同期区間内で行う処理とが記述されている。SWシミュレータ全体の制御、内部の時間管理（サイクル数の管理）に関しては、既知の技術を用いるものとし、その処理の記述は省略する。なお、時間管理に関しては、たとえばクロック発生を記述した命令を実行して発生させたクロックを用いて時刻のカウント（サイクル数のカウント）を行ってもよいし、またはコンピュータ内部に搭載されたクロック発生機構から発生させられるクロックを用いて時刻のカウント（サイクル数のカウント）を行ってもよい。
【００４４】
図８において、シミュレーション制御手段２６は、シミュレーションが終了したかどうかを検査し(S51)、終了した場合は（S51のYES）本処理を終了する。シミュレーションが終了していない場合は(S51のNO)、現在、毎サイクル同期中であるか（毎サイクル同期区間内であるか）どうかを、条件判定手段３９から毎サイクル同期の開始指示が与えられたか否かに基づき検査し（S52）、YESである場合は、同期制御手段２３に毎サイクル同期区間内であることを通知する（S53）。そして、シミュレータ内時間管理手段４０により管理されているシミュレータ内時間が１サイクル進むごとにその旨を表すイベントを同期制御手段２３に通知する（S54）。また、シミュレータ内時間が１サイクル進むごとに条件判定手段３９に現在のサイクル数を通知する（S55）。この後、S51に戻る。
【００４５】
一方、S52において現在、毎サイクル同期中でない（毎サイクル同期区間外である）と判定された場合は（S52のNO）、シミュレーション制御手段２６は同期制御手段２３に毎サイクル同期区間外であることを通知し（S56）、シミュレータ時間管理手段４０内の時間を通常通りに進める。そして、S51に戻る。
【００４６】
図９は、同期制御手段２３の処理フローを示すフローチャートである。
【００４７】
同期制御手段２３はシミュレーションが終了したかどうかを検査し（S61）、シミュレーションが終了した場合は（S61のYES）本処理を終了する。シミュレーションがまだ終了していない場合は（S61のNO）、現在、毎サイクル同期中であるか（毎サイクル同期区間内であるか）どうかを、シミュレーション制御手段２６からの通知に基づき検査し（S62）、YESである場合は、FPGAボード１２におけるクロック発生手段２７に対して毎サイクル同期イネーブル（Enable）信号をアサートする（S63）。そして同期制御手段２３は、シミュレータ制御手段２６からの１サイクル進むことを示すイベントを待ち（S64）、イベントがきたらクロック信号を１サイクル分発生させる（S65）。この後、S61に戻る。
【００４８】
一方、S62において、毎サイクル同期中でない（毎サイクル同期区間外である）と判定された場合は（S62のNO）、同期制御手段２３は、FPGAボード１２におけるクロック発生手段２７に対して毎サイクル同期イネーブル（Enable）信号をデアサートする（S66）。そして、S61に戻る。
【００４９】
図１０はFPGAボード１２上のクロック発生手段２７の構成例を示す。
【００５０】
クロック発生手段２７は、クロックを生成するクロック生成回路４１と、セレクタ４２とを持つ。クロック生成回路４１で生成されるクロック周波数は、SWシミュレータ１１で使用されるクロック周波数よりも高いものとする。セレクタ４２は、同期制御手段２３から入力される毎サイクル同期イネーブル信号がアサートされているときは（ハイのときは）同期制御手段２３から入力されるクロック信号を選択して出力し、毎サイクル同期イネーブル信号がデアサートされているときは（ローのときは）クロック生成手段４１により生成されるクロック信号を選択して出力する。セレクタ４２から出力されるクロック信号は、FPGA回路２８の動作クロックとして用いられる。
【００５１】
図１１は、SWシミュレータ１１側の同期制御手段２３とFPGAボード１２側のクロック発生手段２７との相互作用を表すタイミングチャートである。毎サイクル同期区間外ではFPGAボードはクロック発生手段２７により生成されるクロックに基づき動作するが、毎サイクル同期区間内では、SWシミュレータ１１と同一のクロック周波数で動作することが理解される。
【００５２】
ここでFPGAボード側の処理として、SWシミュレータからFPGAボード上へのデバイスにアクセスが行われた際の動作として、バストランザクタを利用してバスアクセスの高速化を図るような技術を、本実施の形態と組み合わせることも可能である。この場合、例えば、SWシミュレータ側からバストランザクションが発生した際は、バストランザクタを介して(両者の同期をとって)FPGAボード上の回路にアクセスし、トランザクション処理が終了した時点で再び非同期動作に戻るといった処理がなされることになる。このような処理は本発明中で記載される技術と矛盾無く組み合わせ可能であるが、バストランザクタを利用した方式については既に公知のものであるので、説明を詳細な説明を省略する。
【００５３】
また、本実施の形態では、FPGAボードによるエミュレーションでハードウェア側動作を代替する例を記述しているが、ハードウェア側はクロック発生手段を実装することが可能であれば、ASICなどの実ハードウェアを搭載したボードなどを用いて協調シミュレーションを実行することも可能である。
【００５４】
また、本実施の形態では、PC監視手段、アドレス監視手段、メモリ・レジスタ値監視手段をすべてSW監視手段２２の内部に配置しているが、たとえば、PCの監視を行う機能はCPUシミュレーション手段２１の内部に持たせる、あるいは周辺回路のレジスタに割り振られたアドレスへのアクセスを監視する機能については周辺回路シミュレーション手段２５の内部に持たせる、あるいはメモリに割り当てられたアドレスへのアクセスを監視する機能については、メモリシミュレーション手段２４の内部に持たせるといったように、SW監視手段２２が備える監視機能の一部をCPUシミュレーション手段２１、周辺回路シミュレーション手段２５、およびメモリシミュレーション手段２４の少なくとも１つに含めることも可能である。
【００５５】
以上のように、本実施の形態によれば、ソフトウェアの実行状態が同期開始条件を満たしてから同期終了条件を満たすまでの間の同期区間のみSWシミュレータとFPGAボードとの同期を取るようにしたため、FPGAボードの高速性を損なわずに、かつ、SWシミュレータおよびFPGAボード間の同期のオーバーヘッドを抑えつつ、高精度かつ高速なシミュレーションが可能となる。たとえばソフトウェアがあるハードウェア動作を起動してからのソフトウェアの時間制約に対してFPGAボードからの割り込みが「間に合う」「間に合わない」の検証が、高速かつ使い易い環境で実現できる。
【００５６】
（第２の実施の形態）
第１の実施の形態では、SWシミュレータとFPGAボードとでの協調シミュレーションを行う場合の例を記述したが、本発明の根本をなす技術は第１の実施の形態で記述したこのような組み合わせに限られない。第２の実施の形態では、SWシミュレータとHWシミュレータとの組み合わせた協調シミュレーションの例を示す。
【００５７】
図１２は、本発明の第２の実施の形態に係わるHW/SW協調シミュレータの全体構成を示すブロック図である。図１と同一名称の要素には同一の符号を付し、その動作は図１の対応する要素と同一であるためその説明を省略する。具体的に、SWシミュレータ１１側の動作は第１の実施の形態と同等である。
【００５８】
HWシミュレータ５１は、ハードウェア記述（対象となるハードウェアのRTL記述など）５２とシミュレーション用のテストベンチ記述５３とを用いてハードウェアのシミュレーションを行う。HWシミュレータ制御手段５４はシミュレーション全体を制御する。クロック発生用の記述５５がテストベンチ記述５３に含まれている。すなわち、テストベンチ記述５３にクロック発生手段５５を加えている。通常、HWシミュレータ上で動作するハードウェア記述は、シミュレーション用のテストベンチと合わせてシミュレーションされ、本実施の形態では、このテストベンチ中にクロック発生用の記述を含めているため、HWシミュレータ本体は既存のものをそのまま利用することができる。
【００５９】
図１３は、HWシミュレータ５１側のクロック発生手段５５の処理フローを示すフローチャートである。
【００６０】
クロック発生手段５５は、シミュレーションが終了したかどうかを検査し（S71）、終了した場合は（S71のYES）本処理を終了する。シミュレーションが終了していない場合は（S71のNO）、SWシミュレータ１１における同期制御手段２３からの毎サイクル同期イネーブル信号がアサートされているかどうかを検査し（S72）、アサートされているときは（S72のYES）、同期制御手段２３からのクロック信号を待つ（S73）。クロック信号がきたらクロック信号を１サイクル分発生させ（S74）、S71に戻る。一方、毎サイクル同期イネーブル信号がアサートされていないときは（S72のNO）、テストベンチ記述５３中のクロック発生記述を利用してクロックを発生させる（S75）。この後、S71に戻る。
【００６１】
図１３の処理フローの説明では同期区間外においてテストベンチ記述に記載されたクロック発生手段５５によりクロック信号を発生させたが、SWシミュレータ１１側のバスアクセス時以外はクロック発生を完全に止めてしまってもよい。HWシミュレーションの動作を停止することで全体のシミュレーション負荷を低減し、シミュレーション速度の向上を図ることも可能である。
【００６２】
（第３の実施の形態）
図１４は、本発明の第３の実施の形態として、ソフトウェア側の動作に実CPUが搭載された評価ボード６１と、ICE(In Circuit Emulator：インサーキットエミュレータ)６２とを利用した例である。評価ボードとICE６２との組はソフトウェア実行装置に相当する。図１と同一の名称の要素には同一の符号を付して重複する説明を省略する。ICE６２における実行制御手段６３は図１のシミュレーション制御手段２６と同等の機能を有している。ICEなどを用いることで、実CPU上で動作するソフトウェアの動作状況(プログラムカウンタの値、バスアクセスのアドレス、メモリ/レジスタの値)の情報を参照することが可能である。ここでは、ICE６２に搭載したSW実行監視手段２２に含まれるPC監視手段、アドレス監視手段、メモリ/レジスタ値監視手段によって上記ソフトウェアの動作状況の情報を取得することができる。これにより、第１の実施の形態と同等の協調シミュレーションが可能となる。
【００６３】
図１４の構成の場合、評価ボード＋ICEの系がFPGAボードより高速に動作するような場合も考えられる。このような場合は、評価ボード＋ICEの系内全体の動作周波数をFPGAボードの動作周波数まで落とすように制御すればよい。ソフトウェアの実行速度は低下することになるが、毎サイクル同期に指定した区間でのソフトウェアの実行ステップ数とハードウェア側のスループットとが実時間の動作（１つのLSI上に実装されたときの動作）と等しくすることができるので、ある時間要件を満たすか否かという検証項目を正しく評価することが可能になるというメリットは残る。
【図面の簡単な説明】
【００６４】
【図１】本発明の第１の実施の形態に係わるハードウェア／ソフトウェア協調シミュレータの全体構成図。
【図２】同期区間情報の例を示す図。
【図３】ＳＷシミュレータの詳細構成図。
【図４】条件判定手段の処理フローを説明するフローチャート。
【図５】図４に続く、条件判定手段の処理フローを説明するフローチャート。
【図６】図４に続く、条件判定手段の処理フローを説明するフローチャート。
【図７】図４に続く、条件判定手段の処理フローを説明するフローチャート。
【図８】シミュレーション制御手段の処理フローを説明するフローチャート。
【図９】同期制御手段の処理フローを説明するフローチャート。
【図１０】ＦＰＧＡボード上のクロック発生手段の構成を示す図。
【図１１】同期制御手段とクロック発生手段との間の動作イメージを示す図。
【図１２】本発明の第２の実施の形態に係わるハードウェア／ソフトウェア協調シミュレータの全体構成図。
【図１３】図１２におけるＨＷシミュレータ側のクロック発生手段の動作を説明するフローチャート。
【図１４】本発明の第３の実施の形態に係わるハードウェア／ソフトウェア協調シミュレータの全体構成図。
【符号の説明】
【００６５】
１１：SWシミュレータ
１２：FPGAボード
１３：同期区間情報指定手段
２１：CPUシミュレーション手段
２２：SW実行監視手段
２３：同期制御手段
２４：メモリシミュレーション手段
２５：周辺回路シミュレーション手段
２６：シミュレーション制御手段
２７：クロック発生手段
２８：FPGA回路
３１：ISS
３２：プログラムカウンタ（PC）
３３：バスアクセスシミュレーション手段
３４：アドレス格納手段
３５：データ格納手段
３６：PC監視手段
３７：アドレス監視手段
３８：メモリ・レジスタ値監視手段
３９：条件判定手段
４０：シミュレータ内時間管理手段
４１：クロック生成回路
４２：セレクタ
５１：HWシミュレータ
５２：RTL記述
５３：テストベンチ記述
５４：HWシミュレータ制御手段
５５：クロック発生手段
６１：評価ボード
６２：ICE(In Circuit Emulator)
６３：実行制御手段
【図１】
0004468410.tif 000002
【図２】
0004468410.tif 000003
【図３】
0004468410.tif 000004
【図４】
0004468410.tif 000005
【図５】
0004468410.tif 000006
【図６】
0004468410.tif 000007
【図７】
0004468410.tif 000008
【図８】
0004468410.tif 000009
【図９】
0004468410.tif 000010
【図１０】
0004468410.tif 000011
【図１１】
0004468410.tif 000012
【図１２】
0004468410.tif 000013
【図１３】
0004468410.tif 000014
【図１４】
0004468410.tif 000015