シミュレーション装置、シミュレーション装置の制御方法およびプログラム
【課題】複数の処理を協調動作させてそれぞれの処置の因果関係を検証するシミュレーション処理において、無用な待機時間を抑制し、シミュレーション効率を向上させる。
【解決手段】シミュレーション装置10に、コンピュータプログラムに含まれた複数の指令に従ってって異なる対象の動作をそれぞれシミュレートする複数の演算部110−1〜110−nと、これら演算部の動作タイミングを制御して前記演算部において実行される前記指令を協調させる協調制御部120とを備え、前記演算部の少なくとも1つは、当該演算部が実行する指令に応じてその指令を実行する際の動作クロックを制御するクロック制御部113−1〜113−nを備えることを特徴とする。
【解決手段】シミュレーション装置10に、コンピュータプログラムに含まれた複数の指令に従ってって異なる対象の動作をそれぞれシミュレートする複数の演算部110−1〜110−nと、これら演算部の動作タイミングを制御して前記演算部において実行される前記指令を協調させる協調制御部120とを備え、前記演算部の少なくとも1つは、当該演算部が実行する指令に応じてその指令を実行する際の動作クロックを制御するクロック制御部113−1〜113−nを備えることを特徴とする。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、シミュレーション装置、シミュレーション装置の制御方法およびプログラムに関し、特に、複数のシミュレーション処理を協調させてシステムの機能を検証するシミュレーション装置、シミュレーション装置の制御方法およびプログラムに関する。
【背景技術】
【0002】
近年、複数の処理が協働して所望の機能を発揮するシステムの開発において、複数の処理を同時に設計するシステムレベル設計手法が広く用いられている。このようなシステムレベル設計手法では、設計途中の複数の処理を協調動作させる協調シミュレーションを実行し、それぞれの処理の因果関係を検証する必要がある。
【0003】
例えば、1つのチップにプロセッサやメモリ、それら周辺回路を集積し、ハードウェアとソフトウェアとが協働するSoC(System on a Chip)をシステムレベル設計手法を用いて開発する場合、SoCのシステム設計の初期段階では、システムに搭載するプロセッサによる逐次処理を前提とした処理機能とそれらの順序とを定めたシステムの機能モデルが検討され、この機能モデルからシステムに必要なハードウェア部分およびソフトウェア部分の設計が進められる。
この際、協調シミュレーションを実行して、設計途中のハードウェアとソフトウェアとを協調動作させ、これら両者の因果関係の整合性を検証することにより、所望のシステムの設計開発が進められる。
【0004】
従来より、協調シミュレーションとしては、プロセッサや記憶装置、インターフェースを搭載したホストコンピュータにおいて、設計途中のシステムのハードウェアおよびソフトウェアの動作を表すプログラムを実行して、システムのハードウェアとソフトウェアを擬似的に協調動作させ、その両者の因果関係を検証するハードウェア/ソフトウェア協調シミュレーション(以下、「HW/SW協調シミュレーション」という。)が知られている(非特許文献1−2)。
【0005】
ここで、HW/SW協調シミュレーションを例に、従来の協調シミュレーションについて、図9〜図11を参照して具体的に説明する。
図9に示すように、HW/SW協調シミュレーションの対象となるシステムの機能モデルは、システムのハードウェア部分による動作モデルを記述したソースコード(以下、「HWソースコード」という。)およびソフトウェア部分による動作モデルを記述したソースコード(以下、「SWソースコード」という。)によって構成される。
HWソースコードは、ハードウェア部分による動作をハードウェア記述言語(SystemCなど)によって記述されたソースコードであり、SWソースコードは、ソフトウェア部分による動作を所定の言語(C言語など)によって記述されたソースコードである。
【0006】
従来のホストコンピュータによるHW/SW協調シミュレーション処理は、HWソースコードとSWソースコードとをそれぞれコンパイルして生成されたハードウェア部分の動作モデルに対するハードウェアシミュレーションが実行可能なオブジェクトコードと、ソフトウェア部分の動作モデルに対するソフトウェアシミュレーションが実行可能なプロセッサに対する命令語列などのバイナリコードとに基づいてハードウェアシミュレータおよびソフトウェアシミュレータがそれぞれのシミュレーション処理を実行し、それらシミュレーションの結果における因果関係を検証するものである。
【0007】
以下、ホストコンピュータによるハードウェア部分のハードウェアシミュレーションにおける一連の処理を「ハードウェア処理」、ソフトウェア部分のソフトウェアシミュレーションにおける一連の処理を「ソフトウェア処理」と呼び、従来のHW/SW協調シミュレーションの詳細について説明する。
【0008】
HW/SW協調シミュレーション装置20は、図10に示すように、ソフトウェアシミュレート実行部210と、ハードウェアシミュレート実行部220と、協調シミュレート実行部230とから構成されている。これらHW/SW協調シミュレーション装置20の構成要素がホストコンピュータに搭載されることによって、HW/SW協調シミュレーション装置20は、ホストコンピュータのプロセッサや記憶装置、インターフェースを用いてHW/SW協調シミュレーションを実行する。
【0009】
HW/SW協調シミュレーション装置20のソフトウェアシミュレート実行部210は、SWソースコードをコンパイルしてソフトウェアシミュレーションが実行可能なプロセッサに対する命令語列などのバイナリコードを生成し、このバイナリコードに基づいてソフトウェア処理を実行する。
例えば、ISS(Instruction set simulator)などのソフトウェアシミュレータによってバイナリコードから取り出した指令を実行することにより、ソフトウェアの動作をシミュレートする。
また、バイナリコードから取り出した1の指令の処理に要する時間情報は、ISSなどのソフトウェアシミュレータによるシミュレーション処理が実行される際のクロックの周波数により取得することができ、ソフトウェアシミュレーションによりソフトウェアの動作の処理時間を積算できる。
【0010】
ハードウェアシミュレート実行部220は、HWソースコードをコンパイルしてハードウェアシミュレーションが実行可能なオブジェクトコードを含んだハードウェアシミュレーションの条件を示す情報であるテストベンチを生成し、このテストベンチに基づいてハードウェア処理を実行する。
例えば、EDA(Electronic Design Automation)ツールなどのハードウェアシミュレータによって、テストベンチに定められた条件に従いオブジェクトコードを実行することにより、ハードウェアの動作をシミュレートする。
また、テストベンチには、オブジェクトコードの実行に要する時間情報が組み込まれており、ハードウェアシミュレーションによりハードウェアの動作の処理時間を積算できる。
【0011】
協調シミュレート実行部230は、ソフトウェアシミュレーションが実行されることで積算されるソフトウェアの動作の処理時間と、ハードウェアシミュレーションが実行されることで積算されるハードウェアの動作の処理時間とをそれぞれ監視し、それぞれのシミュレーション処理のタイミングを制御する。
具体的には、協調シミュレート実行部230は、ソフトウェアシミュレート実行部210またはハードウェアシミュレート実行部220によるそれぞれのシミュレーション処理のうち、互いのシミュレーション処理の結果に影響を及ぼすイベントの発生を監視するとともに、ソフトウェアシミュレート実行部210とハードウェアシミュレート実行部220とによるそれぞれのシミュレーション処理をこのイベントの発生に同期させる。
【0012】
例えば、図11に示すように、協調シミュレート実行部230は、ソフトウェアシミュレート実行部210によるシミュレーション処理のうち、ハードウェアのレジスタ領域へのアクセス命令(以下、「HWレジスタ領域アクセス命令」という。)を実行するイベントの発生を監視して、ソフトウェアシミュレート実行部210とハードウェアシミュレート実行部220とのシミュレーション処理をHWレジスタ領域アクセス命令に同期させる。
【先行技術文献】
【非特許文献】
【0013】
【非特許文献1】情報処理学会誌45巻5号(2004年5月,IPSJ-MGN450504)pp.456-463
【非特許文献2】日経BP社 日経エレクトロニクス 2002年7月29日号(No.827)pp.104-133
【発明の概要】
【発明が解決しようとする課題】
【0014】
しかしながら、複数のプログラムのうち、互いに影響を及ぼす指令に同期させてシミュレーションの実行開始および終了のタイミングを制御する従来の協調シミュレーションでは、複数のプログラムのうち、いずれかのプログラムにおける指令のシミュレーション処理の進行状況によっては、他方のプログラムにおけるシミュレーション処理に無用な待機時間を発生させてしまい、シミュレーション効率が低下してしまう場合があった。
【0015】
例えば、図11に示すようなHW/SW協調シミュレーション処理の場合では、期間3におけるHWシミュレーション処理で実行される指令は、レジスタ領域に保持されるレジスタ値に影響を及ぼす指令である。一方、期間5におけるHWシミュレーション処理で実行される指令は、レジスタ値に影響を及ぼさない処理である。
すなわち、期間3ではHWシミュレーション処理とSWシミュレーション処理の開始と終了とを同期させて実行する必要があるが、期間5では必ずしも同期させる必要がないにもかかわらず、SWシミュレーション処理はHWシミュレーション処理の完了を待たなければならず、無用な待機時間が発生してしまう。
したがって、期間5のHWシミュレーション処理が少ない程、プロセッサによるシミュレーション処理の計算時間を削減できる一方、この期間のHWシミュレーション処理が多いほど計算時間が増大し、シミュレーション効率の低下につながる。
【0016】
また、シミュレーション効率の向上のために、設計対象であるハードウェア部分の動作モデルを変更することは、多大な設計コストを浪費するだけではなく、協調シミュレーションを実行する本来の目的である開発効率の向上から逸脱し、協調シミュレーションを用いた検証の意味をなさない。
【0017】
そこで本発明は、上述した問題を解決するためになされたものであり、複数の処理を協調動作させてそれぞれの処置の因果関係を検証するシミュレーション処理において、無用な待機時間を抑制し、シミュレーション効率を向上させることを目的とする。
【課題を解決するための手段】
【0018】
本発明は、上記の目的を達成するために、コンピュータプログラムに含まれた複数の指令に従って異なる対象の動作をそれぞれシミュレートする複数の演算部と、これら演算部の動作タイミングを制御して前記演算部において実行される前記指令を協調させる協調制御部とを備え、前記演算部の少なくとも1つは、当該演算部が実行する指令に応じてその指令を実行する際の動作クロックを制御するクロック制御部を備えることを特徴とする。
【0019】
また、本発明にかかるシミュレーション装置の前記演算部は、前記複数の指令のうち、1の指令が他の指令に基づく動作に対して影響を与える指令であるか否かを識別する指令識別部と、この指令識別部による識別結果に基づいて前記動作クロックの周波数を変更する指令を前記1の指令に追加する指令追加部とを備え、前記クロック制御部は、前記指令追加部によって追加された前記指令に基づいて前記動作クロックの周波数を制御しても良い。
【0020】
また、本発明にかかるシミュレーション装置の前記指令識別部は、任意の論理回路における動作モデルを所定の言語で記述された少なくとも1つのハードウェアプログラムと、任意のプロセッサによる機能の動作モデルを所定の言語で記述された少なくとも1つのソフトウェアプログラムとのいずれかにおいて、前記ハードウェアのレジスタに格納されるデータの読み出し完了を示す読出完了指令および書込開始を示す書込開始指令を抽出し、前記指令追加部は、前記指令識別部によって前記読出完了指令および前記書込完了指令が抽出された前記ハードウェアプログラムまたは前記ソフトウェアプログラムに対し、抽出された前記読出完了指令の直後に前記クロックの周波数を予め定めた第1の周波数から任意の第2の周波数に変更させる第1の指令を追加するとともに、抽出された前記書込開始指令の直前に前記クロックの周波数を予め定めた前記第1の周波数へ変更させる第2の指令を追加することにより、前記ハードウェアプログラムと前記ソフトウェアプログラムとが協働するシステムの機能を検証しても良い。
【発明の効果】
【0021】
本発明によれば、コード生成部によって生成されるシミュレーションを実行するためのコードに基づいてシミュレーションを実行する際の検証クロックの周波数を制御することにより、複数のシミュレーション処理を協調させてシステムの機能モデルを検証する協調シミュレーションにおいて、それぞれのシミュレーション処理に合致した検証クロックを設定して協調シミュレーション処理を実行させることができる。
したがって、複数の処理が協働することにより所望の機能を発揮するシステムの機能モデルを検証するシミュレーション処理の無用な待機時間を抑制することができるため、シミュレーション効率を向上させることができる。
【図面の簡単な説明】
【0022】
【図1】本発明の実施の形態におけるHW/SW協調シミュレーションを概念的に説明する図である。
【図2】本発明の実施の形態にかかるシミュレーション装置の構成を示すブロック図である。
【図3】本発明の実施の形態にかかるシミュレーション装置における演算部の構成を示すブロック図である。
【図4】本発明の実施の形態における指令追加部によって特殊指令が追加されたプログラムコードの一例を示す図である。
【図5】本発明の実施の形態における指令追加部によって特殊指令が追加されたプログラムコードの一例を示す図である。
【図6】本発明の実施の形態にかかるシミュレーション装置の動作を示すフローチャートである。
【図7】本発明の実施の形態にかかるシミュレーション装置の動作を示すフローチャートである。
【図8】本発明の実施の形態にかかるシミュレーション装置における協調シミュレーションの動作シーケンスを示す図である。
【図9】従来のHW/SW協調シミュレーションを概念的に説明する図である。
【図10】従来のHW/SW協調シミュレーション装置の構成の一例を示すブロック図である。
【図11】従来のHW/SW協調シミュレーションの動作を時間経過に沿って概念的に説明する図である。
【発明を実施するための形態】
【0023】
以下、図を参照して本発明の実施の形態について詳細に説明する。
本発明の実施の形態にかかるシミュレーション装置は、複数のプログラムによって表されたシステムについて、それぞれのプログラムの処理動作の因果関係を考慮してその複数のプログラムによる複数のシミュレーション処理を協調動作させることにより、システムの機能を検証するものである。
【0024】
本実施の形態においては、システムのハードウェア部分の動作モデルを記述したハードウェアプログラムとソフトウェア部分の動作モデルを記述したソフトウェアプログラムとが協働するHW/SW協調シミュレーションを実行するシミュレーション装置を例として説明する。
【0025】
図1は、本発明の実施の形態にかかるシミュレーション装置によって実行されるHW/SW協調シミュレーションについて、概念的に説明する図である。
図1に示すように、HW/SW協調シミュレーションの対象となるシステムの機能モデルは、ハードウェア部分の動作モデルをハードウェア記述言語(SystemCなど)で記述したプログラムのソースコード(以下、「HWソースコード」という。)と、ソフトウェアの動作モデルを所定のプログラム言語(C言語など)で記述したプログラムのソースコード(以下、「SWソースコード」という。)とによって構成される。
【0026】
例えば、ホストコンピュータによってHW/SW協調シミュレーションを実行する場合、ホストコンピュータは、このHWソースコードやSWソースコードをそれぞれコンパイルして、ハードウェアシミュレーションが実行可能なオブジェクトコードを含むテストベンチやソフトウェアシミュレーションが実行可能なプロセッサに対する命令語列などのバイナリコードといった実行コードを生成する。
【0027】
本実施の形態にかかるシミュレーション装置の構成および機能について、図2に示すブロック図を参照して説明する。
図2に示すように、本実施の形態にかかるシミュレーション装置10は、演算部110−1〜110−nと協調制御部120とから構成されいる。
演算部110−1〜110−nは、コンピュータプログラムに含まれた複数の指令に従って異なる対象の動作のシミュレートする第1のシミュレーションを実行する。
第1のシミュレーションは、例えば、HWソースコードにおける処理動作を検証するハードウェアシミュレーションや、SWソースコードにおける処理動作を検証するソフトウェアシミュレーションとすることができる。
【0028】
協調制御部120は、2以上の演算部110−1〜110−nの動作タイミングを制御して演算部110−1〜110−nにおいて実行されるそれぞれの第1のシミュレーションを協調させ、複数の指令が協働することにより発揮されるシステムの動作を検証する第2のシミュレーションを実行する。
第2のシミュレーションは、例えば、ハードウェアシミュレーションとソフトウェアシミュレーションとを協調動作させたHW/SW協調シミュレーションとすることができる。
【0029】
また、シミュレーション装置10の演算部110−nは、コード生成部111−nとプログラム検証実行部112−nとクロック制御部113−nとから構成されている。
コード生成部111−nは、コンピュータプログラムに含まれる指令をプロセッサに実行させる実行コードをそのコンピュータプログラムに含まれる指令に基づいて生成する。
演算部110−nのプログラム検証実行部112−nは、コード生成部111−nによって生成された実行コードに基づいて第1のシミュレーションを実行する。
演算部110−nのクロック制御部113−nは、プログラム検証実行部112−nによって第1のシミュレーションが実行される際の動作クロックの周波数をコード生成部111−nによって生成された実行コードに基づいて制御する。
【0030】
ここで、演算部110−nの構成および演算部110−nによる第1のシミュレーションの実行機能について、図3〜図5を参照してさらに詳しく説明する。
図3に示すように、演算部110−nのコード生成部111−nは、さらに、指令識別部111−n−1と、指令追加部111−n−2と、コンパイル部111−n−3とから構成されている。
【0031】
指令識別部111−n−1は、複数のコンピュータプログラムのうち、プログラム検証実行部112−nによる第1のシミュレーションの実行対象である1のコンピュータプログラムに含まれる指令に対し、他のコンピュータプログラムの指令による動作に影響を与える指令であるか否かを識別する。
例えば、SWソースコードに記述されたハードウェア部分のレジスタへアクセスする指令(HWレジスタアクセス指令)は、HWソースコードによる処理動作、すなわち、ハードウェア部分の動作に影響を与える指令であることから、指令識別部111−n−1は、SWソースコードに記述されたHWレジスタアクセス指令を他の指令と識別する。
【0032】
指令追加部111−n−2は、指令識別部111−n−1によるコンピュータプログラムの指令に対する識別結果に基づいて、プログラム検証実行部112−nによる第1のシミュレーションを実行する際の動作クロックの周波数の変更指令である特殊指令を指令識別部111−n−1によって識別されたコンピュータプログラムに追加する。
ここで、指令追加部111−n−2による特殊指令を追加したSWソースコードの一例を図4,5に示す。
【0033】
図4では、HWレジスタアクセス指令のうち、レジスタ書込指令(b)が指令識別部111−n−1によって識別され、このレジスタ書込指令(b)の直前に指令追加部111−n−2によって動作クロックを制御する指令(a)を実行させる特殊指令(c)が追加されている。
また、図5では、HWレジスタアクセス指令のうち、レジスタ読出指令(d)が指令識別部111−n−1によって識別され、このレジスタ読出指令(d)の直後に指令追加部111−n−2によって動作クロックを制御する指令(a)を実行させる特殊指令(e)が追加されている。
【0034】
コンパイル部111−n−3は、指令追加部111−n−2によって特殊指令が追加されたコンピュータプログラムをコンパイルすることにより、プログラム検証実行部112−nによる第1のシミュレーションを実行するための実行コードを生成する。
例えば、特殊指令が追加されたSWソースコードをコンパイルし、このSWソースコードに基づく動作をプロセッサに実行させる命令語列であるバイナリコードを生成してソフトウェアシミュレーションを実行可能にする。
【0035】
プログラム検証実行部112−nは、コンパイル部111−n−3によって生成された実行コードに基づいて第1のシミュレーションを実行し、クロック制御部113−nは、その実行コードに追加されている特殊指令に基づいてと第1のシミュレーションを実行する際の動作クロックの周波数を制御する。
【0036】
具体的には、図4または図5に示すような特殊指令が追加されたSWソースコードをコンパイル部111−n−3がコンパイルしてソフトウェアシミュレーションが実行可能な実行コード(ここではバイナリコード)が生成され、プログラム検証実行部112−nは、このバイナリコードをプロセッサに実行させることによりSWソースコードにおける処理動作を検証する第1のシミュレーションを実行する。
その際、コンパイル部111−n−3によって生成されたバイナリコードに含まれる特殊指令(c),(e)をクロック制御部113−nが読み取ると、クロック制御部113−nは、この特殊指令に従って動作クロックの周波数を制御する指令(a)を実行することにより、プログラム検証実行部112−nによる第1のシミュレーションの検証スピードを制御する。
【0037】
例えば、図4のSWソースコードに対応したバイナリコードに基づいてソフトウェアシミュレーション処理の動作クロックを制御する場合、特殊指令(c)は、レジスタ書込指令(b)の直前に追加された特殊指令であり、すなわち、ハードウェアの動作に影響を与える指令であるレジスタ書込指令の開始を示す特殊指令である。
よって、特殊指令(c)に従って呼び出される動作クロックの周波数を制御する指令(a)は、動作クロックの周波数をハードウェアシミュレーション処理と協調させる周波数である予め設定されている第1の周波数へ制御する。
【0038】
また、図5のSWソースコードに対応したバイナリコードに基づいてソフトウェアシミュレーション処理の動作クロックを制御する場合、特殊指令(e)は、レジスタ読出指令(d)の直後に追加された特殊指令であり、すなわち、レジスタ読出が完了したことによりハードウェアの動作に影響がないことを示す特殊指令である。よって、特殊指令(e)に従って呼び出される動作クロックの周波数を制御する指令(a)は、動作クロックの周波数を任意の周波数である第2の周波数へ制御する。第2の周波数は、第1の周波数を任意の定数で逓倍した周波数とすることができる。
なお、上述した本実施のシミュレーション装置10の各構成要素は、シミュレーション装置10に搭載されたCPUやメモリ、インターフェースからなるコンピュータにコンピュータプログラム(ソフトウエア)をインストールすることによって実現され、上述したシミュレーション装置10の各種機能は、上記コンピュータの各種ハードウェア資源と上記コンピュータプログラムとが協働することによって実現される。
【0039】
次に、本実施のシミュレーション装置10の複数のプログラムに対する協調シミュレーションの動作について、図6,7に示すフローチャートを参照して説明する。
図6に示すように、シミュレーション装置10は、シミュレーション対象である複数のプログラムが入力されると(S11)、それぞれのプログラムに含まれる指令が他の指令の動作に影響を与える指令であるか否かを識別する(S12)。
【0040】
互いの動作に影響を与える指令が識別されると、識別された指令に応じて特殊指令をそれぞれのプログラムに追加して(S13)、この特殊指令を追加したプログラムをプロセッサに実行させる実行コードを生成する(S14)。
【0041】
引き続き図7に示すように、シミュレーション装置10は、生成された実行コードに基づいて、複数のプログラムに対する協調シミュレーションを開始し(S21)、実行コードに特殊指令を読み取ると、この特殊指令の種別を判定する(S22)。
実行コードに含まれる特殊指令は、複数のプログラムに含まれる任意の指令による動作が互いの動作に影響を与える指令が開始される、または、終了したことを示すものである。この互いのプログラムの動作に影響を与える指令が開始することを示す特殊指令を「第1の特殊指令」とし、その指令が終了したことを示す特殊指令を「第2の特殊指令」とする。
【0042】
シミュレーション装置10は、実行コードから特殊指令を読み取った後、特殊指令の種別を判別した結果、第1の特殊指令であった場合(S22で「第1の特殊指令」)、少なくとも1つのプログラムに対するシミュレーションの動作クロックの周波数を予め設定されている協調シミュレーションを実行する際の動作クロック周波数に設定する。
一方、特殊指令の種別を判別した結果、第2の特殊指令であった場合(S22で「第2の特殊指令」)、少なくとも1つのプログラムに対するシミュレーションの動作クロックの周波数を、任意の周波数である第2の周波数へ制御する。第2の周波数は、第1の周波数を任意の定数で逓倍した周波数とすることができる。
【0043】
動作クロックの周波数の設定を完了すると、シミュレーション装置10は、実行コードに基づくシミュレーションを終了させるのか否かを判定する(S25)。引き続き協調シミュレーションを実行する場合には(S25で「NO」)、実行コードに基づいて協調シミュレーションを継続し、ユーザによる強制的なシミュレーションの終了操作や実行コードの指令などからのシミュレーションの終了指示がある場合(S25で「YES」)、シミュレーション装置10は協調シミュレーションを終了する。
【0044】
ここで、ハードウェアとソフトウェアとが協働するシステムにおいて、ハードウェア部分の動作モデルを記述したハードウェアプログラムとソフトウェア部分の動作モデルを記述したソフトウェアプログラムとをプロセッサに実行させることによりシステムの機能を擬似的に動作させてシミュレートするHW/SW協調シミュレーションを一例に、シミュレーション装置10の動作について図8を参照して詳細に説明する。
【0045】
図8に示すように、シミュレーション装置10の演算部110−1は、システムのソフトウェア部分のSWソースコードから、演算部110−2は、システムのハードウェア部分のHWソースコードから、それぞれ互いの動作に影響を与える指令に応じた特殊指令を追加した実行コードを生成する(S101)。
実行コードの生成の後、演算部110−1,110−2は、予め設定されているHW/SW協調シミュレーションの動作クロックで実行コードに基づいたソフトウェアシミュレーションとハードウェアシミュレーションとを開始する(S102)。ここで、予め設定されているHW/SW協調シミュレーションの動作クロックの周波数を第1の周波数とする。
【0046】
演算部110−1,110−2によるソフトウェアシミュレーションとハードウェアシミュレーションとが開始されると、協調制御部120は、これらのシミュレーション処理を監視してシミュレーション処理の結果や動作タイミングの同期を図る(S103)。
【0047】
演算部110−1がソフトウェアシミュレーションの実行コードからHWレジスタアクセス指令のうち、読出完了を示す特殊指令を読み取ると(S104)、演算部110−1は、動作クロックの周波数を予め設定されている第1の周波数から第2の周波数へ設定する(S105)。ここで、第2の周波数は、第1の周波数に任意の定数mで逓倍した周波数とする。
【0048】
動作クロックの周波数が設定し直された後、再び演算部110−1,110−2は、新たに設定した動作クロックで実行コードに基づいたソフトウェアシミュレーションとハードウェアシミュレーションとを継続し(S106)、協調制御部120によってこれらのシミュレーション処理が監視されシミュレーション処理の結果や動作タイミングの同期が図られる(S107)。ただし、上記のS106で実行されるソフトウェアの動作およびハードウェアの動作は互いに影響を与えない動作であるため、協調制御部120は、それぞれのシミュレーション処理の監視のみ実行する。
【0049】
演算部110−1がソフトウェアシミュレーションの実行コードからHWレジスタアクセス指令のうち、書込開始を示す特殊指令を読み取ると(S108)、演算部110−1は、動作クロックの周波数を設定されている第2の周波数から予め設定されているHW/SW協調シミュレーションの動作クロック周波数である第1の周波数へ設定する(S109)。
【0050】
動作クロックの周波数が再び設定し直された後、演算部110−1,110−2は、新たに設定した動作クロックで実行コードに基づいたソフトウェアシミュレーションとハードウェアシミュレーションとを継続し(S110)、協調制御部120によってこれらのシミュレーション処理が監視されシミュレーション処理の結果や動作タイミングの同期が図られる(S111)。
ここで、上記のS110で実行されるソフトウェアの動作およびハードウェアの動作は、互いに影響を与える動作であるため、協調制御部120は、それぞれのシミュレーション処理を監視するとともに、それぞれのシミュレーション結果を互いに反映させそれぞれのシミュレーションの動作タイミングの同期を図る。
【0051】
よって、ホストコンピュータによって上述の特殊指令が追加されたHWソースコードとSWソースコードとをコンパイルして生成された実行コードに基づいて、本実施の形態にかかるシミュレーション装置10は、それぞれハードウェアシミュレータとソフトウェアシミュレータにハードウェアシミュレーション処理とソフトウェアシミュレーション処理とを実行させ、両者のシミュレーション結果における因果関係を検証する。
このとき、本実施の形態にかかるシミュレーション装置は、生成された実行コードに追加されている特殊指示に基づいてハードウェアシミュレータまたはソフトウェアシミュレータの動作クロックの周波数を制御し、それぞれのシミュレーション処理に応じた検証スピードでシミュレーション処理を実行する。
【0052】
このように、本実施の形態によれば、複数のプログラムが協働するシステムの動作をシミュレートする場合に、プログラムに含まれる指令の動作が互いのプログラムの動作に影響を与えるか否かを識別することにより、影響を与える指令を実行する時には複数の指令の実行タイミングと実行速度を同期させ、影響を与えない指令を実行する時には複数の指令の実行速度をそれぞれの指令に応じて設定することができる。
したがって、複数のプログラムが協働するシステムのシミュレーション処理において、無用な待ち時間を抑制することができ、シミュレーション効率を向上させることができる。
【産業上の利用可能性】
【0053】
SoCなどの大規模なLSIの開発設計を実施する際の開発環境であるホストコンピュータに搭載されるシステムレベル設計ツールとして利用可能である。
【符号の説明】
【0054】
10,20…シミュレーション装置、110−1〜110−n…演算部、111−1〜111−n…コード生成部、112−1〜112−n…プログラム検証実行部、113−1〜113−n…動作クロック制御部、111−n−1…指令識別部、113−n−1…指令識別部、113−n−1…コンパイル部、120…協調制御部、210…ソフトウェアシミュレート実行部、220…ハードウェアシミュレート実行部、230…協調シミュレート実行部。
【技術分野】
【0001】
本発明は、シミュレーション装置、シミュレーション装置の制御方法およびプログラムに関し、特に、複数のシミュレーション処理を協調させてシステムの機能を検証するシミュレーション装置、シミュレーション装置の制御方法およびプログラムに関する。
【背景技術】
【0002】
近年、複数の処理が協働して所望の機能を発揮するシステムの開発において、複数の処理を同時に設計するシステムレベル設計手法が広く用いられている。このようなシステムレベル設計手法では、設計途中の複数の処理を協調動作させる協調シミュレーションを実行し、それぞれの処理の因果関係を検証する必要がある。
【0003】
例えば、1つのチップにプロセッサやメモリ、それら周辺回路を集積し、ハードウェアとソフトウェアとが協働するSoC(System on a Chip)をシステムレベル設計手法を用いて開発する場合、SoCのシステム設計の初期段階では、システムに搭載するプロセッサによる逐次処理を前提とした処理機能とそれらの順序とを定めたシステムの機能モデルが検討され、この機能モデルからシステムに必要なハードウェア部分およびソフトウェア部分の設計が進められる。
この際、協調シミュレーションを実行して、設計途中のハードウェアとソフトウェアとを協調動作させ、これら両者の因果関係の整合性を検証することにより、所望のシステムの設計開発が進められる。
【0004】
従来より、協調シミュレーションとしては、プロセッサや記憶装置、インターフェースを搭載したホストコンピュータにおいて、設計途中のシステムのハードウェアおよびソフトウェアの動作を表すプログラムを実行して、システムのハードウェアとソフトウェアを擬似的に協調動作させ、その両者の因果関係を検証するハードウェア/ソフトウェア協調シミュレーション(以下、「HW/SW協調シミュレーション」という。)が知られている(非特許文献1−2)。
【0005】
ここで、HW/SW協調シミュレーションを例に、従来の協調シミュレーションについて、図9〜図11を参照して具体的に説明する。
図9に示すように、HW/SW協調シミュレーションの対象となるシステムの機能モデルは、システムのハードウェア部分による動作モデルを記述したソースコード(以下、「HWソースコード」という。)およびソフトウェア部分による動作モデルを記述したソースコード(以下、「SWソースコード」という。)によって構成される。
HWソースコードは、ハードウェア部分による動作をハードウェア記述言語(SystemCなど)によって記述されたソースコードであり、SWソースコードは、ソフトウェア部分による動作を所定の言語(C言語など)によって記述されたソースコードである。
【0006】
従来のホストコンピュータによるHW/SW協調シミュレーション処理は、HWソースコードとSWソースコードとをそれぞれコンパイルして生成されたハードウェア部分の動作モデルに対するハードウェアシミュレーションが実行可能なオブジェクトコードと、ソフトウェア部分の動作モデルに対するソフトウェアシミュレーションが実行可能なプロセッサに対する命令語列などのバイナリコードとに基づいてハードウェアシミュレータおよびソフトウェアシミュレータがそれぞれのシミュレーション処理を実行し、それらシミュレーションの結果における因果関係を検証するものである。
【0007】
以下、ホストコンピュータによるハードウェア部分のハードウェアシミュレーションにおける一連の処理を「ハードウェア処理」、ソフトウェア部分のソフトウェアシミュレーションにおける一連の処理を「ソフトウェア処理」と呼び、従来のHW/SW協調シミュレーションの詳細について説明する。
【0008】
HW/SW協調シミュレーション装置20は、図10に示すように、ソフトウェアシミュレート実行部210と、ハードウェアシミュレート実行部220と、協調シミュレート実行部230とから構成されている。これらHW/SW協調シミュレーション装置20の構成要素がホストコンピュータに搭載されることによって、HW/SW協調シミュレーション装置20は、ホストコンピュータのプロセッサや記憶装置、インターフェースを用いてHW/SW協調シミュレーションを実行する。
【0009】
HW/SW協調シミュレーション装置20のソフトウェアシミュレート実行部210は、SWソースコードをコンパイルしてソフトウェアシミュレーションが実行可能なプロセッサに対する命令語列などのバイナリコードを生成し、このバイナリコードに基づいてソフトウェア処理を実行する。
例えば、ISS(Instruction set simulator)などのソフトウェアシミュレータによってバイナリコードから取り出した指令を実行することにより、ソフトウェアの動作をシミュレートする。
また、バイナリコードから取り出した1の指令の処理に要する時間情報は、ISSなどのソフトウェアシミュレータによるシミュレーション処理が実行される際のクロックの周波数により取得することができ、ソフトウェアシミュレーションによりソフトウェアの動作の処理時間を積算できる。
【0010】
ハードウェアシミュレート実行部220は、HWソースコードをコンパイルしてハードウェアシミュレーションが実行可能なオブジェクトコードを含んだハードウェアシミュレーションの条件を示す情報であるテストベンチを生成し、このテストベンチに基づいてハードウェア処理を実行する。
例えば、EDA(Electronic Design Automation)ツールなどのハードウェアシミュレータによって、テストベンチに定められた条件に従いオブジェクトコードを実行することにより、ハードウェアの動作をシミュレートする。
また、テストベンチには、オブジェクトコードの実行に要する時間情報が組み込まれており、ハードウェアシミュレーションによりハードウェアの動作の処理時間を積算できる。
【0011】
協調シミュレート実行部230は、ソフトウェアシミュレーションが実行されることで積算されるソフトウェアの動作の処理時間と、ハードウェアシミュレーションが実行されることで積算されるハードウェアの動作の処理時間とをそれぞれ監視し、それぞれのシミュレーション処理のタイミングを制御する。
具体的には、協調シミュレート実行部230は、ソフトウェアシミュレート実行部210またはハードウェアシミュレート実行部220によるそれぞれのシミュレーション処理のうち、互いのシミュレーション処理の結果に影響を及ぼすイベントの発生を監視するとともに、ソフトウェアシミュレート実行部210とハードウェアシミュレート実行部220とによるそれぞれのシミュレーション処理をこのイベントの発生に同期させる。
【0012】
例えば、図11に示すように、協調シミュレート実行部230は、ソフトウェアシミュレート実行部210によるシミュレーション処理のうち、ハードウェアのレジスタ領域へのアクセス命令(以下、「HWレジスタ領域アクセス命令」という。)を実行するイベントの発生を監視して、ソフトウェアシミュレート実行部210とハードウェアシミュレート実行部220とのシミュレーション処理をHWレジスタ領域アクセス命令に同期させる。
【先行技術文献】
【非特許文献】
【0013】
【非特許文献1】情報処理学会誌45巻5号(2004年5月,IPSJ-MGN450504)pp.456-463
【非特許文献2】日経BP社 日経エレクトロニクス 2002年7月29日号(No.827)pp.104-133
【発明の概要】
【発明が解決しようとする課題】
【0014】
しかしながら、複数のプログラムのうち、互いに影響を及ぼす指令に同期させてシミュレーションの実行開始および終了のタイミングを制御する従来の協調シミュレーションでは、複数のプログラムのうち、いずれかのプログラムにおける指令のシミュレーション処理の進行状況によっては、他方のプログラムにおけるシミュレーション処理に無用な待機時間を発生させてしまい、シミュレーション効率が低下してしまう場合があった。
【0015】
例えば、図11に示すようなHW/SW協調シミュレーション処理の場合では、期間3におけるHWシミュレーション処理で実行される指令は、レジスタ領域に保持されるレジスタ値に影響を及ぼす指令である。一方、期間5におけるHWシミュレーション処理で実行される指令は、レジスタ値に影響を及ぼさない処理である。
すなわち、期間3ではHWシミュレーション処理とSWシミュレーション処理の開始と終了とを同期させて実行する必要があるが、期間5では必ずしも同期させる必要がないにもかかわらず、SWシミュレーション処理はHWシミュレーション処理の完了を待たなければならず、無用な待機時間が発生してしまう。
したがって、期間5のHWシミュレーション処理が少ない程、プロセッサによるシミュレーション処理の計算時間を削減できる一方、この期間のHWシミュレーション処理が多いほど計算時間が増大し、シミュレーション効率の低下につながる。
【0016】
また、シミュレーション効率の向上のために、設計対象であるハードウェア部分の動作モデルを変更することは、多大な設計コストを浪費するだけではなく、協調シミュレーションを実行する本来の目的である開発効率の向上から逸脱し、協調シミュレーションを用いた検証の意味をなさない。
【0017】
そこで本発明は、上述した問題を解決するためになされたものであり、複数の処理を協調動作させてそれぞれの処置の因果関係を検証するシミュレーション処理において、無用な待機時間を抑制し、シミュレーション効率を向上させることを目的とする。
【課題を解決するための手段】
【0018】
本発明は、上記の目的を達成するために、コンピュータプログラムに含まれた複数の指令に従って異なる対象の動作をそれぞれシミュレートする複数の演算部と、これら演算部の動作タイミングを制御して前記演算部において実行される前記指令を協調させる協調制御部とを備え、前記演算部の少なくとも1つは、当該演算部が実行する指令に応じてその指令を実行する際の動作クロックを制御するクロック制御部を備えることを特徴とする。
【0019】
また、本発明にかかるシミュレーション装置の前記演算部は、前記複数の指令のうち、1の指令が他の指令に基づく動作に対して影響を与える指令であるか否かを識別する指令識別部と、この指令識別部による識別結果に基づいて前記動作クロックの周波数を変更する指令を前記1の指令に追加する指令追加部とを備え、前記クロック制御部は、前記指令追加部によって追加された前記指令に基づいて前記動作クロックの周波数を制御しても良い。
【0020】
また、本発明にかかるシミュレーション装置の前記指令識別部は、任意の論理回路における動作モデルを所定の言語で記述された少なくとも1つのハードウェアプログラムと、任意のプロセッサによる機能の動作モデルを所定の言語で記述された少なくとも1つのソフトウェアプログラムとのいずれかにおいて、前記ハードウェアのレジスタに格納されるデータの読み出し完了を示す読出完了指令および書込開始を示す書込開始指令を抽出し、前記指令追加部は、前記指令識別部によって前記読出完了指令および前記書込完了指令が抽出された前記ハードウェアプログラムまたは前記ソフトウェアプログラムに対し、抽出された前記読出完了指令の直後に前記クロックの周波数を予め定めた第1の周波数から任意の第2の周波数に変更させる第1の指令を追加するとともに、抽出された前記書込開始指令の直前に前記クロックの周波数を予め定めた前記第1の周波数へ変更させる第2の指令を追加することにより、前記ハードウェアプログラムと前記ソフトウェアプログラムとが協働するシステムの機能を検証しても良い。
【発明の効果】
【0021】
本発明によれば、コード生成部によって生成されるシミュレーションを実行するためのコードに基づいてシミュレーションを実行する際の検証クロックの周波数を制御することにより、複数のシミュレーション処理を協調させてシステムの機能モデルを検証する協調シミュレーションにおいて、それぞれのシミュレーション処理に合致した検証クロックを設定して協調シミュレーション処理を実行させることができる。
したがって、複数の処理が協働することにより所望の機能を発揮するシステムの機能モデルを検証するシミュレーション処理の無用な待機時間を抑制することができるため、シミュレーション効率を向上させることができる。
【図面の簡単な説明】
【0022】
【図1】本発明の実施の形態におけるHW/SW協調シミュレーションを概念的に説明する図である。
【図2】本発明の実施の形態にかかるシミュレーション装置の構成を示すブロック図である。
【図3】本発明の実施の形態にかかるシミュレーション装置における演算部の構成を示すブロック図である。
【図4】本発明の実施の形態における指令追加部によって特殊指令が追加されたプログラムコードの一例を示す図である。
【図5】本発明の実施の形態における指令追加部によって特殊指令が追加されたプログラムコードの一例を示す図である。
【図6】本発明の実施の形態にかかるシミュレーション装置の動作を示すフローチャートである。
【図7】本発明の実施の形態にかかるシミュレーション装置の動作を示すフローチャートである。
【図8】本発明の実施の形態にかかるシミュレーション装置における協調シミュレーションの動作シーケンスを示す図である。
【図9】従来のHW/SW協調シミュレーションを概念的に説明する図である。
【図10】従来のHW/SW協調シミュレーション装置の構成の一例を示すブロック図である。
【図11】従来のHW/SW協調シミュレーションの動作を時間経過に沿って概念的に説明する図である。
【発明を実施するための形態】
【0023】
以下、図を参照して本発明の実施の形態について詳細に説明する。
本発明の実施の形態にかかるシミュレーション装置は、複数のプログラムによって表されたシステムについて、それぞれのプログラムの処理動作の因果関係を考慮してその複数のプログラムによる複数のシミュレーション処理を協調動作させることにより、システムの機能を検証するものである。
【0024】
本実施の形態においては、システムのハードウェア部分の動作モデルを記述したハードウェアプログラムとソフトウェア部分の動作モデルを記述したソフトウェアプログラムとが協働するHW/SW協調シミュレーションを実行するシミュレーション装置を例として説明する。
【0025】
図1は、本発明の実施の形態にかかるシミュレーション装置によって実行されるHW/SW協調シミュレーションについて、概念的に説明する図である。
図1に示すように、HW/SW協調シミュレーションの対象となるシステムの機能モデルは、ハードウェア部分の動作モデルをハードウェア記述言語(SystemCなど)で記述したプログラムのソースコード(以下、「HWソースコード」という。)と、ソフトウェアの動作モデルを所定のプログラム言語(C言語など)で記述したプログラムのソースコード(以下、「SWソースコード」という。)とによって構成される。
【0026】
例えば、ホストコンピュータによってHW/SW協調シミュレーションを実行する場合、ホストコンピュータは、このHWソースコードやSWソースコードをそれぞれコンパイルして、ハードウェアシミュレーションが実行可能なオブジェクトコードを含むテストベンチやソフトウェアシミュレーションが実行可能なプロセッサに対する命令語列などのバイナリコードといった実行コードを生成する。
【0027】
本実施の形態にかかるシミュレーション装置の構成および機能について、図2に示すブロック図を参照して説明する。
図2に示すように、本実施の形態にかかるシミュレーション装置10は、演算部110−1〜110−nと協調制御部120とから構成されいる。
演算部110−1〜110−nは、コンピュータプログラムに含まれた複数の指令に従って異なる対象の動作のシミュレートする第1のシミュレーションを実行する。
第1のシミュレーションは、例えば、HWソースコードにおける処理動作を検証するハードウェアシミュレーションや、SWソースコードにおける処理動作を検証するソフトウェアシミュレーションとすることができる。
【0028】
協調制御部120は、2以上の演算部110−1〜110−nの動作タイミングを制御して演算部110−1〜110−nにおいて実行されるそれぞれの第1のシミュレーションを協調させ、複数の指令が協働することにより発揮されるシステムの動作を検証する第2のシミュレーションを実行する。
第2のシミュレーションは、例えば、ハードウェアシミュレーションとソフトウェアシミュレーションとを協調動作させたHW/SW協調シミュレーションとすることができる。
【0029】
また、シミュレーション装置10の演算部110−nは、コード生成部111−nとプログラム検証実行部112−nとクロック制御部113−nとから構成されている。
コード生成部111−nは、コンピュータプログラムに含まれる指令をプロセッサに実行させる実行コードをそのコンピュータプログラムに含まれる指令に基づいて生成する。
演算部110−nのプログラム検証実行部112−nは、コード生成部111−nによって生成された実行コードに基づいて第1のシミュレーションを実行する。
演算部110−nのクロック制御部113−nは、プログラム検証実行部112−nによって第1のシミュレーションが実行される際の動作クロックの周波数をコード生成部111−nによって生成された実行コードに基づいて制御する。
【0030】
ここで、演算部110−nの構成および演算部110−nによる第1のシミュレーションの実行機能について、図3〜図5を参照してさらに詳しく説明する。
図3に示すように、演算部110−nのコード生成部111−nは、さらに、指令識別部111−n−1と、指令追加部111−n−2と、コンパイル部111−n−3とから構成されている。
【0031】
指令識別部111−n−1は、複数のコンピュータプログラムのうち、プログラム検証実行部112−nによる第1のシミュレーションの実行対象である1のコンピュータプログラムに含まれる指令に対し、他のコンピュータプログラムの指令による動作に影響を与える指令であるか否かを識別する。
例えば、SWソースコードに記述されたハードウェア部分のレジスタへアクセスする指令(HWレジスタアクセス指令)は、HWソースコードによる処理動作、すなわち、ハードウェア部分の動作に影響を与える指令であることから、指令識別部111−n−1は、SWソースコードに記述されたHWレジスタアクセス指令を他の指令と識別する。
【0032】
指令追加部111−n−2は、指令識別部111−n−1によるコンピュータプログラムの指令に対する識別結果に基づいて、プログラム検証実行部112−nによる第1のシミュレーションを実行する際の動作クロックの周波数の変更指令である特殊指令を指令識別部111−n−1によって識別されたコンピュータプログラムに追加する。
ここで、指令追加部111−n−2による特殊指令を追加したSWソースコードの一例を図4,5に示す。
【0033】
図4では、HWレジスタアクセス指令のうち、レジスタ書込指令(b)が指令識別部111−n−1によって識別され、このレジスタ書込指令(b)の直前に指令追加部111−n−2によって動作クロックを制御する指令(a)を実行させる特殊指令(c)が追加されている。
また、図5では、HWレジスタアクセス指令のうち、レジスタ読出指令(d)が指令識別部111−n−1によって識別され、このレジスタ読出指令(d)の直後に指令追加部111−n−2によって動作クロックを制御する指令(a)を実行させる特殊指令(e)が追加されている。
【0034】
コンパイル部111−n−3は、指令追加部111−n−2によって特殊指令が追加されたコンピュータプログラムをコンパイルすることにより、プログラム検証実行部112−nによる第1のシミュレーションを実行するための実行コードを生成する。
例えば、特殊指令が追加されたSWソースコードをコンパイルし、このSWソースコードに基づく動作をプロセッサに実行させる命令語列であるバイナリコードを生成してソフトウェアシミュレーションを実行可能にする。
【0035】
プログラム検証実行部112−nは、コンパイル部111−n−3によって生成された実行コードに基づいて第1のシミュレーションを実行し、クロック制御部113−nは、その実行コードに追加されている特殊指令に基づいてと第1のシミュレーションを実行する際の動作クロックの周波数を制御する。
【0036】
具体的には、図4または図5に示すような特殊指令が追加されたSWソースコードをコンパイル部111−n−3がコンパイルしてソフトウェアシミュレーションが実行可能な実行コード(ここではバイナリコード)が生成され、プログラム検証実行部112−nは、このバイナリコードをプロセッサに実行させることによりSWソースコードにおける処理動作を検証する第1のシミュレーションを実行する。
その際、コンパイル部111−n−3によって生成されたバイナリコードに含まれる特殊指令(c),(e)をクロック制御部113−nが読み取ると、クロック制御部113−nは、この特殊指令に従って動作クロックの周波数を制御する指令(a)を実行することにより、プログラム検証実行部112−nによる第1のシミュレーションの検証スピードを制御する。
【0037】
例えば、図4のSWソースコードに対応したバイナリコードに基づいてソフトウェアシミュレーション処理の動作クロックを制御する場合、特殊指令(c)は、レジスタ書込指令(b)の直前に追加された特殊指令であり、すなわち、ハードウェアの動作に影響を与える指令であるレジスタ書込指令の開始を示す特殊指令である。
よって、特殊指令(c)に従って呼び出される動作クロックの周波数を制御する指令(a)は、動作クロックの周波数をハードウェアシミュレーション処理と協調させる周波数である予め設定されている第1の周波数へ制御する。
【0038】
また、図5のSWソースコードに対応したバイナリコードに基づいてソフトウェアシミュレーション処理の動作クロックを制御する場合、特殊指令(e)は、レジスタ読出指令(d)の直後に追加された特殊指令であり、すなわち、レジスタ読出が完了したことによりハードウェアの動作に影響がないことを示す特殊指令である。よって、特殊指令(e)に従って呼び出される動作クロックの周波数を制御する指令(a)は、動作クロックの周波数を任意の周波数である第2の周波数へ制御する。第2の周波数は、第1の周波数を任意の定数で逓倍した周波数とすることができる。
なお、上述した本実施のシミュレーション装置10の各構成要素は、シミュレーション装置10に搭載されたCPUやメモリ、インターフェースからなるコンピュータにコンピュータプログラム(ソフトウエア)をインストールすることによって実現され、上述したシミュレーション装置10の各種機能は、上記コンピュータの各種ハードウェア資源と上記コンピュータプログラムとが協働することによって実現される。
【0039】
次に、本実施のシミュレーション装置10の複数のプログラムに対する協調シミュレーションの動作について、図6,7に示すフローチャートを参照して説明する。
図6に示すように、シミュレーション装置10は、シミュレーション対象である複数のプログラムが入力されると(S11)、それぞれのプログラムに含まれる指令が他の指令の動作に影響を与える指令であるか否かを識別する(S12)。
【0040】
互いの動作に影響を与える指令が識別されると、識別された指令に応じて特殊指令をそれぞれのプログラムに追加して(S13)、この特殊指令を追加したプログラムをプロセッサに実行させる実行コードを生成する(S14)。
【0041】
引き続き図7に示すように、シミュレーション装置10は、生成された実行コードに基づいて、複数のプログラムに対する協調シミュレーションを開始し(S21)、実行コードに特殊指令を読み取ると、この特殊指令の種別を判定する(S22)。
実行コードに含まれる特殊指令は、複数のプログラムに含まれる任意の指令による動作が互いの動作に影響を与える指令が開始される、または、終了したことを示すものである。この互いのプログラムの動作に影響を与える指令が開始することを示す特殊指令を「第1の特殊指令」とし、その指令が終了したことを示す特殊指令を「第2の特殊指令」とする。
【0042】
シミュレーション装置10は、実行コードから特殊指令を読み取った後、特殊指令の種別を判別した結果、第1の特殊指令であった場合(S22で「第1の特殊指令」)、少なくとも1つのプログラムに対するシミュレーションの動作クロックの周波数を予め設定されている協調シミュレーションを実行する際の動作クロック周波数に設定する。
一方、特殊指令の種別を判別した結果、第2の特殊指令であった場合(S22で「第2の特殊指令」)、少なくとも1つのプログラムに対するシミュレーションの動作クロックの周波数を、任意の周波数である第2の周波数へ制御する。第2の周波数は、第1の周波数を任意の定数で逓倍した周波数とすることができる。
【0043】
動作クロックの周波数の設定を完了すると、シミュレーション装置10は、実行コードに基づくシミュレーションを終了させるのか否かを判定する(S25)。引き続き協調シミュレーションを実行する場合には(S25で「NO」)、実行コードに基づいて協調シミュレーションを継続し、ユーザによる強制的なシミュレーションの終了操作や実行コードの指令などからのシミュレーションの終了指示がある場合(S25で「YES」)、シミュレーション装置10は協調シミュレーションを終了する。
【0044】
ここで、ハードウェアとソフトウェアとが協働するシステムにおいて、ハードウェア部分の動作モデルを記述したハードウェアプログラムとソフトウェア部分の動作モデルを記述したソフトウェアプログラムとをプロセッサに実行させることによりシステムの機能を擬似的に動作させてシミュレートするHW/SW協調シミュレーションを一例に、シミュレーション装置10の動作について図8を参照して詳細に説明する。
【0045】
図8に示すように、シミュレーション装置10の演算部110−1は、システムのソフトウェア部分のSWソースコードから、演算部110−2は、システムのハードウェア部分のHWソースコードから、それぞれ互いの動作に影響を与える指令に応じた特殊指令を追加した実行コードを生成する(S101)。
実行コードの生成の後、演算部110−1,110−2は、予め設定されているHW/SW協調シミュレーションの動作クロックで実行コードに基づいたソフトウェアシミュレーションとハードウェアシミュレーションとを開始する(S102)。ここで、予め設定されているHW/SW協調シミュレーションの動作クロックの周波数を第1の周波数とする。
【0046】
演算部110−1,110−2によるソフトウェアシミュレーションとハードウェアシミュレーションとが開始されると、協調制御部120は、これらのシミュレーション処理を監視してシミュレーション処理の結果や動作タイミングの同期を図る(S103)。
【0047】
演算部110−1がソフトウェアシミュレーションの実行コードからHWレジスタアクセス指令のうち、読出完了を示す特殊指令を読み取ると(S104)、演算部110−1は、動作クロックの周波数を予め設定されている第1の周波数から第2の周波数へ設定する(S105)。ここで、第2の周波数は、第1の周波数に任意の定数mで逓倍した周波数とする。
【0048】
動作クロックの周波数が設定し直された後、再び演算部110−1,110−2は、新たに設定した動作クロックで実行コードに基づいたソフトウェアシミュレーションとハードウェアシミュレーションとを継続し(S106)、協調制御部120によってこれらのシミュレーション処理が監視されシミュレーション処理の結果や動作タイミングの同期が図られる(S107)。ただし、上記のS106で実行されるソフトウェアの動作およびハードウェアの動作は互いに影響を与えない動作であるため、協調制御部120は、それぞれのシミュレーション処理の監視のみ実行する。
【0049】
演算部110−1がソフトウェアシミュレーションの実行コードからHWレジスタアクセス指令のうち、書込開始を示す特殊指令を読み取ると(S108)、演算部110−1は、動作クロックの周波数を設定されている第2の周波数から予め設定されているHW/SW協調シミュレーションの動作クロック周波数である第1の周波数へ設定する(S109)。
【0050】
動作クロックの周波数が再び設定し直された後、演算部110−1,110−2は、新たに設定した動作クロックで実行コードに基づいたソフトウェアシミュレーションとハードウェアシミュレーションとを継続し(S110)、協調制御部120によってこれらのシミュレーション処理が監視されシミュレーション処理の結果や動作タイミングの同期が図られる(S111)。
ここで、上記のS110で実行されるソフトウェアの動作およびハードウェアの動作は、互いに影響を与える動作であるため、協調制御部120は、それぞれのシミュレーション処理を監視するとともに、それぞれのシミュレーション結果を互いに反映させそれぞれのシミュレーションの動作タイミングの同期を図る。
【0051】
よって、ホストコンピュータによって上述の特殊指令が追加されたHWソースコードとSWソースコードとをコンパイルして生成された実行コードに基づいて、本実施の形態にかかるシミュレーション装置10は、それぞれハードウェアシミュレータとソフトウェアシミュレータにハードウェアシミュレーション処理とソフトウェアシミュレーション処理とを実行させ、両者のシミュレーション結果における因果関係を検証する。
このとき、本実施の形態にかかるシミュレーション装置は、生成された実行コードに追加されている特殊指示に基づいてハードウェアシミュレータまたはソフトウェアシミュレータの動作クロックの周波数を制御し、それぞれのシミュレーション処理に応じた検証スピードでシミュレーション処理を実行する。
【0052】
このように、本実施の形態によれば、複数のプログラムが協働するシステムの動作をシミュレートする場合に、プログラムに含まれる指令の動作が互いのプログラムの動作に影響を与えるか否かを識別することにより、影響を与える指令を実行する時には複数の指令の実行タイミングと実行速度を同期させ、影響を与えない指令を実行する時には複数の指令の実行速度をそれぞれの指令に応じて設定することができる。
したがって、複数のプログラムが協働するシステムのシミュレーション処理において、無用な待ち時間を抑制することができ、シミュレーション効率を向上させることができる。
【産業上の利用可能性】
【0053】
SoCなどの大規模なLSIの開発設計を実施する際の開発環境であるホストコンピュータに搭載されるシステムレベル設計ツールとして利用可能である。
【符号の説明】
【0054】
10,20…シミュレーション装置、110−1〜110−n…演算部、111−1〜111−n…コード生成部、112−1〜112−n…プログラム検証実行部、113−1〜113−n…動作クロック制御部、111−n−1…指令識別部、113−n−1…指令識別部、113−n−1…コンパイル部、120…協調制御部、210…ソフトウェアシミュレート実行部、220…ハードウェアシミュレート実行部、230…協調シミュレート実行部。
【特許請求の範囲】
【請求項1】
コンピュータプログラムに含まれた複数の指令にしたがって異なる対象の動作をそれぞれシミュレートする複数の演算部と、
これら演算部の動作タイミングを制御して前記演算部において実行される前記指令を協調させる協調制御部と
を備え、
前記演算部の少なくとも1つは、
当該演算部が実行する指令に応じてその指令を実行する際の動作クロックを制御するクロック制御部を備えることを特徴とするシミュレーション装置。
【請求項2】
請求項1に記載のシミュレーション装置において、
前記演算部は、
前記複数の指令のうち、1の指令が他の指令に基づく動作に対して影響を与える指令であるか否かを識別する指令識別部と、
この指令識別部による識別結果に基づいて前記動作クロックの周波数を変更する指令を前記1の指令に追加する指令追加部とを備え、
前記クロック制御部は、前記指令追加部によって追加された前記指令に基づいて前記動作クロックの周波数を制御することを特徴とするシミュレーション装置。
【請求項3】
請求項2に記載のシミュレーション装置において、
前記指令識別部は、任意の論理回路における動作モデルを所定の言語で記述された少なくとも1つのハードウェアプログラムと、任意のプロセッサによる機能の動作モデルを所定の言語で記述された少なくとも1つのソフトウェアプログラムとのいずれかにおいて、前記ハードウェアのレジスタに格納されるデータの読み出し完了を示す読出完了指令および書き込み開始を示す書込開始指令を抽出し、
前記指令追加部は、前記指令識別部によって前記読出完了指令および前記書込完了指令が抽出された前記ハードウェアプログラムまたは前記ソフトウェアプログラムに対し、抽出された前記読出完了指令の直後に前記クロックの周波数を予め定めた第1の周波数から任意の第2の周波数に変更させる第1の指令を追加するとともに、抽出された前記書込開始指令の直前に前記クロックの周波数を予め定めた前記第1の周波数へ変更させる第2の指令を追加すること
を特徴とする前記ハードウェアプログラムと前記ソフトウェアプログラムとが協働するシステムの機能を検証するシミュレーション装置。
【請求項4】
コンピュータプログラムに含まれた複数の指令にしたがって異なる対象の動作をそれぞれシミュレートする演算ステップと、
複数の前記演算ステップの動作タイミングを制御して前記複数の演算ステップにおいて実行される前記指令を協調させる協調制御ステップと
前記演算ステップにより実行される指令に応じてその指令を実行する際の動作クロックを制御するクロック制御ステップと
を備えることを特徴とするシミュレーション装置の制御方法。
【請求項5】
請求項4に記載のシミュレーション装置の制御方法において、
前記演算ステップは、
前記複数の指令のうち、1の指令が他の指令に基づく動作に対して影響を与える指令であるか否かを識別する指令識別ステップと、
この指令識別ステップによる識別結果に基づいて前記動作クロックの周波数を変更する指令を前記1の指令に追加する指令追加ステップとを備え、
前記クロック制御ステップは、前記指令追加ステップによって追加された前記指令に基づいて前記動作クロックの周波数を制御することを特徴とするシミュレーション装置の制御方法。
【請求項6】
請求項5に記載のシミュレーション装置の制御方法において、
前記指令識別ステップは、任意の論理回路における動作モデルを所定の言語で記述された少なくとも1つのハードウェアプログラムと、任意のプロセッサによる機能の動作モデルを所定の言語で記述された少なくとも1つのソフトウェアプログラムとのいずれかにおいて、前記ハードウェアのレジスタに格納されるデータの読み出し完了を示す読出完了指令および書き込み開始を示す書込開始指令を抽出し、
前記指令追加ステップは、前記指令識別ステップによって前記読出完了指令および前記書込完了指令が抽出された前記ハードウェアプログラムまたは前記ソフトウェアプログラムに対し、抽出された前記読出完了指令の直後に前記動作クロックの周波数を予め定めた第1の周波数から任意の第2の周波数に変更させる第1の指令を追加するとともに、抽出された前記書込開始指令の直前に前記動作クロックの周波数を予め定めた前記第1の周波数へ変更させる第2の指令を追加すること
を特徴とする前記ハードウェアプログラムと前記ソフトウェアプログラムとが協働するシステムの機能を検証するシミュレーション装置の制御方法。
【請求項7】
コンピュータに、請求項4乃至6のいずれかに記載のシミュレーション装置の制御方法を実行させることを特徴とするシミュレーション装置の制御プログラム。
【請求項1】
コンピュータプログラムに含まれた複数の指令にしたがって異なる対象の動作をそれぞれシミュレートする複数の演算部と、
これら演算部の動作タイミングを制御して前記演算部において実行される前記指令を協調させる協調制御部と
を備え、
前記演算部の少なくとも1つは、
当該演算部が実行する指令に応じてその指令を実行する際の動作クロックを制御するクロック制御部を備えることを特徴とするシミュレーション装置。
【請求項2】
請求項1に記載のシミュレーション装置において、
前記演算部は、
前記複数の指令のうち、1の指令が他の指令に基づく動作に対して影響を与える指令であるか否かを識別する指令識別部と、
この指令識別部による識別結果に基づいて前記動作クロックの周波数を変更する指令を前記1の指令に追加する指令追加部とを備え、
前記クロック制御部は、前記指令追加部によって追加された前記指令に基づいて前記動作クロックの周波数を制御することを特徴とするシミュレーション装置。
【請求項3】
請求項2に記載のシミュレーション装置において、
前記指令識別部は、任意の論理回路における動作モデルを所定の言語で記述された少なくとも1つのハードウェアプログラムと、任意のプロセッサによる機能の動作モデルを所定の言語で記述された少なくとも1つのソフトウェアプログラムとのいずれかにおいて、前記ハードウェアのレジスタに格納されるデータの読み出し完了を示す読出完了指令および書き込み開始を示す書込開始指令を抽出し、
前記指令追加部は、前記指令識別部によって前記読出完了指令および前記書込完了指令が抽出された前記ハードウェアプログラムまたは前記ソフトウェアプログラムに対し、抽出された前記読出完了指令の直後に前記クロックの周波数を予め定めた第1の周波数から任意の第2の周波数に変更させる第1の指令を追加するとともに、抽出された前記書込開始指令の直前に前記クロックの周波数を予め定めた前記第1の周波数へ変更させる第2の指令を追加すること
を特徴とする前記ハードウェアプログラムと前記ソフトウェアプログラムとが協働するシステムの機能を検証するシミュレーション装置。
【請求項4】
コンピュータプログラムに含まれた複数の指令にしたがって異なる対象の動作をそれぞれシミュレートする演算ステップと、
複数の前記演算ステップの動作タイミングを制御して前記複数の演算ステップにおいて実行される前記指令を協調させる協調制御ステップと
前記演算ステップにより実行される指令に応じてその指令を実行する際の動作クロックを制御するクロック制御ステップと
を備えることを特徴とするシミュレーション装置の制御方法。
【請求項5】
請求項4に記載のシミュレーション装置の制御方法において、
前記演算ステップは、
前記複数の指令のうち、1の指令が他の指令に基づく動作に対して影響を与える指令であるか否かを識別する指令識別ステップと、
この指令識別ステップによる識別結果に基づいて前記動作クロックの周波数を変更する指令を前記1の指令に追加する指令追加ステップとを備え、
前記クロック制御ステップは、前記指令追加ステップによって追加された前記指令に基づいて前記動作クロックの周波数を制御することを特徴とするシミュレーション装置の制御方法。
【請求項6】
請求項5に記載のシミュレーション装置の制御方法において、
前記指令識別ステップは、任意の論理回路における動作モデルを所定の言語で記述された少なくとも1つのハードウェアプログラムと、任意のプロセッサによる機能の動作モデルを所定の言語で記述された少なくとも1つのソフトウェアプログラムとのいずれかにおいて、前記ハードウェアのレジスタに格納されるデータの読み出し完了を示す読出完了指令および書き込み開始を示す書込開始指令を抽出し、
前記指令追加ステップは、前記指令識別ステップによって前記読出完了指令および前記書込完了指令が抽出された前記ハードウェアプログラムまたは前記ソフトウェアプログラムに対し、抽出された前記読出完了指令の直後に前記動作クロックの周波数を予め定めた第1の周波数から任意の第2の周波数に変更させる第1の指令を追加するとともに、抽出された前記書込開始指令の直前に前記動作クロックの周波数を予め定めた前記第1の周波数へ変更させる第2の指令を追加すること
を特徴とする前記ハードウェアプログラムと前記ソフトウェアプログラムとが協働するシステムの機能を検証するシミュレーション装置の制御方法。
【請求項7】
コンピュータに、請求項4乃至6のいずれかに記載のシミュレーション装置の制御方法を実行させることを特徴とするシミュレーション装置の制御プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2011−232914(P2011−232914A)
【公開日】平成23年11月17日(2011.11.17)
【国際特許分類】
【出願番号】特願2010−101826(P2010−101826)
【出願日】平成22年4月27日(2010.4.27)
【出願人】(000004226)日本電信電話株式会社 (13,992)
【Fターム(参考)】
【公開日】平成23年11月17日(2011.11.17)
【国際特許分類】
【出願日】平成22年4月27日(2010.4.27)
【出願人】(000004226)日本電信電話株式会社 (13,992)
【Fターム(参考)】
[ Back to top ]