(57)【特許請求の範囲】
【請求項１】
仕様記述言語で記述された手続きが階層化されている第１のコードをハードウェア記述言語で記述された並列プロセスが階層化されている第２のコードに変換するソフトウェア・ハードウェア言語モデル変換装置において、
前記第１のコードを前記第２のコードに変換する手段と、
前記第１のコードに記述されたある共有変数に値を代入する複数の並列手続きに相当する複数のプロセスを前記第２のコードから検出する手段と、
検出された前記複数のプロセスのうち一つの階層に属するプロセスのそれぞれからのデータ信号及び代入タイミング信号の組を入力とし、前記代入タイミング信号が変化したいずれかの前記プロセスの前記共有変数の値を表すデータ信号及び該データ信号の値が更新されるときに変化する前記代入タイミング信号とを出力する下位階層の値解決プロセス及び前記下位階層の値解決プロセスから出力された前記データ信号及び前記代入タイミング信号の組と他の階層に属するプロセスからのデータ信号及び代入タイミング信号の組の入力とし、前記代入タイミング信号が変化したいずれかの前記共有変数の値を表すデータ信号及び該データ信号の値が更新されるときに変化する前記代入タイミング信号を出力とする上位階層の値解決プロセスとを生成する手段とを具備することを特徴とするソフトウェア・ハードウェア言語モデル変換装置。
【請求項２】
前記一つの階層に属するプロセスから前記下位階層の値解決プロセスへの入力を前記上位階層の値解決プロセスへの入力に接続する手段と、前記下位階層の値解決プロセスを削除する手段と、をさらに具備する請求項１に記載のソフトウェア・ハードウェア言語モデル変換装置。
【請求項３】
仕様記述言語で記述された手続きが階層化されている第１のコードのハードウェア記述言語で記述された並列プロセスが階層化されている第２のコードに変換するソフトウェア・ハードウェア言語モデル変換装置において、
ある共有変数に値を代入する複数の並列手続きを、前記第１のコードから検出する手段と、
前記第１のコードを前記第２のコードに変換する手段と、
検出された前記複数の並列手続きに相当する複数のプロセスのうち一つの階層に属するプロセスのそれぞれからのデータ信号及び代入タイミング信号の組を入力とし、前記代入タイミング信号が変化したいずれかの前記プロセスの前記共有変数の値を表すデータ信号及び該データ信号の値が更新されるときに変化する前記代入タイミング信号とを出力する下位階層の値解決プロセス及び前記下位階層の値解決プロセスから出力された前記データ信号及び前記代入タイミング信号の組と他の階層に属するプロセスからのデータ信号及び代入タイミング信号の組を入力とし、前記代入タイミング信号が変化したいずれかの前記共有変数の値を表すデータ信号及び該データ信号の値が更新されるときに変化する前記代入タイミング信号を出力とする上位階層の値解決プロセスとを生成する手段とを具備することを特徴とするソフトウェア・ハードウェア言語モデル変換装置。
【請求項４】
前記一つの階層に属するプロセスから前記下位階層の値解決プロセスへの入力を前記上位階層の値解決プロセスへの入力に接続する手段と、前記下位階層の値解決プロセスを削除する手段と、をさらに具備する請求項１に記載のソフトウェア・ハードウェア言語モデル変換装置。
【請求項５】
仕様記述言語で記述された手続きが階層化されている第１のコードをハードウェア記述言語で記述された並列プロセスが階層化されている第２のコードに変換するソフトウェア・ハードウェア言語モデル変換装置において、
前記第１のコードを前記第２のコードに変換する手段と、
前記第１のコードに記述されたある並行手続きを呼び出す複数の手続きに相当する複数のプロセスを前記第２のコードから検出する手段と、
検出された前記複数のプロセスのうち一つの階層に属するプロセスのそれぞれからの呼び出しタイミング信号及び引数データ信号の組を入力とし、呼び出された手続きからの終了信号及び戻り値信号を該プロセスへの出力とする、検出された前記プロセスによる前記並行手続きへの呼び出し動作を排他制御する下位階層の手続き呼び出し解決プロセス及び前記下位階層の手続き呼び出し解決プロセスからの呼び出しタイミング信号及び引数データ信号の組と他の階層に属するプロセスからの呼び出しタイミング信号及び引数データ信号の組を入力とし、呼び出された手続きからの終了信号及び戻り値信号を該プロセスへの出力とする、検出された前記プロセスによる前記並行手続きへの呼び出し動作を排他制御する上位回想の手続き呼び出し解決プロセスを生成する手段とを具備することを特徴とするソフトウェア・ハードウェア言語モデル変換装置。
【請求項６】
前記下位階層の手続き呼び出し解決プロセスへの入力を前記上位階層の手続き呼び出し解決プロセスへの入力に接続する手段と、前記下位階層の手続き呼び出し解決プロセスを削除する手段と、をさらに具備する請求項５記載のハードウェア・ソフトウェア言語モデル変換装置。
【請求項７】
仕様記述言語で記述された手続きが階層化されている第１のコードをハードウェア記述言語で記述された並列プロセスが階層化されている第２のコードに変換するソフトウェア・ハードウェア言語モデル変換装置において、
ある並行手続きを呼び出す複数の手続きを前記第１のコードから検出する手段と、
前記第１のコードを前記第２のコードに変換する手段と、
検出された前記複数の手続きに相当する複数のプロセスのうち一つの階層に属するプロセスのそれぞれからの呼び出しタイミング信号及び引数データ信号の組を入力とし、呼び出された手続きからの終了信号及び戻り値信号を該プロセスへの出力とする、前記複数のプロセスの動作を排他制御する下位階層の手続き呼び出し解決プロセス及び前記下位階層の手続き呼び出し解決プロセスからの呼び出しタイミング信号及び引数データ信号の組と他の階層に属するプロセスからの呼び出しタイミング信号及び引数データ信号の組を入力とし、呼び出された手続きからの終了信号及び戻り値信号を該プロセスへの出力とする、
前記複数のプロセスの動作を排他制御する上位階層の手続き呼び出し解決プロセスを生成する手段とを具備することを特徴とするソフトウェア・ハードウェア言語モデル変換装置。
【請求項８】
前記下位階層の手続き呼び出し解決プロセスへの入力を前記上位階層の手続き呼び出し解決プロセスへの入力に接続する手段と、前記下位階層の手続き呼び出し解決プロセスを削除する手段と、をさらに具備する請求項７記載のソフトウェア・ハードウェア言語モデル変換装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ソフトウェア記述をハードウェア動作記述に自動変換するソフトウェア・ハードウェア言語モデル変換方法及びプログラムに関する。
【０００２】
【従来の技術】
昨今、ＣやＣ++さらには仕様記述言語ＳｐｅｃＣ（“SpecC:Specification Language and Methodology”,Daniel D.Gajski,Kluwer Academic Publishers,Dordrecht,ISBN0-7923-7822-9に詳しい)といったソフトウェア記述言語で、システム全体あるいはハードウェアを設計することが注目されている。すなわち、ソフトウェア記述言語により仕様を記述し、これを、ハードウェアの詳細設計に移行する際に下流の論理合成ツールなどに接続するため、ＶＨＤＬやＶｅｒｉｌｏｇ等のハードウェア記述言語による仕様記述に変換するものである。
【０００３】
Ｃ言語からハードウェア言語モデルを生成するツールは、すでに製品化されているものもある。しかし、そのときに入力するコードはシーケンシャルな処理を記述したものに限られており、部分的な設計においては役に立つものの、より大規模な設計を行おうとすると、シーケンシャルな仕様では書ききれない部分があるので不都合がある。従って、並列プログラムをサポートできるソフトウェア・ハードウェア言語モデル変換が望まれている。
【０００４】
【発明が解決しようとする課題】
ソフトウェア記述言語による記述で並列プログラムを含むとき、その記述を動作レベルのハードウェア記述言語に変換する場合、共有変数の取り扱いを素直に変換することができないという問題点があった。つまり、ソフトウェアでは代入が実行される順序に従って値が決まるが、ハードウェア記述においては各並列プログラムからの信号出力を単純に結線すると値が不定または代入順序とは関係なく決まる値となってしまう。そこで、システマティックに共有変数への代入処理をハードウェア記述へ変換を行う方法が望まれる。
【０００５】
また、ソフトウェア記述言語による記述で並列に動作し得る手続きの呼び出しを含むとき、その記述を動作レベルのハードウェア記述言語に変換する場合、同一の手続きに対する呼び出しの取り扱いを素直に変換することができないという問題点があった。つまり、並列手続きをプロセスへ置きかえた場合、同時に同じ手続きが呼び出され得るが、素直にプロセス間の信号によるシェークハンドで表すと、排他的呼び出しにならないことになってしまう。そこで、システマティックに排他的呼び出しの機構をコード生成する方法が望まれる。
【０００６】
本発明は、上記事情を考慮してなされたもので、並列プログラムとその間に共有する変数を含むソフトウェア記述を同様の動作をする動作レベルのハードウェア記述に変換することのできるソフトウェア・ハードウェア言語モデル変換方法及びプログラムを提供することを目的とする。
【０００７】
また、本発明は、ソフトウェア言語による並列プログラムをハードウェア記述に変換する際、手続き呼び出しに相当する排他的なプロセス実行処理を実現することのできるソフトウェア・ハードウェア言語モデル変換方法及びプログラムを提供することを目的とする。
【０００８】
【課題を解決するための手段】
本発明に係る第１のソフトウェア・ハードウェア言語モデル変換方法は、ソフトウェア記述言語で記述された第１のコードをハードウェア記述言語で記述された第２のコードに変換するソフトウェア・ハードウェア言語モデル変換方法において、前記第１のコードを前記第２のコードに変換するステップと、前記第１のコードに記述されたある共有変数に値を代入する複数の並列手続きに相当する複数のプロセスを前記第２のコードから検出するステップと、検出された前記複数のプロセスのそれぞれからのデータ信号及び代入タイミング信号の組を入力とし、前記代入タイミング信号が変化したいずれかの前記プロセスのデータ信号を前記共有変数の値を表す信号として出力する前記複数のプロセスについての値解決プロセスを生成するステップと、を具備するソフトウェア・ハードウェア言語モデル変換方法である。
【０００９】
本発明に係る第２のソフトウェア・ハードウェア言語モデル変換方法は、ソフトウェア記述言語で記述された第１のコードをハードウェア記述言語で記述された第２のコードに変換するソフトウェア・ハードウェア言語モデル変換方法において、ある共有変数に値を代入する複数の並列手続きを、前記第１のコードから検出するステップと、前記第１のコードを前記第２のコードに変換するステップと、検出された前記複数の並列手続きに相当する複数のプロセスのそれぞれからのデータ信号及び代入タイミング信号の組を入力とし、該代入タイミング信号が変化したいずれかのプロセスのデータ信号を前記共有変数の値を表す信号として出力する値解決プロセスを生成するステップと、を具備するソフトウェア・ハードウェア言語モデル変換方法である。
【００１０】
本発明に係る第３のソフトウェア・ハードウェア言語モデル変換方法は、ソフトウェア記述言語によって記述された第１のコードをハードウェア記述によって記述された第２のコードに変換する言語モデル変換方法において、前記第１のコードを前記第２のコードに変換するステップと、前記第１のコードに記述されたある並行手続きを呼び出す複数の手続きに相当する複数のプロセスを前記第２のコードから検出するステップと、検出された前記プロセスのそれぞれからの呼び出しタイミング信号及び引数データ信号の組を入力とし、呼び出された手続きからの終了信号及び戻り値信号を該プロセスへの出力とする、検出された前記プロセスによる前記並行手続きへの呼び出し動作を排他制御する手続き呼び出し解決プロセスを生成するステップと、を具備するソフトウェア・ハードウェア言語モデル変換方法である。
【００１１】
本発明に係る第４のソフトウェア・ハードウェア言語モデル変換方法は、ソフトウェア記述言語によって記述された第１のコードをハードウェア記述によって記述された第２のコードに変換する言語モデル変換方法において、ある並行手続きを呼び出す複数の手続きを前記第１のコードから検出するステップと、前記第１のコードを前記第２のコードに変換するステップと、検出された前記複数の手続きに相当する複数のプロセスのそれぞれからの呼び出しタイミング信号及び引数データ信号の組を入力とし、呼び出された手続きからの終了信号及び戻り値信号を該プロセスへの出力とする、前記複数のプロセスの動作を排他制御する手続き呼び出し解決プロセスを生成するステップと、を具備するソフトウェア・ハードウェア言語モデル変換方法である。
【００１２】
本発明に係る第５のソフトウェア・ハードウェア言語モデル変換方法は、ソフトウェア記述言語で記述された第１のコードをハードウェア記述言語で記述された第２のコードに変換するソフトウェア・ハードウェア言語モデル変換方法において、前記第１のコードを前記第２のコードに変換するステップと、前記第１のコードに記述されたある共有変数に値を代入する複数の並列手続きに相当する複数のプロセスを前記第２のコードから検出するステップと、検出された前記複数のプロセスのそれぞれからのデータ信号及び代入タイミング信号の組を入力とし、前記代入タイミング信号が変化したいずれかの前記プロセスのデータ信号を前記共有変数の値を表す信号として出力する、検出された前記複数の並列手続きに相当する複数のプロセスについて値解決プロセスを生成するステップと、生成された複数の前記値解決プロセスの各々について、該値解決プロセスが並列プロセス間の手続き呼び出しに関係するものであるか否かを判定するステップと、前記並列プロセス間の手続き呼び出しに関係するものと判定された値解決プロセスを、呼び出し側の前記並列プロセスのそれぞれからの呼び出しタイミング信号及び引数データ信号の組を入力とし、呼び出された側のプロセスからの終了信号及び戻り値信号を出力とする手続き呼び出し解決プロセスに変換するステップと、を具備するソフトウェア・ハードウェア言語モデル変換方法である。
【００１３】
本発明に係る第６のソフトウェア・ハードウェア言語モデル変換方法は、ソフトウェア記述言語で記述された第１のコードをハードウェア記述言語で記述された第２のコードに変換するソフトウェア・ハードウェア言語モデル変換方法において、ある共有変数に値を代入する複数の並列手続きを、前記第１のコードから検出するステップと、前記第１のコードを前記第２のコードに変換するステップと、前記複数の並列手続きに相当する複数のプロセスのそれぞれからのデータ信号及び代入タイミング信号の組を入力とし、該代入タイミング信号が変化したいずれかのプロセスのデータ信号を前記共有変数の値を表す信号として出力する値解決プロセスを生成するステップと、生成された複数の前記値解決プロセスの各々について、該値解決プロセスが並列プロセス間の手続き呼び出しに関係するものであるか否かを判定するステップと、前記並列プロセス間の手続き呼び出しに関係するものと判定された値解決プロセスを、呼び出し側の前記並列プロセスのそれぞれからの呼び出しタイミング信号及び引数データ信号の組を入力とし、呼び出された側のプロセスからの終了信号及び戻り値信号を出力とする手続き呼び出し解決プロセスに変換するステップと、を具備するソフトウェア・ハードウェア言語モデル変換方法である。
【００１４】
本発明の第１のソフトウェア・ハードウェア言語モデル変換プログラムは、ソフトウェア記述言語で記述された第１のコードをハードウェア記述言語で記述された第２のコードに変換するソフトウェア・ハードウェア言語モデル変換プログラムにおいて、コンピュータを、前記第１のコードを前記第２のコードに変換する手段、前記第１のコードに記述されたある共有変数に値を代入する複数の並列手続きに相当する複数のプロセスを前記第２のコードから検出する手段、検出された前記複数のプロセスのそれぞれからのデータ信号及び代入タイミング信号の組を入力とし、前記代入タイミング信号が変化したいずれかの前記プロセスのデータ信号を前記共有変数の値を表す信号として出力する前記複数のプロセスについての値解決プロセスを生成する手段、
として機能させるためのソフトウェア・ハードウェア言語モデル変換プログラムである。
【００１５】
本発明の第２のソフトウェア・ハードウェア言語モデル変換プログラムは、ソフトウェア記述言語で記述された第１のコードをハードウェア記述言語で記述された第２のコードに変換するソフトウェア・ハードウェア言語モデル変換プログラムにおいて、コンピュータを、ある共有変数に値を代入する複数の並列手続きを、前記第１のコードから検出する手段、前記第１のコードを前記第２のコードに変換する手段、前記複数の並列手続きに相当する複数のプロセスのそれぞれからのデータ信号及び代入タイミング信号の組を入力とし、該代入タイミング信号が変化したいずれかのプロセスのデータ信号を前記共有変数の値を表す信号として出力する値解決プロセスを生成する手段、として機能させるためのソフトウェア・ハードウェア言語モデル変換プログラムである。
【００１６】
本発明の第３のソフトウェア・ハードウェア言語モデル変換プログラムは、ソフトウェア記述言語によって記述された第１のコードをハードウェア記述によって記述された第２のコードに変換する言語モデル変換プログラムにおいて、コンピュータを、前記第１のコードを前記第２のコードに変換する手段、前記第１のコードに記述されたある並行手続きを呼び出す複数の手続きに相当する複数のプロセスを前記第２のコードから検出する手段、検出された前記プロセスのそれぞれからの呼び出しタイミング信号及び引数データ信号の組を入力とし、呼び出された手続きからの終了信号及び戻り値信号を該プロセスへの出力とする、検出された前記プロセスによる前記並行手続きへの呼び出し動作を排他制御する手続き呼び出し解決プロセスを生成する手段、として機能させるためのソフトウェア・ハードウェア言語モデル変換プログラムである。
【００１７】
本発明の第４のソフトウェア・ハードウェア言語モデル変換プログラムは、ソフトウェア記述言語によって記述された第１のコードをハードウェア記述によって記述された第２のコードに変換する言語モデル変換プログラムにおいて、コンピュータを、ある並行手続きを呼び出す複数の手続きを前記第１のコードから検出する手段、前記第１のコードを前記第２のコードに変換する手段、検出された前記複数の手続きに相当する複数のプロセスのそれぞれからの呼び出しタイミング信号及び引数データ信号の組を入力とし、呼び出された手続きからの終了信号及び戻り値信号を該プロセスへの出力とする、前記複数のプロセスの動作を排他制御する手続き呼び出し解決プロセスを生成する手段、として機能させるためのソフトウェア・ハードウェア言語モデル変換プログラムである。
【００１８】
本発明の第５のソフトウェア・ハードウェア言語モデル変換プログラムは、ソフトウェア記述言語で記述された第１のコードをハードウェア記述言語で記述された第２のコードに変換するソフトウェア・ハードウェア言語モデル変換プログラムにおいて、コンピュータを、前記第１のコードを前記第２のコードに変換する手段、前記第１のコードに記述されたある共有変数に値を代入する複数の並列手続きに相当する複数のプロセスを前記第２のコードから検出する手段、検出された前記複数のプロセスのそれぞれからのデータ信号及び代入タイミング信号の組を入力とし、前記代入タイミング信号が変化したいずれかの前記プロセスのデータ信号を前記共有変数の値を表す信号として出力する、検出された前記複数の並列手続きに相当する複数のプロセスについて値解決プロセスを生成する手段、生成された複数の前記値解決プロセスの各々について、該値解決プロセスが並列プロセス間の手続き呼び出しに関係するものであるか否かを判定する手段、前記並列プロセス間の手続き呼び出しに関係するものと判定された値解決プロセスを、呼び出し側の前記並列プロセスのそれぞれからの呼び出しタイミング信号及び引数データ信号の組を入力とし、呼び出された側のプロセスからの終了信号及び戻り値信号を出力とする手続き呼び出し解決プロセスに変換する手段、として機能させるためのソフトウェア・ハードウェア言語モデル変換プログラムである。
【００１９】
本発明の第６のソフトウェア・ハードウェア言語モデル変換プログラムは、ソフトウェア記述言語で記述された第１のコードをハードウェア記述言語で記述された第２のコードに変換するソフトウェア・ハードウェア言語モデル変換プログラムにおいて、コンピュータを、ある共有変数に値を代入する複数の並列手続きを、前記第１のコードから検出する手段、前記第１のコードを前記第２のコードに変換する手段、前記複数の並列手続きに相当する複数のプロセスのそれぞれからのデータ信号及び代入タイミング信号の組を入力とし、該代入タイミング信号が変化したいずれかのプロセスのデータ信号を前記共有変数の値を表す信号として出力する値解決プロセスを生成する手段、生成された複数の前記値解決プロセスの各々について、該値解決プロセスが並列プロセス間の手続き呼び出しに関係するものであるか否かを判定するステップと、前記並列プロセス間の手続き呼び出しに関係するものと判定された値解決プロセスを、呼び出し側の前記並列プロセスのそれぞれからの呼び出しタイミング信号及び引数データ信号の組を入力とし、呼び出された側のプロセスからの終了信号及び戻り値信号を出力とする手続き呼び出し解決プロセスに変換する手段と、として機能させるためのソフトウェア・ハードウェア言語モデル変換プログラム。
【００２０】
【発明の実施の形態】
以下、図面を参照しながら発明の実施の形態を説明する。
【００２１】
図１８に、本発明の実施の形態に係るシステム設計支援装置１００の構成例を示す。図１８に示されるように、システム設計支援装置１００は、仕様モデル記述部１０１、アーキテクチャ探索部１０２、コミュニケーション合成部１０３、ハードウェア仕様生成部１０４、部品化・再利用部１０５、ソフトウェア仕様生成部１０６、システム仕様記録部１０７を備えている。システム設計支援装置１００は、例えば、コンピュータを用いて構成可能であり、この場合、各処理部分はプログラムによって実施できる。
【００２２】
システム仕様記録部１０７は、入力データや各処理部の処理結果の全部又は一部、例えば、計算機で実行されるソフトウェアの仕様や、半導体を組み合わせたハードウェアの仕様や、ソフトウェアとハードウェアを組み合わせた組み込みシステムの仕様や、ワークフロー等のビジネスプロセスの仕様に対しシステムレベルでの仕様等や、その他の必要なデータを記録するためのものである。
【００２３】
仕様モデル記述部１０１は、設計者が予め定められた仕様記述形式に従って計算内容の仕様、通信内容の仕様を記述することを支援するためのものである。仕様モデル記述部１０１の支援の結果、仕様モデルが生成される。仕様記述形式には、例えば、構造化プログラミング言語に代表される構造化テキスト形式や、グラフを利用する構造図形式や、テーブルを利用する表形式が有る。
【００２４】
アーキテクチャ探索部１０２は、与えられた仕様記述モデルと、アーキテクチャ（例えば、ハードウェア実行環境とソフトウェア実行環境の構成）に対し、仕様の内容を保存したまま仕様モデルの部分構造を分割しアーキテクチャ要素に分配する。すなわち、仕様モデル記述部１０１で設計された計算内容の仕様や通信内容の仕様を構成する部品をアーキテクチャ要素に割り当てる。
【００２５】
コミュニケーション合成部１０３は、アーキテクチャ探索部１０２で分配された通信仕様要素間に対して通信手順（プロトコル）を挿入し、通信内容の仕様が挿入された通信手順と整合性を保つためのプロトコル変換（通信手順の組替え）を行う。
【００２６】
なお、アーキテクチャ探索部１０２が処理対象とする仕様記述モデルは、仕様モデル記述部１０１を利用して記述されたものに限定されず、他のツール等で記述されたものでもよい。また、コミュニケーション合成部１０３が処理対象とする仕様記述モデルは、アーキテクチャ探索部１０２の出力結果（またはこの結果に修正を加えたもの）に限定されず、他のツール等で記述されたものでもよい。
【００２７】
ハードウェア仕様生成部１０４は、システム仕様からハードウェア記述言語などによるハードウェア仕様を生成する。
【００２８】
ソフトウェア仕様生成部１０６は、システム仕様からソフトウェア記述言語などによるソフトウェア仕様を生成する。
【００２９】
ハードウェア仕様生成部１０４やソフトウェア仕様生成部１０６は、仕様モデル記述部１０１の出力結果（またはこの結果に修正を加えたもの）、アーキテクチャ探索部１０２の出力結果（またはこの結果に修正を加えたもの）、コミュニケーション合成部１０３の出力結果（またはこの結果に修正を加えたもの）、あるいは他のツール等で記述されたものなどを処理対象とすることができる。
【００３０】
部品化・再利用部１０５は、仕様モデル記述部１０１、アーキテクチャ探索部１０２、コミュニケーション合成部１０３の全部または一部の設計段階において、仕様を部品化し、これを設計に再利用するためのものである。
【００３１】
以下詳述するソフトウェア・ハードウェア言語モデル変換装置は、図１８のシステム設計支援装置のハードウェア仕様生成部１０４に用いられるもので、システム仕様からＨＤＬ記述を生成することを可能にするものである。
【００３２】
図１に、本発明の一実施形態に係るソフトウェア・ハードウェア言語モデル変換装置（以下、言語モデル変換装置と呼ぶ）の構成例を示す。
【００３３】
図１に示されるように、本言語モデル変換装置は、骨格コード生成部１、コード置換部２、値解決プロセス生成部３を備えている。
【００３４】
本言語モデル変換装置は、ＳｐｅｃＣ言語等のソフトウェア記述言語により記述されたモデルから、ＶＨＤＬ等のハードウェア記述言語により記述された（同様の動作をする）モデルを生成するものである。
【００３５】
まず、図２（ソフトウェア記述言語モデルの説明図）および図３（ハードウェア記述言語の説明図）を参照して、本言語モデル変換装置の概要について説明する。なお、図２および図３において、１０２１は共有変数、１０２３は並列に動作し得る手続き、１０２２は手続きからの出力、１０１１は共有変数の値を保持する信号、１０１５は互いに並行に実行されるプロセス、１０１２は本言語モデル変換装置が生成する値解決プロセス（矢印が信号の入出力を表す）、１０１３はプロセスの代入データ信号、１０１４はプロセスの代入タイミング信号である。
【００３６】
図２のようにソフトウェア記述言語において並列プログラム間の共有変数がある場合、本言語モデル変換装置は、図３のようにハードウェア記述言語において、各共有変数に対して、値保持信号（１０１１）とその共有変数に書き込みアクセスし得る各並列プログラム（１０２３）に対応するプロセス（１０１５）ごとに、代入データ信号（１０１３）と代入タイミング信号（１０１４）を生成し、代入タイミング信号（１０１４）の変化に従って、値保持信号（１０１１）への出力を、代入タイミング信号（１０１４）と組になるデータ信号（１０１３）に切り替える、値解決プロセス（１０１２）を生成する。値解決プロセス（１０１２）の生成は、入力コードにおけるその共有変数代入の処理に対応する部分にデータ信号（１０１３）への代入と代入タイミング信号（１０１４）の変化を与える処理（図８参照）を生成することによって行う。
【００３７】
また、ここでは、図４のように入力されるソフトウェア記述言語モデルにおいて手続きが階層化されていて出力されるハードウェア記述言語モデルにおいて並列プロセスが階層化されている場合、図５のように値解決プロセスは階層ごとにあって信号がその階層に従って接続される。その場合、下位階層の値解決プロセスの出力には、代入タイミング信号が加わる。階層があるときは、値反映の待ちを挿入する。
【００３８】
以下、本言語モデル変換装置の処理について説明する。
【００３９】
図６に、本言語モデル変換装置の処理手順の一例を示す。図６に示されるように本手順は、骨格コード生成処理（処理１〜６）と、コード置換生成処理（処理７，８）と、値解決プロセス生成処理（処理９，１０）とを行うものである。
【００４０】
なお、後述する処理１〜１０は、図７に示すような実行順序制約（矢印の終点側にある処理はその矢印の起点側にある全処理の終了後に実行する）を満たす限り、どのような順番で処理を行っても構わない。また、複数の処理を並列に行っても良い。
【００４１】
ここでは、ＳｐｅｃＣ言語のソースコードを入力して、ＶＨＤＬソースコードを生成する場合を例にとって説明する。また、出力するＶＨＤＬコードは、ＣＬＫという信号を各ＥｎｔｉｔｙでＩＮ属性の入力ポート信号として持ち、その入力値は同期クロックであると仮定しているものとして説明する。
【００４２】
＜骨格コード生成処理（骨格コード生成部１）＞
（処理１）ＳｐｅｃＣ言語の仕様は、Ｃ言語のグローバル関数・グローバル変数とｃｌａｓｓと呼ばれる要素からなる。本言語モデル変換装置においては、ｃｌａｓｓと呼ばれる要素のみを変換するものとする。ｃｌａｓｓは、ｂｅｈａｖｉｏｒとｃｈａｎｎｅｌの２種類ある。本言語モデル変換装置では、ｃｌａｓｓはいずれもＶＨＤＬのＥｎｔｉｔｙとＡｒｃｈｉｔｅｃｔｕｒｅの組に対応させる。
【００４３】
（処理２）ＳｐｅｃＣ言語のｃｌａｓｓは、ｐｏｒｔ変数とローカル変数、そして、関数からなる。本言語モデル変換装置では、ｐｏｒｔ変数は対応するＡｒｃｈｉｔｅｃｔｕｒｅのｐｏｒｔ信号に、ローカル変数はＡｒｃｈｉｔｅｃｔｕｒｅのローカル信号に、関数はＡｒｃｈｉｔｅｃｔｕｒｅのｐｒｏｃｅｓｓにそれぞれ対応させる。
【００４４】
（処理３）ＳｐｅｃＣ言語のｃｌａｓｓにおけるｐｏｒｔ変数には、入力属性（ｉｎ）、出力属性（ｏｕｔ）、入出力属性（ｉｎｏｕｔ）の３種類の方向属性がある。上記の処理２において、ｐｏｒｔ変数のｐｏｒｔ信号への置き換えを、方向属性によって、次のように行う。
・入力属性（ｉｎ）の場合、ＩＮ属性の信号（合計１つ）を対応させる。
・出力属性（ｏｕｔ）の場合、ＯＵＴ属性の信号（合計１つ）を対応させる。
・入出力属性（ｉｎｏｕｔ）の場合、ＩＮ属性の信号とＯＵＴ属性の信号（合計２つ）を対応させる。
【００４５】
（処理４）ＳｐｅｃＣ言語のｃｌａｓｓ内の関数に対し、呼び出し用の信号として、実行トリガー信号（ｐｒｏｃｅｓｓにとっての入力信号）、実行状態信号（ｐｒｏｃｅｓｓにとっての出力信号）を定義する。ｃｌａｓｓの外から呼ばれる関数に関してはＥｎｔｉｔｙのｐｏｒｔ信号として定義する。関数に引数や戻り値があれば、それに対応する入出力信号を同様にｐｏｒｔに定義する。
【００４６】
（処理５）ｐｒｏｃｅｓｓの冒頭において、外部からの関数の呼び出しに対応するコードを次のように生成する。
0003901530.tif 000002
（処理６）関数内のコードについて、関数内のローカル変数はＶＨＤＬのｐｒｏｃｅｓｓ変数に対応させる。変数の代入文は代入文に、ｗａｉｔはｗａｉｔ文に対応させる。ｉｆ等の制御構文はＶＨＤＬのｉｆ等に対応させる。関数の呼び出しは、上記の処理４で生成した信号を用いて次のようなコードを対応させる。
0003901530.tif 000003
＜コード置換処理（コード置換部２）＞
（処理７）ＶＨＤＬのｐｒｏｃｅｓｓブロック内部における信号代入は、その場で即座に信号値に反映されるわけではない。反映されるのは、ｗａｉｔ文が処理されるときである。その効果を考慮して、次のように変換する。ＶＨＤＬの信号に対して、一時ｐｒｏｃｅｓｓ変数を対応して定義する。ｗａｉｔ文の直後に、変数：＝信号；の代入文を作り、ｗａｉｔ文の直前に、信号＜＝変数；の代入文を作る。ＳｐｅｃＣ言語の関数外変数への代入文は一時変数への代入文とする。また、値の参照も一時変数の値の参照とする。
【００４７】
一例として、ａを関数外変数として、次のようなＳｐｅｃＣ言語コードを考える。
waitfor 100;
a=1;
a=a+1;
waitfor 100;
これに対応するＶＨＤＬコードは次のようになる。ａがＳｐｅｃＣ変数ａに対応する信号であり、ｔｍｐ＿ａがその信号に対応する一時ｐｒｏｃｅｓｓ変数である。
wait for 100 ns;
tmp_a:=a;
tmp_a:=1;
tmp_a:=tmp_a+1;
a<=tmp_a;
wait for 100 ns;
ただし、代入先がＳｐｅｃＣ言語のｐｏｒｔ変数に対応する場合、代わりにＯＵＴ属性の信号に代入する。ローカル信号の場合は、特に変えなくて良い。
【００４８】
ＳｐｅｃＣ言語の変数の型がｅｖｅｎｔであった場合、特に一時変数は作らない。
【００４９】
イベントが起こったことを表す方法は、イベント信号が１クロック間‘１’の値をとることとする。イベント変数に関してはｎｏｔｉｆｙ  ｅ；が代入に相当する。
notify e;
waitfor 100;
は、次のようなコードに対応させる。
e<=‘1’;
wait until CLK=‘1’ and CLK’EVENT；
e<=‘0’;
wait for 100 ns;
イベントの参照は、ｗａｉｔ  ｅ；で行われるが、このコードに対応するＶＨＤＬコードは、
wait until e=‘1’;
となる。
【００５０】
（処理８）ＳｐｅｃＣ言語のｃｌａｓｓは他のクラスをインスタンス化することができる。インスタンス化はＶＨＤＬのｐｏｒｔ＿ｍａｐ宣言に対応させる。
ただし、ｐｏｒｔが上記の処理３で複数に分裂している場合があるので、ローカル変数に接続している場合は、同じ信号を、ポート変数を接続している場合は、同じ方向属性の信号を接続する。
【００５１】
例えば、次のようなＳｐｅｃＣ言語コードを考える。
0003901530.tif 000004
これに対応するＶＨＤＬコードは次のようになる。
0003901530.tif 000005
＜値解決プロセス生成処理（値解決プロセス生成部３）＞
（処理９）各Ａｒｃｈｉｔｅｃｔｕｒｅ内で、複数のｐｒｏｃｅｓｓやｐｏｒｔ＿ｍａｐからの代入が起こっている信号を検出する。
検出した信号ｓｉｇに対して、（ａ）代入しようとするプロセスｆに対してデータ信号ｓｉｇ＿ｏｕｔ＿ｆと代入タイミング信号ｓｉｇ＿ｏｔｒｉｇ＿ｆをＡｒｃｈｉｔｅｃｔｕｒｅローカル信号として定義する。
（ｂ）（ａ）で生成した信号を入力とし、信号ｓｉｇを出力とする値解決プロセスを生成する。
プロセスを実装するアルゴリズムは、例えば図８のようなものである。
（ｃ）各プロセスのｓｉｇへの代入文ｓｉｇ＜＝式；を次のように置き換える。
sig_out_f<=式;
sig_otrig<=‘1’;
wait until CLK=‘1’ and CLK’EVENT;
sig_otrig<=‘0’;
関数実行制御用の信号の値解決プロセスに関しては、実行トリガーと引数に関する処理をひとまとめで行う。実行トリガー信号は代入タイミング信号と同様な役目を負わせることができるからである。
【００５２】
（処理１０）上記の処理９で生成した値解決プロセスの出力先の信号がＥｎｔｉｔｙ  Ｐｏｒｔの場合、処理９で、代入タイミング信号を生成している場合がある。その場合は、値解決プロセスの出力として、代入タイミング信号を追加し、値解決プロセスが処理して、出力先にデータを出力するタイミングで、代入タイミング信号の値を変化させるような処理を追加する。
【００５３】
以上の手順によって、例えば図４のような構造のＳｐｅｃＣ言語コードから図５のような構造のＶＨＤＬコードが生成される。
【００５４】
以下、図１９及び図２０を参照して値解決プロセスを生成する実施形態の変形例を説明する。
【００５５】
図２０は本言語モデル変換装置の処理手順の一例を示す図である。同図に示されるように本手順は、共有変数検出処理（処理０）と、骨格コード生成処理（処理１〜６）と、コード置換生成処理（処理７’，８）と、値解決プロセス処理（処理９’，１０）とを行うものである。なお、後述する処理１〜１０は、図７に示すような実行順序制約（矢印の終点側にある処理はその矢印の起点側にある全処理の終了後に実行する）を満たす限り、どのような順番で処理を行っても構わない。また、複数の処理を並列に行っても良い。
【００５６】
上述の実施形態と同様に、ここでもＳｐｅｃＣ言語のソースコードを入力して、ＶＨＤＬソースコードを生成する場合を例にとって説明する。また、出力するＶＨＤＬコードは、ＣＬＫという信号を各ＥｎｔｉｔｙでＩＮ属性の入力ポート信号として持ち、その入力値は同期クロックであると仮定しているものとして説明する。
【００５７】
＜共有変数検出処理＞
（処理０）  ｃｌａｓｓ内の変数及びポート変数について、ｃｌａｓｓ内の関数又はインスタンス化が該変数の値を更新するコード記述、すなわち代入の記述を検出する。このような変数を共有変数と称する。共有変数に対しては、該共有変数を識別するための情報と該共有変数にどの関数又はインスタンス化から値が代入されているかという情報と、を関連付けて記憶しておく。
【００５８】
＜骨格コード生成処理（骨格コード生成部１）＞
（処理１）ＳｐｅｃＣ言語の仕様は、Ｃ言語のグローバル関数・グローバル変数とｃｌａｓｓと呼ばれる要素からなる。本言語モデル変換装置においては、ｃｌａｓｓと呼ばれる要素のみを変換するものとする。ｃｌａｓｓは、ｂｅｈａｖｉｏｒとｃｈａｎｎｅｌの２種類ある。本言語モデル変換装置では、ｃｌａｓｓはいずれもＶＨＤＬのＥｎｔｉｔｙとＡｒｃｈｉｔｅｃｔｕｒｅの組に対応させる。
【００５９】
（処理２）ＳｐｅｃＣ言語のｃｌａｓｓは、ｐｏｒｔ変数とローカル変数、そして、関数からなる。本言語モデル変換装置では、ｐｏｒｔ変数は対応するＡｒｃｈｉｔｅｃｔｕｒｅのｐｏｒｔ信号に、ローカル変数はＡｒｃｈｉｔｅｃｔｕｒｅのローカル信号に、関数はＡｒｃｈｉｔｅｃｔｕｒｅのｐｒｏｃｅｓｓにそれぞれ対応させる。
【００６０】
（処理３）ＳｐｅｃＣ言語のｃｌａｓｓにおけるｐｏｒｔ変数には、入力属性（ｉｎ）、出力属性（ｏｕｔ）、入出力属性（ｉｎｏｕｔ）の３種類の方向属性がある。上記の処理２において、ｐｏｒｔ変数のｐｏｒｔ信号への置き換えを、方向属性によって、次のように行う。
・入力属性（ｉｎ）の場合、ＩＮ属性の信号（合計１つ）を対応させる。
・出力属性（ｏｕｔ）の場合、ＯＵＴ属性の信号（合計１つ）を対応させる。
・入出力属性（ｉｎｏｕｔ）の場合、ＩＮ属性の信号とＯＵＴ属性の信号（合計２つ）を対応させる。
【００６１】
（処理４）ＳｐｅｃＣ言語のｃｌａｓｓ内の関数に対し、呼び出し用の信号として、実行トリガー信号（ｐｒｏｃｅｓｓにとっての入力信号）、実行状態信号（ｐｒｏｃｅｓｓにとっての出力信号）を定義する。ｃｌａｓｓの外から呼ばれる関数に関してはＥｎｔｉｔｙのｐｏｒｔ信号として定義する。関数に引数や戻り値があれば、それに対応する入出力信号を同様にｐｏｒｔに定義する。
【００６２】
（処理５）ｐｒｏｃｅｓｓの冒頭において、外部からの関数の呼び出しに対応するコードを次のように生成する。
0003901530.tif 000006
（処理６）関数内のコードについて、関数内のローカル変数はＶＨＤＬのｐｒｏｃｅｓｓ変数に対応させる。変数の代入文は代入文に、ｗａｉｔはｗａｉｔ文に対応させる。ｉｆ等の制御構文はＶＨＤＬのｉｆ等に対応させる。関数の呼び出しは、上記の処理４で生成した信号を用いて次のようなコードを対応させる。
0003901530.tif 000007
＜コード置換処理（コード置換部２）＞
（処理７’）ＶＨＤＬのｐｒｏｃｅｓｓブロック内部における信号代入は、その場で即座に信号値に反映されるわけではない。反映されるのは、ｗａｉｔ文が処理されるときである。その効果を考慮して、次のように変換する。ＶＨＤＬの信号に対して、一時ｐｒｏｃｅｓｓ変数を対応して定義する。ｗａｉｔ文の直後に、変数：＝信号；の代入文を作り、ｗａｉｔ文の直前に、信号＜＝変数；の代入文を作る。ＳｐｅｃＣ言語の関数外変数への代入文は一時変数への代入文とする。また、値の参照も一時変数の値の参照とする。
【００６３】
一例として、ａを関数外変数として、次のようなＳｐｅｃＣ言語コードを考える。
waitfor 100;
a=1;
a=a+1;
waitfor 100;
これに対応するＶＨＤＬコードは次のようになる。ａがＳｐｅｃＣ変数ａに対応する信号であり、ｔｍｐ＿ａがその信号に対応する一時ｐｒｏｃｅｓｓ変数である。
wait for 100 ns;
tmp_a:=a;
tmp_a:=1;
tmp_a:=tmp_a+1;
a<=tmp_a;
wait for 100 ns;
ただし、代入先がＳｐｅｃＣ言語のｐｏｒｔ変数に対応する場合、代わりにＯＵＴ属性の信号に代入する。
【００６４】
さらに、処理０における記憶内容を参照することにより、変数aが共有変数に該当するかどうかを判断する。該当する場合は、例えば"a_out_f<=tmp_a;"という具合に、関数名(この例では関数名をfとしている)を基にしたデータ信号を生成し、その信号への代入とする。
【００６５】
同時に、関数名を基にした代入タイミング信号 a_otrig_fを生成するとともに、上記"a_out_f<tmp_a;"の直後に、次のようなコードを挿入する。
【００６６】
sig_otrig_f <= '1';
wait until CLK='1' and CLK'EVENT;
sig_otrig_f <='0';
ＳｐｅｃＣ言語の変数の型がｅｖｅｎｔであった場合、特に一時変数は作らない。
【００６７】
イベントが起こったことは、イベント信号が１クロック間‘１’の値をとることにより判断するものとする。イベント変数に関してはｎｏｔｉｆｙ  ｅ；が代入に相当する。
notify e;
waitfor 100;
は、次のようなコードに対応させる。
e<=‘1’;
wait until CLK=‘1’ and CLK’EVENT；
e<=‘0’;
wait for 100 ns;
イベントの参照は、ｗａｉｔ  ｅ；で行われるが、このコードに対応するＶＨＤＬコードは、
wait until e=‘1’;
となる。
【００６８】
（処理８）ＳｐｅｃＣ言語のｃｌａｓｓは他のクラスをインスタンス化することができる。インスタンス化はＶＨＤＬのｐｏｒｔ＿ｍａｐ宣言に対応させる。ただし、ｐｏｒｔが上記の処理３で複数に分裂している場合があるので、ローカル変数に接続している場合は、同じ信号を、ポート変数を接続している場合は、同じ方向属性の信号を接続する。
【００６９】
例えば、次のようなＳｐｅｃＣ言語コードを考える。
0003901530.tif 000008
これに対応するＶＨＤＬコードは次のようになる。
0003901530.tif 000009
＜値解決プロセス生成処理（値解決プロセス生成部３）＞
（処理９’）処理０において予め共有変数として検出されている変数を置き換えたものである信号sigについて、値解決プロセスを生成する。値解決プロセスの入力信号は信号sigへの変換前の変数に関して（処理７’）において生成された信号の全てとする。また、出力は信号sigとする。関数実行制御に係る信号の値解決プロセスは、実行トリガー信号と引数に関する処理とをひとまとめにして処理する。実行トリガー信号は代入タイミング信号と同様な役目を負わせることができるからである。
【００７０】
（処理１０）上記の処理９’で生成した値解決プロセスの出力先の信号がＥｎｔｉｔｙ  Ｐｏｒｔの場合、処理９’で、代入タイミング信号を生成している場合がある。その場合は、値解決プロセスの出力として、代入タイミング信号を追加し、値解決プロセスが処理して、出力先にデータを出力するタイミングで、代入タイミング信号の値を変化させるような処理を追加する。
【００７１】
以上の手順によって、例えば図４のような構造のＳｐｅｃＣ言語コードから図５のような構造のＶＨＤＬコードが生成される。
【００７２】
次に、本言語モデル変換装置の他の処理例について説明する。
【００７３】
図９に、本言語モデル変換装置の処理手順の他の例を示す。
【００７４】
ＳｐｅｃＣ言語コードは一般にｃｌａｓｓの間に木構造が形成されている。従って、ＳｐｅｃＣ言語コードを入力して、図６の手順を行って出力したＶＨＤＬコードのＥｎｔｉｔｙ−Ａｒｃｈｉｔｅｃｔｕｒｅ組間にも同様な木構造が形成される。すなわち、図６の手順の値解決プロセス生成処理（処理９、処理１０）で生成した値解決プロセスについて、一般にその木構造に沿って値解決プロセスの木構造ができる。
【００７５】
図９の手順では、まず図６と同様の手順を行い、その後に、値解決プロセス生成部３で後述する値解決プロセス除去処理（処理１１，１２）を行って、プログラムが階層化されている場合に値解決プロセスを１つにするものである。例えば、図６の手順で作られた値解決プロセス（図５参照）のうち最も上位にある値解決プロセスに、階層化されている値解決プロセスを統合する。この結果、例えば、図１０のようになる。値解決プロセス除去処理では、階層の最も上に位置するものだけを残して後は除去するために、下位層に含まれる代入データ信号と代入タイミング信号を各コンポーネントのポート信号にして上位のコンポーネントに接続する。
【００７６】
以下では、値解決プロセス除去処理について説明する。
【００７７】
＜値解決プロセス除去処理（値解決プロセス生成部３）＞
（処理１１）出力に代入タイミング信号がない値解決プロセスが、値解決プロセスの階層の頂上にある。それ以外を「除去可能な値解決プロセス」と呼ぶものとする。除去可能な値解決プロセスに関して、そのプロセスを除去する。
【００７８】
（処理１２）上記の処理１１で除去されたプロセスの入力をＥｎｔｉｔｙポートに展開する。除去されたプロセスの出力ポートは除去する。これを値解決プロセスの下の階層から順に行う。その中間階層の値解決プロセスを処理している場合、ｐｏｒｔ＿ｍａｐの入力信号ポート部が別のポート群に置き換わっているがその置き換わった信号群を入力信号としてみなして処理を行う。最終的に頂上の値解決プロセスの入力は、全ての階層のその信号への代入処理を持つプロセスからのデータ信号と代入タイミング信号になる。
【００７９】
以上説明してきたように、本実施形態によれば、並列プログラムとその間に共有する変数を含むソフトウェア記述を同様の動作をする動作レベルのハードウェア記述に変換することができる。
【００８０】
また、並列プロセスが階層化されている場合にも対応できる。なお、値解決プロセスを階層構造にする構成と、最上位の値解決プロセスのみ残す構成とのいずれかを選択できるようにしてもよい（前者の場合は、処理１０まで行い、後者の場合は、処理１２まで行えばよい）。選択の基準としては、例えば、ポート信号の数を減らしたいときは前者の構成を選択し、階層が深く余分な待ち処理を入れたくない場合は後者の構成を選択するようにする。
【００８１】
図１１に、本発明の一実施形態に係る言語モデル変換装置の他の構成例を示す。この言語モデル変換装置は、図１の構成に値解決プロセス変換部４を付加したものである。
【００８２】
まず、図１２（ハードウェア記述言語モデルの説明図）を参照して、値解決プロセス変換処理の概要について説明する。なお、図１２において、２０１５は呼び出す側のプロセス、２０１６は呼び出される側のプロセス、２０１０は（呼び出される側の）プロセスへの実行起動トリガー信号、２０１１は（呼び出す側の）プロセスからの実行状態信号、２０１２はプロセスを呼び出すための手続き呼出切り替えプロセス（値解決プロセス変換処理により値解決プロセスが変換されたもの）、２０１３は（呼び出す側の）プロセスから他のプロセスを呼び出すための実行起動トリガー信号、２０１４は（呼び出す側の）プロセスから他のプロセスを呼び出すときの実行状態信号である。
【００８３】
ソフトウェア記述言語モデルにおける並列プログラム間の手続き呼び出しを、ハードウェア記述言語モデルにおいて次のように表現する。
【００８４】
並列プログラムから並列プロセスに変換される手続きを呼び出すコードに対して、次のようなコードを生成する。
・手続きを呼び出す際には、呼び出す側のプロセス２０１５が出力するトリガ信号２０１３（２０１１）と、呼び出される側のプロセス２０１６が出力する実行状態信号２０１１（２０１４）を使う。加えて、呼び出す側のプロセスが出力する引数信号と、呼び出される側のプロセスが出力する返り値信号を使うこともある。
（１）トリガは実際に呼び出される側のプロセスが実行されるまで立ち上げておくとする。
（２）呼び出される側のプロセスに対して、（出力）トリガ信号、引数、（入力）実行状態、返り値の信号の切替を行う手続き呼び出し切替プロセスを作る。
（３）呼び出される側のプロセス対する並列プロセスごとに（呼び出しプロセスに対して出力）トリガ信号、引数、（呼び出しプロセスに対して入力）実行状態、返り値の信号を別に用意する。
【００８５】
手続き呼び出し切替プロセス２０１２は、次のような各入力トリガの立ち上がり条件で実行する処理を逐次に行う（図１５参照）。
各入力トリガの立ち上がり条件で実行する処理：
（１）他の実行状態信号を下げる。
（２）出力トリガを立てる。同時に、（あれば）処理プロセスからの引数信号値を出力引数信号の値とする。
（３）入力実行状態信号が立ち上がったら、処理プロセスの実行状態信号を立ち上がらせる。
（４）入力実行状態信号が立ち下がると、処理プロセスの状態信号を立ち下がらせる。同時に、（あれば）入力返り値信号値を処理プロセスの返り値信号値にする。
【００８６】
また、ここでは、図４のように入力されるソフトウェア記述言語モデルにおいて手続きが階層化されていて出力されるハードウェア記述言語モデルにおいて並列プロセスが階層化されている場合、図１４のように各階層ごとに１のプロセスに手続き呼び出し切替プロセスを定義する。ただし、切替える必要のない場合は、手続き呼び出し切替プロセスを介さず結線する。
【００８７】
図１３に、本言語モデル変換装置の処理手順を示す。図１３の手順では、まず図６と同様の手順を行う。ソフトウェア記述言語モデルにおける並列プログラム間の手続き呼び出しも、並列プログラム間の共有変数へのアクセスとして扱われるので、図６と同様の手順によって、並列プログラム間の手続き呼び出しについて、値解決プロセスが生成される。次いで、図１３の手順では、値解決プロセス変換部４で後述する値解決プロセス変換処理（処理１３）を行って、値解決プロセス（図３参照）のうち並列プログラム間の手続き呼び出しに該当するものを、手続き呼び出し切り替えプロセス（図１２参照）に変換する（なお、並列プログラム間の手続き呼び出しに該当しないものは、値解決プロセスとして残る）。
【００８８】
なお、以上説明した手続き呼び出し（切り替え）プロセスの生成は、先に述べた値解決プロセスの生成を経ずに行われてもよい。
【００８９】
以下では、値解決プロセス変換処理について説明する。
【００９０】
＜値解決プロセス変換処理（値解決プロセス変換部４）＞
（処理１３）骨格コード生成処理の処理４で生成したｐｒｏｃｅｓｓの制御用信号（実行トリガー信号、実行状態信号、加えて、引数、戻り値データ信号）の制御信号伝達のための値解決プロセスを、値解決プロセス生成処理の処理９で作成したものから取り替える。具体的には次のような置き換えを行う。
【００９１】
（処理１３−１）
まず、信号の定義の追加を行う。実行状態信号は、各呼び出し側のｐｒｏｃｅｓｓに対して共通であったものを、呼び出しプロセスごとに用意する。同様に、返り値の信号も呼び出しｐｒｏｃｅｓｓ毎に追加定義する。
【００９２】
（処理１３−２）
次に、呼び出し側プロセスにおける信号の置き換えを行う。すなわち、ｗａｉｔ  ｕｎｔｉｌの条件内の実行状態信号を、処理１３−１で生成した信号に置き換える。戻り値信号参照部分に関しても同様に置き換える。
【００９３】
（処理１３−３）
次に、実行トリガー信号の値解決プロセスを、次のようなものに置き換える。
【００９４】
ｐｒｏｃｅｓｓの入力は、各呼び出しｐｒｏｃｅｓｓから実行トリガー信号と引数のデータ信号と、加えて、呼び出されるｐｒｏｃｅｓｓから出力される実行状態信号及び返り値信号、出力は、各呼び出しｐｒｏｃｅｓｓ信号用の実行状態信号と返り値信号と、加えて、呼び出されるｐｒｏｃｅｓｓへの実行トリガー信号及び引数データ信号である。
【００９５】
さらに、このｐｒｏｃｅｓｓは、図１５に示すような動作またはこれと等価な動作を実装する。例えば、実装する動作は、次の通りである。
（１）実行トリガーを監視する無限ループがある。このループを抜ける条件は、入力の実行トリガー信号の少なくとも１つの値が立ち上がることである。
（２）ループを抜けた直後に、各実行トリガー信号が立ち上がっているという条件の条件分岐を用意する。ただし、この条件分岐は、次のように逐次直列に並んでいるものとする。
0003901530.tif 000010
（３）各条件が成り立ったときの処理は、例えば次のようなものである。
（３−１）呼び出されるｐｒｏｃｅｓｓへの実行トリガー信号値を立ち上げる。
（３−２）呼び出されるｐｒｏｃｅｓｓからの実行状態信号が立ち上がるのを待つ。
（３−３）呼び出しｐｒｏｃｅｓｓへの実行状態信号を立ち上げる。
（３−４）呼び出されるｐｒｏｃｅｓｓからの実行状態信号が立ち下がるのを待つ。
（３−５）呼び出しｐｒｏｃｅｓｓへのの実行状態信号が立ち下げ、呼び出されるｐｒｏｃｅｓｓからの返り値信号値を呼び出しｐｒｏｃｅｓｓの戻り値信号に伝達する。
【００９６】
次に、本言語モデル変換装置の他の処理例について説明する。
【００９７】
図１６に、本言語モデル変換装置の処理手順の他の例を示す。
【００９８】
この手順は、図１３の骨格コード生成処理（処理１〜６）、コード置換生成処理（処理７，８）、値解決プロセス生成処理（処理９，１０）を行い、そして、値解決プロセス除去処理（処理１１，１２）を行った後に、図１３の値解決プロセス変換処理（処理１３）を行うものである。
【００９９】
すなわち、並列プロセスが階層化されている場合、階層的に生成される手続き呼び出し切替プロセスのうち最も上位に位置するものを残して他の手続き切替プロセスは生成しないようにする。下位のプロセスへの入力出力信号を残したプロセスの入力出力信号とする。そのために必要なポート信号を生成する。
【０１００】
この結果、例えば、図１４は図１７のようになる。
【０１０１】
以上説明してきたように、本実施形態によれば、ソフトウェア言語による並列プログラムをハードウェア記述に変換する際、手続き呼び出しに相当する排他的なプロセス実行処理を実現した（排他的呼び出しを可能にした）ハードウェア動作記述に変換することができる。
【０１０２】
また、並列プロセスが階層化されている場合にも対応できる。なお、手続き呼び出し解決プロセスを階層構造にする構成と、最上位の手続き呼び出し解決プロセスのみ残す構成とのいずれかを選択できるようにしてもよい（前者の場合は、処理１０までと処理１３を行い、後者の場合は、処理１３まで行えばよい）。選択の基準としては、例えば、ポート信号の数を減らしたいときは前者の構成を選択し、階層が深く余分な遅延を入れたくない場合は後者の構成を選択するようにする。
【０１０３】
なお、以上の各機能は、ソフトウェアとして実現可能である。
また、本実施形態は、コンピュータを所定の手段として機能させるためのプログラムとして実施することもでき、該プログラムを記録したコンピュータ読取り可能な記録媒体として実施することもできる。
【０１０４】
なお、この発明の実施の形態で例示した構成は一例であって、それ以外の構成を排除する趣旨のものではなく、例示した構成の一部を他のもので置き換えたり、例示した構成の一部を省いたり、例示した構成に別の機能あるいは要素を付加したり、それらを組み合わせたりすることなどによって得られる別の構成も可能である。また、例示した構成と論理的に等価な別の構成、例示した構成と論理的に等価な部分を含む別の構成、例示した構成の要部と論理的に等価な別の構成なども可能である。また、例示した構成と同一もしくは類似の目的を達成する別の構成、例示した構成と同一もしくは類似の効果を奏する別の構成なども可能である。
また、この発明の実施の形態で例示した各種構成部分についての各種バリエーションは、適宜組み合わせて実施することが可能である。
また、この発明の実施の形態は、個別装置としての発明、関連を持つ２以上の装置についての発明、システム全体としての発明、個別装置内部の構成部分についての発明、またはそれらに対応する方法の発明等、種々の観点、段階、概念またはカテゴリに係る発明を包含・内在するものである。
従って、この発明の実施の形態に開示した内容からは、例示した構成に限定されることなく発明を抽出することができるものである。
【０１０５】
本発明は、上述した実施の形態に限定されるものではなく、その技術的範囲において種々変形して実施することができる。
【０１０６】
【発明の効果】
本発明によれば、並列プログラムとその間に共有する変数を含むソフトウェア記述を同様の動作をする動作レベルのハードウェア記述に変換するができる。
【０１０７】
また、本発明によれば、ソフトウェア言語による並列プログラムをハードウェア記述に変換する際、手続き呼び出しに相当する排他的なプロセス実行処理を実現することができる。
【図面の簡単な説明】
【図１】本発明の実施の形態に係るソフトウェア・ハードウェア言語モデル変換装置の構成例を示す図
【図２】変数を共有する並列ソフトウェアプログラムのソフトウェア記述の一例について説明するための図
【図３】変数を共有する並列ソフトウェアプログラムのソフトウェア記述を変換して得られる値解決プロセスを含むハードウェア記述の一例について説明するための図
【図４】変数を共有する階層化された並列ソフトウェアプログラムのソフトウェア記述の一例について説明するための図
【図５】変数を共有する階層化された並列ソフトウェアプログラムのソフトウェア記述を変換して得られる階層化された値解決プロセスを含むハードウェア記述の一例について説明するための図
【図６】同実施形態に係るソフトウェア・ハードウェア言語モデル変換装置の処理手順の一例を示すフローチャート
【図７】同実施形態に係るソフトウェア・ハードウェア言語モデル変換装置の処理手順の一例を示すフローチャート
【図８】値解決プロセスによる処理の一例を示すフローチャート
【図９】同実施形態に係るソフトウェア・ハードウェア言語モデル変換装置の処理手順の他の例を示すフローチャート
【図１０】変数を共有する階層化された並列ソフトウェアプログラムのソフトウェア記述を変換して得られる最上位階層以外の値解決プロセスを削除したハードウェア記述の一例について説明するための図
【図１１】同実施形態に係るソフトウェア・ハードウェア言語モデル変換装置の他の構成例を示す図
【図１２】値解決プロセスを含むハードウェア記述を変換して得られる手続き呼び出し切り替えプロセスを含むハードウェア記述の一例について説明するための図
【図１３】同実施形態に係るソフトウェア・ハードウェア言語モデル変換装置の処理手順のさらに他の例を示すフローチャート
【図１４】階層化された値解決プロセスを含むハードウェア記述を変換して得られる階層化された手続き呼び出し切り替えプロセスを含むハードウェア記述の一例について説明するための図
【図１５】手続き呼び出し切り替えプロセスによる処理の一例を示すフローチャート
【図１６】同実施形態に係るソフトウェア・ハードウェア言語モデル変換装置の処理手順のさらに他の例を示すフローチャート
【図１７】最上位階層以外の値解決プロセスを削除したハードウェア記述を変換して得られる最上位階層以外の手続き呼び出し切り替えプロセスを削除したハードウェア記述の一例について説明するための図
【図１８】同実施形態に係るシステム設計支援装置の構成例を示す図
【図１９】本発明の実施の形態に係るソフトウェア・ハードウェア言語モデル変換装置の他の構成例を示す図
【図２０】上記他の構成例に係るソフトウェア・ハードウェア言語モデル変換装置の処理手順の一例を示すフローチャート
【符号の説明】
１…骨格コード生成部
２…コード置換部
３…値解決プロセス生成部
４…値解決プロセス変換部
１００…システム設計支援装置
１０１…仕様モデル記述部
１０２…アーキテクチャ探索部
１０３…コミュニケーション合成部
１０４…ハードウェア仕様生成部
１０５…部品化・再利用部
１０６…ソフトウェア仕様生成部
１０７…システム仕様記録部
【図１】
0003901530.tif 000011
【図２】
0003901530.tif 000012
【図３】
0003901530.tif 000013
【図４】
0003901530.tif 000014
【図５】
0003901530.tif 000015
【図６】
0003901530.tif 000016
【図７】
0003901530.tif 000017
【図８】
0003901530.tif 000018
【図９】
0003901530.tif 000019
【図１０】
0003901530.tif 000020
【図１１】
0003901530.tif 000021
【図１２】
0003901530.tif 000022
【図１３】
0003901530.tif 000023
【図１４】
0003901530.tif 000024
【図１５】
0003901530.tif 000025
【図１６】
0003901530.tif 000026
【図１７】
0003901530.tif 000027
【図１８】
0003901530.tif 000028
【図１９】
0003901530.tif 000029
【図２０】
0003901530.tif 000030