(57)【特許請求の範囲】
【請求項１】
コンピュータプログラムに含まれた複数の指令にしたがって異なる対象の動作をそれぞれシミュレートする複数の演算部と、
これら演算部の動作タイミングを制御して前記演算部において実行される前記指令を協調させる協調制御部と
を備え、
前記演算部の少なくとも１つは、
前記複数の指令のうち、１の指令がハードウェア部分の動作に影響を与える指令であるか否かを識別する指令識別部と、
この指令識別部による識別結果に基づいて前記動作クロックの周波数を変更する指令を前記１の指令に追加する指令追加部と、
当該演算部が実行する指令に応じてその指令を実行する際の動作クロックを制御するクロック制御部と
を備え、
前記指令識別部は、
任意の論理回路における動作モデルを所定の言語で記述された少なくとも１つのハードウェアプログラムと、任意のプロセッサによる機能の動作モデルを所定の言語で記述された少なくとも１つのソフトウェアプログラムとのいずれかにおいて、前記ハードウェアのレジスタに格納されるデータの読み出し完了を示す読出完了指令および書き込み開始を示す書込開始指令を抽出し、
前記指令追加部は、
前記指令識別部によって前記読出完了指令および前記書込完了指令が抽出された前記ハードウェアプログラムまたは前記ソフトウェアプログラムに対し、抽出された前記読出完了指令の直後に前記クロックの周波数を予め定めた第１の周波数から任意の第２の周波数に変更させる第１の指令を追加するとともに、抽出された前記書込開始指令の直前に前記クロックの周波数を予め定めた前記第１の周波数へ変更させる第２の指令を追加し、
前記クロック制御部は、
前記指令追加部によって追加された前記指令に基づいて前記動作クロックの周波数を制御する
ことを特徴とするシミュレーション装置。
【請求項２】
コンピュータプログラムに含まれた複数の指令にしたがって異なる対象の動作をそれぞれシミュレートする複数の演算部と、これら演算部の動作タイミングを制御して前記演算部において実行される前記指令を協調させる協調制御部とを備えたシミュレーション装置の制御方法であって、
前記複数の演算部が、前記複数の指令にしたがって異なる対象の動作をそれぞれシミュレートする演算ステップと、
前記協調制御部が、複数の前記演算ステップの動作タイミングを制御して前記複数の演算ステップにおいて実行される前記指令を協調させる協調制御ステップと
前記演算ステップにより実行される指令に応じてその指令を実行する際の動作クロックを制御するクロック制御ステップと
を備え、
前記演算部の少なくとも１つによって実行される前記演算ステップは、
前記複数の指令のうち、１の指令が他の指令に基づく動作に対して影響を与える指令であるか否かを識別する指令識別ステップと、
この指令識別ステップによる識別結果に基づいて前記動作クロックの周波数を変更する指令を前記１の指令に追加する指令追加ステップとを備え、
前記指令識別ステップは、
任意の論理回路における動作モデルを所定の言語で記述された少なくとも１つのハードウェアプログラムと、任意のプロセッサによる機能の動作モデルを所定の言語で記述された少なくとも１つのソフトウェアプログラムとのいずれかにおいて、前記ハードウェアのレジスタに格納されるデータの読み出し完了を示す読出完了指令および書き込み開始を示す書込開始指令を抽出し、
前記指令追加ステップは、
前記指令識別ステップによって前記読出完了指令および前記書込完了指令が抽出された前記ハードウェアプログラムまたは前記ソフトウェアプログラムに対し、抽出された前記読出完了指令の直後に前記動作クロックの周波数を予め定めた第１の周波数から任意の第２の周波数に変更させる第１の指令を追加するとともに、抽出された前記書込開始指令の直前に前記動作クロックの周波数を予め定めた前記第１の周波数へ変更させる第２の指令を追加し、
前記クロック制御ステップは、
前記協調制御部が、前記指令追加ステップによって追加された前記指令に基づいて前記動作クロックの周波数を制御する
ことを特徴とするシミュレーション装置の制御方法。
【請求項３】
コンピュータに、請求項２記載のシミュレーション装置の制御方法を実行させることを特徴とするシミュレーション装置の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーション装置、シミュレーション装置の制御方法およびプログラムに関し、特に、複数のシミュレーション処理を協調させてシステムの機能を検証するシミュレーション装置、シミュレーション装置の制御方法およびプログラムに関する。
【背景技術】
【０００２】
近年、複数の処理が協働して所望の機能を発揮するシステムの開発において、複数の処理を同時に設計するシステムレベル設計手法が広く用いられている。このようなシステムレベル設計手法では、設計途中の複数の処理を協調動作させる協調シミュレーションを実行し、それぞれの処理の因果関係を検証する必要がある。
【０００３】
例えば、１つのチップにプロセッサやメモリ、それら周辺回路を集積し、ハードウェアとソフトウェアとが協働するＳｏＣ（System on a Chip）をシステムレベル設計手法を用いて開発する場合、ＳｏＣのシステム設計の初期段階では、システムに搭載するプロセッサによる逐次処理を前提とした処理機能とそれらの順序とを定めたシステムの機能モデルが検討され、この機能モデルからシステムに必要なハードウェア部分およびソフトウェア部分の設計が進められる。
この際、協調シミュレーションを実行して、設計途中のハードウェアとソフトウェアとを協調動作させ、これら両者の因果関係の整合性を検証することにより、所望のシステムの設計開発が進められる。
【０００４】
従来より、協調シミュレーションとしては、プロセッサや記憶装置、インターフェースを搭載したホストコンピュータにおいて、設計途中のシステムのハードウェアおよびソフトウェアの動作を表すプログラムを実行して、システムのハードウェアとソフトウェアを擬似的に協調動作させ、その両者の因果関係を検証するハードウェア／ソフトウェア協調シミュレーション（以下、「ＨＷ／ＳＷ協調シミュレーション」という。）が知られている（非特許文献１−２）。
【０００５】
ここで、ＨＷ／ＳＷ協調シミュレーションを例に、従来の協調シミュレーションについて、図９〜図１１を参照して具体的に説明する。
図９に示すように、ＨＷ／ＳＷ協調シミュレーションの対象となるシステムの機能モデルは、システムのハードウェア部分による動作モデルを記述したソースコード（以下、「ＨＷソースコード」という。）およびソフトウェア部分による動作モデルを記述したソースコード（以下、「ＳＷソースコード」という。）によって構成される。
ＨＷソースコードは、ハードウェア部分による動作をハードウェア記述言語（SystemCなど）によって記述されたソースコードであり、ＳＷソースコードは、ソフトウェア部分による動作を所定の言語（C言語など）によって記述されたソースコードである。
【０００６】
従来のホストコンピュータによるＨＷ／ＳＷ協調シミュレーション処理は、ＨＷソースコードとＳＷソースコードとをそれぞれコンパイルして生成されたハードウェア部分の動作モデルに対するハードウェアシミュレーションが実行可能なオブジェクトコードと、ソフトウェア部分の動作モデルに対するソフトウェアシミュレーションが実行可能なプロセッサに対する命令語列などのバイナリコードとに基づいてハードウェアシミュレータおよびソフトウェアシミュレータがそれぞれのシミュレーション処理を実行し、それらシミュレーションの結果における因果関係を検証するものである。
【０００７】
以下、ホストコンピュータによるハードウェア部分のハードウェアシミュレーションにおける一連の処理を「ハードウェア処理」、ソフトウェア部分のソフトウェアシミュレーションにおける一連の処理を「ソフトウェア処理」と呼び、従来のＨＷ／ＳＷ協調シミュレーションの詳細について説明する。
【０００８】
ＨＷ／ＳＷ協調シミュレーション装置２０は、図１０に示すように、ソフトウェアシミュレート実行部２１０と、ハードウェアシミュレート実行部２２０と、協調シミュレート実行部２３０とから構成されている。これらＨＷ／ＳＷ協調シミュレーション装置２０の構成要素がホストコンピュータに搭載されることによって、ＨＷ／ＳＷ協調シミュレーション装置２０は、ホストコンピュータのプロセッサや記憶装置、インターフェースを用いてＨＷ／ＳＷ協調シミュレーションを実行する。
【０００９】
ＨＷ／ＳＷ協調シミュレーション装置２０のソフトウェアシミュレート実行部２１０は、ＳＷソースコードをコンパイルしてソフトウェアシミュレーションが実行可能なプロセッサに対する命令語列などのバイナリコードを生成し、このバイナリコードに基づいてソフトウェア処理を実行する。
例えば、ＩＳＳ（Instruction set simulator)などのソフトウェアシミュレータによってバイナリコードから取り出した指令を実行することにより、ソフトウェアの動作をシミュレートする。
また、バイナリコードから取り出した１の指令の処理に要する時間情報は、ＩＳＳなどのソフトウェアシミュレータによるシミュレーション処理が実行される際のクロックの周波数により取得することができ、ソフトウェアシミュレーションによりソフトウェアの動作の処理時間を積算できる。
【００１０】
ハードウェアシミュレート実行部２２０は、ＨＷソースコードをコンパイルしてハードウェアシミュレーションが実行可能なオブジェクトコードを含んだハードウェアシミュレーションの条件を示す情報であるテストベンチを生成し、このテストベンチに基づいてハードウェア処理を実行する。
例えば、ＥＤＡ（Electronic Design Automation）ツールなどのハードウェアシミュレータによって、テストベンチに定められた条件に従いオブジェクトコードを実行することにより、ハードウェアの動作をシミュレートする。
また、テストベンチには、オブジェクトコードの実行に要する時間情報が組み込まれており、ハードウェアシミュレーションによりハードウェアの動作の処理時間を積算できる。
【００１１】
協調シミュレート実行部２３０は、ソフトウェアシミュレーションが実行されることで積算されるソフトウェアの動作の処理時間と、ハードウェアシミュレーションが実行されることで積算されるハードウェアの動作の処理時間とをそれぞれ監視し、それぞれのシミュレーション処理のタイミングを制御する。
具体的には、協調シミュレート実行部２３０は、ソフトウェアシミュレート実行部２１０またはハードウェアシミュレート実行部２２０によるそれぞれのシミュレーション処理のうち、互いのシミュレーション処理の結果に影響を及ぼすイベントの発生を監視するとともに、ソフトウェアシミュレート実行部２１０とハードウェアシミュレート実行部２２０とによるそれぞれのシミュレーション処理をこのイベントの発生に同期させる。
【００１２】
例えば、図１１に示すように、協調シミュレート実行部２３０は、ソフトウェアシミュレート実行部２１０によるシミュレーション処理のうち、ハードウェアのレジスタ領域へのアクセス命令（以下、「ＨＷレジスタ領域アクセス命令」という。）を実行するイベントの発生を監視して、ソフトウェアシミュレート実行部２１０とハードウェアシミュレート実行部２２０とのシミュレーション処理をＨＷレジスタ領域アクセス命令に同期させる。
【先行技術文献】
【非特許文献】
【００１３】
【非特許文献１】情報処理学会誌４５巻５号（２００４年５月，IPSJ-MGN450504）pp.456-463
【非特許文献２】日経ＢＰ社  日経エレクトロニクス  ２００２年７月２９日号（No.827）pp.104-133
【発明の概要】
【発明が解決しようとする課題】
【００１４】
しかしながら、複数のプログラムのうち、互いに影響を及ぼす指令に同期させてシミュレーションの実行開始および終了のタイミングを制御する従来の協調シミュレーションでは、複数のプログラムのうち、いずれかのプログラムにおける指令のシミュレーション処理の進行状況によっては、他方のプログラムにおけるシミュレーション処理に無用な待機時間を発生させてしまい、シミュレーション効率が低下してしまう場合があった。
【００１５】
例えば、図１１に示すようなＨＷ／ＳＷ協調シミュレーション処理の場合では、期間３におけるＨＷシミュレーション処理で実行される指令は、レジスタ領域に保持されるレジスタ値に影響を及ぼす指令である。一方、期間５におけるＨＷシミュレーション処理で実行される指令は、レジスタ値に影響を及ぼさない処理である。
すなわち、期間３ではＨＷシミュレーション処理とＳＷシミュレーション処理の開始と終了とを同期させて実行する必要があるが、期間５では必ずしも同期させる必要がないにもかかわらず、ＳＷシミュレーション処理はＨＷシミュレーション処理の完了を待たなければならず、無用な待機時間が発生してしまう。
したがって、期間５のＨＷシミュレーション処理が少ない程、プロセッサによるシミュレーション処理の計算時間を削減できる一方、この期間のＨＷシミュレーション処理が多いほど計算時間が増大し、シミュレーション効率の低下につながる。
【００１６】
また、シミュレーション効率の向上のために、設計対象であるハードウェア部分の動作モデルを変更することは、多大な設計コストを浪費するだけではなく、協調シミュレーションを実行する本来の目的である開発効率の向上から逸脱し、協調シミュレーションを用いた検証の意味をなさない。
【００１７】
そこで本発明は、上述した問題を解決するためになされたものであり、複数の処理を協調動作させてそれぞれの処置の因果関係を検証するシミュレーション処理において、無用な待機時間を抑制し、シミュレーション効率を向上させることを目的とする。
【課題を解決するための手段】
【００１８】
本発明は、上記の目的を達成するために、コンピュータプログラムに含まれた複数の指令に従って異なる対象の動作をそれぞれシミュレートする複数の演算部と、これら演算部の動作タイミングを制御して前記演算部において実行される前記指令を協調させる協調制御部とを備え、前記演算部の少なくとも１つは、当該演算部が実行する指令に応じてその指令を実行する際の動作クロックを制御するクロック制御部を備えることを特徴とする。
【００１９】
また、本発明にかかるシミュレーション装置の前記演算部は、前記複数の指令のうち、１の指令が他の指令に基づく動作に対して影響を与える指令であるか否かを識別する指令識別部と、この指令識別部による識別結果に基づいて前記動作クロックの周波数を変更する指令を前記１の指令に追加する指令追加部とを備え、前記クロック制御部は、前記指令追加部によって追加された前記指令に基づいて前記動作クロックの周波数を制御しても良い。
【００２０】
また、本発明にかかるシミュレーション装置の前記指令識別部は、任意の論理回路における動作モデルを所定の言語で記述された少なくとも１つのハードウェアプログラムと、任意のプロセッサによる機能の動作モデルを所定の言語で記述された少なくとも１つのソフトウェアプログラムとのいずれかにおいて、前記ハードウェアのレジスタに格納されるデータの読み出し完了を示す読出完了指令および書込開始を示す書込開始指令を抽出し、前記指令追加部は、前記指令識別部によって前記読出完了指令および前記書込完了指令が抽出された前記ハードウェアプログラムまたは前記ソフトウェアプログラムに対し、抽出された前記読出完了指令の直後に前記クロックの周波数を予め定めた第１の周波数から任意の第２の周波数に変更させる第１の指令を追加するとともに、抽出された前記書込開始指令の直前に前記クロックの周波数を予め定めた前記第１の周波数へ変更させる第２の指令を追加することにより、前記ハードウェアプログラムと前記ソフトウェアプログラムとが協働するシステムの機能を検証しても良い。
【発明の効果】
【００２１】
本発明によれば、コード生成部によって生成されるシミュレーションを実行するためのコードに基づいてシミュレーションを実行する際の検証クロックの周波数を制御することにより、複数のシミュレーション処理を協調させてシステムの機能モデルを検証する協調シミュレーションにおいて、それぞれのシミュレーション処理に合致した検証クロックを設定して協調シミュレーション処理を実行させることができる。
したがって、複数の処理が協働することにより所望の機能を発揮するシステムの機能モデルを検証するシミュレーション処理の無用な待機時間を抑制することができるため、シミュレーション効率を向上させることができる。
【図面の簡単な説明】
【００２２】
【図１】本発明の実施の形態におけるＨＷ／ＳＷ協調シミュレーションを概念的に説明する図である。
【図２】本発明の実施の形態にかかるシミュレーション装置の構成を示すブロック図である。
【図３】本発明の実施の形態にかかるシミュレーション装置における演算部の構成を示すブロック図である。
【図４】本発明の実施の形態における指令追加部によって特殊指令が追加されたプログラムコードの一例を示す図である。
【図５】本発明の実施の形態における指令追加部によって特殊指令が追加されたプログラムコードの一例を示す図である。
【図６】本発明の実施の形態にかかるシミュレーション装置の動作を示すフローチャートである。
【図７】本発明の実施の形態にかかるシミュレーション装置の動作を示すフローチャートである。
【図８】本発明の実施の形態にかかるシミュレーション装置における協調シミュレーションの動作シーケンスを示す図である。
【図９】従来のＨＷ／ＳＷ協調シミュレーションを概念的に説明する図である。
【図１０】従来のＨＷ／ＳＷ協調シミュレーション装置の構成の一例を示すブロック図である。
【図１１】従来のＨＷ／ＳＷ協調シミュレーションの動作を時間経過に沿って概念的に説明する図である。
【発明を実施するための形態】
【００２３】
以下、図を参照して本発明の実施の形態について詳細に説明する。
本発明の実施の形態にかかるシミュレーション装置は、複数のプログラムによって表されたシステムについて、それぞれのプログラムの処理動作の因果関係を考慮してその複数のプログラムによる複数のシミュレーション処理を協調動作させることにより、システムの機能を検証するものである。
【００２４】
本実施の形態においては、システムのハードウェア部分の動作モデルを記述したハードウェアプログラムとソフトウェア部分の動作モデルを記述したソフトウェアプログラムとが協働するＨＷ／ＳＷ協調シミュレーションを実行するシミュレーション装置を例として説明する。
【００２５】
図１は、本発明の実施の形態にかかるシミュレーション装置によって実行されるＨＷ／ＳＷ協調シミュレーションについて、概念的に説明する図である。
図１に示すように、ＨＷ／ＳＷ協調シミュレーションの対象となるシステムの機能モデルは、ハードウェア部分の動作モデルをハードウェア記述言語（SystemCなど）で記述したプログラムのソースコード（以下、「ＨＷソースコード」という。）と、ソフトウェアの動作モデルを所定のプログラム言語（C言語など）で記述したプログラムのソースコード（以下、「ＳＷソースコード」という。）とによって構成される。
【００２６】
例えば、ホストコンピュータによってＨＷ／ＳＷ協調シミュレーションを実行する場合、ホストコンピュータは、このＨＷソースコードやＳＷソースコードをそれぞれコンパイルして、ハードウェアシミュレーションが実行可能なオブジェクトコードを含むテストベンチやソフトウェアシミュレーションが実行可能なプロセッサに対する命令語列などのバイナリコードといった実行コードを生成する。
【００２７】
本実施の形態にかかるシミュレーション装置の構成および機能について、図２に示すブロック図を参照して説明する。
図２に示すように、本実施の形態にかかるシミュレーション装置１０は、演算部１１０−１〜１１０−ｎと協調制御部１２０とから構成されいる。
演算部１１０−１〜１１０−ｎは、コンピュータプログラムに含まれた複数の指令に従って異なる対象の動作のシミュレートする第１のシミュレーションを実行する。
第１のシミュレーションは、例えば、ＨＷソースコードにおける処理動作を検証するハードウェアシミュレーションや、ＳＷソースコードにおける処理動作を検証するソフトウェアシミュレーションとすることができる。
【００２８】
協調制御部１２０は、２以上の演算部１１０−１〜１１０−ｎの動作タイミングを制御して演算部１１０−１〜１１０−ｎにおいて実行されるそれぞれの第１のシミュレーションを協調させ、複数の指令が協働することにより発揮されるシステムの動作を検証する第２のシミュレーションを実行する。
第２のシミュレーションは、例えば、ハードウェアシミュレーションとソフトウェアシミュレーションとを協調動作させたＨＷ／ＳＷ協調シミュレーションとすることができる。
【００２９】
また、シミュレーション装置１０の演算部１１０−ｎは、コード生成部１１１−ｎとプログラム検証実行部１１２−ｎとクロック制御部１１３−ｎとから構成されている。
コード生成部１１１−ｎは、コンピュータプログラムに含まれる指令をプロセッサに実行させる実行コードをそのコンピュータプログラムに含まれる指令に基づいて生成する。
演算部１１０−ｎのプログラム検証実行部１１２−ｎは、コード生成部１１１−ｎによって生成された実行コードに基づいて第１のシミュレーションを実行する。
演算部１１０−ｎのクロック制御部１１３−ｎは、プログラム検証実行部１１２−ｎによって第１のシミュレーションが実行される際の動作クロックの周波数をコード生成部１１１−ｎによって生成された実行コードに基づいて制御する。
【００３０】
ここで、演算部１１０−ｎの構成および演算部１１０−ｎによる第１のシミュレーションの実行機能について、図３〜図５を参照してさらに詳しく説明する。
図３に示すように、演算部１１０−ｎのコード生成部１１１−ｎは、さらに、指令識別部１１１−ｎ−１と、指令追加部１１１−ｎ−２と、コンパイル部１１１−ｎ−３とから構成されている。
【００３１】
指令識別部１１１−ｎ−１は、複数のコンピュータプログラムのうち、プログラム検証実行部１１２−ｎによる第１のシミュレーションの実行対象である１のコンピュータプログラムに含まれる指令に対し、他のコンピュータプログラムの指令による動作に影響を与える指令であるか否かを識別する。
例えば、ＳＷソースコードに記述されたハードウェア部分のレジスタへアクセスする指令（ＨＷレジスタアクセス指令）は、ＨＷソースコードによる処理動作、すなわち、ハードウェア部分の動作に影響を与える指令であることから、指令識別部１１１−ｎ−１は、ＳＷソースコードに記述されたＨＷレジスタアクセス指令を他の指令と識別する。
【００３２】
指令追加部１１１−ｎ−２は、指令識別部１１１−ｎ−１によるコンピュータプログラムの指令に対する識別結果に基づいて、プログラム検証実行部１１２−ｎによる第１のシミュレーションを実行する際の動作クロックの周波数の変更指令である特殊指令を指令識別部１１１−ｎ−１によって識別されたコンピュータプログラムに追加する。
ここで、指令追加部１１１−ｎ−２による特殊指令を追加したＳＷソースコードの一例を図４，５に示す。
【００３３】
図４では、ＨＷレジスタアクセス指令のうち、レジスタ書込指令（ｂ）が指令識別部１１１−ｎ−１によって識別され、このレジスタ書込指令（ｂ）の直前に指令追加部１１１−ｎ−２によって動作クロックを制御する指令（ａ）を実行させる特殊指令（ｃ）が追加されている。
また、図５では、ＨＷレジスタアクセス指令のうち、レジスタ読出指令（ｄ）が指令識別部１１１−ｎ−１によって識別され、このレジスタ読出指令（ｄ）の直後に指令追加部１１１−ｎ−２によって動作クロックを制御する指令（ａ）を実行させる特殊指令（ｅ）が追加されている。
【００３４】
コンパイル部１１１−ｎ−３は、指令追加部１１１−ｎ−２によって特殊指令が追加されたコンピュータプログラムをコンパイルすることにより、プログラム検証実行部１１２−ｎによる第１のシミュレーションを実行するための実行コードを生成する。
例えば、特殊指令が追加されたＳＷソースコードをコンパイルし、このＳＷソースコードに基づく動作をプロセッサに実行させる命令語列であるバイナリコードを生成してソフトウェアシミュレーションを実行可能にする。
【００３５】
プログラム検証実行部１１２−ｎは、コンパイル部１１１−ｎ−３によって生成された実行コードに基づいて第１のシミュレーションを実行し、クロック制御部１１３−ｎは、その実行コードに追加されている特殊指令に基づいてと第１のシミュレーションを実行する際の動作クロックの周波数を制御する。
【００３６】
具体的には、図４または図５に示すような特殊指令が追加されたＳＷソースコードをコンパイル部１１１−ｎ−３がコンパイルしてソフトウェアシミュレーションが実行可能な実行コード（ここではバイナリコード）が生成され、プログラム検証実行部１１２−ｎは、このバイナリコードをプロセッサに実行させることによりＳＷソースコードにおける処理動作を検証する第１のシミュレーションを実行する。
その際、コンパイル部１１１−ｎ−３によって生成されたバイナリコードに含まれる特殊指令（ｃ），（ｅ）をクロック制御部１１３−ｎが読み取ると、クロック制御部１１３−ｎは、この特殊指令に従って動作クロックの周波数を制御する指令（ａ）を実行することにより、プログラム検証実行部１１２−ｎによる第１のシミュレーションの検証スピードを制御する。
【００３７】
例えば、図４のＳＷソースコードに対応したバイナリコードに基づいてソフトウェアシミュレーション処理の動作クロックを制御する場合、特殊指令（ｃ）は、レジスタ書込指令（ｂ）の直前に追加された特殊指令であり、すなわち、ハードウェアの動作に影響を与える指令であるレジスタ書込指令の開始を示す特殊指令である。
よって、特殊指令（ｃ）に従って呼び出される動作クロックの周波数を制御する指令（ａ）は、動作クロックの周波数をハードウェアシミュレーション処理と協調させる周波数である予め設定されている第１の周波数へ制御する。
【００３８】
また、図５のＳＷソースコードに対応したバイナリコードに基づいてソフトウェアシミュレーション処理の動作クロックを制御する場合、特殊指令（ｅ）は、レジスタ読出指令（ｄ）の直後に追加された特殊指令であり、すなわち、レジスタ読出が完了したことによりハードウェアの動作に影響がないことを示す特殊指令である。よって、特殊指令（ｅ）に従って呼び出される動作クロックの周波数を制御する指令（ａ）は、動作クロックの周波数を任意の周波数である第２の周波数へ制御する。第２の周波数は、第１の周波数を任意の定数で逓倍した周波数とすることができる。
なお、上述した本実施のシミュレーション装置１０の各構成要素は、シミュレーション装置１０に搭載されたＣＰＵやメモリ、インターフェースからなるコンピュータにコンピュータプログラム（ソフトウエア）をインストールすることによって実現され、上述したシミュレーション装置１０の各種機能は、上記コンピュータの各種ハードウェア資源と上記コンピュータプログラムとが協働することによって実現される。
【００３９】
次に、本実施のシミュレーション装置１０の複数のプログラムに対する協調シミュレーションの動作について、図６，７に示すフローチャートを参照して説明する。
図６に示すように、シミュレーション装置１０は、シミュレーション対象である複数のプログラムが入力されると（Ｓ１１）、それぞれのプログラムに含まれる指令が他の指令の動作に影響を与える指令であるか否かを識別する（Ｓ１２）。
【００４０】
互いの動作に影響を与える指令が識別されると、識別された指令に応じて特殊指令をそれぞれのプログラムに追加して（Ｓ１３）、この特殊指令を追加したプログラムをプロセッサに実行させる実行コードを生成する（Ｓ１４）。
【００４１】
引き続き図７に示すように、シミュレーション装置１０は、生成された実行コードに基づいて、複数のプログラムに対する協調シミュレーションを開始し（Ｓ２１）、実行コードに特殊指令を読み取ると、この特殊指令の種別を判定する（Ｓ２２）。
実行コードに含まれる特殊指令は、複数のプログラムに含まれる任意の指令による動作が互いの動作に影響を与える指令が開始される、または、終了したことを示すものである。この互いのプログラムの動作に影響を与える指令が開始することを示す特殊指令を「第１の特殊指令」とし、その指令が終了したことを示す特殊指令を「第２の特殊指令」とする。
【００４２】
シミュレーション装置１０は、実行コードから特殊指令を読み取った後、特殊指令の種別を判別した結果、第１の特殊指令であった場合（Ｓ２２で「第１の特殊指令」）、少なくとも１つのプログラムに対するシミュレーションの動作クロックの周波数を予め設定されている協調シミュレーションを実行する際の動作クロック周波数に設定する。
一方、特殊指令の種別を判別した結果、第２の特殊指令であった場合（Ｓ２２で「第２の特殊指令」）、少なくとも１つのプログラムに対するシミュレーションの動作クロックの周波数を、任意の周波数である第２の周波数へ制御する。第２の周波数は、第１の周波数を任意の定数で逓倍した周波数とすることができる。
【００４３】
動作クロックの周波数の設定を完了すると、シミュレーション装置１０は、実行コードに基づくシミュレーションを終了させるのか否かを判定する（Ｓ２５）。引き続き協調シミュレーションを実行する場合には（Ｓ２５で「ＮＯ」）、実行コードに基づいて協調シミュレーションを継続し、ユーザによる強制的なシミュレーションの終了操作や実行コードの指令などからのシミュレーションの終了指示がある場合（Ｓ２５で「ＹＥＳ」）、シミュレーション装置１０は協調シミュレーションを終了する。
【００４４】
ここで、ハードウェアとソフトウェアとが協働するシステムにおいて、ハードウェア部分の動作モデルを記述したハードウェアプログラムとソフトウェア部分の動作モデルを記述したソフトウェアプログラムとをプロセッサに実行させることによりシステムの機能を擬似的に動作させてシミュレートするＨＷ／ＳＷ協調シミュレーションを一例に、シミュレーション装置１０の動作について図８を参照して詳細に説明する。
【００４５】
図８に示すように、シミュレーション装置１０の演算部１１０−１は、システムのソフトウェア部分のＳＷソースコードから、演算部１１０−２は、システムのハードウェア部分のＨＷソースコードから、それぞれ互いの動作に影響を与える指令に応じた特殊指令を追加した実行コードを生成する（Ｓ１０１）。
実行コードの生成の後、演算部１１０−１，１１０−２は、予め設定されているＨＷ／ＳＷ協調シミュレーションの動作クロックで実行コードに基づいたソフトウェアシミュレーションとハードウェアシミュレーションとを開始する（Ｓ１０２）。ここで、予め設定されているＨＷ／ＳＷ協調シミュレーションの動作クロックの周波数を第１の周波数とする。
【００４６】
演算部１１０−１，１１０−２によるソフトウェアシミュレーションとハードウェアシミュレーションとが開始されると、協調制御部１２０は、これらのシミュレーション処理を監視してシミュレーション処理の結果や動作タイミングの同期を図る（Ｓ１０３）。
【００４７】
演算部１１０−１がソフトウェアシミュレーションの実行コードからＨＷレジスタアクセス指令のうち、読出完了を示す特殊指令を読み取ると（Ｓ１０４）、演算部１１０−１は、動作クロックの周波数を予め設定されている第１の周波数から第２の周波数へ設定する（Ｓ１０５）。ここで、第２の周波数は、第１の周波数に任意の定数ｍで逓倍した周波数とする。
【００４８】
動作クロックの周波数が設定し直された後、再び演算部１１０−１，１１０−２は、新たに設定した動作クロックで実行コードに基づいたソフトウェアシミュレーションとハードウェアシミュレーションとを継続し（Ｓ１０６）、協調制御部１２０によってこれらのシミュレーション処理が監視されシミュレーション処理の結果や動作タイミングの同期が図られる（Ｓ１０７）。ただし、上記のＳ１０６で実行されるソフトウェアの動作およびハードウェアの動作は互いに影響を与えない動作であるため、協調制御部１２０は、それぞれのシミュレーション処理の監視のみ実行する。
【００４９】
演算部１１０−１がソフトウェアシミュレーションの実行コードからＨＷレジスタアクセス指令のうち、書込開始を示す特殊指令を読み取ると（Ｓ１０８）、演算部１１０−１は、動作クロックの周波数を設定されている第２の周波数から予め設定されているＨＷ／ＳＷ協調シミュレーションの動作クロック周波数である第１の周波数へ設定する（Ｓ１０９）。
【００５０】
動作クロックの周波数が再び設定し直された後、演算部１１０−１，１１０−２は、新たに設定した動作クロックで実行コードに基づいたソフトウェアシミュレーションとハードウェアシミュレーションとを継続し（Ｓ１１０）、協調制御部１２０によってこれらのシミュレーション処理が監視されシミュレーション処理の結果や動作タイミングの同期が図られる（Ｓ１１１）。
ここで、上記のＳ１１０で実行されるソフトウェアの動作およびハードウェアの動作は、互いに影響を与える動作であるため、協調制御部１２０は、それぞれのシミュレーション処理を監視するとともに、それぞれのシミュレーション結果を互いに反映させそれぞれのシミュレーションの動作タイミングの同期を図る。
【００５１】
よって、ホストコンピュータによって上述の特殊指令が追加されたＨＷソースコードとＳＷソースコードとをコンパイルして生成された実行コードに基づいて、本実施の形態にかかるシミュレーション装置１０は、それぞれハードウェアシミュレータとソフトウェアシミュレータにハードウェアシミュレーション処理とソフトウェアシミュレーション処理とを実行させ、両者のシミュレーション結果における因果関係を検証する。
このとき、本実施の形態にかかるシミュレーション装置は、生成された実行コードに追加されている特殊指示に基づいてハードウェアシミュレータまたはソフトウェアシミュレータの動作クロックの周波数を制御し、それぞれのシミュレーション処理に応じた検証スピードでシミュレーション処理を実行する。
【００５２】
このように、本実施の形態によれば、複数のプログラムが協働するシステムの動作をシミュレートする場合に、プログラムに含まれる指令の動作が互いのプログラムの動作に影響を与えるか否かを識別することにより、影響を与える指令を実行する時には複数の指令の実行タイミングと実行速度を同期させ、影響を与えない指令を実行する時には複数の指令の実行速度をそれぞれの指令に応じて設定することができる。
したがって、複数のプログラムが協働するシステムのシミュレーション処理において、無用な待ち時間を抑制することができ、シミュレーション効率を向上させることができる。
【産業上の利用可能性】
【００５３】
ＳｏＣなどの大規模なＬＳＩの開発設計を実施する際の開発環境であるホストコンピュータに搭載されるシステムレベル設計ツールとして利用可能である。
【符号の説明】
【００５４】
１０，２０…シミュレーション装置、１１０−１〜１１０−ｎ…演算部、１１１−１〜１１１−ｎ…コード生成部、１１２−１〜１１２−ｎ…プログラム検証実行部、１１３−１〜１１３−ｎ…動作クロック制御部、１１１−ｎ−１…指令識別部、１１３−ｎ−１…指令識別部、１１３−ｎ−１…コンパイル部、１２０…協調制御部、２１０…ソフトウェアシミュレート実行部、２２０…ハードウェアシミュレート実行部、２３０…協調シミュレート実行部。
【図１】
0005390464.tif 000002
【図２】
0005390464.tif 000003
【図３】
0005390464.tif 000004
【図４】
0005390464.tif 000005
【図５】
0005390464.tif 000006
【図６】
0005390464.tif 000007
【図７】
0005390464.tif 000008
【図８】
0005390464.tif 000009
【図９】
0005390464.tif 000010
【図１０】
0005390464.tif 000011
【図１１】
0005390464.tif 000012