(57)【要約】【課題】ハードウェアモデルを構成するソフトウェアを自動生成することにより、ハードウェアモデルの開発工数を削減することを課題とする。【解決手段】ハードウェアをシミュレーションするためのソフトウェアを生成するソフトウェア生成装置であって、ハードウェアの処理開始が指示されてから終了するまでの時間を示すタイミング仕様データ（６０３）を記憶する記憶手段と、前記タイミング仕様データを基に、前記ハードウェアの処理開始が指示されると前記ハードウェアの処理を行わずにスケジューラに対して時間情報を設定し、前記時間経過後のスケジューラからの通知により割り込み又はコマンド実行の処理を行うソフトウェア（１０４）を生成するプロセッサ（６０４）とを有することを特徴とするソフトウェア生成装置が提供される。【選択図】図６
2008204006.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェアをシミュレーションするためのソフトウェアを生成するソフトウェア生成装置であって、
ハードウェアの処理開始が指示されてから終了するまでの時間を示すタイミング仕様データを記憶する記憶手段と、
前記タイミング仕様データを基に、前記ハードウェアの処理開始が指示されると前記ハードウェアの処理を行わずにスケジューラに対して時間情報を設定し、前記時間経過後のスケジューラからの通知により割り込み又はコマンド実行の処理を行うソフトウェアを生成するプロセッサと
を有することを特徴とするソフトウェア生成装置。
【請求項２】
前記記憶手段は、前記ハードウェアの割り込み仕様データを記憶し、
前記プロセッサは、前記割り込み仕様データを基に、前記ハードウェアの割り込み発生、マスク機能又はクリア機能を実現するソフトウェアを生成することを特徴とする請求項１記載のソフトウェア生成装置。
【請求項３】
前記記憶手段は、前記ハードウェアのレジスタ仕様データを記憶し、
前記プロセッサは、前記レジスタ仕様データを基に、前記ハードウェアのレジスタからデータをリードする機能を実現するレジスタリードモデル、及び前記ハードウェアのレジスタにデータをライトする機能を実現するレジスタライトモデルのソフトウェアを生成するプロセッサと
を有することを特徴とする請求項１又は２記載のソフトウェア生成装置。
【請求項４】
ハードウェアをシミュレーションするためのソフトウェアを生成するソフトウェア生成装置であって、
前記ハードウェアの割り込み仕様データを記憶する記憶手段と、
前記割り込み仕様データを基に、前記ハードウェアの割り込み発生、マスク機能又はクリア機能を実現するソフトウェアを生成するプロセッサと
を有することを特徴とするソフトウェア生成装置。
【請求項５】
前記記憶手段は、前記ハードウェアのレジスタ仕様データを記憶し、
前記プロセッサは、前記レジスタ仕様データを基に、前記ハードウェアのレジスタからデータをリードする機能を実現するレジスタリードモデル、及び前記ハードウェアのレジスタにデータをライトする機能を実現するレジスタライトモデルのソフトウェアを生成するプロセッサと
を有することを特徴とする請求項４記載のソフトウェア生成装置。
【請求項６】
ハードウェアをシミュレーションするためのハードウェアモデルのソフトウェアを記憶する記憶手段と、
前記ハードウェアモデルのソフトウェアを実行するためのプロセッサとを有し、
前記ハードウェアモデルのソフトウェアは、前記ハードウェアの処理開始が指示されると前記ハードウェアの処理を行わずにスケジューラに対して時間情報を設定し、前記時間経過後のスケジューラからの通知により割り込み又はコマンド実行の処理を行うソフトウェアを含むことを特徴とするシミュレーションシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア生成装置及びシミュレーションシステムに関する。
【背景技術】
【０００２】
ＣＰＵ（中央演算処理装置）コアやＤＳＰ（デジタルシグナルプロセッサ）コアを集積したＳｏＣ（システムオンチップ）のようなハードウェア／ソフトウェア混在システムの開発を行う場合、ハードウェアとソフトウェアを組み合わせたシステムとして検証を行う必要がある。そのため、ハードウェアの論理設計が完了する前にファームウェア、ミドルウェア等のソフトウェア開発を開始し、論理設計完了後にシミュレータ、エミュレータを使用して全体での動作検証を開始するまでにある程度ソフトウェアの開発を進めておく必要がある。
【０００３】
図２は、スタブ関数を使用したファームウェア検証支援システムの構成図である。ＣＰＵの命令セットシミュレータ（ＩＳＳ）２０１は、ファームウェア２０２を有する。ファームウェア２０２は、複数のスタブ関数２０３を有する。例えば、時刻ｔ１において、ＩＳＳ２０１は、リード処理用スタブ関数２０３を実行し、レジスタリード処理をシミュレーションする。次に、時刻ｔ２において、ＩＳＳ２０１は、ライト処理用スタブ関数２０３を実行し、レジスタライト処理をシミュレーションする。
【０００４】
図３は、ハードウェア（ＨＷ）モデルを使用したファームウェア検証支援システムの構成図である。ＣＰＵのＩＳＳ３０１及びソフトウェア（ＳＷ）検証用ハードウェアモデル３０４は、アプリケーションプログラムインターフェース（ＡＰＩ）３０３を介して接続される。ＩＳＳ３０１は、ファームウェア３０２を有する。ハードウェアモデル３０４は、レジスタ（モデル）３０５、割り込みモデル３０６及びハードウェア機能モデル３０７を有する。
【０００５】
例えば、時刻ｔ１において、ＩＳＳ３０１は、ハードウェアモデル３０４に対して、レジスタリード命令（関数）を実行する。すると、ハードウェアモデル３０４は、ＩＳＳ３０１に対して、指示されたレジスタ３０５の値をリードして返す。
【０００６】
次に、時刻ｔ２において、ＩＳＳ３０１は、ハードウェアモデル３０４に対して、レジスタライト命令（関数）を実行する。すると、ハードウェアモデル３０４は、指示されたレジスタ３０５に値をライトする。
【０００７】
次に、時刻ｔ３において、ＩＳＳ３０１は、ハードウェアモデル３０４に対して、コマンド起動レジスタライト命令（関数）を実行する。すると、ハードウェアモデル３０４内のハードウェア機能モデル３０７は、上記のコマンド起動レジスタに対応するハードウェア処理を実行する。
【０００８】
次に、上記の実行終了後の時刻ｔ４において、ハードウェアモデル３０４内の割り込みモデル３０６は、ＩＳＳ３０１に対して、割り込み発生命令（関数）を実行する。すると、ＩＳＳ３０１は、それに応じた処理を行う。
【０００９】
次に、時刻ｔ５において、ＩＳＳ３０１は、ハードウェアモデル３０４に対して、割り込みクリア命令（関数）を実行する。すると、ハードウェアモデル３０４は、指示された割り込みをクリアする。
【００１０】
また、下記の特許文献１には、ハードウェア部品仕様情報であるマクロ定義情報と外部仕様情報、ハードウェア動作記述情報、外部仕様−動作記述対応情報からデバイスドライバプログラムであるマクロ定義と構造体定義、関数定義を生成するソフトウェア生成方法が記載されている。
【００１１】
【特許文献１】特開平９−３４６９８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
図２の場合、ファームウェア２０２内にハードウェアの動作をシミュレーションするスタブ関数２０３を埋め込み、ＩＳＳ２０１上で動作させてデバッグを行う。この方法はスタブ関数２０３を用意すればＩＳＳ２０１だけで実行できるため、比較的容易に実現可能だが、スタブ関数２０３が含まれているため実際のファームウェアとは異なり、ハードウェア設計完了後にそのまま使用することができない。また、スタブ関数２０３は時間情報を表現することができないため、簡単な機能しか実装できない。そのため、回路規模の増加、機能の複雑化が進む現在のシステムに適用することは難しい。
【００１３】
図３の場合、ＩＳＳ３０１の外部にＣ／Ｃ＋＋／ＳｙｓｔｅｍＣ言語等のソフトウェアで記述されたハードウェアと等価なハードウェアモデル３０４を用意し、ＩＳＳ３０１と接続してファームウェア３０２を動作させてデバッグを行う。この方法はハードウェアと等価な機能を実現できるため、この環境で開発したファームウェア３０２は実際のハードウェア上でそのまま動作する。しかし、ハードウェアと等価なハードウェアモデル３０４をマニュアルで開発するには工数がかかるため、ハードウェアモデル３０４の開発に十分な開発リソースを用意できない場合は実現が難しい。
【００１４】
本発明の目的は、ハードウェアモデルを構成するソフトウェアを自動生成することにより、ハードウェアモデルの開発工数を削減することである。
【課題を解決するための手段】
【００１５】
本発明のソフトウェア生成装置は、ハードウェアをシミュレーションするためのソフトウェアを生成するソフトウェア生成装置であって、ハードウェアの処理開始が指示されてから終了するまでの時間を示すタイミング仕様データを記憶する記憶手段と、前記タイミング仕様データを基に、前記ハードウェアの処理開始が指示されると前記ハードウェアの処理を行わずにスケジューラに対して時間情報を設定し、前記時間経過後のスケジューラからの通知により割り込み又はコマンド実行の処理を行うソフトウェアを生成するプロセッサとを有することを特徴とする。
【００１６】
また、本発明のソフトウェア生成装置は、ハードウェアをシミュレーションするためのソフトウェアを生成するソフトウェア生成装置であって、前記ハードウェアの割り込み仕様データを記憶する記憶手段と、前記割り込み仕様データを基に、前記ハードウェアの割り込み発生、マスク機能又はクリア機能を実現するソフトウェアを生成するプロセッサとを有することを特徴とする。
【００１７】
また、本発明のシミュレーションシステムは、ハードウェアをシミュレーションするためのハードウェアモデルのソフトウェアを記憶する記憶手段と、前記ハードウェアモデルのソフトウェアを実行するためのプロセッサとを有し、前記ハードウェアモデルのソフトウェアは、前記ハードウェアの処理開始が指示されると前記ハードウェアの処理を行わずにスケジューラに対して時間情報を設定し、前記時間経過後のスケジューラからの通知により割り込み又はコマンド実行の処理を行うソフトウェアを含むことを特徴とする。
【発明の効果】
【００１８】
ハードウェアモデルを構成するソフトウェアを自動生成することができ、ハードウェアモデルの開発工数を削減することができる。また、ハードウェアの論理設計が完了する前に、ファームウェア、ミドルウェア等のソフトウェア開発を開始することができる。
【発明を実施するための最良の形態】
【００１９】
図１は、本発明の実施形態によるファームウェア検証支援システム（シミュレーションシステム）の構成例を示す図である。ＣＰＵ（中央演算処理装置）の命令セットシミュレータ（ＩＳＳ）１０１及びソフトウェア（ＳＷ）検証用擬似ハードウェアモデル１０４は、アプリケーションプログラムインターフェース（ＡＰＩ）１０３を介して接続される。ＩＳＳ１０１は、ファームウェア１０２を有する。ハードウェアモデル１０４は、レジスタ（モデル）１０５、割り込みモデル１０６及び擬似コマンド（命令）実行モデル１０７を有し、ハードウェアをシミュレーション（模擬）するためのソフトウェアで構成される。本実施形態は、図３に対して、ハードウェア機能モデル３０７の代わりに擬似コマンド実行モデル１０７を有する点が異なる。
【００２０】
ＣＰＵ（中央演算処理装置）コアやＤＳＰ（デジタルシグナルプロセッサ）コアを集積したＳｏＣ（システムオンチップ）のようなハードウェア及びソフトウェアが混在したシステムの開発を行う場合、ハードウェアとソフトウェアを組み合わせたシステムとして検証を行う必要がある。そのため、ハードウェアの論理設計が完了する前に、ファームウェア、ミドルウェア等のソフトウェア開発を開始し、論理設計完了後に図１のシステムを使用してソフトウェアの開発を行う。本実施形態のファームウェア検証支援システムは、ハードウェア及びソフトウェアが混在したシステムをシミュレーションすることができる。
【００２１】
例えば、時刻ｔ１において、ＩＳＳ１０１は、ハードウェアモデル１０４に対して、レジスタリード（読み出し）関数を実行する。すると、ハードウェアモデル１０４は、ＩＳＳ１０１に対して、指示されたレジスタ１０５の値をリードして返す。
【００２２】
次に、時刻ｔ２において、ＩＳＳ１０１は、ハードウェアモデル１０４に対して、レジスタライト（書き込み）関数を実行する。すると、ハードウェアモデル１０４は、指示されたレジスタ１０５に値をライトする。
【００２３】
次に、時刻ｔ３において、ＩＳＳ１０１は、ハードウェアモデル１０４に対して、コマンド起動レジスタライト関数を実行する。すると、ハードウェアモデル１０４内の擬似コマンド実行モデル１０７は、上記のコマンド起動レジスタに対応するハードウェア処理を実行せずに処理時間が経過するまでウェイト（待機）する。
【００２４】
次に、上記の処理時間経過後の時刻ｔ４において、ハードウェアモデル１０４内の割り込みモデル１０６は、ＩＳＳ１０１に対して、割り込み発生関数を実行する。すると、ＩＳＳ１０１は、それに応じた処理を行う。
【００２５】
次に、時刻ｔ５において、ＩＳＳ１０１は、ハードウェアモデル１０４に対して、割り込みクリア関数を実行する。すると、ハードウェアモデル１０４は、指示された割り込み信号をクリアする。
【００２６】
本実施形態は、図３に対して、機能を限定したハードウェアモデル１０４を定義する。図３のハードウェアモデル３０４はハードウェア機能モデル３０７を実装しているため、コマンドレジスタ３０５への書き込みが発生すると、対応するハードウェア処理を実行し、結果をメモリ、レジスタ等に格納して割り込みを発生する。
【００２７】
本実施形態によるハードウェアモデル１０４では、レジスタアクセス、割り込み以外のハードウェア機能を削減することにより、ハードウェアモデル１０４の開発期間を短縮することができる。また、擬似コマンド実行モデル１０７を実装することにより、機能制限版モデルにおいても通常のハードウェアモデルと同様にコマンド起動後の一定サイクル経過後に割り込みを発生するという動作は可能となる。擬似コマンド実行モデル１０７では、コマンド起動レジスタへの書き込みが発生すると、ハードウェアの処理は行わずにコマンド毎に定義されたサイクル数のウェイト処理を行い、そのサイクル数経過後に割り込みを発生させる。
【００２８】
図３０は、図１のシステムを実現するコンピュータのハードウェア構成例を示す図である。本実施形態は、図１のシステムをコンピュータで実現する例を示す。
【００２９】
バス３００１には、ＣＰＵ３００２、ＲＯＭ３００３、ＲＡＭ３００４、ネットワークインタフェース３００５、入力装置３００６、出力装置３００７及び外部記憶装置３００８が接続されている。
【００３０】
ＣＰＵ３００２は、データの処理又は演算を行うと共に、バス３００１を介して接続された各種構成要素を制御するものである。ＲＯＭ３００３には、予めＣＰＵ３００２の制御手順（コンピュータプログラム）を記憶させておき、このコンピュータプログラムをＣＰＵ３００２が実行することにより、起動する。外部記憶装置３００８にコンピュータプログラムが記憶されており、そのコンピュータプログラムがＲＡＭ３００４にコピーされてＣＰＵ３００２により実行される。ＲＡＭ３００４は、データの入出力、送受信のためのワークメモリ、各構成要素の制御のための一時記憶として用いられる。外部記憶装置３００８は、例えばハードディスク記憶装置やＣＤ−ＲＯＭ等であり、電源を切っても記憶内容が消えない。ＣＰＵ３００２は、ＲＡＭ３００４内のコンピュータプログラムを実行することにより、後述する図１１のフローチャートの処理を行い、図１のシステムを実現する。
【００３１】
ネットワークインタフェース３００５は、インターネット等のネットワークに接続するためのインタフェースである。入力装置３００６は、例えばキーボード及びマウス等であり、各種指定又は入力等を行うことができる。出力装置３００７は、ディスプレイ及びプリンタ等である。
【００３２】
図４は、ＩＳＳ１０１及びハードウェアモデル１０４間のＡＰＩ１０３の関数を示す図であり、図５はＡＰＩ１０３の関数の使用例を示す図である。
【００３３】
例えば、時刻ｔ１において、ＩＳＳ１０１は、ハードウェアモデル１０４に対して、ハードウェアモデル１０４内のレジスタ１０５からデータをリードするためのレジスタリード関数readEvent()を実行する。すると、ハードウェアモデル１０４は、ＩＳＳ１０１に対して、指示されたレジスタ１０５の値をリードして返す。
【００３４】
レジスタリード関数readEvent()は、ＩＳＳ１０１からハードウェアモデル１０４へ呼び出される関数であり、ファームウェア１０２からハードウェアモデル１０４へのリードイベントが発生した時に呼び出される関数であり、引数のアドレスの値に対応するレジスタの動作を模擬することでリード動作を実現する。
【００３５】
次に、時刻ｔ２において、ＩＳＳ１０１は、ハードウェアモデル１０４に対して、ハードウェアモデル１０４内のレジスタ１０５にデータをライトするためのレジスタライト関数writeEvent()を実行する。すると、ハードウェアモデル１０４は、指示されたレジスタ１０５に値をライトする。
【００３６】
レジスタライト関数writeEvent()は、ＩＳＳ１０１からハードウェアモデル１０４へ呼び出される関数であり、ファームウェア１０２からハードウェアモデル１０４へのライトイベントが発生した時に呼び出される関数であり、引数のアドレスの値に対応するレジスタの動作を模擬することでライト動作を実現する。
【００３７】
次に、時刻ｔ３において、ＩＳＳ１０１は、ハードウェアモデル１０４に対して、コマンド起動レジスタライト関数writeEvent()を実行する。すると、ハードウェアモデル１０４内の擬似コマンド実行モデル１０７は、ＩＳＳ１０１に対して、上記のコマンド起動レジスタに対応するハードウェアの処理を行わずに処理時間に対応するウェイトサイクル数を設定するためのウェイトサイクル設定関数setTimerCycle()を実行する。すると、ＩＳＳ１０１内のスケジューラ（タイマ）は、そのウェイトサイクル数が経過するまでウェイト（待機）する。ＩＳＳ１０１は、ウェイトサイクル数を管理するスケジューラと、ファームウェアの動作を実現する部分（ＣＰＵのシミュレータ部分）とが独立して動作する。なお、スケジューラは、ＩＳＳ１０１とは別のモジュールにしてもよい。その場合、関数setTimerCycle()及びtimerEvent()にあたるＡＰＩはそのスケジューラとハードウェアモデル１０４間で呼び出される関数となる。
【００３８】
ウェイトサイクル設定関数setTimerCycle()は、ハードウェアモデル１０４からＩＳＳ１０１へ呼び出される関数であり、ウェイトサイクル数をＩＳＳ１０１側に設定通知する関数であり、シーケンスＩＤとウェイトサイクル数を指定すると、指定ウェイトサイクル数経過後にウェイトサイクル経過通知関数timerEvent()が呼び出される。
【００３９】
次に、上記のウェイトサイクル数経過後の時刻ｔ４において、ＩＳＳ１０１は、ハードウェアモデル１０４に対して、前記ウェイトサイクル数の経過を通知するためのウェイトサイクル経過通知関数timerEvent()を実行する。
【００４０】
ウェイトサイクル経過通知関数timerEvent()は、ＩＳＳ１０１からハードウェアモデル１０４へ呼び出される関数であり、ウェイトイベント発生を通知する関数であり、引数にシーケンスＩＤを指定して呼び出される。ウェイトサイクル設定関数setTimerCycle及びウェイトサイクル経過通知関数timerEvent()を組み合わせることにより、コマンド起動から指定サイクル経過後に割り込み発生というシーケンスを実現することができる。本実施形態では、ハードウェアの処理を行わずに（シミュレーションせずに）ウェイトサイクル数の経過をウェイトするだけであるので、図３のハードウェア機能モデル３０７が不要である。
【００４１】
ハードウェアモデル１０４内の割り込みモデル１０６は、ウェイトサイクル経過通知関数timerEvent()を入力すると、ＩＳＳ１０１に対して、割り込みを発生するための割り込み発生関数setInterrupt()を実行する。すると、ＩＳＳ１０１は、それに応じた処理を行う。
【００４２】
割り込み発生関数setInterrupt()は、ハードウェアモデル１０４からＩＳＳ１０１へ呼び出される関数であり、割り込み発生状態であることをＩＳＳ１０１側に通知する関数である。
【００４３】
次に、時刻ｔ５において、ＩＳＳ１０１は、ハードウェアモデル１０４に対して、ハードウェアモデル１０４の割り込みをクリアするための割り込みクリアレジスタライト関数writeEvent()を実行し、割り込みクリアレジスタにライトする。すると、ハードウェアモデル１０４は、指示された割り込みレジスタの割り込み要因をクリアする。その後、ハードウェアモデル１０４は、割り込みクリア関数clearInterrupt()を実行し、ＩＳＳ１０１を割り込みクリア状態にする。
【００４４】
割り込みクリア関数clearInterrupt()は、ハードウェアモデル１０４からＩＳＳ１０１に呼び出される関数であり、割り込みクリア状態であることをＩＳＳ１０１に通知する関数である。
【００４５】
以上のように、時刻ｔ１のレジスタリード時にはreadEvent()関数が呼び出され、アドレスに対応するレジスタのデータをリードする。時刻ｔ２のレジスタライト時にはwriteEvent()関数が呼び出され、指定されたアドレスに対応するレジスタにデータのライトを行う。時刻ｔ３のコマンド起動レジスタへのライトが発生した場合（関数writeEvent()のライトアドレスがコマンド起動レジスタのアドレスだった場合）、コマンドの処理時間分のサイクル数とシーケンスＩＤを指定してsetTimerCycle()関数を呼び、ＩＳＳ１０１側にウェイトサイクル数を通知する。その後、指定サイクル数が経過した後の時刻ｔ４において、ＩＳＳ１０１側からシーケンスＩＤを引数としてtimerEvent()関数が呼び出される。timerEvent（）関数ではシーケンスＩＤに対応する割り込み要因レジスタ、ビットフィールドの割り込みを発生させる。
【００４６】
図６は、擬似ハードウェアモデル１０４の自動生成システム（ソフトウェア生成装置）の構成例を示す図である。モデル生成処理部（プロセッサ）６０４は、割り込みモデル生成処理部６０５、レジスタモデル生成処理部６０６、及び擬似コマンド実行モデル生成処理部６０７を有し、割り込み仕様データ（図８、図９）６０１、レジスタ仕様データ（図７）６０２及びタイミング仕様データ（図１０）６０３を入力し、ソフトウェア検証用擬似ハードウェアモデル１０４を自動生成する。
【００４７】
割り込みモデル生成処理部６０５は、割り込み仕様データ６０１を基に、擬似ハードウェアモデル１０４内の割り込みモデル１０６を生成する。割り込みモデル１０６は、割り込み処理関数setIrq()のソフトウェアを含む。
【００４８】
レジスタモデル生成処理部６０６は、レジスタ仕様データ６０２を基に、擬似ハードウェアモデル１０４内のレジスタモデル１０５を生成する。レジスタモデル１０５は、レジスタリード関数readEvent()及びレジスタライト関数writeEvent()を含む。
【００４９】
擬似コマンド実行モデル生成処理部６０７は、タイミング仕様データ６０３を基に、擬似ハードウェアモデル１０４内の擬似コマンド実行モデル１０７を生成する。タイミング仕様データ６０３は、ハードウェアの処理開始が指示されてから終了するまでの時間を示すデータである。擬似コマンド実行モデル１０７は、ウェイトサイクル経過通知関数timerEvent()を含む。
【００５０】
この自動生成システムは、図３０のコンピュータにより構成することができる。割り込み仕様データ６０１、レジスタ仕様データ６０２及びタイミング仕様データ６０３は、外部記憶装置（記憶手段）３００８に記憶される。モデル生成処理部６０７は、ＣＰＵ（プロセッサ）３００２がＲＡＭ３００４内のプログラムを実行することにより実現される。
【００５１】
図２１は、ＣＰＵ（ＩＳＳ）１０１及びハードウェアモデル１０４の構成例を示す図である。以下、図２１を参照しながら図７〜図１０を説明する。
【００５２】
図７は、図６のレジスタ仕様データ６０２の構成例を示す図である。レジスタ仕様データ６０２は、レジスタ名、レジスタアドレス、レジスタタイプ、ビット番号、ビットフィールド名、リード／ライトアクセス情報、初期値の情報を各レジスタ毎に有する。図７は、図２１のレジスタＩＲＱ＿Ｂの例を示す。レジスタＩＲＱ＿Ｂは、レジスタ名がＩＲＱ＿Ｂ、レジスタアドレスが０２０、レジスタタイプが割り込み要因である。
【００５３】
図８は、図６の割り込み仕様データ６０１内の割り込みレジスタ構成データの構成例を示す図である。割り込みレジスタ構成データは、割り込み要因とそのマスク・クリアレジスタといった関連する割り込みレジスタを割り込みレジスタセットとしてグループ化し、セット毎のレジスタ名とその接続先についての情報を持つ。接続先情報は割り込みセットを複数持ち、階層構造となっているハードウェアモデルで使用する。
【００５４】
図２１において、ハードウェアモデル１０４は、３個の割り込みレジスタセットＡ、Ｂ及びＣを有する。割り込みレジスタセットＡは、割り込みステータスレジスタＩＲＱ＿Ａ＿ＳＴＡＴＵＳ及び割り込みイネーブルレジスタＩＲＱ＿Ａ＿ＥＮＡＢＬＥを有し、上流側の接続先はＣＰＵ（ＩＳＳ）１０１である。割り込みレジスタセットＢは、割り込み要因レジスタＩＲＱ＿Ｂ、割り込みマスクレジスタＩＲＱ＿Ｂ＿ＭＡＳＫ、及び割り込みクリアレジスタＩＲＱ＿Ｂ＿ＣＬＥＡＲを有し、上流側の接続先は割り込みレジスタセットＡである。割り込みレジスタセットＣは、割り込み要因レジスタＩＲＱ＿Ｃ、割り込みマスクレジスタＩＲＱ＿Ｃ＿ＭＡＳＫ、及び割り込みクリアレジスタＩＲＱ＿Ｃ＿ＣＬＥＡＲを有し、上流側の接続先は割り込みレジスタセットＡである。
【００５５】
図９は、図６の割り込み仕様データ６０１内の割り込みレジスタセット接続関係データの構成例を示す図である。レジスタセット接続関係データは、レジスタセットＡ、Ｂ及びＣが階層構造となっている場合に、ＣＰＵ（ＩＳＳ）１０１に近い側（上流側）の割り込み要因／ステータスレジスタのどのビットに下流側のどのレジスタセットが接続されているかを示している。例えば、図２１において、レジスタセットＡ内の割り込みステータスレジスタＩＲＱ＿Ａ＿ＳＴＡＴＵＳは、８ビット目がレジスタセットＢに接続され、０ビット目がレジスタセットＣに接続される。
【００５６】
図１０は、図６のタイミング仕様データ６０３の構成例を示す図である。タイミング仕様データ６０３は、コマンド起動レジスタとそれに対応する割り込み要因レジスタ、コマンド起動から割り込み発生までのサイクル数についての情報を有する。
【００５７】
例えば、レジスタセットＢ内のコマンド起動レジスタＤＭＡ＿ＳＴＡＲＴの０ビット目に１がライトされると、３００のウェイトサイクル数経過後に、割り込み要因レジスタＩＲＱ＿Ｂの０ビット目に１が書き込まれる。
【００５８】
また、レジスタセットＣ内のコマンド起動レジスタＣＯＭ＿ＲＥＱの０ビット目に１がライトされると、７００のウェイトサイクル数経過後に、割り込み要因レジスタＩＲＱ＿Ｃの０ビット目に１が書き込まれる。
【００５９】
また、レジスタセットＣ内のコマンド起動レジスタＣＯＭ＿ＲＥＱの１ビット目に１がライトされると、９００のウェイトサイクル数経過後に、割り込み要因レジスタＩＲＱ＿Ｃの４ビット目に１が書き込まれる。
【００６０】
また、レジスタセットＣ内のコマンド起動レジスタＣＯＭ＿ＲＥＱの２ビット目に１がライトされると、５００のウェイトサイクル数経過後に、割り込み要因レジスタＩＲＱ＿Ｃの８ビット目に１が書き込まれる。
【００６１】
割り込み要因レジスタＩＲＱ＿Ｂ及び割り込みマスクレジスタＩＲＱ＿Ｂ＿ＭＡＳＫの論理積が０でない場合、割り込みステータスレジスタＩＲＱ＿Ａ＿ＳＴＡＴＵＳの８ビット目に１が書き込まれる。
【００６２】
また、割り込み要因レジスタＩＲＱ＿Ｃ及び割り込みマスクレジスタＩＲＱ＿Ｃ＿ＭＡＳＫの論理積が０でない場合、割り込みステータスレジスタＩＲＱ＿Ａ＿ＳＴＡＴＵＳの０ビット目に１が書き込まれる。
【００６３】
割り込みステータスレジスタＩＲＱ＿Ａ＿ＳＴＡＴＵＳ及び割り込みイネーブルレジスタＩＲＱ＿Ａ＿ＥＮＡＢＬＥの論理積が０から０以外の値に変化した場合、ＣＰＵ１０１の割り込み発生関数setInterrupt()が実行され、０以外の値から０に変化した場合、clearInterrupt()が実行される。
【００６４】
また、ＣＰＵ１０１が、ハードウェアモデル１０４の割り込みクリアレジスタＩＲＱ＿Ｂ＿ＣＬＥＡＲ又はＩＲＱ＿Ｃ＿ＣＬＥＡＲをライトすると、割り込み要因レジスタＩＲＱ＿Ｂ又はＩＲＱ＿Ｃの割り込み要因がクリアされる、それにより、割り込みステータスレジスタＩＲＱ＿Ａ＿ＳＴＡＴＵＳ及び割り込みイネーブルレジスタＩＲＱ＿Ａ＿ＥＮＡＢＬＥの論理積が０以外の値から０に変化した場合は、ハードウェアモデル１０４がＣＰＵ１０１のclearInterrupt()を呼び出すことにより、ＣＰＵ１０１に対して割り込みクリア状態になったことが通知される。
【００６５】
また、ＣＰＵ１０１及びハードウェアモデル１０４は、データバス２１０２を介して、レジスタリード関数readEvent()及びレジスタライト関数writeEvent()に応じてデータを入出力する。
【００６６】
図１１は、図６のモデル生成処理部６０４がハードウェアモデル１０４を生成する処理を示すフローチャートである。この処理は、図３０のＣＰＵ（プロセッサ）３００２がプログラムを実行することにより行う。ステップＳ１１０１では、割り込みモデル生成処理部６０５が割り込みモデル１０６を生成する。次に、ステップＳ１１０２では、レジスタモデル生成処理部６０６がリード時レジスタモデル１０５を生成する。次に、ステップＳ１１０３では、レジスタモデル生成処理部６０６がライト時レジスタモデル１０５を生成する。次に、ステップＳ１１０４では、擬似コマンド実行モデル生成処理部６０７が擬似コマンド実行モデル１０７を生成する。
【００６７】
図１２は図１１のステップＳ１１０１の割り込みモデル生成処理の詳細を示すフローチャートであり、図２７及び図２８はそれにより生成される割り込みモデル（割り込み処理関数setIrq()）を示す図である。割り込み処理関数setIrq()は、ソフトウェア（プログラム言語）により記述された関数である。割り込み処理関数setIrq()は、引数として割り込み関連レジスタのアドレスregAdrとライトデータregValueを持ち、割り込み状態更新部２７０２〜２７０５等と割り込み更新部２７０６によって構成される。割り込み状態更新部２７０２〜２７０５等は、割り込み関連レジスタregAdrへの書き込みの前後での割り込み状態（ＣＰＵ１０１に対して割り込みが発生するかどうか）を求める処理を行う。割り込み更新部２７０６では、割り込み状態更新部２７０２〜２７０５等で求めた割り込み状態に応じて割り込みの発生setInterrupt()、割り込みのクリアclearInterrupt()を行う。割り込みモデル生成処理では、割り込みレジスタ構成データ（図８）に含まれる全てのレジスタについて、割り込み状態更新用のコードを生成する。全ての割り込み関連レジスタの割り込み状態更新部２７０２〜２７０５等のコード生成完了後に、割り込み更新部２７０６のコードを生成する。
【００６８】
ステップＳ１２０１では、割り込み処理関数setIrq()の先頭部分２７０１のコードを生成する。
【００６９】
次に、ステップＳ１２０２では、割り込み状態更新部（ｃａｓｅ文）２７０２〜２７０５等のコードをレジスタ単位で生成する。割り込み状態更新部２７０２〜２７０５は、それぞれレジスタＩＲＱ＿Ａ＿ＥＮＡＢＬＥ、ＩＲＱ＿Ｂ、ＩＲＱ＿Ｂ＿ＭＡＳＫ及びＩＲＱ＿Ｂ＿ＣＬＥＡＲの割り込み状態更新部である。その詳細は、後に図１３を参照しながら説明する。
【００７０】
次に、ステップＳ１２０３では、全ての割り込み関連レジスタの処理が終了したか否かをチェックする。終了していなければステップＳ１２０２に戻り、終了すればステップＳ１２０４へ進む。
【００７１】
ステップＳ１２０４では、割り込み更新部２７０６のコードを生成する。更新（ライト）前の割り込み状態currentIrqが０（割り込み不発生）であり、かつ更新後の割り込み状態newIrqが１（割り込み発生）であるときには、割り込み発生関数setInterrupt()を実行する。また、更新前の割り込み状態currentIrqが１（割り込み発生）であり、かつ更新後の割り込み状態newIrqが０（割り込み不発生）であるときには、割り込みクリア関数clearInterrupt()を実行する。
【００７２】
次に、ステップＳ１２０５では、割り込み処理関数setIrq()の最後の部分２７０７のコードを生成する。
【００７３】
図１３は、図１２のステップＳ１２０２の割り込み状態更新部生成処理の詳細を示すフローチャートである。ここでは、レジスタの種類に応じて割り込み状態更新用のコードを生成する。レジスタの種類には、ステータスのマスク／イネーブルレジスタ、割り込み要因レジスタ、割り込みのマスク／イネーブルレジスタ、割り込みクリアレジスタの４種類がある。それぞれの場合の詳細処理については図１３に示す。基本的には、（１）レジスタ更新前の割り込み状態を求める、（２）レジスタ更新後の割り込み状態を求める、（３）更新されたレジスタの値を実際に更新する、の順で処理を行う。
【００７４】
まず、ステップＳ１３０１では、レジスタ名を使用してｃａｓｅ文を生成する。
次に、ステップＳ１３０２では、ステータスのマスク／イネーブルレジスタであるか否かをチェックする。そうであればステップＳ１３０３へ進み、否の場合にはステップＳ１３０４へ進む。
【００７５】
ステップＳ１３０４では、割り込み要因レジスタであるか否かをチェックする。そうであればステップＳ１３０５へ進み、否の場合にはステップＳ１３０６へ進む。
【００７６】
ステップＳ１３０６では、割り込みのマスク／イネーブルレジスタであるか否かをチェックする。そうであればステップＳ１３０７へ進み、否の場合にはステップＳ１３０８へ進む。
【００７７】
ステップＳ１３０８では、割り込みクリアレジスタであるか否かをチェックする。そうであればステップＳ１３０９へ進む。
【００７８】
ステップＳ１３０３では、ステータスのマスク／イネーブルレジスタの割り込み状態更新部２７０２等を生成する。（１）更新前の割り込み状態currentIrqを求めるコードを生成する。例えば、レジスタＩＲＱ＿Ａ＿ＥＮＡＢＬＥ及びＩＲＱ＿Ａ＿ＳＴＡＴＵＳの論理積を更新前の割り込み状態currentIrqとして求める。（２）更新後の割り込み状態newIrqを求めるコードを生成する。例えば、ライトデータregValue及びレジスタＩＲＱ＿Ａ＿ＳＴＡＴＵＳの論理積を更新後の割り込み状態newIrqとして求める。（３）マスク／イネーブルレジスタの更新コードwriteReg()を生成する。例えば、レジスタＩＲＱ＿Ａ＿ＥＮＡＢＬＥにライトデータregValueをライトする。その後、ステップＳ１３１０でbreak文を生成する。
【００７９】
ステップＳ１３０５では、割り込み要因レジスタの割り込み状態更新部２７０３等を生成する。（１）更新前の割り込み状態currentIrqを求めるコードを生成する。（２）更新後のステータスレジスタ値newStatusを求めるコードを生成する。（３）更新後の割り込み状態newIrqを求めるコードを生成する。（４）割り込み要因レジスタの更新コードwriteReg(IRQ_B,regValue)を生成する。（５）ステータスレジスタの更新コードwriteReg(IRQ_A_STATUS,newStatus)を生成する。その後、ステップＳ１３１０でbreak文を生成する。
【００８０】
ステップＳ１３０７では、割り込みのマスク／イネーブルレジスタの割り込み状態更新部２７０４等を生成する。（１）更新前の割り込み状態currentIrqを求めるコードを生成する。（２）更新後のステータスレジスタ値newStatusを求めるコードを生成する。（３）更新後の割り込み状態newIrqを求めるコードを生成する。（４）マスク／イネーブルレジスタの更新コードwriteReg(IRQ_B_MASK,regValue)を生成する。（５）ステータスレジスタの更新コードwriteReg(IRQ_A_STATUS,newStatus)を生成する。その後、ステップＳ１３１０でbreak文を生成する。
【００８１】
ステップＳ１３０９では、割り込みクリアレジスタの割り込み状態更新部２７０５等を生成する。（１）クリア後の割り込み要因レジスタの値irqRegValを求めるコードを生成する。（２）更新前の割り込み状態currentIrqを求めるコードを生成する。（３）更新後のステータスレジスタ値newStatusを求めるコードを生成する。（４）更新後の割り込み状態newIrqを求めるコードを生成する。（５）割り込み要因レジスタの更新コードwriteReg(IRQ_B,irqRegVal)を生成する。（６）ステータスレジスタの更新コードwriteReg(IRQ_A_STATUS,newStatus)を生成する。その後、ステップＳ１３１０でbreak文を生成する。
【００８２】
図１４は図１１のステップＳ１１０２のリード時レジスタモデル生成処理の詳細を示すフローチャートであり、図２５はそれにより生成されるリード時レジスタモデル（リードイベント関数readEvent()）を示す図である。リードイベント関数readEvent()は、ソフトウェア（プログラム言語）により記述された関数である。ここでは、リード時のレジスタモデルの動作部分のコードを生成する。全てのレジスタについて対応するアドレスのデータを読み出すコードを生成する。
【００８３】
まず、ステップＳ１４０１では、レジスタモデルをレジスタ単位で生成する。その詳細は、後に図１５を参照しながら説明する。次に、ステップＳ１４０２では、全てのレジスタの処理が終了したか否かをチェックする。終了していなければステップＳ１４０１に戻り、終了していれば処理を終了する。
【００８４】
図１５は、図１４のステップＳ１４０１のレジスタモデル生成処理の詳細を示すフローチャートである。switch文を使いアドレス毎に対応するレジスタからリードを行うコードを生成する。まず、ステップＳ１５０１では、レジスタ名を使用してcase行２５０１（図２５）を生成する。次に、ステップＳ１５０２では、図７のレジスタ仕様データに記載されているアドレスからリードを行うコード（レジスタリード関数readReg()）２５０２（図２５）を生成する。次に、ステップＳ１５０３では、break文２５０３（図２５）を生成する。
【００８５】
図１６は図１１のステップＳ１１０３のライト時レジスタモデル生成処理の詳細を示すフローチャートであり、図２６はそれにより生成されるライト時レジスタモデル（ライトイベント関数writeEvent()）を示す図である。ライトイベント関数writeEvent()は、ソフトウェア（プログラム言語）により記述された関数である。
【００８６】
ライトの場合はレジスタの種類によって生成処理が異なる。レジスタモデルの種類には、通常レジスタ、割り込みレジスタ、コマンド起動レジスタの３種類がある。通常レジスタの場合は、単純にライトのみを行うコードを生成する。割り込みレジスタの場合は、割り込みモデルを呼び出すコードを生成する。コマンド起動レジスタの場合は、ウェイト関数を呼び出すコードを生成する。レジスタ仕様データ６０２の全てのレジスタについて処理を行ったら終了する。
【００８７】
まず、ステップＳ１６０１では、レジスタ仕様データ６０２内の処理対象のレジスタが通常レジスタであるか否かをチェックする。通常レジスタであればステップＳ１６０２へ進み、通常レジスタでなければステップＳ１６０３へ進む。ステップＳ１６０２では、通常レジスタモデルを生成する。その詳細は、後に図１７を参照しながら説明する。その後、ステップＳ１６０７へ進む。
【００８８】
ステップＳ１６０３では、レジスタ仕様データ６０２内の処理対象のレジスタが割り込みレジスタであるか否かをチェックする。割り込みレジスタであればステップＳ１６０４へ進み、割り込みレジスタでなければステップＳ１６０５へ進む。ステップＳ１６０４では、割り込みレジスタモデルを生成する。その詳細は、後に図１８を参照しながら説明する。その後、ステップＳ１６０７へ進む。
【００８９】
ステップＳ１６０５では、レジスタ仕様データ６０２内の処理対象のレジスタがコマンド起動レジスタであるか否かをチェックする。コマンド起動レジスタであればステップＳ１６０６へ進み、コマンド起動レジスタでなければステップＳ１６０７へ進む。ステップＳ１６０６では、コマンド起動レジスタモデルを生成する。その詳細は、後に図１９を参照しながら説明する。その後、ステップＳ１６０７へ進む。
【００９０】
ステップＳ１６０７では、レジスタ仕様データ６０２内の全てのレジスタの処理が終了したか否かをチェックする。終了していなければステップＳ１６０１へ戻り、終了していれば処理を終了する。
【００９１】
図１７は、図１６のステップＳ１６０２の通常レジスタモデル生成処理の詳細を示すフローチャートである。この処理は、図１５のリード処理と同様に、switch文を使用し、アドレスに対応するレジスタへライトを行うコードを生成する。まず、ステップＳ１７０１では、レジスタ名を使用してcase行を生成する。次に、ステップＳ１７０２では、図７のレジスタ仕様データに記載されているアドレスへのライトを行うコード（レジスタライト関数writeReg()）を生成する。次に、ステップＳ１７０３では、break文を生成する。
【００９２】
図１８は、図１６のステップＳ１６０４の割り込みレジスタモデル生成処理の詳細を示すフローチャートである。ここでは、当該レジスタのアドレスaddressとライトデータregValueを引数として割り込みモデルを呼び出すコードsetIrq()を生成する。まず、ステップＳ１８０１では、レジスタ名を使用してcase行２６１１（図２６）を生成する。次に、ステップＳ１８０２では、図７のレジスタ仕様データに記載されているアドレスIRQ_A_ENABLE（address）と書き込まれた値regValueを引数として割り込みモデルを呼び出すコード（関数setIrq()）２６１２（図２６）を生成する。次に、ステップＳ１８０３では、break文２６１３（図２６）を生成する。
【００９３】
図１９は、図１６のステップＳ１６０６のコマンド起動レジスタモデル生成処理の詳細を示すフローチャートである。図１０のタイミング仕様データの当該起動レジスタ内のそれぞれのコマンドに対応するビットが１になっているかどうかを確認し、いずれかのビットが１になっていた場合は対応するシーケンスＩＤとサイクル数を引数としてウェイトサイクル設定関数setTimerCycle()を呼び出すコードを出力する。まず、ステップＳ１９０１では、レジスタ名を使用してcase行２６０１（図２６）を生成する。次に、ステップＳ１９０２では、図１０のタイミング仕様データのレジスタに対応するコマンド起動レジスタビット番号を使い、if文でコマンド起動ビットが１になっているかどうかを確認するコード２６０２（図２６）を出力する。次に、ステップＳ１９０３では、タイミング仕様データのシーケンスＩＤとサイクル数を使い、ウェイトサイクル設定関数setTimerCycle()を呼び出すコード２６０３（図２６）を出力する。次に、ステップＳ１９０４では、全てのビット番号の処理が終了したか否かをチェックする。コマンド起動レジスタＣＯＭ＿ＲＥＱの場合、０ビット目（＝１）、１ビット目（＝２）、３ビット目（＝４）の３個のビット番号の処理を行う必要がある。終了していないときにはステップＳ１９０２へ戻り、終了しているときにはステップＳ１９０５へ進む。ステップＳ１９０５では、break文２６０４（図２６）を生成する。
【００９４】
図２０は図１１のステップＳ１１０４の擬似コマンド実行モデル生成処理の詳細を示すフローチャートであり、図２９はそれにより生成される擬似コマンド実行モデル（ウェイトイベント関数timerEvent()）を示す図である。ウェイトイベント関数timerEvent()は、ソフトウェア（プログラム言語）により記述された関数である。擬似コマンド実行モデルの関数timerEvent()は、シーケンスＩＤ（id）を引数として、ウェイト処理完了後にＣＰＵ１０１側から呼び出される。擬似コマンド実行モデル生成処理では、タイミング仕様データ（図１０）のシーケンスＩＤ毎に、対応する割り込み要因レジスタ／要因ビットを指定して割り込み処理関数setIrq()を呼び出すコードを生成する。
【００９５】
まず、ステップＳ２００１では、ウェイトイベント関数timerEvent()の先頭部分２９０１のコードを生成する。次に、ステップＳ２００２では、シーケンスＩＤ（id）を使用してcase行２９０２を生成する。次に、ステップＳ２００３では、割り込み要因レジスタＩＲＱ＿Ｂの値を読み出し、シーケンスＩＤに対応するビットを１にするコード２９０３を生成する。次に、ステップＳ２００４では、シーケンスＩＤに対応する割り込み要因レジスタＩＲＱ＿Ｂを指定して割り込み処理関数setIrq()を呼び出すコード２９０４を生成する。次に、ステップＳ２００５では、break文２９０５を生成する。次に、ステップＳ２００６では、全てのシーケンスＩＤの処理を終了したか否かをチェックする。終了していなければステップＳ２００２に戻り、終了していればステップＳ２００７へ進む。ステップＳ２００７では、ウェイトイベント関数timerEvent()の最後の部分２９０６のコードを生成する。
【００９６】
図２２は、図１３のステップＳ１３０５において割り込み要因レジスタIRQ_Bが変化した場合の割り込み状態更新部コード２２１０を生成する処理例を示す図である。各レジスタのアドレスは、#define文で定義しておく。
【００９７】
まず、ステップＳ２２０１では、レジスタ名を使用してcase行２２１１を生成する。次に、ステップＳ２２０２では、更新前の割り込み状態（currentIrq）を求めるコード２２１２を生成する。この例では、ＣＰＵ１０１に接続されているレジスタセットＡのイネーブルレジスタ（IRQ_A_ENABLE）とステータスレジスタ（IRQ_A_STATUS）の論理積を求めるコード２２１２を生成する。
【００９８】
次に、ステップＳ２２０３では、更新後のステータスレジスタIRQ_A_STATUSの値（newStatus）を求めるコード２２１３を生成する。まず、if文の条件部分として、割り込み要因レジスタに書き込まれた値と、対応するマスクレジスタをビット反転した値の論理積を求めて０と比較するコードを出力する。次に、条件が成立する場合（割り込み無し）のコードとして、ステータスレジスタのレジスタセットに対応するビットを０にしてnewStatus値に代入するコードを出力する。最後に、条件が成立しない場合（割り込み発生）のコードとして、ステータスレジスタのレジスタセットに対応するビットを１にしてnewStatus値に代入するコードを出力する。
【００９９】
次に、ステップＳ２２０４では、更新後の割り込み状態（newStatus）を求めるコード２２１４を生成する。割り込み仕様データ６０１を基にＣＰＵ１０１に接続されている割り込みレジスタセットを探し、そのレジスタセットに含まれるイネーブルレジスタとnewStatus値の論理積を求めて、newIrq値に代入するコード２２１４を出力する。
【０１００】
次に、ステップＳ２２０５では、割り込み要因レジスタIRQ_Bを関数writeReg()により更新するコード２２１５を生成する。次に、ステップＳ２２０６では、ステータスレジスタIRQ_A_STATUSを関数writeReg()により更新するコード２２１６を生成する。次に、ステップＳ２２０７では、break文２２１７を生成する。
【０１０１】
図２３は、図１９のコマンド起動レジスタ生成処理の他の例を示す図である。この処理により、コマンド起動レジスタ部コード２３１０を生成することができる。コマンド起動レジスタＣＯＭ＿ＲＥＱが変化した場合のコード生成例を示す。まず、ステップＳ２３０１では、レジスタ名を使用してcase行２３１１を生成する。次に、ステップＳ２３０２では、図１０のタイミング仕様データのレジスタに対応するコマンド起動レジスタビット番号を使い、if文でコマンド起動ビットが１になっているかどうかを確認するコード２３１２を出力する。次に、ステップＳ２３０３では、タイミング仕様データのシーケンスＩＤとサイクル数を使い、ウェイトサイクル設定関数setTimerCycle()を呼び出すコード２３１３を出力する。次に、ステップＳ２３０４では、全てのビット番号の処理が終了したか否かをチェックする。終了していないときにはステップＳ２３０２へ戻り、終了しているときにはステップＳ２３０５へ進む。ステップＳ２３０５では、break文２３１４を生成する。
【０１０２】
図２４は、図２０の擬似コマンド実行モデル生成処理の他の例を示す図である。この処理により、擬似コマンド実行モデルのコード２４１０を生成することができる。まず、ステップＳ２４０１では、ウェイトイベント関数timerEvent()の先頭部分２４１１のコードを生成する。次に、ステップＳ２４０２では、シーケンスＩＤ（id）を使用してcase行２４１２を生成する。次に、ステップＳ２４０３では、割り込み要因レジスタＩＲＱ＿Ｃの値を読み出し、シーケンスＩＤに対応するビットを１にするコード２４１３を生成する。例えば、シーケンスＩＤが２の場合、対応する割り込み要因（レジスタＩＲＱ＿Ｃの０ビット目）の更新後の値を求めてirqVal値に代入するコード２４１３を生成する。次に、ステップＳ２４０４では、シーケンスＩＤに対応する割り込み要因レジスタＩＲＱ＿Ｃを指定して割り込み処理関数setIrq()を呼び出すコード２４１４を生成する。例えば、関数setIrq()にレジスタＩＲＱ＿Ｃのアドレスと更新後の値irqValを引数として渡して呼び出すコード２４１４を生成する。次に、ステップＳ２４０５では、break文２４１５を生成する。次に、ステップＳ２４０６では、全てのシーケンスＩＤの処理を終了したか否かをチェックする。終了していなければステップＳ２４０２に戻り、終了していればステップＳ２４０７へ進む。ステップＳ２４０７では、ウェイトイベント関数timerEvent()の最後の部分２４１６のコードを生成する。
【０１０３】
以上のように、本実施形態によれば、ハードウェアをシミュレーションするためのソフトウェアを生成するソフトウェア生成装置である。外部記憶装置（記憶手段）３００８は、図６の前記ハードウェアの割り込み仕様データ６０１、前記ハードウェアのレジスタ仕様データ６０２、及びハードウェアの処理開始が指示されてから終了するまでの時間を示すタイミング仕様データ６０３を記憶する。
【０１０４】
ＣＰＵ（プロセッサ）３００２は、割り込みモデル生成処理部６０５に対応し、前記割り込み仕様データ６０１を基に、前記ハードウェアの割り込み発生、マスク機能又はクリア機能を擬似的に実現する割り込み処理関数setIrq()のソフトウェアを生成する。
【０１０５】
また、ＣＰＵ（プロセッサ）３００２は、レジスタモデル生成処理部６０６に対応し、前記レジスタ仕様データ６０２を基に、前記ハードウェアのレジスタからデータをリードする機能を実現するレジスタリードモデル（レジスタリード関数readEvent()）、及び前記ハードウェアのレジスタにデータをライトする機能を実現するレジスタライトモデル（レジスタライト関数writeEvent()）のソフトウェアを生成する。
【０１０６】
また、ＣＰＵ（プロセッサ）３００２は、擬似コマンド実行モデル生成処理部６０７に対応し、前記タイミング仕様データ６０３を基に、前記ハードウェアの処理開始が指示されると前記ハードウェアの処理を行わずにスケジューラに対して時間情報を設定するためのレジスタライト関数writeEvent()、前記時間経過後のスケジューラからの通知により割り込み又はコマンド実行の処理を行うための時間経過通知関数timerEvent()のソフトウェアを生成する。
【０１０７】
また、外部記憶装置（記憶手段）３００８は、ハードウェアをシミュレーションするためのハードウェアモデル１０４のソフトウェアを記憶する。ＣＰＵ（プロセッサ）３００２は、前記ハードウェアモデル１０４のソフトウェアを実行するためのプロセッサである。前記ハードウェアモデルのソフトウェアは、レジスタモデル１０５、割り込みモデル１０６及び擬似コマンド実行モデル１０７のソフトウェアを含む。レジスタモデル１０５のソフトウェアは、レジスタリード関数readEvent()及びレジスタライト関数writeEvent()のソフトウェアを含む。割り込みモデル１０５のソフトウェアは、割り込み処理関数setIrq()のソフトウェアを含む。擬似コマンド実行モデル１０７は、レジスタライト関数writeEvent()および時間経過通知関数timerEvent()のソフトウェアを含む。
【０１０８】
本実施形態によれば、ハードウェア及びソフトウェアが混在したシステムの開発を行う場合、ハードウェアの論理設計が完了する前に、図１のシステムを用いてファームウェア、ミドルウェア等のソフトウェア開発を開始することができる。
【０１０９】
図３のハードウェア機能モデル３０７は、ハードウェア機能をソフトウェアにより実現するため、開発期間が長期化する。本実施形態では、ハードウェア機能の処理を行わずにウェイトサイクル数のウェイトを行った後に割り込みを発生させるため、ハードウェアモデルの開発期間を短縮することができる。
【０１１０】
また、図３では、ハードウェアモデルをマニュアル生成するため、開発期間が長期化する。本実施形態のソフトウェア生成装置（図６）は、上記のようにハードウェア機能を制限することにより、ハードウェアモデルを自動生成することができる。ハードウェアモデル開発期間を１日程度に短縮することができる。これは、図３の場合に比べて、１／１０以下の期間である。
【０１１１】
本実施形態は、コンピュータがプログラムを実行することによって実現することができる。また、プログラムをコンピュータに供給するための手段、例えばかかるプログラムを記録したＣＤ−ＲＯＭ等のコンピュータ読み取り可能な記録媒体又はかかるプログラムを伝送するインターネット等の伝送媒体も本発明の実施形態として適用することができる。また、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体等のコンピュータプログラムプロダクトも本発明の実施形態として適用することができる。上記のプログラム、記録媒体、伝送媒体及びコンピュータプログラムプロダクトは、本発明の範疇に含まれる。記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【０１１２】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【図面の簡単な説明】
【０１１３】
【図１】本発明の実施形態によるファームウェア検証支援システム（シミュレーションシステム）の構成例を示す図である。
【図２】スタブ関数を使用したファームウェア検証支援システムの構成図である。
【図３】ハードウェア（ＨＷ）モデルを使用したファームウェア検証支援システムの構成図である。
【図４】ＩＳＳ及びハードウェアモデル間のＡＰＩの関数を示す図である。
【図５】ＡＰＩの関数の使用例を示す図である。
【図６】擬似ハードウェアモデルの自動生成システム（ソフトウェア生成装置）の構成例を示す図である。
【図７】図６のレジスタ仕様データの構成例を示す図である。
【図８】図６の割り込み仕様データ内の割り込みレジスタ構成データの構成例を示す図である。
【図９】図６の割り込み仕様データ内の割り込みレジスタセット接続関係データの構成例を示す図である。
【図１０】図６のタイミング仕様データの構成例を示す図である。
【図１１】図６のモデル生成処理部がハードウェアモデルを生成する処理を示すフローチャートである。
【図１２】図１１の割り込みモデル生成処理の詳細を示すフローチャートである。
【図１３】図１２の割り込み状態更新部生成処理の詳細を示すフローチャートである。
【図１４】図１１のリード時レジスタモデル生成処理の詳細を示すフローチャートである。
【図１５】図１４のレジスタモデル生成処理の詳細を示すフローチャートである。
【図１６】図１１のライト時レジスタモデル生成処理の詳細を示すフローチャートである。
【図１７】図１６の通常レジスタモデル生成処理の詳細を示すフローチャートである。
【図１８】図１６の割り込みレジスタモデル生成処理の詳細を示すフローチャートである。
【図１９】図１６のコマンド起動レジスタモデル生成処理の詳細を示すフローチャートである。
【図２０】図１１の擬似コマンド実行モデル生成処理の詳細を示すフローチャートである。
【図２１】ＣＰＵ（ＩＳＳ）及びハードウェアモデルの構成例を示す図である。
【図２２】図１３の割り込み要因レジスタが変化した場合の割り込み状態更新部コードを生成する処理例を示す図である。
【図２３】図１９のコマンド起動レジスタ生成処理の他の例を示す図である。
【図２４】図２０の擬似コマンド実行モデル生成処理の他の例を示す図である。
【図２５】図１４の処理により生成されるリード時レジスタモデル（リードイベント関数readEvent()）を示す図である。
【図２６】図１６の処理により生成されるライト時レジスタモデル（ライトイベント関数writeEvent()）を示す図である。
【図２７】図１２の処理により生成される割り込みモデル（割り込み処理関数setIrq()）を示す図である。
【図２８】図１２の処理により生成される割り込みモデル（割り込み処理関数setIrq()）を示す図である。
【図２９】図２０の処理により生成される擬似コマンド実行モデル（ウェイトイベント関数timerEvent()）を示す図である。
【図３０】図１のシステムを実現するコンピュータのハードウェア構成例を示す図である。
【符号の説明】
【０１１４】
１０１  ＣＰＵ（ＩＳＳ）
１０２  ファームウェア
１０３  ＡＰＩ
１０４  ソフトウェア検証用擬似ハードウェアモデル
１０５  レジスタモデル
１０６  割り込みモデル
１０７  擬似コマンド実行モデル
６０１  割り込み仕様データ
６０２  レジスタ仕様データ
６０３  タイミング仕様データ
６０４  モデル生成処理部
６０５  割り込みモデル生成処理部
６０６  レジスタモデル生成処理部
６０７  擬似コマンド実行モデル生成処理部
【図１】
2008204006.tif 000003
【図２】
2008204006.tif 000004
【図３】
2008204006.tif 000005
【図４】
2008204006.tif 000006
【図５】
2008204006.tif 000007
【図６】
2008204006.tif 000008
【図７】
2008204006.tif 000009
【図８】
2008204006.tif 000010
【図９】
2008204006.tif 000011
【図１０】
2008204006.tif 000012
【図１１】
2008204006.tif 000013
【図１２】
2008204006.tif 000014
【図１３】
2008204006.tif 000015
【図１４】
2008204006.tif 000016
【図１５】
2008204006.tif 000017
【図１６】
2008204006.tif 000018
【図１７】
2008204006.tif 000019
【図１８】
2008204006.tif 000020
【図１９】
2008204006.tif 000021
【図２０】
2008204006.tif 000022
【図２１】
2008204006.tif 000023
【図２２】
2008204006.tif 000024
【図２３】
2008204006.tif 000025
【図２４】
2008204006.tif 000026
【図２５】
2008204006.tif 000027
【図２６】
2008204006.tif 000028
【図２７】
2008204006.tif 000029
【図２８】
2008204006.tif 000030
【図２９】
2008204006.tif 000031
【図３０】
2008204006.tif 000032