(57)【要約】【課題】シミュレーションを高速化することができる、シミュレーション装置、シミュレーションシステム、シミュレーション方法及びシミュレーションプログラムを提供する。【解決手段】シミュレーション装置１０は、第１トレース情報を用いてシミュレーション対象モデル内で相互に依存関係がなく並列処理可能な処理単位を検出する解析部１１と、シミュレーション対象モデルから複数の処理単位を生成するとともに、第１トレース情報から複数の処理単位の入力情報を生成する分割部１２と、入力情報を用いて複数の処理単位について並列でシミュレーションを行い、第２トレース情報を生成する複数の第２の命令セットシミュレータ１３〜１５と、第１トレース情報と第２トレース情報とを比較して一致部分及び不一致部分を検出する確認部１６と、一致部分に対応する、第２トレース情報を時系列順に結合する結合部１７とを備える。【選択図】図２
2019091144.tif 000002
【特許請求の範囲】
【請求項１】
第１トレース情報を生成する第１の命令セットシミュレータと、
前記第１トレース情報を用いてシミュレーション対象モデル内で相互に依存関係がなく並列処理可能な処理単位を検出する解析部と、
前記シミュレーション対象モデルから複数の前記処理単位を生成するとともに、前記第１トレース情報から前記複数の処理単位の入力情報を生成する分割部と、
前記入力情報を用いて前記複数の処理単位について並列でシミュレーションを行い、前記第１トレース情報よりもタイミング情報が多い第２トレース情報を生成する複数のサイクル精度の第２の命令セットシミュレータと、
前記第１トレース情報と前記第２トレース情報とを比較して一致部分及び不一致部分を検出する確認部と、
前記一致部分に対応する、第２トレース情報を時系列順に結合する結合部と
を備えるシミュレーション装置。
【請求項２】
前記第１の命令セットシミュレータの代わりに設けられて、前記第１トレース情報を生成する第１トレース情報生成部と、
前記第１トレース情報を記録する記録部とを更に備え、
前記第１トレース情報生成部は前記シミュレーション対象モデルに対応する実機又はＦＰＧＡであり、
前記実機又は前記ＦＰＧＡは、前記記録部からスキャンチェーンを介して前記第１トレース情報を入力する
請求項１記載のシミュレーション装置。
【請求項３】
前記確認部は、前記不一致部分を検出したときに、一致部分及び不一致部分を検出する処理を停止し、
前記第１の命令セットシミュレータ又は前記第１トレース情報生成部は、前記第２トレース情報に基づいて、前記不一致部分以降の第１トレース情報を改めて生成する
請求項１又は請求項２記載のシミュレーション装置。
【請求項４】
前記解析部は、前記第１トレース情報に加えて、又は、前記第１トレース情報に代えて、前記シミュレーション対象モデルのソースコードを用いて、並列処理可能な処理単位を検出する
請求項１記載のシミュレーション装置。
【請求項５】
前記結合部は、前記第１トレース情報と前記第２トレース情報とが全て一致したときの、時系列順に結合した前記第２トレース情報をシミュレーション結果として出力する
請求項１記載のシミュレーション装置。
【請求項６】
前記解析部は、更に、前記第２の命令セットシミュレータによるシミュレーションが不要な処理単位を検出し、
前記結合部は、当該処理単位の前記第１トレース情報と、前記第２トレース情報とを時系列順に結合する
請求項１記載のシミュレーション装置。
【請求項７】
前記解析部は、更に、前記第２の命令セットシミュレータによるシミュレーションが不要な処理単位を検出し、
前記第２の命令セットシミュレータ、前記確認部、前記結合部は、当該処理単位について処理を行わない
請求項１記載のシミュレーション装置。
【請求項８】
請求項１記載のシミュレーション装置と、
前記シミュレーション対象モデルを作成するモデリングツールと、
前記シミュレーション装置のコントロール又はデバッグを行う統合開発環境部と
を備えるシミュレーションシステム。
【請求項９】
第１トレース情報を生成する第１のシミュレーションステップと、
前記第１トレース情報を用いてシミュレーション対象モデル内で相互に依存関係がなく並列処理可能な処理単位を検出する解析ステップと、
前記シミュレーション対象モデルから複数の前記処理単位を生成するとともに、前記第１トレース情報から前記複数の処理単位の入力情報を生成する分割ステップと、
前記入力情報を用いて前記複数の処理単位について並列でサイクル精度のシミュレーションを行い、前記第１トレース情報よりもタイミング情報が多い第２トレース情報を生成する第２のシミュレーションステップと、
前記第１トレース情報と前記第２トレース情報とを比較して一致部分及び不一致部分を検出する確認ステップと、
前記一致部分に対応する、第２トレース情報を時系列順に結合する結合ステップと
を有するシミュレーション方法。
【請求項１０】
前記確認ステップは、前記不一致部分を検出したときに処理を停止し、
前記不一致部分以降の前記処理単位について、前記第２トレース情報を用いて、前記第１のシミュレーションステップ、前記解析ステップ、前記分割ステップ、前記第２のシミュレーションステップ、前記確認ステップ、前記結合ステップを再実行する
請求項９記載のシミュレーション方法。
【請求項１１】
コンピュータに、
第１トレース情報を生成する手順と、
前記第１トレース情報を用いてシミュレーション対象モデル内で相互に依存関係がなく並列処理可能な処理単位を検出する手順と、
前記シミュレーション対象モデルから複数の前記処理単位を生成するとともに、前記第１トレース情報から前記複数の処理単位の入力情報を生成する手順と、
前記入力情報を用いて前記複数の処理単位について並列でサイクル精度のシミュレーションを行い、前記第１トレース情報よりもタイミング情報が多い第２トレース情報を生成する手順と、
前記第１トレース情報と前記第２トレース情報とを比較して一致部分及び不一致部分を検出する手順と、
前記一致部分に対応する、第２トレース情報を時系列順に結合する手順と
を実行させるためのシミュレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はシミュレーション装置、シミュレーションシステム、シミュレーション方法及びシミュレーションプログラムに関する。
【背景技術】
【０００２】
自動車などの技術の開発において、開発の後期に問題が発生することを防ぐために、開発の初期に、開発する製品の振る舞いを模擬するモデルを用いてシミュレーションを行うモデルベース開発（ＭＢＤ：Model Based Development）の導入が進んでいる。このとき、例えば、自動車の制御技術では、詳細なタイミングや性能の分析が重要となるが、現在のサイクル精度のシミュレータでは実チップに比べて実行速度が２桁以上遅くなる。エンジン始動や走行などについての数十秒〜分単位のシミュレーションでは、長時間の実行時間が必要となる。
【０００３】
このような問題に対応するために、例えば、複数のスレッドと、当該複数のスレッドを実行する複数のコアモデルとを有するマルチコアモデルシミュレータを用いて、シミュレーションの高速化を図ることが考えられる（特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−２９３７５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１記載の発明は、ハードウェアの単位であるプロセッサエレメントＰＥ０、ＰＥ１などの間での依存関係、すなわち、プロセッサエレメントＰＥ０の処理結果をプロセッサエレメントＰＥ１が用いるような依存関係が疎であることを前提とする同時実行手法である。このため、プロセッサエレメントＰＥ０、ＰＥ１間、又は、同じプロセッサエレメントＰＥ０間において依存関係が密であると、内部的に待ち合わせが生じ、シミュレーションの高速化を達成しにくい。
【０００６】
そこで、シミュレーションを高速化することができる、シミュレーション装置、シミュレーションシステム、シミュレーション方法及びシミュレーションプログラムが望まれていた。
その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施の形態によれば、第１トレース情報を用いて、シミュレーション対象モデルから相互に依存関係がなく並列処理可能な複数の処理単位を生成し、第１トレース情報から当該複数の処理単位の入力情報を生成し、複数の処理単位について並列でシミュレーションを行って第２トレース情報を生成し、第１トレース情報と一致する部分の第２トレース情報を時系列順に結合して、シミュレーション結果とする。
【発明の効果】
【０００８】
上記一実施の形態によれば、シミュレーションを高速化することができる、シミュレーション装置、シミュレーションシステム、シミュレーション方法及びシミュレーションプログラムを提供することができる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１に係るシミュレーションの概要を説明するための図である。
【図２】実施の形態１に係るシミュレーション装置１０を含むシミュレーションシステム１の概略構成を示すブロック図である。
【図３】実施の形態１に係るシミュレーション方法の処理手順を示すフローチャートである。
【図４】実施の形態１に係る同期解析処理の処理手順を示すフローチャートである。
【図５】実施の形態１に係る同期解析処理を説明するための図である。
【図６】実施の形態１に係る妥当性確認処理の処理手順を示すフローチャートである。
【図７】実施の形態１に係るシミュレーション装置１０を含むシミュレーションシステム２の概略構成を示す図である。
【図８】実施の形態１に係るモデルベース開発シミュレーションシステム１００の概略構成を示すブロック図である。
【図９】実施の形態２に係るシミュレーション装置７０を含むシミュレーションシステム３の概略構成を示す図である。
【発明を実施するための形態】
【００１０】
説明の明確化のために、以下の記載及び図面は、適宜、省略及び簡略化がなされる。また、様々な処理を行う機能ブロックとして図面に記載する各要素は、ハードウェア的には、ＣＰＵ、メモリ、その他の回路などにより構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現することができる。
【００１１】
したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、又は、それらの組合せによっていろいろな形で実現できることは当業者に理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号を付しており、必要に応じて重複説明を省略している。
【００１２】
また、上述したプログラムを、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納し、コンピュータに供給することができる。
【００１３】
非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えば、フレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば、光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access Memory））を含む。
【００１４】
また、プログラムを、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給してもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び、電磁波を含む。一時的なコンピュータ可読媒体は、電線、光ファイバ等の有線通信路、又は、無線通信路を介してプログラムをコンピュータに供給することができる。
【００１５】
（実施の形態１）
次に、本実施の形態１に係るシミュレーション装置及びシミュレーション方法について説明する。
まずは、本実施の形態１に係るシミュレーション装置及びシミュレーション方法がシミュレーションを高速化できる理由について説明する。
【００１６】
図１は、本実施の形態１に係るシミュレーションの概要を説明するための図である。
シミュレーションシステムにおいて、高速低精度の機能シミュレータであるＦａｓｔ−ＩＳＳ（Instruction Set Simulator：命令セットシミュレータ）が、入力データ［ｎ］（ここでは、ｎ＝０〜２）を入力してシミュレーション対象モデルをシミュレートし、出力データ［０］、出力データ［１］を含む第１トレース情報を出力する。なお、後で説明するように、本実施の形態１に係るシミュレーションシステム又はシミュレーション装置において、Ｆａｓｔ−ＩＳＳは必須の構成ではないが、Ｆａｓｔ−ＩＳＳを構成の１つとして備えていても良い。
【００１７】
そして、シミュレーション装置が第１トレース情報に基づいて、シミュレーション対象モデルを複数の分割モデルに分割する。各分割モデルは、互いに依存関係がない複数のシミュレーションの処理単位の少なくとも１つをそれぞれ含んでいる。このように、複数の分割モデル、分割モデルの入力データ［０］〜入力データ［２］、及び、機能シミュレーションの結果であり、分割モデルの入力データ（入力情報）でもある出力データ［０］、出力データ［１］を準備することで、次の低速高精度シミュレーションが並列でできるようになる。
【００１８】
そして、それぞれが低速高精度シミュレータである複数のＣＡ（Cycle Accurate：サイクル精度）−ＩＳＳが、入力データ［０］〜［２］及び出力データ［０］、［１］を入力して、複数の分割モデルを並行してシミュレーションすることで、シミュレーション対象モデルにおけるタイミング情報を算出することができ、かつ、シミュレーションの高速化を実現することができる。
【００１９】
このようなシミュレーションを実現するために、本実施の形態１に係るシミュレーション装置は、次に説明するような構成を備える。
図２は、本実施の形態１に係るシミュレーション装置１０を含むシミュレーションシステム１の概略構成を示すブロック図である。
【００２０】
シミュレーションシステム１は、シミュレーション装置１０、入力部２０、第１の命令セットシミュレータ３０、途中情報記録部４０、出力部５０などを備える。なお、これらの構成は、パーソナルコンピュータやサーバなどの電子計算機上で実現することができる。
【００２１】
入力部２０は、シミュレーション実行プログラムのメモリイメージ、パラメータ、ユーザからの指示などの入力データを入力して、これらを第１の命令セットシミュレータ３０に出力する。
第１の命令セットシミュレータ３０は、これらの入力データを入力して、機能シミュレーションを行い、メモリデータ、レジスタ値などシミュレーション結果を含む第１トレース情報をシミュレーション装置１０に出力する。
【００２２】
ここで、第１の命令セットシミュレータ３０は、Ｆａｓｔ−ＩＳＳであり、実チップの動作速度に近い、２００ＭＩＰＳ程度の高速動作を可能とするが、サイクル精度のシミュレーションを簡略化又は省略しているために、正確な性能やタイミングを評価することはできない。このため、第１トレース情報には、処理時間などの正確なサイクル数は含まれていないか、少ない。
【００２３】
途中情報記録部４０は、一般に、タイムマシーン、スナップショットなどとも呼ばれるもので、途中情報を記録し、シミュレーション装置１０に出力する。ここでは、途中情報には、Ｆａｓｔ‐ＩＳＳ３０のレジスタやメモリの状態の情報に加えて、当該状態を保存したり、回復(保存した時点から再開)したりするための情報も含まれる。
また、途中情報記録部４０は、第１トレース情報を途中情報として記録しても良い。これにより、後で説明するＦａｓｔ‐ＩＳＳ３０によるシミュレーションの再実行の少なくとも一部を省略することができるようになる。
【００２４】
シミュレーション装置１０は、第１トレース情報を入力して、シミュレーションのための入力データ（入力情報）を生成し、これを用いてサイクル精度のシミュレーションを行い、第２トレース情報、実行結果のメモリデータなどのシミュレーション結果を出力データとして出力部５０に出力する。第２トレース情報には、サイクル数などのタイミング情報が第１トレース情報よりも多く含まれる。
【００２５】
また、シミュレーション装置１０は、出力データの一部をシミュレーションの中間結果として、Ｆａｓｔ−ＩＳＳ３０にフィードバックする。
また、シミュレーション装置１０は、Ｆａｓｔ‐ＩＳＳ３０が出力する第１トレース情報に加えて、又は、第１トレース情報に代えて、途中情報を用いても良い。
シミュレーション装置１０の詳細については下で説明する。
出力部５０は、上記出力データをシミュレーションシステム１の外部に出力する。
【００２６】
ここで、シミュレーション装置１０は、同期解析部１１、分割部１２、複数の第２の命令セットシミュレータ１３〜１５、妥当性確認部１６、結合部１７などを備える。第２の命令セットシミュレータの数は３つに限られない。
【００２７】
同期解析部１１は、Ｆａｓｔ−ＩＳＳ３０などから第１トレース情報を入力して、シミュレーション対象モデルのプログラムフロー中の複数の処理の依存関係の解析を行い、並列処理が可能な複数の処理単位を検出し、シミュレーション対象モデルを当該複数の処理単位に分割するための分割点の位置情報を分割部１２に出力する。また、同期解析部１１は、入力した第１トレース情報をそのまま分割部１２、妥当性確認部１６に出力する。
【００２８】
また、同期解析部１１は、第２の命令セットシミュレータ１３〜１５の実行に必要となるメモリデータ、サイクル数、構成情報などのＣＡ−ＩＳＳ設定パラメータを別途入力して、分割部１２を介して第２の命令セットシミュレータ１３〜１５に出力する。
なお、シミュレーション装置１０は、同期解析部１１の同期解析機能に加えて、Ｆａｓｔ‐ＩＳＳ３０が同期解析機能を更に有していても良いし、シミュレーション装置１０が同期解析部１１を備えることに代えて、Ｆａｓｔ‐ＩＳＳ３０が同期解析機能を有していても良い。
【００２９】
分割部１２は、分割点の位置情報に基づいて、シミュレーション対象モデルを、相互に依存関係のない複数の分割モデルに分割し、第２の命令セットシミュレータ１３〜１５に出力する。各分割モデルは、シミュレーション対象モデルの少なくとも１つの処理単位を含む。
【００３０】
また、分割部１２は、第１トレース情報から各分割モデルの入力データを生成し、第２の命令セットシミュレータ１３〜１５に出力する。
第２の命令セットシミュレータ１３〜１５は、分割モデルの情報、入力データなどを用いて、並列でサイクル精度のシミュレーションを行い、実行サイクル数などのタイミングに関する情報を含む第２トレース情報を妥当性確認部１６に出力する。
【００３１】
ここで、第２の命令セットシミュレータ１３〜１５はそれぞれＣＡ−ＩＳＳであり、低速高精度のサイクル精度シミュレータである。数ＭＩＰＳ〜数ＫＩＰＳレベルの低速で動作し、性能やタイミングを評価することができる。
なお、ＣＡ−ＩＳＳ１３〜１５は、実行プログラムのメモリイメージ、シミュレーションのパラメータ、ユーザからの指示などの入力データを入力部２０から直接入力しても良い。
【００３２】
妥当性確認部１６は、Ｆａｓｔ‐ＩＳＳ３０から出力された第１トレース情報と、ＣＡ−ＩＳＳ１３〜１５から出力された第２トレース情報とが一致するか否かを判別し、不一致の有無及び不一致のタイミングの情報を結合部１７に出力する。また、妥当性確認部１６は、第１トレース情報と第２トレース情報との間に一致しない部分が見つかったときは、妥当性確認処理をいったん停止する。
【００３３】
結合部１７は、一致した部分の第２トレース情報、又は、一致しない部分までの第２トレース情報を時系列順に結合して、ＣＡ−ＩＳＳ１３〜１５のシミュレーション結果とする。また、結合部１７は、上記一致しなかった部分の第１トレース情報、第２トレース情報、割込みのタイミング情報などを中間結果として、Ｆａｓｔ‐ＩＳＳ３０にフィードバックする。
【００３４】
そして、シミュレーションシステム１は、Ｆａｓｔ‐ＩＳＳ３０が上記中間結果を入力して、Ｆａｓｔ‐ＩＳＳ３０、同期解析部１１、分割部１２、ＣＡ−ＩＳＳ１３〜１５、妥当性確認部１６、結合部１７が上記一致しない部分がなくなるまで処理を繰り返した後、結合部１７が結合した第２トレース情報をシミュレーション結果として出力部５０に出力する。
【００３５】
本実施の形態１に係るシミュレーション装置１０は、このような構成により、シミュレーションを高速化することができる
次に、本実施の形態１に係るシミュレーション装置１０の動作、すなわち、シミュレーション方法について、具体的に説明する。
【００３６】
図３は、本実施の形態１に係るシミュレーション方法の処理手順を示すフローチャートである。
シミュレーションシステム１が動作を開始すると、入力部２０が、実行プログラムのメモリイメージ、シミュレーションのパラメータ、ユーザからの指示などの入力データを入力する（ステップＳ１０）。
【００３７】
次に、Ｆａｓｔ−ＩＳＳ３０が、シミュレーション対象モデルについて、入力データを用いて高速低精度の機能シミュレーションを行い、第１トレース情報を算出する（ステップＳ２０）。この機能シミュレーションは従来技術と同様のものであって良い。また、本実施の形態１に係るシミュレーション方法では、ステップＳ１０、Ｓ２０は必須の処理ではないが、ステップＳ１０、Ｓ２０を処理手順の中に含めて考えても良い。
【００３８】
次に、同期解析部１１が、シミュレーション対象モデルの複数の処理の依存関係の解析を行い、シミュレーション対象モデルを当該複数の処理単位に分割するための分割点の位置情報を算出する（ステップＳ３０）。
図４は、本実施の形態１に係る同期解析処理の処理手順を示すフローチャートである。ステップＳ３０の同期解析処理は、ステップＳ３１０〜ステップＳ３５０で構成される（ステップＳ３０の後にステップＳ３１０〜ステップＳ３５０が続くのではない）。
【００３９】
同期解析部１１は、第１トレース情報を入力すると（ステップＳ３１０）、第１トレース情報に含まれるリソースアクセス情報、命令情報、例えば、メモリのアドレス値、レジスタ番号などを解析し（ステップＳ３２０）、シミュレーション対象モデルのプログラムを実行したときに存在する依存関係（同じリソースへのアクセス、処理の開始、中断、終了など）を抽出する（ステップＳ３３０）。このとき、ある２つの区間（処理単位）に同じリソースへのアクセスが含まれていなければ、これらの処理単位は同時実行可能である。
【００４０】
図５は、本実施の形態１に係る同期解析処理を説明するための図である。
同期解析部１１は、所定のシミュレーション期間、例えば、１秒間に、処理単位の候補であるプロセス１とプロセス２とがメモリ内の同じアドレスにアクセスしているか否かを監視する。例えば、期間αにおいて、プロセス１とプロセス２とが同じアドレスＡにアクセスしているようであれば、当該期間αについては、プロセス１とプロセス２とを別の処理単位とすることはできない。
【００４１】
一方、期間βにおいて、プロセス１がアドレスＡにアクセスし、プロセス２がアドレスＢにアクセスし、プロセス１とプロセス２とが同じアドレスにアクセスしていないようであれば、当該期間βについては、プロセス１とプロセス２とを別の処理単位とすることができる。プロセス１、２の他に、プロセス３、４、５、・・・などがあっても同様に考えることができる。
【００４２】
また、同期解析部１１は、処理の開始点、中断点、終了点も同様に処理単位の開始点、終了点として利用することができる。
同期解析部１１は、これらの複数の解析結果から、処理を同時実行することができる複数の処理単位に分割するための分割点を生成し（ステップＳ３４０）、分割点の位置情報や複数の処理単位の依存関係情報などを分割部１２に出力する（ステップＳ３５０）。
【００４３】
なお、同期解析部１１は、所定の処理、期間などについて、分割することによりオーバーヘッドが所定値よりも大きくなると判断した場合に、当該処理、期間などについて、分割しないと判断することもできる。
【００４４】
また、同期解析部１１は、ビルドツール、コンパイラ、ＯＳ，ユーザ情報などから同期解析のヒント情報を追加で入力してもよい。
例えば、同期解析部１１は、ソースコードの記述から他のプロセッサエレメントの処理に干渉する処理をヒント情報として抽出し、分割区間の解析に利用する。他のプロセッサエレメントへの処理の依頼、共有リソースの排他制御には、一般に、特定の関数や命令を利用している。よく知られる例としてはPthreadsのＡＰＩの"pthread_create"、"pthread_mutex_lock"といった関数がある。
【００４５】
これらの関数は新規の処理の開始や他のプロセッサエレメントの処理に干渉する機能であるので、分割区間の始点又は終点として利用することで、その区間内で他実行区間との干渉を少なくすることができる。これにより、機能シミュレーションの結果とサイクル精度シミュレーションの結果とに違いを生じにくくして、不一致が発生したときのシミュレーションの再実行を減らし、シミュレーション速度を向上させることができる。
他にも、組み込み系特有の処理である割り込みや例外のハンドラ、ユーザ指定の特定関数も同様に新たな処理の開始のトリガであるのでヒント情報となり得るし、ＯＳやＣＰＵなどのアイドル、スタンバイといった状態情報もヒント情報となり得る。
【００４６】
このとき、同期解析部１１は、同期解析に時間がかかることを避けるために、ヒント情報による解析のみを実行しても良い。そして、当初想定していたシミュレーション処理内容からメモリアクセス、割込みなどの実行順が変わったとき、すなわち、プログラムフローが変わったときに、後で説明するように、妥当性確認処理において、シミュレーションのやり直しを選択するという、シミュレーションを再実行する確率の上昇をある程度許容しながら解析による負荷を下げる別モードを有していても良い。
【００４７】
また、組み込み系などのシミュレーションには動作し続けるものもあるので、同期解析部１１は、Ｆａｓｔ‐ＩＳＳ３０の全ての処理が完了することを待つのではなく、Ｆａｓｔ‐ＩＳＳ３０の処理がある程度、例えば、複数命令分の処理が進んだときに、処理を開始しても良い。すなわち、Ｆａｓｔ‐ＩＳＳ３０によるシミュレーションと、同期解析部１１以降の処理、すなわち、シミュレーション装置１０によるシミュレーションとが、異なる処理を対象にしつつ、同時に進行しても良い。
【００４８】
次に、分割部１２が、分割点の位置情報を用いて、シミュレーション対象モデルを複数の分割モデルに分割し、また、第１トレース情報とシミュレーション対象モデルのプログラムコードとに基づいて、各分割モデルの入力データ、すなわち、レジスタ、メモリなどの入力値となる実行情報を生成する（ステップＳ４０）。
【００４９】
このとき、分割部１２は、ユーザ指定、シミュレータの実行速度、再実行の頻度などにより、各処理単位の最大長さを適応的に調整しても良い。処理単位が長いほど付随する開始/終了のペナルティが減ってシミュレーションを高速化することができるが、第１トレース情報と第２トレース情報とに差異が生じた際の再実行によるペナルティが増加する。
また、分割部１２は、各分割モデルの出力データに対応する情報を第１トレース情報から生成しても良い。当該情報は、後で説明する妥当性確認処理で用いる。
【００５０】
次に、並列の関係にあるＣＡ‐ＩＳＳ１３〜１５が、それぞれの分割モデルに、設定情報、上記実行情報、必要に応じて第１トレース情報を入力してシミュレーションを実行し、第２トレース情報をそれぞれ生成する（ステップＳ５０）。第２トレース情報には、例えば、何がメモリにどのような値をいつ書き込んだかなどの命令の実行ログも含まれる。
【００５１】
ここで、ＣＡ−ＩＳＳ１３〜１５は、従来技術と同様の低速高精度のサイクル精度シミュレーションを行う。すなわち、シミュレーション自体は、既存のＣＡ‐ＩＳＳに個別に入力を与えたものと変わりがない。また、同時実行数はシミュレータの実行リソースに依存するが、ユーザが指定することも可能である。ＣＡ−ＩＳＳ１３〜１５の実行プログラムは、Ｆａｓｔ‐ＩＳＳ３０で用いた実行プログラムをＦａｓｔ‐ＩＳＳ３０からそのまま入力しても良いし、各分割モデルで必要とする部分の実行プログラムをそれぞれメモリなどから入力しても良い。
【００５２】
次に、妥当性確認部１６が、ＣＡ‐ＩＳＳ１３〜１５によるシミュレーション結果である第２トレース情報と、第１トレース情報（又は、分割部１２で第１トレース情報から生成した、各分割モデルの出力データに対応する情報）とが一致するか否かを確認し、不一致の有無及び不一致のタイミングの情報を生成する。（ステップＳ６０）。
【００５３】
図６は、本実施の形態１に係る妥当性確認処理の処理手順を示すフローチャートである。ステップＳ６０の妥当性確認処理は、ステップＳ６１０〜ステップＳ６７０で構成される（ステップＳ６０の後にステップＳ６１０〜ステップＳ６７０が続くのではない）。
【００５４】
妥当性確認部１６は、第１トレース情報、第２トレース情報を入力すると（ステップＳ６１０、Ｓ６２０）、第２トレース情報の内のタイミング情報（サイクル数）を除いたリソースの値を、第１トレース情報のリソースの値と比較する（ステップＳ６３０）。このとき、妥当性確認部１６は、例えば、ＣＡ‐ＩＳＳ１３〜１５でのサイクル精度を加味した実行順やイベントのタイミングと、Ｆａｓｔ‐ＩＳＳ３０での実行順やイベントのタイミングとの異同を検出する。異なる部分については、Ｆａｓｔ‐ＩＳＳ３０により生成された出力データ（ＣＡ‐ＩＳＳ１３〜１５への入力データ）が、ＣＡ‐ＩＳＳ１３〜１５により算出された出力データに影響を与えていることもありえる。
【００５５】
そこで、妥当性確認部１６は、第２トレース情報と第１トレース情報とに不一致部分があるか否かを判別する（ステップＳ６４０）。このとき、不一致部分がなければ（ステップＳ６４０のＮＯ）、全ての第２トレース情報を第１トレース情報と比較したか否かを判別し（ステップＳ６５０）、全ての第２トレース情報を比較していないとき（ステップＳ６５０のＮＯ）はステップＳ６１０に戻り、全ての第２トレース情報を比較したとき（ステップＳ６５０のＹＥＳ）は、全ての第２トレース情報を結合部１７に出力して、処理を終了する（ステップＳ６６０）。
【００５６】
また、妥当性確認部１６は、不一致部分があったとき（ステップＳ６４０のＹＥＳ）は、不一致のタイミングの情報などを結合部１７に出力して処理を停止する（ステップＳ６７０）。
【００５７】
次に、結合部１７が、上記一致する部分のサイクル精度シミュレーションの結果を時系列順に結合する（ステップＳ７０）。妥当性確認処理（ステップＳ６０）で不一致部分があったときも、不一致部分の前までの一致する部分のサイクル精度シミュレーションの結果を時系列順に結合する。
【００５８】
そして、結合部１７は、妥当性確認処理（ステップＳ６０）で不一致部分があったか否かを判別し（ステップＳ８０）、不一致部分があったとき（ステップＳ８０のＹＥＳ）は、不一致部分以降のシミュレーションをＦａｓｔ‐ＩＳＳ３０及びＣＡ‐ＩＳＳ１３〜１５で再実行するために、割込みのタイミング情報、不一致タイミングの実行ログなどをＦａｓｔ‐ＩＳＳ３０に出力する。
そして、本実施の形態１に係るシミュレーション方法は、不一致部分がなくなるように、ステップＳ２０〜Ｓ８０までの処理を繰り返す。このとき、上記した途中情報を用いて、不一致部分以降の処理を再開しても良い。
【００５９】
一方、結合部１７は、妥当性確認処理（ステップＳ６０）で不一致部分がなかったとき（ステップＳ８０のＮＯ）は、ステップＳ７０で結合したサイクル数情報などのサイクル精度シミュレーションの結果を出力部５０に出力し、出力部５０が結果を外部に出力して（ステップＳ９０）、シミュレーションを終了する。
もちろん、本実施の形態１に係るシミュレーション装置１０でシミュレーションした結果は、１つのＣＡ‐ＩＳＳでシミュレーションした結果と同じものになる。
【００６０】
なお、本実施の形態１に係るＦａｓｔ‐ＩＳＳ３０のシミュレーションではタイミングが不正確なので、ＣＡ‐ＩＳＳ１３〜１５によるシミュレーション実行時に外部割込み発生時まで処理を進めて、その時点からＦａｓｔ‐ＩＳＳ３０でシミュレーションを再実行しても良い。シミュレータ内部のモデルなどによる内部割込みが発生した場合も基本的に同様で良いが、このときは、外部から指定せずに、当該内部のモデルなどを利用してシミュレーションを行えば良い。
【００６１】
また、本実施の形態１に係るシミュレーション装置１０において、当初のシミュレーション対象モデルにない割込みが新たに追加されて処理の内容が変わることが分かったときは、当該変更点から改めてシミュレーションを実行し直すように設計されていても良い。
【００６２】
また、本実施の形態１に係るシミュレーション装置１０では、妥当性確認部１６が第１トレース情報と第２トレース情報とを比較して、第２トレース情報の妥当性を検証したが、シミュレーション対象の処理内容について分割区間に依存関係がなく、処理内容に影響する動作、例えば、タイマー割込みなどの割込みがないようなものであるときは、妥当性確認部１６による妥当性確認処理を省略して、結合部１７が第２トレース情報を結合してシミュレーション結果を作成するようにしても良い。
【００６３】
また、上記したように、本実施の形態１に係るシミュレーションシステムでは、Ｆａｓｔ‐ＩＳＳ３０は必須の構成ではない。
図７は、本実施の形態１に係るシミュレーションシステム２の概略構成を示す図である。シミュレーションシステム２は、シミュレーションシステム１の変形例に相当する。シミュレーションシステム２のシミュレーション装置１０、入力部２０、Ｆａｓｔ‐ＩＳＳ３０、途中情報記録部４０、出力部５０は、シミュレーションシステム１のものと同様で良く、ここでは、詳細な説明は省略する。
【００６４】
シミュレーションシステム２は、更に、ＲＴＬ（Register Transfer Level）シミュレータ６１と、シミュレーション対象モデルの元となった（シミュレーション対象モデルに対応する）実機（実チップ）６２と、ＦＰＧＡ（Field Programmable Gate Array：フィールドプログラマブルゲートアレイ）６３とを備えていて、Ｆａｓｔ‐ＩＳＳ３０と、ＲＴＬシミュレータ６１と、実機６２と、ＦＰＧＡ６３とがスイッチで切り換え可能に構成されている。これらは、第１トレース情報を生成する点で共通しており、ユーザの利用環境、過去の利用実績などに応じて使い分けられる。
【００６５】
また、実チップ６２、ＦＰＧＡ６３を用いるときは、途中情報記録部４０からスキャンチェーンにより途中情報を入力して、シミュレーションを特定の状態とすることもできる。
シミュレーションシステム２は、このような構成により、シミュレーションシステム１と同様に、高速なシミュレーションを実現することができる。
【００６６】
また、本実施の形態１に係るシミュレーション装置１０をモデルベース開発のツールとして利用する場合には、ＣＡ‐ＩＳＳ１３〜１５と、シミュレーション装置１０の外の別ツールとの間の通信が必要となることがある。このとき、シミュレーション装置１０は、ＭＢＤツールの入力として、割込みイベントや送受信データのタイミングや種類などをＧＵＩ、リスト、他連携ツールから入力可能にする入力インターフェイスを有することが好ましい。
【００６７】
ここで、モデルベース開発シミュレーションシステムの全体構成を簡単に説明する。
図８は、本実施の形態１に係るモデルベース開発シミュレーションシステム１００の概略構成を示すブロック図である。
【００６８】
シミュレーションシステム１００は、ＭＩＬＳ（Model In Loop Simulator）環境では、モデリングツール１１０、ＣＰＵモデル１２０、統合開発環境部１３０などを備える。シミュレーションシステム１００は、例えば、パーソナルコンピュータで構成することができる。また、シミュレーションシステム１００は、ＨＩＬＳ（Hardware In Loop Simulator）環境では、更に外部機器１５０と接続されている。
【００６９】
モデリングツール１１０は、例えば、米ＭａｔｈＷｏｒｋｓ社開発の数値計算用ソフトウェアＭＡＴＬＡＢ（登録商標）であって、シミュレーション対象モデル１１１、１１２、１１３などを有する。ここでは、シミュレーション対象モデル１１１、１１２、１１３は、次に説明するＣＰＵモデル１２０以外の、システムを構築するためのモデルであって、例えば、自動車のＥＣＵ、車両などのモデルである。
【００７０】
なお、シミュレーションシステム１００は、モデリングの内容によっては、複数のモデリングツールを組み合わせて用いても良い。
ＣＰＵモデル１２０は、本実施の形態１に係るシミュレーションシステム１、２である。シミュレーションシステム１、２には、もちろん、シミュレーション装置１０が含まれる。ＣＰＵモデル１２０は、モデリングツール１１０に組み込まれることもある。
【００７１】
統合開発環境部１３０は、例えば、デバッガ、ＧＵＩ、コンパイラなどを含み、ＣＰＵのコントロール、デバックを行う。
外部機器１５０は、例えば、ハードウェア、測定器などであって、モデルと実ハードウェアとの連携シミュレーションに用いられる。
【００７２】
このように、本実施の形態１に係るシミュレーション装置１０は、例えば、モデルベース開発シミュレーションシステム１００の中で用いられて、モデルベース開発のシミュレーションを高速化することができる。
【００７３】
以上、説明したように、本実施の形態１に係るシミュレーション装置１０は、第１トレース情報を生成する第１の命令セットシミュレータ３０と、第１トレース情報を用いてシミュレーション対象モデル内で相互に依存関係がなく並列処理可能な処理単位を検出する解析部１１と、シミュレーション対象モデルから複数の処理単位を生成するとともに、第１トレース情報から複数の処理単位の入力情報を生成する分割部１２と、入力情報を用いて複数の処理単位について並列でシミュレーションを行い、第１トレース情報よりもタイミング情報が多い第２トレース情報を生成する複数のサイクル精度の第２の命令セットシミュレータ１３〜１５と、第１トレース情報と第２トレース情報とを比較して一致部分及び不一致部分を検出する確認部１６と、一致部分に対応する、第２トレース情報を時系列順に結合する結合部１７とを備えるものである。
【００７４】
また、本実施の形態１に係るシミュレーション装置１０は、第１の命令セットシミュレータ３０の代わりに設けられて、第１トレース情報を生成する第１トレース情報生成部と、第１トレース情報を記録する記録部４０とを更に備え、第１トレース情報生成部はシミュレーション対象モデルに対応する実機６２又はＦＰＧＡ６３であり、実機６２又はＦＰＧＡ６３は、途中情報記録部４０からスキャンチェーンを介して第１トレース情報を入力することが好ましい。
【００７５】
また、本実施の形態１に係るシミュレーション装置１０は、確認部１６は、不一致部分を検出したときに、一致部分及び不一致部分を検出する処理を停止し、第１の命令セットシミュレータ３０又は第１トレース情報生成部は、第２トレース情報に基づいて、不一致部分以降の第１トレース情報を改めて生成することが好ましい。
【００７６】
また、本実施の形態１に係るシミュレーション装置１０は、解析部１１は、第１トレース情報に加えて、又は、第１トレース情報に代えて、シミュレーション対象モデルのソースコードを用いて、並列処理可能な処理単位を検出することが好ましい。
また、本実施の形態１に係るシミュレーション装置１０は、結合部１７は、第１トレース情報と第２トレース情報とが一致したときの、時系列順に結合した第２トレース情報をシミュレーション結果として出力することが好ましい。
【００７７】
また、本実施の形態１に係るシミュレーションシステム１００は、シミュレーション装置１０と、シミュレーション対象モデルを作成するモデリングツール１１０と、シミュレーション装置１０のコントロール又はデバッグを行う統合開発環境部１３０とを備えるものである。
【００７８】
また、本実施の形態１に係るシミュレーション方法は、第１トレース情報を生成する第１のシミュレーションステップＳ２０と、第１トレース情報を用いてシミュレーション対象モデル内で相互に依存関係がなく並列処理可能な処理単位を検出する解析ステップＳ３０と、シミュレーション対象モデルから複数の処理単位を生成するとともに、第１トレース情報から複数の処理単位の入力情報を生成する分割ステップＳ４０と、入力情報を用いて複数の処理単位について並列でシミュレーションを行い、第２トレース情報を生成する第２のシミュレーションステップＳ５０と、第１トレース情報と第２トレース情報とを比較して一致部分及び不一致部分を検出する確認ステップＳ６０と、一致部分に対応する、第２トレース情報を時系列順に結合する結合ステップＳ７０とを有するものである。
【００７９】
また、本実施の形態１に係るシミュレーション方法では、確認ステップＳ６０は、不一致部分を検出したときに処理を停止し、不一致部分以降の処理単位について、第２トレース情報を用いて、第１のシミュレーションステップＳ２０、解析ステップＳ３０、分割ステップＳ４０、第２のシミュレーションステップＳ５０、確認ステップＳ６０、結合ステップＳ７０を再実行することが好ましい。
【００８０】
（実施の形態２）
実施の形態１に係るシミュレーション装置１０は、機能シミュレーションの結果を利用してサイクル精度シミュレーションを並列で行い、シミュレーションを高速化するものであったが、本実施の形態２に係るシミュレーション装置は、機能シミュレーションの結果で事足りる処理単位、及び、機能シミュレーションが実行されていない処理単位について、サイクル精度シミュレーションを省略して更にシミュレーションを高速化するものである。
【００８１】
図９は、本実施の形態２に係るシミュレーション装置７０を含むシミュレーションシステム３の概略構成を示す図である。
シミュレーションシステム３は、シミュレーションシステム１と同様の入力部２０、
Ｆａｓｔ‐ＩＳＳ３０、出力部５０などに加えて、シミュレーション装置７０、第３の命令セットシミュレータ（ＣＡ‐ＩＳＳ）８０、スイッチＳＷ３、ＳＷ４を備えている。シミュレーションシステム３は、更に、途中情報記録部を備えていても良い。
【００８２】
シミュレーション装置７０は、シミュレーション装置１０と同様の同期解析部１１、分割部１２、ＣＡ‐ＩＳＳ１３〜１５、妥当性確認部１６、結合部１７などに加えて、分割部１２の出力データを出力部５０に直接出力するためのスイッチＳＷ１、ＳＷ２を備えている。
【００８３】
このような構成において、同期解析部１１は、第１トレース情報を解析した結果、機能シミュレーションの結果で十分である、サイクル精度シミュレーションは不要であると判断したシミュレーション対象モデルの処理単位については、第１トレース情報を分割部１２、妥当性確認部１６を介して結合部１７にそのまま入力する。当該処理単位については、サイクル精度のシミュレーションを行っていないので、妥当性確認処理は不要であり、結合部１７で第２トレース情報と結合して、シミュレーション結果とすることができる。
【００８４】
また、同期解析部１１は、第１トレース情報中の使用されないリソース、依存関係の有無などの情報を解析した結果、不要な機能であるために機能シミュレーションが実行されていないと判断した処理単位については、スイッチＳＷ１、ＳＷ２を切り換えて、サイクル精度シミュレーション、妥当性確認処理、結合処理をそれぞれ省略できるようにする。
【００８５】
なお、同期解析部１１がこれら処理を省略可能と判断するために、第１トレース情報は、利用されていないリソースの情報、例えば、利用されていない分岐予測、命令キャッシュなどの情報を追加で含んでいても良い。
【００８６】
以上、説明したように、本実施の形態２に係るシミュレーション装置７０は、解析部１１は、更に、第２の命令セットシミュレータ１３〜１５によるシミュレーションが不要な処理単位を検出し、結合部１７は、当該処理単位の第１トレース情報と、第２トレース情報とを時系列順に結合することが好ましい。
【００８７】
また、本実施の形態２に係るシミュレーション装置７０は、解析部１１は、更に、第２の命令セットシミュレータ１３〜１５によるシミュレーションが不要な処理単位を検出し、第２の命令セットシミュレータ１３〜１５、確認部１６、結合部１７は、当該処理単位について処理を行わないことが好ましい。
【００８８】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【００８９】
１、２、３、１００    シミュレーションシステム
１０、７０    シミュレーション装置
１１    同期解析部（解析部）
１２    分割部
１３、１４、１５    第２の命令セットシミュレータ（ＣＡ‐ＩＳＳ）
１６    妥当性確認部（確認部）
１７    結合部
２０    入力部
３０    第１の命令セットシミュレータ（Ｆａｓｔ‐ＩＳＳ）
４０    途中情報記録部（記録部）
５０    出力部
６１    ＲＴＬシミュレータ（第１トレース情報生成部）
６２    実機（実チップ）（第１トレース情報生成部）
６３    ＦＰＧＡ（第１トレース情報生成部）
１１０    モデリングツール
１１１、１１２、１１３    シミュレーション対象モデル
１２０    ＣＰＵモデル
１３０    統合開発環境部
１５０    外部機器
【図１】
2019091144.tif 000003
【図２】
2019091144.tif 000004
【図３】
2019091144.tif 000005
【図４】
2019091144.tif 000006
【図５】
2019091144.tif 000007
【図６】
2019091144.tif 000008
【図７】
2019091144.tif 000009
【図８】
2019091144.tif 000010
【図９】
2019091144.tif 000011