(57)【要約】【課題】シミュレータ間のデータ伝送遅延等が生じないこと【解決手段】シミュレータ１（１００）は、動作サイクルと関連付けられたシミュレーション履歴情報を記憶するデータ保持用メモリ１２０を有し、シミュレータ１（１００）及び他シミュレータのシミュレーション実行結果をデータ保持用メモリ１２０に格納する。シミュレータ２（３００）は、動作サイクルと関連付けられたシミュレーション履歴情報をデータ保持用メモリ３２０に格納する。シミュレータ１（１００）がシミュレータ２（３００）のシミュレーション結果を必要とするタイミングに、シミュレータ１（１００）はデータ保持用メモリ１２０に所望のデータがある場合には当該データを用いる。データ保持用メモリ１２０に所望のデータがない場合、シミュレータ１（１００）はデータ保持用メモリ３２０に格納されたシミュレーション履歴情報を取得する。【選択図】図１
2012003336.tif 000002
【特許請求の範囲】
【請求項１】
動作サイクルと関連付けられたシミュレーション履歴情報を記憶する第１記憶部を有し、シミュレーションの実行結果及び他のシミュレータによるシミュレーションの実行結果を前記第１記憶部に格納する第１シミュレータと、
動作サイクルと関連付けられたシミュレーション履歴情報を記憶する第２記憶部を有し、シミュレーションの実行結果及び他のシミュレータによるシミュレーションの実行結果を前記第２記憶部に格納する第２シミュレータと、を備え、
前記第１シミュレータが前記第２シミュレータのシミュレーションの実行結果データを必要とするタイミングを含む第１タイミングにおいて、前記第１シミュレータは前記第１記憶部に所望のデータが格納されている場合には当該データを用いてシミュレーションし、前記第１記憶部に所望のデータが格納されてない場合には前記第２記憶部に格納された前記シミュレーション履歴情報を取得して前記第１記憶部に格納するとともに当該取得データを用いてシミュレーションを実行し、
前記第２シミュレータが前記第１シミュレータのシミュレーションの実行結果データを必要とするタイミングを含む第２タイミングにおいて、前記第２シミュレータは前記第２記憶部に所望のデータが格納されている場合には当該データを用いてシミュレーションし、前記第２記憶部に所望のデータが格納されていない場合には前記第１記憶部に格納された前記シミュレーション履歴情報を取得して前記第２記憶部に格納するとともに当該取得データを用いてシミュレーションを実行するシミュレーション装置。
【請求項２】
前記第１シミュレータは、前記第１タイミングと、前記第２シミュレータが実行を終了している前記動作サイクルと、の間の期間に対応する前記シミュレーション履歴情報を取得し、
前記第２シミュレータは、前記第２タイミングと、前記第１シミュレータが実行を終了している前記動作サイクルと、の間の期間に対応する前記シミュレーション履歴情報を取得することを特徴とする請求項１に記載のシミュレーション装置。
【請求項３】
前記第１シミュレータは、前記第２タイミングと、前記第１シミュレータが実行を終了している前記動作サイクルと、の間の期間はシミュレーションの実行結果を前記シミュレーション履歴情報として前記第１記憶部に格納する処理を省略し、
前記第２シミュレータは、前記第１タイミングと、前記第２シミュレータが実行を終了している前記動作サイクルと、の間の期間はシミュレーションの実行結果を前記シミュレーション履歴情報として前記第２記憶部に格納する処理を省略することを特徴とする請求項１または請求項２に記載のシミュレーション装置。
【請求項４】
前記第１シミュレータは、前記第２シミュレータが取得済みの前記シミュレーション履歴情報を前記第１記憶部から削除し、
前記第２シミュレータは、前記第１シミュレータが取得済みの前記シミュレーション履歴情報を前記第２記憶部から削除することを特徴とする請求項１乃至請求項３のいずれか１項に記載のシミュレーション装置。
【請求項５】
前記第１記憶部及び前記第２記憶部には、前記シミュレーション履歴情報として前記動作サイクル毎の各出力端子の出力データが格納されることを特徴とする請求項１乃至請求項４のいずれか１項に記載のシミュレーション装置。
【請求項６】
前記第１記憶部及び前記第２記憶部には、各出力端子の出力データが変更される毎に前記シミュレーション履歴情報として各出力端子の出力データが格納されることを特徴とする請求項１乃至請求項４のいずれか１項に記載のシミュレーション装置。
【請求項７】
前記第１シミュレータと前記第２シミュレータのデータ転送を中継する協調動作制御ツールを備えることを特徴とする請求項１乃至請求項６のいずれか１項に記載のシミュレーション装置。
【請求項８】
動作サイクルと関連付けられたシミュレーション履歴情報を記憶する第１記憶部を有し、シミュレーションの実行結果及び他のシミュレータによるシミュレーションの実行結果を前記第１記憶部に格納する第１シミュレータと、
動作サイクルと関連付けられたシミュレーション履歴情報を記憶する第２記憶部を有し、シミュレーションの実行結果及び他のシミュレータによるシミュレーションの実行結果を前記第２記憶部に格納する第２シミュレータと、を備えるシミュレーション装置におけるシミュレーション方法であって、
前記第１シミュレータが前記第２シミュレータのシミュレーションの実行結果データを必要とするタイミングを含む第１タイミングにおいて、前記第１シミュレータは前記第１記憶部に所望のデータがある場合には当該データを用いてシミュレーションし、前記第１記憶部に所望のデータがない場合には前記第２記憶部に格納された前記シミュレーション履歴情報を取得してシミュレーションを実行し、
前記第２シミュレータが前記第１シミュレータのシミュレーションの実行結果データを必要とするタイミングを含む第２タイミングにおいて、前記第２シミュレータは前記第２記憶部に所望のデータがある場合には当該データを用いてシミュレーションし、前記第２記憶部に所望のデータがない場合には前記第１記憶部に格納された前記シミュレーション履歴情報を取得してシミュレーションを実行するシミュレーション方法。
【請求項９】
前記第１シミュレータは、前記第１タイミングと、前記第２シミュレータが実行を終了している前記動作サイクルと、の間の期間に対応する前記シミュレーション履歴情報を取得し、
前記第２シミュレータは、前記第２タイミングと、前記第１シミュレータが実行を終了している前記動作サイクルと、の間の期間に対応する前記シミュレーション履歴情報を取得することを特徴とする請求項８に記載のシミュレーション方法。
【請求項１０】
前記第１シミュレータは、前記第２タイミングと、前記第１シミュレータが実行を終了している前記動作サイクルと、の間の期間はシミュレーションの実行結果を前記シミュレーション履歴情報として前記第１記憶部に格納する処理を省略し、
前記第２シミュレータは、前記第１タイミングと、前記第２シミュレータが実行を終了している前記動作サイクルと、の間の期間はシミュレーションの実行結果を前記シミュレーション履歴情報として前記第２記憶部に格納する処理を省略することを特徴とする請求項８または請求項９に記載のシミュレーション方法。
【請求項１１】
前記第１シミュレータは、前記第２シミュレータが取得済みの前記シミュレーション履歴情報を前記第１記憶部から削除し、
前記第２シミュレータは、前記第１シミュレータが取得済みの前記シミュレーション履歴情報を前記第２記憶部から削除することを特徴とする請求項８乃至請求項１０のいずれか１項に記載のシミュレーション方法。
【請求項１２】
前記第１記憶部及び前記第２記憶部には、前記シミュレーション履歴情報として前記動作サイクル毎の各出力端子の出力データが格納されることを特徴とする請求項８乃至請求項１１のいずれか１項に記載のシミュレーション方法。
【請求項１３】
前記第１記憶部及び前記第２記憶部には、各出力端子の出力データが変更される毎に前記シミュレーション履歴情報として各出力端子の出力データが格納されることを特徴とする請求項８乃至請求項１１のいずれか１項に記載のシミュレーション方法。
【請求項１４】
動作サイクルと関連付けられたシミュレーション履歴情報を記憶する第１記憶部を有し、シミュレーションの実行結果及び他のシミュレータによるシミュレーションの実行結果を前記第１記憶部に格納する第１シミュレータと、
動作サイクルと関連付けられたシミュレーション履歴情報を記憶する第２記憶部を有し、シミュレーションの実行結果を前記第２記憶部に格納する第２シミュレータと、を備え、
前記第１シミュレータが前記第２シミュレータのシミュレーションの実行結果データを必要とするタイミングを含む第１タイミングにおいて、前記第１シミュレータは前記第１記憶部に所望のデータが格納されている場合には当該データを用いてシミュレーションし、前記第１記憶部に所望のデータが格納されてない場合には前記第２記憶部に格納された前記シミュレーション履歴情報を取得して前記第１記憶部に格納するとともに当該取得データを用いてシミュレーションを実行するシミュレーション装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はシミュレーション装置及びシミュレーション方法に関し、特に協調シミュレーションにかかるシミュレーション装置及びシミュレーション方法に関する。
【背景技術】
【０００２】
ＬＳＩ（Large Scale Integration）設計では、ＴＡＴ（Turn Around Time）を短縮させるために既存のＩＰ（Intellectual Property）コアを再利用した設計手法、抽象度の高いレベルでの動作検証、ソフトウェア開発の前倒し等の開発手法が必要となる。これらの開発手法において、協調シミュレーション環境が必要となる場合がある。
【０００３】
例えば、抽象度が低い既存のＩＰモデルと抽象度の高い新規のモデルとの協調検証を行う場合、または開発モデルを詳細化していく際に上位レベルのモデルをテストベンチ環境として利用する場合、協調シミュレーション環境の構築が必要となる。また、仮想環境上においてソフトウェア開発を行う場合、ソフトウェアを実行するために用いられるＩＳＳ（Instruction Set Simulator）とハードウェアモデルとの協調動作検証に協調シミュレーション環境が必要となる。
【０００４】
協調シミュレーションの実行の際には、シミュレータ間の同期通信が必要となる。シミュレータ間の同期通信の時間は、シミュレータ切り替えのオーバーヘッドの時間とデータ転送時間との合計により表わされる。シミュレータ切り替えのオーバーヘッドの時間はデータ転送時間よりもはるかに大きい。このため、シミュレータ切り替えのオーバーヘッドの時間を小さくすることにより、シミュレーション時間の高速化が実現できる。
【０００５】
一般に協調シミュレーション実行時には、１サイクル毎に同期通信を行う。特許文献１には、この１サイクル毎のシミュレータの同期通信回数を減らして処理の高速化を図るシミュレーションシステムに関する技術が開示されている。図８は、当該シミュレーションシステムの構成を示すブロック図である。
【０００６】
当該シミュレーションシステムは、動作サイクル数を指定可能であるシミュレータ１（４００）と、動作サイクル数を指定可能であるシミュレータ２（６００）と、協調動作制御ツール５００と、を備える。協調動作制御ツール５００は、データ転送用メモリ５１０と、協調動作制御部５２０と、を備える。
【０００７】
データ転送用メモリ５１０は、シミュレータ間のデータ転送時に転送用データを一次保存するための記憶部である。協調動作制御部５２０は、シミュレータ１（４００）及びシミュレータ２（６００）の動作制御と、データ転送と、同期条件判定と、を行う。協調動作制御部５２０は、同期条件の判定結果に基づいてシミュレータ１（４００）及びシミュレータ２（６００）の動作サイクル数を設定する。
【０００８】
シミュレータ１（４００）は、動作制御部４１０と、被検証モジュール４４０と、を備える。動作制御部４１０は、データ転送用メモリ４２０と、同期制御部４３０と、を備える。同期制御部４３０は、シミュレーションの開始及び停止の制御、指定されたサイクル数の処理実行等を行う処理部である。また同期制御部４３０は、入出力データの転送処理も行う。データ転送用メモリ４２０は、シミュレータ間のデータの転送を行う場合に、転送データを一次格納する記憶部である。被検証モジュール４４０は、検証対象の周辺回路、ＣＰＵ（Central Processing Unit）等のモジュールである。
【０００９】
シミュレータ２（６００）は、動作制御部６１０と、被検証モジュール６４０と、を備える。動作制御部６１０は、データ転送用メモリ６２０と、同期制御部６３０と、を備える。同期制御部６３０は、シミュレーションの開始及び停止の制御、指定されたサイクル数の処理実行等を行う処理部である。また同期制御部６３０は、入出力データの転送処理も行う。データ転送用メモリ６２０は、シミュレータ間のデータの転送を行う場合に、転送データを一次格納する記憶部である。被検証モジュール６４０は、検証対象の周辺回路、ＣＰＵ（Central Processing Unit）等のモジュールである。
【００１０】
図９は、特許文献１にかかる協調シミュレーションシステムの処理手順を示すフローチャートである。はじめに、協調動作制御部５２０は、シミュレータ１（４００）、被検証モジュール４４０、シミュレータ２（６００）、及び被検証モジュール６４０を初期化する（Ｓ４１）。また、協調動作制御部５２０はシミュレータ１（４００）が同期処理を行うまでの動作サイクルであるｎ１を１に設定する（Ｓ４１、４２）。同様に協調動作制御部５２０はシミュレータ２（６００）が同期処理を行うまでの動作サイクルであるｎ２を１に設定する（Ｓ４１、４２）。
【００１１】
シミュレータ１（４００）及びシミュレータ２（６００）は指定サイクルの処理を実行する（Ｓ４３）。その後、シミュレータ１（４００）及びシミュレータ２（６００）は、同期通信を行う（Ｓ４４）。同期通信終了後に、協調動作制御部５２０は協調シミュレーションの終了条件が成立しているか否かを判定する（Ｓ４５）。終了条件が成立している場合（Ｓ４５:Ｙｅｓ）、全ての処理を終了する。
【００１２】
協調シミュレーションの終了条件が成立していない場合（Ｓ４５：Ｎｏ）、協調動作制御部５２０は、同期条件が成立しているか否かを判定する（Ｓ４６）。同期条件が成立している場合（Ｓ４６：Ｙｅｓ）、協調動作制御部５２０は動作サイクル数ｎ１及びｎ２を１に設定する（Ｓ４７）。同期条件が成立していない場合（Ｓ４６：Ｎｏ）、協調動作制御部５２０は動作サイクル数ｎ１及びｎ２を５（１よりも大きい値）に設定する（Ｓ４８）。すなわち、同期条件が成立していない場合（信号のやりとりが生じない場合）には、協調動作制御部５２０は同期通信を行わないように制御する。同期通信を省略することにより、特許文献１に記載のシミュレーションシステムは処理の高速化を図っている。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００８−０６５６４０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
しかしながら、特許文献１に記載のシミュレーション装置ではシミュレータ間のデータ伝送遅延、データ欠落が生じるという問題がある。当該問題の詳細について以下に説明する。
【００１５】
図１０は、特許文献１に記載のシミュレーション装置の動作を示すタイミングチャートである。本例では、同期条件が成立した場合に実行処理を１サイクル進め、同期条件が不成立の場合に実行処理を５サイクル進める設定である。
【００１６】
信号Ａ１及びＢ１はシミュレータ１側の出力端子からの出力信号である。また、信号Ａ２及びＢ２はシミュレータ２側の入力端子である。信号Ａ１に対応する出力端子と信号Ａ２に対応する入力端子は接続されている。同様に信号Ｂ１に対応する出力端子と信号Ｂ２に対応する入力端子は接続されている。
【００１７】
本例では、時刻ｔ３において同期条件が不成立となる。この場合、次に同期条件を判定するタイミングは時刻ｔ３の５サイクル後である時刻ｔ６に設定される。ここで、時刻ｔ４（時刻ｔ３の１サイクル後）にシミュレータ１からＡ１＝１を出力した場合であっても、時刻ｔ４において信号Ａ２の値は変更されない。同期タイミングである時刻ｔ６に信号Ａ１の変更が信号Ａ２に反映される。すなわち、信号伝搬の遅延が生じてしまう。
【００１８】
また、時刻ｔ４において信号Ｂ１の値が変更され、時刻ｔ５（時刻ｔ３の２サイクル後）において信号Ｂ１の値が再度変更されている。時刻ｔ４及び時刻ｔ５においては、シミュレータ間の同期処理が省略されている。そのため、信号Ｂ２には当該信号変化が伝搬しない。すなわち、信号情報の欠落が生じてしまう。
【００１９】
上述のように特許文献１に記載のシミュレーション装置では、同期条件が成立していない場合に同期通信を省略することにより処理の高速化を図っている。しかし特許文献１に記載のシミュレーション装置では、同期通信を省略している間に信号伝搬の遅延及び信号情報の欠落が生じてしまう。また特許文献１では、信号伝搬の遅延及び信号情報の欠落を防止するための同期タイミングの制御については検討が無い。信号伝搬の遅延及び信号情報の欠落が生じた場合、動作検証が正しく行われない恐れがある。
【課題を解決するための手段】
【００２０】
本発明にかかるシミュレーション装置の一態様は、動作サイクルと関連付けられたシミュレーション履歴情報を記憶する第１記憶部を有し、シミュレーションの実行結果及び他のシミュレータによるシミュレーションの実行結果を前記第１記憶部に格納する第１シミュレータと、動作サイクルと関連付けられたシミュレーション履歴情報を記憶する第２記憶部を有し、シミュレーションの実行結果及び他のシミュレータによるシミュレーションの実行結果を前記第２記憶部に格納する第２シミュレータと、を備え、前記第１シミュレータが前記第２シミュレータのシミュレーションの実行結果データを必要とするタイミングを含む第１タイミングにおいて、前記第１シミュレータは前記第１記憶部に所望のデータが格納されている場合には当該データを用いてシミュレーションし、前記第１記憶部に所望のデータが格納されてない場合には前記第２記憶部に格納された前記シミュレーション履歴情報を取得して前記第１記憶部に格納するとともに当該取得データを用いてシミュレーションを実行し、前記第２シミュレータが前記第１シミュレータのシミュレーションの実行結果データを必要とするタイミングを含む第２タイミングにおいて、前記第２シミュレータは前記第２記憶部に所望のデータが格納されている場合には当該データを用いてシミュレーションし、前記第２記憶部に所望のデータが格納されていない場合には前記第１記憶部に格納された前記シミュレーション履歴情報を取得して前記第２記憶部に格納するとともに当該取得データを用いてシミュレーションを実行するものである。
【００２１】
本発明においては、第１シミュレータは、動作サイクルとシミュレーション履歴を関連付けて第１記憶部に格納する。前記第１記憶部には、前記第１シミュレータ及び他のシミュレータのシミュレーション履歴情報が格納される。また、前記第１シミュレータは前記第２シミュレータの出力データを必要とするタイミング等において前記第１記憶部から所望のデータを読み出す。所望のデータが前記第１記憶部にない場合、前記第１シミュレータは第２記憶部に格納されていたデータを取得し、前記第１記憶部に格納する。これにより、前記第１シミュレータは第２シミュレータの出力を必要とするタイミングに前記第１記憶部から前記第２シミュレータの出力データを取得してシミュレーションを行うことができる。前記第１シミュレータは第２シミュレータの出力を必要とするタイミングに適切なデータを参照できるため、信号伝搬の遅延及び信号情報の欠落の問題が生じない。前記第２シミュレータも前記第１シミュレータと略同一の動作が可能である。
【発明の効果】
【００２２】
本発明によれば、シミュレータ間のデータ伝送遅延、データ欠落が生じないシミュレーション装置を提供することができる。
【図面の簡単な説明】
【００２３】
【図１】実施の形態１にかかるシミュレーション装置の構成を示すブロック図である。
【図２】実施の形態１にかかるデータ転送用メモリ１２０の構成を示す図である。
【図３】実施の形態１にかかる協調動作制御ツールの動作を示すフローチャートである。
【図４】実施の形態１にかかるシミュレータの動作を示すフローチャートである。
【図５】実施の形態１にかかるシミュレーション装置の動作を示すタイミングチャートである。
【図６】特許文献１にかかるシミュレーション装置の動作を示すタイミングチャートである。
【図７】実施の形態１にかかるシミュレーション装置の動作を示すタイミングチャートである。
【図８】特許文献１にかかるシミュレーション装置の構成を示すブロック図である。
【図９】特許文献１にかかるシミュレーション装置の動作を示すフローチャートである。
【図１０】特許文献１にかかるシミュレーション装置の動作を示すタイミングチャートである。
【発明を実施するための形態】
【００２４】
＜実施の形態１＞
以下、図面を参照して本発明の実施の形態について説明する。シミュレーション装置１０は、シミュレータ１（１００）と、協調動作制御ツール２００と、シミュレータ２（３００）と、を備える。
【００２５】
協調動作制御ツール２００は、データ転送用メモリ２１０と、協調動作制御部２２０と、を備える。データ転送用メモリ２１０はシミュレータ間のデータ転送時に転送用データを一次保存するための記憶部である。協調動作制御部２２０は、シミュレーション装置１０のシミュレーション全体の同期管理と、各シミュレータの出力データ転送管理を行う処理部である。同期管理とは、シミュレータ１（１００）及びシミュレータ２（３００）に対して動作制御命令（動作開始、動作停止、動作一時停止等）を供給すること等である。
【００２６】
シミュレータ１（１００）は、動作制御部１１０と、アクセス制御部１４０と、被検証モジュール１５０と、を備える。動作制御部１１０は、データ転送用メモリ１２０と、同期制御部１３０と、を備える。シミュレータ１（１００）は、必要に応じてシミュレータ２（３００）の出力データを用いてシミュレーションを行う。
【００２７】
被検証モジュール１５０は、検証対象となる周辺回路、ＣＰＵ等を含むモジュールを指す。被検証モジュール１５０は、シミュレーション実行時にアクセス制御部１４０を介してデータを入出力する。
【００２８】
同期制御部１３０は、協調動作制御ツール２００から送信される動作制御命令（動作開始、動作停止等）に応じてシミュレータ１（１００）の動作を制御する。また、同期制御部１３０は、アクセス制御部１４０から同期通信要求が入力された場合、またはシミュレーションの動作サイクル数が最大同期回数を超えた場合、シミュレーションの実行時間が最大同期時間を超えた場合、等にシミュレータ１（１００）の動作を一時停止する。
【００２９】
最大同期回数とは、シミュレータ２（３００）との同期通信を行わずにシミュレーションを実行できる最大のサイクル数であり、予め定められている。例えば、最大同期回数は、シミュレータ間の同期処理が不要な場合であっても１０００回の動作サイクルを実行した時点に同期通信を行うための設定値である。最大同期時間とはシミュレータ２（３００）との同期通信を行わずにシミュレーションを実行できる最大の時間であり、予め定められている。これは、一方のシミュレータが他方のシミュレータの出力データを用いない場合に、当該一方のシミュレータが長時間実行されることを防止するための設定値である。最大同期時間に到達したシミュレータは、他方のシミュレータが同数の動作サイクルを実行するまで処理を中断する。
【００３０】
協調動作制御部２２０からのシミュレーション再開命令を受信した場合、同期制御部１３０は、協調動作制御部２２０とデータの転送処理等を行う。同期制御部１３０は、協調動作制御部２２０から受信したシミュレータ２（３００）の出力データをデータ保持用メモリ１２０に格納する。データ転送処理等の詳細は後述する。
【００３１】
アクセス制御部１４０は、被検証モジュール１５０からのＲＥＡＤアクセスが生じた場合に、データ保持用メモリ１２０内に当該アクセスに対応するデータが格納されているか否かを判定する。対応データがある場合には、アクセス制御部１４０は当該データをデータ保持用メモリ１２０から読み出して被検証モジュール１５０に供給する。一方対応するデータが無い場合には、アクセス制御部１４０は、同期制御部１３０に対して同期通信要求を供給する。同期通信要求は、協調動作制御ツール２００に対してシミュレータ２（３００）から出力されたデータを転送するように要求する信号である。協調動作制御ツール２００から転送されたデータは、データ保持用メモリ１２０に格納される。
【００３２】
またアクセス制御部１４０は、被検証モジュール１５０からのＷＲＩＴＥアクセスが生じた場合にデータ保持用メモリ１２０に対して出力用データを書き込む。ここで所定数のデータがデータ保持用メモリ１２０に格納された場合、アクセス制御部１４０は同期制御部１３０に対してデータ転送命令を供給する。当該データ転送命令は、シミュレータ１（１００）の出力用データを協調動作制御ツール２００に対して転送することを指示する命令信号である。
【００３３】
なお、アクセス制御部１４０は、データ転送終了後に、転送したデータをデータ保持用メモリ１２０から削除してもよい。
【００３４】
データ保持用メモリ１２０には、シミュレータ１（１００）の出力用データと、シミュレータ２（３００）から出力されたデータとが格納される。言い換えると、データ保持用メモリ１２０には、動作サイクルと対応づけられたシミュレーションの実行結果が履歴として格納される。図２を用いてデータ保持用メモリ１２０のデータ格納方法の詳細を説明する。
【００３５】
図２は、データ保持用メモリ１２０におけるシミュレータ１（１００）の出力用データの格納方法を示す。本例では、シミュレータ１（１００）は５つの出力端子（ａ〜ｅ）を備える。図中の（２−１）は、各動作サイクルにおける各出力端子の出力データを示す。図中の（２−２）に示すように、データ保持用メモリ１２０は動作サイクル毎に全ての出力端子の出力データを格納する。図示したように、データ保持用メモリ１２０は、動作サイクル毎に動作サイクルと全ての出力端子のデータの対を格納する。
【００３６】
また、図中の（２−３）に示すように、データ保持用メモリ１２０はデータの変更があった場合にのみ動作サイクルと全ての出力端子の出力データを保持してもよい。この方式において、格納を行わなかった動作サイクルの出力データを参照する場合、当該動作サイクル以前に格納され、かつ一番新しい履歴を示すデータを参照すればよい。例えば、（２−３）においては、動作サイクルｔ３の出力データを参照したい場合、動作サイクルｔ２の出力データを参照することにより所望のデータを参照できる。
【００３７】
また、図中の（２−４）に示すように、データ保持用メモリ１２０は、動作サイクルと各出力端子の出力データを対にした形式でデータを保持してもよい。この場合においても、データの変更があった場合にのみ動作サイクルと各出力端子の出力データを保持する。
【００３８】
上述の（２−３）、（２−４）に示した方式により、データ保持用メモリ１２０に格納するデータ量を削減することができる。なお、シミュレータ間のデータ転送とデータ保持用メモリ１２０内のデータ遷移と、の関係は図５を用いて後述する。図２ではシミュレータ１（１００）の出力用データの格納方法を示したが、シミュレータ２（３００）から出力されたデータの格納方法も略同一の方法である。
【００３９】
シミュレータ２（３００）は、動作制御部３１０と、アクセス制御部３４０と、被検証モジュール３５０と、を備える。動作制御部３１０は、データ転送用メモリ３２０と、同期制御部３３０と、を備える。動作制御部３１０は動作制御部１１０と対応する。アクセス制御部３４０はアクセス制御部１４０と対応する。データ転送用メモリ３２０はデータ転送用メモリ１２０と対応する。同期制御部３３０は同期制御部１３０と対応する。シミュレータ２（３００）の各処理部は、シミュレータ１（１００）の対応する処理部と同一の機能を有していればよい。
【００４０】
次に、協調動作制御ツール２００の処理を図３のフローチャートを用いて説明する。はじめに協調動作制御部２２０は、シミュレータ１（１００）及びシミュレータ２（３００）に対してシミュレーションの開始を指示する（Ｓ１１）。各シミュレータがシミュレーションを実行して同期通信が行われている際に、同期動作制御部２２０はシミュレーション終了条件が成立しているか否かを判定する（Ｓ１２）。終了条件が成立している場合（Ｓ１２：Ｙｅｓ）、協調動作制御部２２０はシミュレーションを停止（各シミュレータの停止）する制御を行う。
【００４１】
終了条件が成立していない場合（Ｓ１２：Ｎｏ）、同期動作制御部２２０はシミュレータ１（１００）の実行済みの動作サイクルと、シミュレータ２（３００）の実行済みの動作サイクルの大小を比較する（Ｓ１３、Ｓ１４）。
【００４２】
実行済みの動作サイクルが等しい場合（Ｓ１３：Ｙｅｓ）、各シミュレータのシミュレーションを再開させる（Ｓ１１）。シミュレータ１（１００）の実行済みの動作サイクルがシミュレータ２（３００）の実行済みの動作サイクルよりも小さい場合（Ｓ１３：Ｎｏ、Ｓ１４：Ｙｅｓ）、協調動作制御部２２０はシミュレータ１（１００）のシミュレーションを再開させる。シミュレータ１（１００）の実行済みの動作サイクルがシミュレータ２（３００）の実行済みの動作サイクルよりも大きい場合（Ｓ１３：Ｎｏ、Ｓ１４：Ｎｏ）、協調動作制御部２２０はシミュレータ２（３００）のシミュレーションを再開させる。
【００４３】
次に、シミュレータ１（１００）またはシミュレータ２（３００）の処理を図４のフローチャートを用いて説明する。以下の説明では、シミュレータ１（１００）の動作を説明する。
【００４４】
シミュレータ１（１００）は協調動作制御部２２０の動作開始通知に応じて初期化を行う（Ｓ２１）。初期化の後に、シミュレータ１（１００）は１動作サイクルのシミュレーションの実行を開始する（Ｓ２２）。同期制御部１３０はシミュレーションの実行時に連続動作サイクル数が所定の最大同期回数に到達しているか否か、及び連続動作時間が所定の最大同期時間に到達しているか否かを判定する（Ｓ２３）。
【００４５】
Ｓ２３の条件を満たさない場合（Ｓ２３：Ｎｏ）、アクセス制御部１３０は実行対象の動作サイクルにおいてシミュレータ２（３００）の出力データを必要とするか否かを判定する（Ｓ２４）。
【００４６】
シミュレータ２（３００）の出力データを必要とする場合（Ｓ２４：Ｎｏ）、アクセス制御部１３０は当該データがデータ保持用メモリ１２０内にあるか否かを判定する（Ｓ２５）。データ保持用メモリ１２０内に当該データがある場合（Ｓ２５：Ｙｅｓ）、アクセス制御部１３０は当該データをデータ保持用メモリ１２０から読み出す（Ｓ２６）。
【００４７】
データ保持用メモリ１２０内に当該データがない場合（Ｓ２５：Ｎｏ）、またはＳ２３の条件を満たす場合（Ｓ２３：Ｙｅｓ）、同期制御部１３０は協調動作制御ツール２００にシミュレータ１（１００）の出力データを転送する（Ｓ２７）。また、同期制御部１３０は協調動作制御ツール２００に対してシミュレーションの中断を通知し、シミュレーションを中断する（Ｓ２７）。同期制御部１３０は連続動作サイクル数及び連続動作時間のリセット処理も行う（Ｓ２７）。
【００４８】
シミュレーションの中断を行った場合（Ｓ２７）、同期制御部１３０は協調動作制御部２２０からの再開指示を受信するまで処理を中断する（Ｓ２８）。協調動作制御部２２０からの再開指示を受信した場合（Ｓ２８：Ｙｅｓ）、同期制御部１３０はデータ保持用メモリ１２０からシミュレータ２（２００）が出力したデータを取得する（Ｓ２９）。その後に、シミュレータ１（１００）は１動作サイクルのシミュレーション処理を実行する（Ｓ３０）。
【００４９】
シミュレータ２（３００）の出力データを必要としない場合（Ｓ２４：Ｎｏ）、シミュレータ１（１００）は１動作サイクルのシミュレーション処理を実行する（Ｓ３０）。
【００５０】
シミュレータ１（１００）はシミュレーション処理を実行した後に、シミュレータ２（３００）に転送するデータをデータ保持用メモリ１２０内に格納する（Ｓ３１）。また、同期制御部１３０は連続動作サイクル数をインクリメントする（Ｓ３１）。
【００５１】
同期制御部１３０はシミュレーションの終了条件（協調動作制御部２２０からの停止命令受信時、所定の終了時刻となった場合等）を満たしているか否かを判定する（Ｓ３２）。終了条件を満たしている場合（Ｓ３２：Ｙｅｓ）、シミュレータ１（１００）は処理を終了する。終了条件を満たしていない場合（Ｓ３２：Ｎｏ）、次の動作サイクルのシミュレーションを行う（Ｓ２２）。
【００５２】
続いて、本実施の形態にかかるシミュレーション装置の動作の具体例を図５のタイミングチャートを用いて説明する。本例では、シミュレータ１（１００）がシミュレータ２（３００）の出力データを必要とするタイミングまたは最大同期時間、最大同期回数に到達したタイミング（第１タイミング）を図中のＡとする。また、シミュレータ２（３００）がシミュレータ１（１００）の出力データを必要とするタイミングまたは最大同期時間、最大同期回数に到達したタイミング（第２タイミング）を図中のＢ、Ｃとする。
【００５３】
シミュレータ１（１００）は、動作サイクルｔ８（Ａ）までシミュレーションを実行する。この際、シミュレータ１（１００）は動作サイクル毎の出力データ（Ｄ１＿１〜Ｄ１＿８）をデータ保持用メモリ１２０内に格納する。動作サイクルｔ８（Ａ）において、シミュレータ１（１００）は出力データ（Ｄ１＿１〜Ｄ１＿８）を協調動作制御ツール２００に転送する。シミュレータ１（１００）は、その後に一時停止状態になる。
【００５４】
シミュレータ１（１００）は、図示したように動作サイクルｔ８（Ａ）においてデータを転送した後にデータ保持用メモリ１２０から転送したデータ（Ｄ１＿１〜Ｄ１＿８）を削除してもよい。すなわち、シミュレータ１（１００）はその後に参照されることがないデータをデータ保持用メモリ１２０から削除する。これにより、データ保持用メモリ１２０の格納データを削減できるため、メモリ量の減少が図れる。シミュレータ２（３００）も同様の削除処理を行ってもよい。
【００５５】
シミュレータ２（３００）は、動作サイクルｔ４（Ｂ）までシミュレーションを実行する。この際、シミュレータ２（３００）は動作サイクル毎の出力データ（Ｄ２＿１〜Ｄ２＿４）をデータ保持用メモリ３２０内に格納する。動作サイクルｔ４（Ｂ）において、シミュレータ２（３００）は出力データ（Ｄ２＿１〜Ｄ２＿４）を協調動作制御ツール２００に転送する。シミュレータ２（３００）は、その後に一時停止状態になる。上述のようにシミュレータ１（１００）及びシミュレータ２（３００）は、データ出力の際には同期通信を行わず、出力データを内部のメモリ（データ保持用メモリ１２０、３２０）に格納する。
【００５６】
協調動作制御ツール２００は、動作サイクルｔ８（Ａ）が動作サイクルｔ４（Ｂ）よりも進んでいることを判定する。そして、協調動作制御ツール２００は実行済みの動作サイクルが少ないシミュレータ２（３００）の動作を開始させる。
【００５７】
シミュレータ２（３００）はシミュレーションの実行時に、協調動作制御ツール２００内のデータ転送用メモリ２１０にアクセスして動作サイクルｔ８（Ａ）〜ｔ４（Ｂ）までのシミュレータ１（１００）の出力データ（Ｄ１＿４〜Ｄ１＿８）を取得する。シミュレータ２（３００）は取得したデータをデータ保持用メモリ３２０に格納する。シミュレータ２（３００）がｔ８（Ａ）までのデータをデータ保持用メモリ３２０に格納することにより、シミュレータ２（３００）は動作サイクルｔ８（Ａ）まで同期通信を行う必要が無くなる。
【００５８】
シミュレータ２（３００）は、シミュレータ１（１００）がシミュレーション実行済みの動作サイクルｔ４（Ｂ）〜ｔ８（Ａ）までは出力用データをデータ保持用メモリ３２０に格納しない。これは、以後のシミュレーション実行において参照されることが無いためである。当該データを格納しないことにより不要なデータを格納することが無くなり、メモリ使用量の削減が図れる。シミュレータ２（３００）は、動作サイクルｔ８（Ａ）以降の出力用データをデータ保持用メモリ３２０に格納する。
【００５９】
シミュレータ２（３００）は、動作サイクルｔ１１（Ｃ）までシミュレーションを実行する。動作サイクルｔ１１（Ｃ）において、シミュレータ２（３００）は出力データ（Ｄ２＿８〜Ｄ２＿１１）を協調動作制御ツール２００に転送する。シミュレータ２（３００）は、その後に一時停止状態になる。
【００６０】
協調動作制御ツール２００は、動作サイクルｔ１１（Ｃ）が動作サイクルｔ８（Ａ）よりも進んでいることを判定する。そして、協調動作制御ツール２００は実行済みの動作サイクルが少ないシミュレータ１（１００）の動作を開始させる。
【００６１】
シミュレータ１（１００）はシミュレーションの実行時に、協調動作制御ツール２００内のデータ転送用メモリ２１０にアクセスして動作サイクルｔ１１（Ｃ）〜ｔ８（Ａ）までのシミュレータ２（３００）の出力データ（Ｄ２＿８〜Ｄ２＿１１）を取得する。シミュレータ１（３００）は取得したデータをデータ保持用メモリ１２０に格納する。
【００６２】
シミュレータ１（１００）は、シミュレータ２（３００）がシミュレーション実行済みの動作サイクルｔ８（Ａ）〜ｔ１１（Ｃ）までは出力用データをデータ保持用メモリ１２０に格納しない。シミュレータ１（１００）は、動作サイクルｔ１１（Ｃ）以降の出力用データをデータ保持用メモリ１２０に格納する。
【００６３】
シミュレータ１（１００）及びシミュレータ２（３００）は、上記の処理を繰り返すことによりシミュレーション処理を行う。
【００６４】
続いて、特許文献１に記載のシミュレーション装置（図８）と本実施の形態にかかるシミュレーション装置の比較を図６及び図７のタイミングチャートを用いて説明する。図６は特許文献１に記載のシミュレーション装置の動作例を示すタイミングチャートである。図６の例では、３動作サイクル毎に同期通信が行われる。また本例では、シミュレータ２（６００）は動作サイクルｔ３（Ａ）、ｔ４（Ｂ）、ｔ５（Ｃ）、ｔ６（Ｄ）にシミュレータ１（４００）の出力データを使用する。また、シミュレータ１（４００）は動作サイクルｔ３（Ａ）にシミュレータ２（６００）の出力データを使用する。
【００６５】
シミュレータ２（６００）はｔ３（Ａ）において同期通信を行うため、ｔ３（Ａ）の時点ではシミュレータ１（４００）の出力データＤ１＿３を保持する。シミュレータ２（６００）は、動作サイクルｔ４（Ｂ）及びｔ５（Ｃ）の時点では同期通信を行わない。そのため、シミュレータ２（６００）は動作サイクルｔ４（Ｂ）及びｔ５（Ｃ）の時点においてシミュレータ１（４００）の出力データＤ１＿４、Ｄ１＿５を取得できない。
【００６６】
シミュレータ２（６００）はｔ６（Ｄ）において同期通信を行う。これにより、シミュレータ２（６００）はｔ６（Ｄ）の時点ではシミュレータ１（４００）の出力データＤ１＿６を保持する。ここで、ｔ４（Ｂ）の時点においてシミュレータ１（４００）のデータが変化し、ｔ６（Ｄ）の時点までデータの変更がなかった場合、信号伝搬の遅延が生じる。また、ｔ４（Ｂ）の時点においてシミュレータ１（４００）のデータが変化し、ｔ５（Ｃ）またはｔ６（Ｄ）の時点においてデータの変更が生じた場合、信号情報の欠損が生じる。
【００６７】
図７は本実施の形態にかかるシミュレーション装置の動作例を示すタイミングチャートである。本例においても、シミュレータ２（３００）が動作サイクルｔ３（Ａ）、ｔ４（Ｂ）、ｔ５（Ｃ）、ｔ６（Ｄ）にシミュレータ１（１００）の出力データを使用する。また本例では、シミュレータ１（１００）が動作サイクルｔ３（Ａ）、ｔ６（Ｄ）にシミュレータ２（３００）の出力データを使用する。
【００６８】
シミュレータ１（１００）はｔ３（Ａ）までシミュレーションの実行し、一時停止状態となる。シミュレータ２（３００）はｔ３（Ａ）までシミュレーションの実行し、一時停止状態となる。シミュレータ１（１００）はＤ２＿３を取得し、シミュレーション処理を再開する。同様にシミュレータ２（３００）はＤ１＿３を取得し、シミュレーション処理を再開する。シミュレータ２（３００）はｔ６（Ｄ）までシミュレーションを実行し、協調動作制御ツール２００にＤ１＿４〜Ｄ１＿６を転送する。
【００６９】
シミュレータ２（３００）は、ｔ４（Ｂ）までシミュレーションの実行し、データ保持用メモリ３２０内にＤ１＿４があるか否かを確認する。この場合、Ｄ＿１はデータ保持用メモリ３２０内に存在しないため、シミュレータ２（３００）は一時停止状態となる。
【００７０】
協調動作制御ツール２００はシミュレータ２（３００）の再開を指示する。シミュレータ２（３００）はｔ４（Ｂ）の時点においてＤ１＿４〜Ｄ１＿６を協調動作制御ツール２００から取得し、データ保持用メモリ３２０に格納する。シミュレータ２（３００）は、ｔ４（Ｂ）の時点においてＤ１＿４を用いてシミュレーションを実行する。同様にシミュレータ２（３００）は、ｔ５（Ｃ）の時点においてＤ１＿５を用いてシミュレーションを実行する。このように、本実施の形態によれば信号伝搬の遅延及び信号情報の欠損が生じない。
【００７１】
続いて、本実施の形態にかかるシミュレーション装置の効果について説明する。シミュレータ１（１００）は、動作サイクルとシミュレーション履歴を関連付けてデータ保持用メモリ１２０に格納する。データ保持用メモリ１２０には、シミュレータ１（１００）及びシミュレータ２（３００）のシミュレーション履歴が格納される。また、シミュレータ１（１００）はシミュレータ２（３００）の出力データを必要とするタイミング等において所望のデータをデータ保持用メモリ１２０から取得する。所望のデータがデータ保持メモリ１２０内にない場合には、シミュレータ１（１００）は当該データを協調動作制御ツール２００を介してシミュレータ２（３００）から取得してデータ保持用メモリ１２０に格納する。これにより、シミュレータ１（１００）はシミュレーション実行の各動作サイクルにおいてデータ保持用メモリ１２０からシミュレータ２（３００）の出力データを取得してシミュレーションを行うことができる。
【００７２】
また、シミュレータ１（１００）は、シミュレータ２（３００）が出力したデータを必要とするタイミング、連続動作サイクル数が所定の最大同期回数に到達したタイミング、連続動作時間が所定の最大同期時間に到達したタイミング等のタイミング（第１のタイミング）にのみ同期通信を行う。これにより、同期通信の回数を少なくすることができる。
【００７３】
図２に示したように、データ保持用メモリ１２０は、出力用のデータに変更があった場合にのみ動作サイクルと出力端子の出力データを格納してもよい。これにより、重複するデータを格納することが無くなり、データ量を削減できる。
【００７４】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。たとえば、上述の説明では、シミュレータ１（１００）は、シミュレータ２（３００）が出力したデータを必要とするタイミング、連続動作サイクル数が所定の最大同期回数に到達したタイミング、連続動作時間が所定の最大同期時間に到達したタイミング等のタイミング（第１のタイミング）にのみ同期通信を行ったが必ずしもこれに限られない。例えば、シミュレータ１（１００）は、シミュレータ２（３００）が出力したデータを必要とするタイミングにのみ通信処理を行ってもよい。
【００７５】
また、シミュレータ２（３００）がシミュレータ１（１００）のシミュレーション結果を一切使用しない場合、シミュレータ１（１００）からのデータ転送処理を省略してもよい。同様に、シミュレータ１（１００）がシミュレータ２（３００）のシミュレーション結果を一切使用しない場合、シミュレータ２（３００）からのデータ転送処理を省略してもよい。
【００７６】
さらにまた、協調動作制御ツール２００は、シミュレーション装置１０のシミュレーション全体の同期管理（シミュレータ１（１００）及びシミュレータ２（３００）に対して動作制御命令（動作開始、動作停止、動作一時停止等）を供給）のみを行ってもよい。この場合、シミュレータ１（１００）及びシミュレータ２（３００）が直接データの転送処理を行う。
【符号の説明】
【００７７】
１０    シミュレーション装置
１００  シミュレータ１
１１０  動作制御部
１２０  データ保持用メモリ
１３０  同期制御部
１４０  アクセス制御部
１５０  被検証モジュール
２００  協調動作制御ツール
２１０  データ転送用メモリ
２２０  協調動作制御部
３００  シミュレータ２
３１０  動作制御部
３２０  データ保持用メモリ
３３０  同期制御部
３４０  アクセス制御部
３５０  被検証モジュール
【図１】
2012003336.tif 000003
【図２】
2012003336.tif 000004
【図３】
2012003336.tif 000005
【図４】
2012003336.tif 000006
【図５】
2012003336.tif 000007
【図６】
2012003336.tif 000008
【図７】
2012003336.tif 000009
【図８】
2012003336.tif 000010
【図９】
2012003336.tif 000011
【図１０】
2012003336.tif 000012