(57)【要約】【課題】ＳＷを組み込んだＣＰＵ模擬ブロックとＨＷモデルとを並列動作させることにより高速なＨＷ／ＳＷ協調シミュレーションを実現する。【解決手段】シミュレーション装置は、インストラクション・セット・シミュレータを使わずに、プログラムのシステムレベル設計言語に対応してソフトウェア１とハードウェア２，３とにより協調シミュレーションを可能とするシミュレータ１０と、予め定められたシーケンスに従って、シミュレータ１０に対して協調シミュレーションを可能とするスケジューラ６と、ソフトウェア１からハードウェア２，３へのアクセス関数内にシミュレーション実行権を開放する記述を組み込むことにより、ハードウェア２，３とソフトウェア１間の並列実行を実現するライトアクセス関数７とを備えたものである。【選択図】      図１
2005018623.tif 000002
【特許請求の範囲】
【請求項１】
ターゲットＣＰＵ上で動作する組込みソフトウェアとその制御対象であるハードウェア・デバイスの協調動作を模擬するシミュレーション装置のうち、上記組込みソフトウェアと上記ハードウェア・デバイス・モデルを共に開発用コンピュータ装置上のプログラムに変換して実行するシミュレーション装置において、
上記ターゲットＣＰＵの命令レベルのシミュレータであるインストラクション・セット・シミュレータを使わずに、上記プログラムの入力言語であるシステムレベル設計言語で表現された上記ハードウェア・デバイス・モデルと、上記組込みソフトウェアにより協調シミュレーションを可能とするシミュレーション手段と、
シミュレータ内のタスクとして実装される上記ハードウェア・デバイス・モデルの評価タイミングを、優先度設定が可能なラウンドロビン方式でスケジューリングする、シミュレーションスケジュール手段と、
上記組込みソフトウェアから上記ハードウェア・デバイス・モデルへのアクセス関数内にシミュレーション実行権を開放する記述を組み込むことにより、上記ハードウェア・デバイス・モデルと上記組込みソフトウェアの並列実行を上記ハードウェア・デバイス・モデルへのアクセス関数を用いて実現する実行権開放手段と
を備えたことを特徴とするシミュレーション装置。
【請求項２】
請求項１記載のシミュレーション装置において、
上記組込みソフトウェアの割込み処理において、割込み処理期間の連続性を確保するために、上記シミュレーション手段のタスク優先度を制御してこれを実現することを特徴とするシミュレーション装置。
【請求項３】
請求項１記載のシミュレーション装置において、
上記組込みソフトウェアの変数へのポーリングに対して、値の参照とシミュレーション実行権を開放する記述を組み合わせた関数を実装し、上記組込みソフトウェアのポーリング動作を模擬させることを特徴とするシミュレーション装置。
【請求項４】
請求項１記載のミュレーション装置において、
上記ターゲットＣＰＵ上で動作する組込みソフトウェアを複数設けた場合に、上記複数の組込みソフトウェアと上記ハードウェア・デバイス・モデルの協調シミュレーションを行うことを特徴とするシミュレーション装置。
【請求項５】
ターゲットＣＰＵ上で動作する組込みソフトウェアとその制御対象であるハードウェア・デバイスの協調動作を模擬するシミュレーション装置のうち、上記組込みソフトウェアと上記ハードウェア・デバイス・モデルを共に開発用コンピュータ装置上のプログラムに変換して実行するシミュレーション装置におけるシミュレーション方法において、
上記ターゲットＣＰＵの命令レベルのシミュレータであるインストラクション・セット・シミュレータを使わずに、上記プログラムの入力言語であるシステムレベル設計言語で表現された上記ハードウェア・デバイス・モデルと、上記組込みソフトウェアにより協調シミュレーションを可能とするシミュレーション手段と、
シミュレータ内のタスクとして実装される上記ハードウェア・デバイス・モデルの評価タイミングを、優先度設定が可能なラウンドロビン方式でスケジューリングする、シミュレーションスケジュールステップと、
上記組込みソフトウェアから上記ハードウェア・デバイス・モデルへのアクセス関数内にシミュレーション実行権を開放する記述を組み込むことにより、上記ハードウェア・デバイス・モデルと上記組込みソフトウェアの並列実行を上記ハードウェア・デバイス・モデルへのアクセス関数を用いて実現する実行権開放ステップと
を備えたことを特徴とするシミュレーション方法。
【請求項６】
請求項５記載のシミュレーション方法において、
上記組込みソフトウェアの割込み処理において、割込み処理期間の連続性を確保するために、上記シミュレータのタスク優先度を制御してこれを実現することを特徴とするシミュレーション方法。
【請求項７】
請求項５記載のシミュレーション方法において、
上記組込みソフトウェアの変数へのポーリングに対して、値の参照とシミュレーション実行権を開放する記述を組み合わせた関数を実装し、上記組込みソフトウェアのポーリング動作を模擬させることを特徴とするシミュレーション方法。
【請求項８】
請求項５記載のシミュレーション方法において、
上記ターゲットＣＰＵ上で動作する組込みソフトウェアを複数設けた場合に、上記複数の組込みソフトウェアと上記ハードウェア・デバイス・モデルの協調シミュレーションを行うことを特徴とするシミュレーション方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えば、ターゲットＣＰＵ上で動作する組込みソフトウェアとその制御対象であるハードウェア・デバイスの協調動作を模擬するシミュレーション装置に関するものである。
【０００２】
【従来の技術】
プロセッサを内蔵したシステム・オン・チップ（ＳｏＣ）開発では、ハードウェア（ＨＷ）をＣ言語あるいはシステムレベル設計言語プログラム等で模擬したＨＷモデルとターゲットＣＰＵ上で動作するソフトウェア（ＳＷ）を、当該システムレベル設計言語に対応したシミュレータを利用して開発マシン上で並列動作させるシミュレーション装置が用いられている。
【０００３】
以下に、従来技術と問題点について図１３を参照して説明する。
図１３（ａ）は、ターゲットＣＰＵ部分に相当するモデルとして、命令レベルのシミュレータであるＩＳＳ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｓｉｍｕｌａｔｏｒ）１３３を利用してＨＷモデル１３１とＳＷ１３２との協調シミュレーションを行う際のシミュレーション環境の概念図である。
【０００４】
また、図１３の（ｂ）は、高速化を目的としてＩＳＳを使わずにＨＷモデル１３５とＣＰＵ模擬ブロック１３６との協調シミュレーションを行う際のシミュレーション環境の概念図である。
【０００５】
図１４は、図１３（ｂ）のシミュレーション環境の構成図である。ＣＰＵ模擬ブロック１４１およびＨＷモデル１４２、１４３はシミュレータ上のタスクとして実装される。ＣＰＵ模擬ブロック１４１にはＳＷ１３２が登録されている。図１５に検証環境の全体シミュレーションのシーケンス図を示す。
【０００６】
図１５において、Ｔ９１時点でスケジューラ１４６からＨＷモデル１４３に動作の指令があると、Ｔ９１〜Ｔ９２時点までＨＷモデル１４３は所定の動作を実行する。Ｔ９２時点でＨＷモデル１４３からスケジューラ１４６に動作の終了が伝えられると、Ｔ９３時点でスケジューラ１４６から１４１のＣＰＵ模擬ブロックに動作の指令があると、Ｔ９３〜Ｔ９４時点までＣＰＵ模擬ブロックは連続登録されたＳＷを実行する。
【０００７】
ここで、１５１に示すように、スケジューラ１４６から１４１のＣＰＵ模擬ブロックに割り当てたタスクが実行権を独占するため、１４１のＣＰＵ模擬ブロックとＨＷモデル１４３，１４２とを並列動作させることができなくなり、結果としてＨＷモデル１４３，１４２とＳＷ１３２とを並列動作させることができない。
【０００８】
特許文献１には、高い信頼性の論理検証を行うことができるハードウェアシミュレーション装置を提供することを目的として、ハードウェアを制御する論理検証用の命令を記述したテストプログラムをコンパイルして生成されたオブジェクトプログラムに基づいて、ハードウェア記述言語を用いて記述された前記ハードウェアのシミュレーションモデルを動作させて論理検証を行うときに、前記シミュレーションモデルにイベントを発生させるイベント発生装置であって、前記テストプログラム中に記述され、前記オブジェクトプログラムには影響を与えない形式でイベントの発生を指示するイベント発生キーワードを用いて、コンパイル時に、イベント情報ファイルを生成するコンパイラと、前記イベント情報ファイルに基づいて、手続き型の高級プログラミング言語を用いて記述されたイベントに応じたユーザタスクを生成し、当該ユーザタスクを登録するユーザタスク生成手段と、前記ユーザタスク生成手段と前記シミュレーションモデルとの間のインタフェースと、前記オブジェクトプログラムに応じた前記シミュレーションモデルの動作を監視し、実行中の命令を特定する動作監視手段と、前記動作監視手段の監視結果に基づいて、前記テストプログラムに記述されたイベントが同期すべき命令が実行されるときに、当該イベントに対応するユーザタスクを前記インタフェースを介して前記ユーザタスク生成手段から前記シミュレーションモデルに読み出して当該イベントをスケジュールするスケジュール手段とを有するイベント発生装置が開示されている。
【０００９】
【特許文献１】
特開平１１−１１０４２９号公報
【００１０】
【発明が解決しようとする課題】
しかし、上述した従来の図１３（ａ）に示すＩＳＳを利用したミュレーション環境は、スケジューラ１３４とＩＳＳ１３３間で実行権の受け渡しが頻繁に発生するため、シミュレーション速度が遅く、大規模ＳｏＣやマルチＣＰＵシステムへの適用、また、上記をＳＷ開発環境として利用する際に問題となっていたという不都合があった。
【００１１】
また、図１３（ｂ）に示すＩＳＳを利用しないシミュレーション環境は、この場合、ＨＷモデル１３５の機能をシミュレータ上のタスクに実装した場合、ターゲットＣＰＵのＳＷ１３６にはシミュレータのタスク実行権を開放する記述がないために、ＨＷモデル１３５と並列動作させることができないという不都合があった。
【００１２】
また、ＨＷモデル１４２，１４３の機能をタスクとして実装せず、関数として実装した場合には、ＨＷのステートをＳＷ側より観測することができないため、検証環境として十分な機能を持たせられない。さらに、ＳＷのポーリング処理、割込み処理も適切に再現できないという不都合があった。
【００１３】
また、特許文献１では、ハードウェア記述言語を用いて記述されたハードウェアのシミュレーションモデルを動作させて論理検証を行うときに、イベント発生キーワードを用いて、コンパイラによりコンパイル時にイベント情報ファイルを生成することにより、テストプログラム中の命令が実行されるタイミングに同期してイベントがスケジュールされるものであり、本願発明のように、１４１のＣＰＵ模擬ブロックとＨＷモデル１４３，１４２とを並列動作させるようにするものではない。
【００１４】
そこで、本発明は、かかる点に鑑みてなされたものであり、本発明は上記の問題を解決し、ＳＷがタスクに登録されたＣＰＵ模擬ブロックとＨＷモデルとを並列動作させるようにすることにより高速なＨＷ／ＳＷ協調シミュレーションを実現するシミュレーション装置を提供することを課題とする。
【００１５】
【課題を解決するための手段】
本発明のシミュレーション装置は、ターゲットＣＰＵの命令レベルのシミュレータであるインストラクション・セット・シミュレータを使わずに、プログラムのシステムレベル設計言語で表現されたハードウェア・デバイス・モデルと組込みソフトウェアとにより協調シミュレーションを可能とするシミュレーション手段と、優先度設定が可能なラウンドロビン方式でスケジューリングするスケジュール手段と、組込みソフトウェアからハードウェア・デバイス・モデルへのアクセス関数内にシミュレーション実行権を開放する記述を組み込むことにより、ハードウェア・デバイス・モデルと上記組込みソフトウェア間の並列実行をハードウェア・デバイス・モデルへのアクセス関数を用いて実現する実行権開放手段とを備えたものである。
【００１６】
従って本発明によれば、以下の作用をする。
システムレベル設計言語とそれに対応したシミュレーション手段を利用して、ターゲットＣＰＵのプログラムとハードウェア・デバイス・モデルで協調シミュレーションを行う場合において、組込みソフトウェアとハードウェア・デバイス・モデルの並列実行を可能にするため、組込みソフトウェアからハードウェア・デバイス・モデルへのアクセス関数に着目し、この関数内にシミュレーションの実行権を開放する記述を埋め込むことで、組込みソフトウェアはシミュレーション実行権を開放する。
【００１７】
また、割込み処理において、割込み処理期間の連続性を確保するために、シミュレーション手段のタスク優先度を制御することで、割込みを利用するシステムの検証環境を実現する。
【００１８】
また、組込みソフトウェアの変数へのポーリングに対して、値の参照とシミュレーションの実行権を開放する記述を組み合わせた関数を実装し、検証対象の組込みソフトウェア内で変数のポーリングを行っている場合に組込みソフトウェアのポーリング動作を模擬する。
【００１９】
また、組込みソフトウェアを実行するブロックを複数用意することで、マルチＣＰＵシステムにおけるＨＷ／ＳＷ協調シミュレーション環境を実現する。
【００２０】
これにより、インストラクション・セット・シミュレータを使わないハードウェア・デバイス・モデルと組込みソフトウェアの協調シミュレーションの手法を確立し、シミュレーションの高速化を実現する。また、上述したことを拡張しマルチＣＰＵシステムにおけるハードウェア・デバイス・モデルと組込みソフトウェアの協調シミュレーションを可能とする。
【００２１】
【発明の実施の形態】
以下に、本発明の実施の形態について、適宜、図面を参照しながら説明する。
図１は、本発明の実施の形態に適用されるシミュレーション方法によるＩＳＳを使わないＨＷ／ＳＷ協調シミュレーション環境の構成図である。
【００２２】
ＨＷ／ＳＷ協調シミュレータ１０は、システム・オン・チップ（ＳｏＣ）のターゲットＣＰＵを模擬したＣＰＵ模擬ブロック１と、システム・オン・チップ（ＳｏＣ）内のＨＷブロックを模擬したＨＷモデルブロック２，３と、各ブロックの実行順序を制御するスケジューラ６から構成される。
ＨＷモデルブロック２，３、ＣＰＵ模擬ブロック１は複数で構成することも可能である。
【００２３】
各ブロックはシステムレベル設計言語およびＣ、Ｃ＋＋言語で表現されることを特徴とし、ブロックはモデルの振る舞いを規定するタスク４と、ブロック間の通信を制御するポート部５より構成されている。タスク４はポート部５を介して外部と通信を行う。
【００２４】
スケジューラ６は各ブロックのタスクをラウンドロビン方式でスケジューリングする。また、各タスクに優先度を設定することが可能である。スケジューラ６のスケジューリング方法はたとえば、次のようになる。
【００２５】
全てのブロックのタスク優先度が同じ場合は、ＨＷ＿Ａ（３）→ＨＷ＿Ｂ（２）→ＣＰＵ模擬ブロック１→ＨＷ＿Ａ（３）→ＨＷ＿Ｂ（２）と各ブロックのタスクに均等に実行権を与える。実行権を与えられたタスクは実行状態となる。
【００２６】
一方、優先度が異なる場合は、スケジューラ６は優先度の高いタスクにのみ実行権を与える。もっとも優先度が高いタスクが複数ある場合は、それらのタスクに対して上記の循環的なスケジューリングを行う。
【００２７】
また、本環境では実行権をもつタスクより、スケジューラ６に対して実行権を放棄する命令を発効することが可能であり、この命令をスケジューラ６が受け取った場合は、他のタスクに実行権を与える。
【００２８】
ＨＷブロック２，３のタスクには、ある時間領域に行う処理が記述されており、ＨＷブロック２，３の並列性を模擬するために、処理完了後にスケジューラ６に対し実行権を放棄する命令が組み込まれている。ＣＰＵ模擬ブロック１のタスクには実機に組み込まれるソフトウェアが登録されており、ポート部にはＨＷブロック２，３より割り込みを受けるポート部が実装されている。
【００２９】
ここで、ＣＰＵ模擬ブロック１には、組込みソフトウェアのＣＰＵ模擬ブロック１からハードウェア・デバイス・モデルのＨＷブロック２，３へのアクセス関数に着目し、この関数内にシミュレーションの実行権を開放する記述を埋め込むことで、組込みソフトウェアのＣＰＵ模擬ブロック１はシミュレーション実行権を開放するライトアクセス関数７が設けられる。
【００３０】
上述した従来の技術では、ＨＷモデルブロック２，３との連携を考慮して実装されていないため、実行権を保持しつづけてしまう結果、割込みを受けてＨＷモデルブロック２，３と連携動作する動きを模擬できなかったが、本発明の実施の形態では、このようにして、３４で示すように、１シミュレーション時間内に各ブロックに均等に実行権が割り当てられている。
【００３１】
本発明の実施の形態では、ＣＰＵ模擬ブロック１内のレジスタアクセス関数を図１，２に示すレジスタアクセス関数７で置き換えることにより、ＨＷモデルブロック２，３と連携動作させることができる。
【００３２】
図２は本環境のレジスタアクセス関数であり、図２（ａ）はレジスタのリードアクセス関数の実装例、図２（ｂ）はレジスタのライトアクセス関数の実装例である。
【００３３】
図２（ａ）は２２で示すレジスタのリードアクセス関数に、シミュレーションの実行権を放棄する命令２１を組み込んでいる例を示す。図２（ｂ）は２３で示すレジスタへのライトアクセス関数に、シミュレーションの実行権を放棄する命令２４を組み込んでいる例を示す。
【００３４】
図３は、ＳＷからＨＷモデルへのアクセス関数にシミュレーションの実行権を開放する命令を埋め込んだ全体シミュレーションシーケンスを示す図である。
【００３５】
図３は図１の検証環境の全体シミュレーションシーケンスを示している。まず、Ｔ１時点でスケジューラ６はＨＷブロックであるＨＷ＿Ａ３を実行状態とし、Ｔ１〜Ｔ２時点までＨＷ＿Ａ３のタスク４に登録された処理が実行される。
【００３６】
このＨＷ＿Ａ３の処理完了後のＴ２時点に、ＨＷ＿Ａ３の実行権が放棄され、その後Ｔ３時点でスケジューラ６がＣＰＵ模擬ブロック１に実行権を与える。これにより、Ｔ３〜Ｔ４時点までＣＰＵ模擬ブロック１のタスクに登録された実機に組み込まれるソフトウェアのプログラムが実行される。
【００３７】
Ｔ４時点で、ＣＰＵ模擬ブロック１からＨＷ＿Ａ３に図１に示すレジスタアクセス８によりライトアクセス３１があると、Ｔ５時点でＨＷ＿Ａ３からＣＰＵ模擬ブロック１にライトアクセス関数７の実行要求がされる。これにより、ＣＰＵ模擬ブロック１にライトアクセス関数７の実行をして、Ｔ６時点でＣＰＵ模擬ブロック１の実行権が放棄され、その後Ｔ７時点でスケジューラ６がＨＷ＿Ｂ２に実行権を与える。これにより、Ｔ７〜Ｔ８時点までＨＷ＿Ｂ２のタスクに登録された処理が実行される。
【００３８】
次に、Ｔ９時点でスケジューラ６はＨＷブロックであるＨＷ＿Ａ３を実行状態とし、Ｔ９〜Ｔ１１時点までＨＷ＿Ａ３のタスク４に登録された処理が実行される。
【００３９】
ここで、Ｔ１０時点で、ＨＷ＿Ａ３からＣＰＵ模擬ブロック１は割り込み３３を受けたとき、このＨＷ＿Ａ３の処理完了後のＴ１１時点に、ＨＷ＿Ａ３の実行権が放棄され、その後Ｔ１２時点でスケジューラ６がＣＰＵ模擬ブロック１に実行権を与える。これにより、Ｔ１２〜Ｔ１３時点までＨＷ＿Ａ３からの割り込み３３に基づいてＣＰＵ模擬ブロック１のタスクに登録された実機に組み込まれるソフトウェアのプログラムが実行される。
【００４０】
Ｔ１３時点で割り込み３３に基づく処理の実行が終了すると、ＣＰＵ模擬ブロック１の実行権が放棄され、その後Ｔ１４時点でスケジューラ６がＨＷ＿Ｂ２に実行権を与える。これにより、Ｔ１４〜Ｔ１５時点までＨＷ＿Ｂ２のタスクに登録された処理が実行される。
【００４１】
図３は図２のレジスタアクセス関数を利用した場合の全体シュミレーションフローを示している。ＨＷブロック２，３からスケジューラ６方向の矢印はＨＷブロック２，３のタスクに組み込まれた実行権放棄命令による実行権の委譲を示しており、スケジューラ６から各ブロック１，２，３への矢印はスケジューラ６が持っているスケジューリング方式に基づく実行権の委譲を示している。
【００４２】
ＣＰＵ模擬ブロック１から、スケジューラ６への矢印は、レジスタアクセス関数７に組み込まれた実行権放棄命令によるものである。この結果、ある時間領域で見たときに各ブロックに均等に実行権が与えられており、ＨＷブロック２，３が起動され、ＳＷブロックのＣＰＵ模擬ブロック１へ割込みがかかるといったＨＷブロック２，３とＳＷブロックのＣＰＵ模擬ブロック１の連携動作を模擬することが可能となる。
【００４３】
しかしながら、レジスタアクセス関数７に以上のような仕組みを組み込むと以下の現象が生じてしまう。
【００４４】
図４は割込みが発生した場合のシーケンスを示している。
Ｔ２１時点でスケジューラ６はＨＷブロックであるＨＷ＿Ａ３を実行状態とし、Ｔ２１〜Ｔ２２時点までＨＷ＿Ａ３のタスク４に登録された処理が実行される。
【００４５】
本システムでは、Ｔ２２時点でＨＷブロック３よりＣＰＵ模擬ブロック１に対して割込み４１をかけると、４２で示すように、割込みハンドラとして登録された関数が呼び出し側のタスク上で実行されることにより、割込み４１をかけたＨＷブロック３のタスク４で割込みハンドラ関数４３をコールすることで割込みを模擬している。
【００４６】
これにより、Ｔ２３〜Ｔ２４時点まで割込みハンドラ関数４３はＨＷブロック２に対して処理を実行して、Ｔ２５時点でＨＷブロック３の実行権が放棄される。これは、４４で示すように、割込みハンドラ内でＨＷブロック２にアクセスした場合、割込みハンドラが中断され、実行権を放棄してしまうためである。
【００４７】
その後Ｔ２６時点でスケジューラ６がＣＰＵ模擬ブロック１に実行権を与える。Ｔ２６〜Ｔ２７時点まで、４５で示すように、割込みハンドラ処理中にもかかわらず、ＣＰＵ模擬ブロック１の処理が再開される。
【００４８】
通常、割込みハンドラ関数４３内では、割込み信号のクリアなどレジスタのアクセスを行っている。先に提示したレジスタアクセス関数７を呼び出すと、実行権の放棄が行われてしまい、割込みハンドラ関数４３が終了していない状況でＣＰＵ模擬ブロック１が実行状態になってしまい、割込みを模擬できない状況が生じる。
【００４９】
そこで、割込み処理においてＨＷブロック３より呼び出される割込みハンドラ関数４３を、図５に示す割り込み処理模擬関数で置き換えることで、割込み処理を模擬することができる。
【００５０】
図５において、ステップＳ１で、自タスクＩＤ取得して、ステップＳ２で自タスクの優先度を取得して、ステップＳ３で自タスクの優先度を最高優先度に設定して、割込み処理の前処理５１を行う。そして、ステップＳ４で、割込みハンドラ関数をコールする。その後、ステップＳ５で、自タスクの優先度を元に戻して、割込み処理の後処理５２を行う。
【００５１】
図５では、実機ＳＷブロックの割込みハンドラ関数に、割込み処理の前処理５１と割込み処理の後処理５２を組み込んでいる。割込み処理の前処理７０１ではタスク優先度をシステム内で最高優先度に設定している。
【００５２】
この結果、レジスタアクセス関数７に組み込まれた実行権放棄命令がスケジューラ６に送られた場合においても、再び実行権が与えられるため、割込みハンドラ関数の連続性を確保することができる。割込み処理の後処理では、タスク優先度を元の優先度に戻している。
【００５３】
図８に割込み処理模擬関数を利用した場合の割込み処理シーケンスを示す。
Ｔ３１時点でスケジューラ６はＨＷブロックであるＨＷ＿Ａ３を実行状態とし、Ｔ３１〜Ｔ３２時点までＨＷ＿Ａ３のタスク４に登録された処理が実行される。
【００５４】
本システムでは、Ｔ３２時点でＨＷブロック３よりＣＰＵ模擬ブロック１に対して割込み６１をかけると、６２で示すように、Ｔ３３時点でＨＷ＿Ａ３により割込み処理の前処理を行った後に、割込みハンドラとして登録された関数が呼び出し側のタスク上で実行されることにより、割込み６１をかけたＨＷブロック３のタスク４で割込みハンドラ関数６４をコールして、その後、６５で示すように、Ｔ３８時点までＨＷ＿Ａ３により割込み処理の後処理を行うことで、６６で示すように、割込み模擬関数を実行している。
【００５５】
これにより、６３で示すように、Ｔ３４〜Ｔ３５時点まで割込みハンドラ６４内でＨＷブロック２に対してアクセスして処理を実行しても、Ｔ３６時点でＨＷブロック３の実行権が放棄された後に、Ｔ３７時点でスケジューラ６が再びＨＷブロック３に実行権を与え、連続性を確保できる。
【００５６】
これにより、Ｔ３９〜Ｔ４０時点まで、６７で示すように、割込みハンドラ６４が終了した後、ＣＰＵ模擬ブロック１の処理が再開される。
【００５７】
ＳＷブロックへのプログラムの実装として例えば図８の８１に示したグローバル変数へのポーリングが行われる場合がある。
【００５８】
図７はＳＷで変数のポーリングした場合のシーケンスを示している。
Ｔ４１時点でスケジューラ６はＨＷブロックであるＨＷ＿Ａ３を実行状態とし、Ｔ４１〜Ｔ４２時点までＨＷ＿Ａ３のタスク４に登録された処理が実行される。
【００５９】
その後Ｔ４３時点でスケジューラ６がＣＰＵ模擬ブロック１に実行権を与える。Ｔ４３〜Ｔ４４時点まで、ＣＰＵ模擬ブロック１の変数へのポーリングが行われるプログラムの実装が行われる。
【００６０】
ここで、変数の参照７１をする際に、７２で示すように、ＳＷブロックのＣＰＵ模擬ブロック１に割り当てたタスクが実行権を保持し続けるため、シミュレーションが止まってしまう。
【００６１】
この問題に対処するために、図８に８１で示した変数のポーリング関数を作り、図９に示すようなポーリング関数を利用したコード９１への置き換えを行った。
【００６２】
この結果、図９で示すように、ＳＷブロックのＣＰＵ模擬ブロック１のポーリング中も各ＨＷブロックのＣＰＵ模擬ブロック１に実行権が与えられるようになり、ポーリング処理を模擬することができるようにすることができる。
【００６３】
図１０は、ＳＷの変数のポーリングをポーリング関数で実装した場合の全体シミュレーションシーケンス図である。
【００６４】
Ｔ５１時点でスケジューラ６はＨＷブロックであるＨＷ＿Ａ３を実行状態とし、Ｔ５１〜Ｔ５２時点までＨＷ＿Ａ３のタスク４に登録された処理が実行される。
【００６５】
その後Ｔ５３時点でスケジューラ６がＣＰＵ模擬ブロック１に実行権を与える。Ｔ５３〜Ｔ５４時点まで、ＣＰＵ模擬ブロック１の変数へのポーリングが行われるプログラムの実装を行った後に、１０１で示すように、実行権の開放が行われる。
【００６６】
これにより、Ｔ５５時点でスケジューラ６はＨＷブロックであるＨＷ＿Ｂ２を実行状態とし、Ｔ５５〜Ｔ５６時点までＨＷ＿Ｂ２のタスクに登録された処理が実行される。
【００６７】
Ｔ５７時点でスケジューラ６はＨＷブロックであるＨＷ＿Ａ３を実行状態とし、Ｔ５７〜Ｔ５８時点までＨＷ＿Ａ３のタスク４に登録された処理が実行される。
【００６８】
Ｔ５９時点でスケジューラ６はＣＰＵ模擬ブロック１の変数の参照１０２を行う。
【００６９】
上述した実行権のリリース１０１および変数の参照１０２は、ポーリング関数１０３により実行される。
【００７０】
その後に、Ｔ６０時点で、１０４で示すように、ＣＰＵ模擬ブロック１の実行権の開放が行われる。
【００７１】
上述した実行権のリリース１０４は、ポーリング関数１０５により実行される。
【００７２】
その後に、Ｔ６１時点で、１０６で示すように、条件に合致するまでポーリング関数が呼ばれ続ける。
【００７３】
図１１はマルチＣＰＵの環境に拡張した例を示している。
ＣＰＵ模擬ブロック（１）１、（２）１１１を複数用意し、それらのタスク部には各ターゲットＣＰＵ用の実機に組み込まれるソフトウェアが登録される。
【００７４】
ここで、ＣＰＵ模擬ブロック（１）１、（２）１１１には、組込みソフトウェアのＣＰＵ模擬ブロック（１）１、（２）１１１からハードウェア・デバイス・モデルのＨＷブロック２，３へのアクセス関数に着目し、この関数内にシミュレーションの実行権を開放する記述を埋め込むことで、組込みソフトウェアのＣＰＵ模擬ブロック（１）１、（２）１１１はシミュレーション実行権を開放するライトアクセス関数７，１１２が設けられる。
【００７５】
図１２はマルチＣＰＵ拡張した場合の全体シミュレーションシーケンスを示している。
まず、Ｔ７１時点でスケジューラ６はＨＷブロックであるＨＷ＿Ａ３を実行状態とし、Ｔ７１〜Ｔ７２時点までＨＷ＿Ａ３のタスク４に登録された処理が実行される。
【００７６】
このＨＷ＿Ａ３の処理完了後のＴ７２時点に、ＨＷ＿Ａ３の実行権が放棄され、その後Ｔ７３時点でスケジューラ６がＣＰＵ模擬ブロック１に実行権を与える。これにより、Ｔ７３〜Ｔ７４時点までＣＰＵ模擬ブロック（１）１のタスクに登録された実機に組み込まれるソフトウェアのプログラムが実行される。
【００７７】
Ｔ７３時点でＨＷ＿Ａ３からＣＰＵ模擬ブロック１にライトアクセス関数７の実行要求がされると、ＣＰＵ模擬ブロック１はライトアクセス関数７の実行をして、１２１で示すように、Ｔ４時点でＣＰＵ模擬ブロック１の実行権が放棄され、その後Ｔ７５時点でスケジューラ６がＨＷ＿Ｂ２に実行権を与える。これにより、Ｔ７５〜Ｔ７６時点までＨＷ＿Ｂ２のタスクに登録された処理が実行される。
【００７８】
次に、Ｔ７７時点でスケジューラ６はＣＰＵ模擬ブロック（２）１１１に実行権を与える。これにより、Ｔ７７〜Ｔ７８時点までＣＰＵ模擬ブロック（２）１１１のタスクに登録された実機に組み込まれるソフトウェアのプログラムが実行される。
【００７９】
Ｔ７６時点でＨＷ＿Ｂ２からＣＰＵ模擬ブロック１にライトアクセス関数１１２の実行要求がされると、ＣＰＵ模擬ブロック（２）１１１はライトアクセス関数１１２の実行をして、１２２で示すように、Ｔ７８時点でＣＰＵ模擬ブロック（２）１１２の実行権が放棄され、その後Ｔ７９時点でスケジューラ６がＨＷ＿Ａ３に実行権を与える。これにより、Ｔ７９〜Ｔ８０時点までＨＷ＿Ａ３のタスクに登録された処理が実行される。
【００８０】
なお、上述した割り込みの処理または変数のポーリングの処理も同様に適用される。
【００８１】
ＣＰＵ模擬ブロック（１）１、（２）１１１からの実行権の放棄１２１，１２２はライトアクセス関数７，１１２であるレジスタアクセス関数あるいはポーリング関数をきっかけとして行われ、ＨＷブロック２，３からの実行権の放棄はタスク部に組み込まれた実行権放棄命令をきっかけとして行われる。このように、マルチＣＰＵのＨＷ／ＳＷ協調シミュレーション環境を容易に実現することができる。
【００８２】
上述した本発明の実施の形態は、これに限らず、本発明の特許請求の範囲を逸脱しない限り、適宜、他の構成をとりうることは言うまでもない。
【００８３】
【発明の効果】
この発明によれば、ＨＷ／ＳＷ協調シミュレータ上で、インストラクション・セット・シミュレータ（ＩＳＳ）を使わずに、ターゲットＣＰＵ用に記述されたＳＷとＨＷモデルを組み合わせた協調シミュレーションを行うことができるという効果を奏する。
【００８４】
また、この発明によれば、シミュレータとインストラクション・セット・シミュレータ（ＩＳＳ）間の実行権の受け渡しがないため、高速にＨＷとＳＷの協調シミュレーションを可能とすることができるという効果を奏する。
【００８５】
また、この発明によれば、アプリケーションソフトウェア、ドライバソフトウェアを含めたソフトウェア全体の検証を、実機を使用した検証と遜色なく可能とすることができるという効果を奏する。
【００８６】
また、この発明によれば、複数ＣＰＵを持つシステム・オン・チップ（ＳｏＣ）においても、高速にＨＷとＳＷの協調シミュレーションを、実機を使用した検証と遜色なく可能とすることができるという効果を奏する。
【図面の簡単な説明】
【図１】本発明の実施の形態に適用されるシミュレーション方法によるＩＳＳを使わないＨＷ／ＳＷ協調シミュレーション環境の構成図である。
【図２】本環境のレジスタアクセス関数であり、図２（ａ）はレジスタのリードアクセス関数の実装例、図２（ｂ）はレジスタのライトアクセス関数の実装例である。
【図３】ＳＷからＨＷモデルへのアクセス関数にシミュレーションの実行権を開放する命令を埋め込んだ全体シミュレーションシーケンスを示す図である。
【図４】割込みが発生した場合の全体シミュレーションを示すシーケンス図である。
【図５】割込み処理を模擬する関数を用いた処理を示すシーケンス図である。
【図６】タスク優先度コントロールによる割込みの連続性が確保されている割込み処理シーケンスを示すシーケンス図である。
【図７】ＳＷで変数のポーリングされた場合の全体シミュレーションシーケンスを示すシーケンス図である。
【図８】変数のポーリング関数実装例を示す図である。
【図９】ポーリング関数を利用したコード例を示す図である。
【図１０】ＳＷの変数のポーリングをポーリング関数で実装した場合の全体シミュレーションシーケンスを示すシーケンス図である。
【図１１】マルチＣＰＵシステムに拡張した場合の構成例を示す図である。
【図１２】マルチＣＰＵ拡張時の全体シミュレーションシーケンスを示すシーケンス図である。
【図１３】従来のシミュレーション環境を示す図であり、図１３（ａ）はＩＳＳを利用したシミュレーション環境、図１３（ｂ）はＩＳＳを利用しないシミュレーション環境である。
【図１４】従来のＩＳＳを使わないＨＷ／ＳＷ協調シミュレーション環境の構成図である。
【図１５】検証環境の全体シミュレーションシーケンスを示すシーケンス図である。
【符号の説明】
１……ＳＷブロック（ＣＰＵ模擬ブロック）、２、３……ＨＷブロック、４……タスク、５……ポート、６……スケジューラ、７……ライトアクセス関数、８……レジスタアクセス、９……割込み
【図１】
2005018623.tif 000003
【図２】
2005018623.tif 000004
【図３】
2005018623.tif 000005
【図４】
2005018623.tif 000006
【図５】
2005018623.tif 000007
【図６】
2005018623.tif 000008
【図７】
2005018623.tif 000009
【図８】
2005018623.tif 000010
【図９】
2005018623.tif 000011
【図１０】
2005018623.tif 000012
【図１１】
2005018623.tif 000013
【図１２】
2005018623.tif 000014
【図１３】
2005018623.tif 000015
【図１４】
2005018623.tif 000016
【図１５】
2005018623.tif 000017