(57)【特許請求の範囲】
【請求項１】
下位関数へ引数を渡すポインタを含む動作レベルの回路記述から、抽象度の低い回路記述を生成するための動作合成システムであって、
入力された動作レベルの回路記述を解析して動作合成用の内部表現に変換するとともに、前記動作レベルの回路記述中の前記ポインタのタイプを指定するポインタタイプ指定に基づいて、ポインタ変数を具体的な回路実体に変換する際の対応関係を示す内部表現を生成する言語解析手段と、
前記言語解析手段により生成された内部表現中のポインタ変数を、予め定められた変換ルールに基づいて、端子と条件部の組に変換するポインタ−端子変換手段と、
前記ポインタ−端子変換手段によりポインタ変数が除去された後の内部表現に対して、前記下位関数をインライン展開することなく動作合成処理を行い、抽象度の低い回路記述を生成して出力する動作合成手段と、を有する動作合成システム。
【請求項２】
入力された動作レベルの回路記述中における、ポインタ変数の具体的な回路実体への指定であるポインタタイプ指定を解析し、動作合成用の内部表現に変換するポインタタイプ指定解析手段をさらに有する請求項１記載の動作合成システム。
【請求項３】
前記言語解析手段の解析結果を基にポインタ変数の具体的な回路実体への変換方法を決定するポインタタイプ解析手段をさらに有する請求項１記載の動作合成システム。
【請求項４】
前記ポインタ−端子変換手段は、前記言語解析手段の解析結果から直ちにポインタ変数を端子と条件部の組に変換せず、前記動作合成手段における動作合成処理中に、ポインタ変数を端子と条件部の組に変換する請求項１から３のいずれか１項記載の動作合成システム。
【請求項５】
下位関数へ引数を渡すポインタを含む動作レベルの回路記述から、抽象度の低い回路記述を生成するための動作合成方法であって、
言語解析手段により、入力された動作レベルの回路記述を解析して動作合成用の内部表現に変換するとともに、前記動作レベルの回路記述中の前記ポインタのタイプを指定するポインタタイプ指定に基づいて、ポインタ変数を具体的な回路実体に変換する際の対応関係を示す内部表現を生成するステップと、
ポインタ−端子変換手段により、前記内部表現中のポインタ変数を、予め定められた変換ルールに基づいて、端子と条件部の組に変換するステップと、
動作合成手段により、前記ポインタ−端子変換手段によってポインタ変数が除去された後の内部表現に対して、前記下位関数をインライン展開することなく動作合成処理を行い、抽象度の低い回路記述を生成して出力するステップを有する動作合成方法。
【請求項６】
ポインタタイプ指定解析手段により、入力された動作レベルの回路記述中における、ポインタ変数の具体的な回路実体への指定であるポインタタイプ指定を解析し、動作合成用の内部表現に変換するステップをさらに有する請求項５記載の動作合成方法。
【請求項７】
ポインタタイプ解析手段により、前記言語解析手段の解析結果を基にポインタ変数の具体的な回路実体への変換方法を決定するステップをさらに有する請求項５記載の動作合成方法。
【請求項８】
前記ポインタ−端子変換手段による前記ポインタ変数を端子と条件部の組に変換するステップでは、前記動作レベルの回路記述の解析結果から直ちにポインタ変数を端子と条件部の組に変換せず、動作合成処理中に、ポインタ変数を端子と条件部の組に変換する請求項５から７のいずれか１項記載の動作合成方法。
【請求項９】
下位関数へ引数を渡すポインタを含む動作レベルの回路記述から、抽象度の低い回路記述を生成するための動作合成方法をコンピュータに実行させるためのプログラムであって、
言語解析手段により、入力された動作レベルの回路記述を解析して動作合成用の内部表現に変換するとともに、前記動作レベルの回路記述中の前記ポインタのタイプを指定するポインタタイプ指定に基づいて、ポインタ変数を具体的な回路実体に変換する際の対応関係を示す内部表現を生成する処理と、
ポインタ−端子変換手段により、前記内部表現中のポインタ変数を、予め定められた変換ルールに基づいて、端子と条件部の組に変換する処理と、
動作合成手段により、前記ポインタ−端子変換手段によってポインタ変数が除去された後の内部表現に対して、前記下位関数をインライン展開することなく動作合成処理を行い、抽象度の低い回路記述を生成して出力する処理とをコンピュータに実行させるためのプログラム。
【請求項１０】
ポインタタイプ指定解析手段により、入力された動作レベルの回路記述中における、ポインタ変数の具体的な回路実体への指定であるポインタタイプ指定を解析し、動作合成用の内部表現に変換するステップをさらに有する請求項９記載のプログラム。
【請求項１１】
ポインタタイプ解析手段により、前記言語解析手段の解析結果を基にポインタ変数の具体的な回路実体への変換方法を決定するステップをさらに有する請求項９記載のプログラム。
【請求項１２】
前記ポインタ−端子変換手段による前記ポインタ変数を端子と条件部の組に変換する処理では、前記動作レベルの回路記述の解析結果から直ちにポインタ変数を端子と条件部の組に変換せず、動作合成処理中に、ポインタ変数を端子と条件部の組に変換する請求項９から１１のいずれか１項記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動作レベルの回路記述から、抽象度の低い回路記述を生成するための動作合成システム、動作合成方法およびプログラムに関する。
【背景技術】
【０００２】
近年、半導体回路の回路規模が増大しているため、半導体回路の設計の際の手間や時間を削減するために様々な手法が用いられている。このような手法の１つとして、動作レベルの回路記述から、ＲＴＬ（Register Transfer Level）等の抽象度の低い回路記述を合成するための動作合成システムの使用が提案されている。このような動作合成システムを用いることにより、ハードウェアの動作を表現しただけの動作レベルの回路記述から、ハードウェアの動作順序やデータパスの構成等を自動的に設計することが可能となる。
【０００３】
このような動作合成システムにおいて動作合成を行おうとする動作レベルの回路記述において、上位関数と下位関数というように階層化されている関数がポインタによって接続されている場合、上位関数の動作合成を行う場合には、このポインタの解消が必要になる。
【０００４】
動作レベルの回路記述においてポインタが使用されている場合の従来の動作合成システムの一例が、例えば、特許文献１、非特許文献１に記載されている。特許文献１の図１に示すように、この従来の動作合成システムは、言語解析手段（言語解析装置）と、関数インライン展開手段（関数インライン展開装置）と、ポインタ解析手段（ポインタ解析装置）と、ポインタ解消手段（ポインタ解消装置）と、動作合成手段（動作合成装置）から構成されている。
【０００５】
このような構成を有する従来の動作合成システムは下記のように動作する。すなわち、言語解析後、関数間をまたいで引数などで使用されているポインタを解消するために関数をインラインに展開する。その後、ポインタを解析、解消し、従来の動作合成処理(スケジューリング、バインディング、ＲＴＬ記述生成処理など)を実行する。
【０００６】
この従来の動作合成システムでは、ポインタを静的に解決するために、上位関数の合成段階で下位関数の詳細が決まる必要があり、動作レベル記述において階層化されている関数がポインタによって接続されている場合、動作合成時に下位関数をインライン展開する必要があるという問題を有している。
【０００７】
そして、下位関数をインライン展開するためには、上位関数の動作合成時に下位関数の記述が必要であるため、従来の動作合成システムでは、ポインタを引数に持つ下位関数を後から実装したり、実装を入れ替えたりすることができなかった。そのため、上位関数の合成時に、下記関数の実装から完全に独立させる設計フローにすることできなかった。
【０００８】
また、下位関数の記述が上位関数の中にインライン展開されると、上位関数のデバッグ時にチェックしなければならない変数や動作が増加するため、動作合成後の回路のデバッグ効率が低下するという弊害も発生する。
【０００９】
さらに、従来の動作合成システムでは、下位関数の内部に書かれている記述を展開した状態で合成することになるため、ツールによる記述の解析や、スケジューリングなどにおける探索の対象範囲が広がって時間が掛かることになり、上位関数の動作合成速度が低下する可能性がある。
【００１０】
さらに、上位関数から同一の下位関数を複数箇所で呼び出している場合に、インライン展開すると呼び出しの回数だけ回路実体が作られてしまい、共有化が難しくなるため、動作合成により合成された回路の面積が大きくなる可能性がある。
【特許文献１】特開２００１−２７３３４７号公報
【非特許文献１】Luc Semeria, Giovanni De Micheli著、「SpC: Synthesis of Pointers in C. Application of Pointer Analysis to the Behavioral Synthesis from C」, proceedings of the International Conference on Computer-Aided Design ICCAD'98，pp.340-346，サンホセ，1998年11月
【発明の開示】
【発明が解決しようとする課題】
【００１１】
上述した従来の動作合成システムでは、ポインタを静的に解決するために、上位関数の合成段階で下位関数の詳細が決まる必要があり、動作レベル記述において階層化されている関数がポインタによって接続されている場合、動作合成時に下位関数をインライン展開する必要があるという問題点があった。
【００１２】
本発明の目的は、上位関数の動作合成時に下位関数へポインタを渡している場合であっても、下位関数をインラインに展開することなく動作合成をすることできる動作合成システム、動作合成方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００１３】
上記目的を達成するために、本発明の動作合成システムは、下位関数へ引数を渡すポインタを含む動作レベルの回路記述から、抽象度の低い回路記述を生成するための動作合成システムであって、
入力された動作レベルの回路記述を解析して動作合成用の内部表現に変換するとともに、前記動作レベルの回路記述中の前記ポインタのタイプを指定するポインタタイプ指定に基づいて、ポインタ変数を具体的な回路実体に変換する際の対応関係を示す内部表現を生成する言語解析手段と、
前記言語解析手段により生成された内部表現中のポインタ変数を、予め定められた変換ルールに基づいて、端子と条件部の組に変換するポインタ−端子変換手段と、
前記ポインタ−端子変換手段によりポインタ変数が除去された後の内部表現に対して、前記下位関数をインライン展開することなく動作合成処理を行い、抽象度の低い回路記述を生成して出力する動作合成手段と、を有する。
【００１４】
本発明によれば、ポインタ−端子変換手段により、ポインタ変数を、入力端子／出力端子等の端子とｉｆ文等の条件部との組に変換するようにして上位関数中のポインタ変数を解消するようにしているので、ポインタ変数を引数にもつ関数が内部にある動作記述を動作合成処理する場合であっても、上位関数の動作合成処理の際に下位関数をインライン展開する必要がなくなる。
【００１５】
また、入力された動作レベルの回路記述中における、ポインタ変数の具体的な回路実体への指定であるポインタタイプ指定を解析し、動作合成用の内部表現に変換するポインタタイプ指定解析手段をさらに備えるようにしてもよい。
【００１６】
本発明では、ポインタタイプ指定解析手段を言語解析手段とは独立して設けることにより、ポインタタイプ指定が動作記述内のデータ型や付加情報とは別の方法で記述することが可能となり、ポインタタイプ指定の情報を動作記述とは分離して管理すること等が可能になる。
【００１７】
また、前記言語解析手段の解析結果を基にポインタ変数の具体的な回路実体への変換方法を決定するポインタタイプ解析手段をさらに備えるようにしてもよい。
【００１８】
本発明では、ポインタ変数の具体的な回路実体への変換方法を決定するポインタタイプ解析手段を設けることにより、利用者はポインタタイプの指定を行う必要がなくなり、ポインタ変数の具体的な回路実体を意識することなく動作合成が可能となる。
【００１９】
さらに、前記ポインタ−端子変換手段は、前記言語解析手段の解析結果から直ちにポインタ変数を端子と条件部の組に変換せず、前記動作合成手段における動作合成処理中に、ポインタ変数を端子と条件部の組に変換するようにしてもよい。
【００２０】
本発明によれば、一般的な動作合成処理の前にポインタ変数を解消するのではなく、一般的な動作合成処理中または動作合成後にポインタ変数を解消するようにしているので、動作合成処理自体の拡張が容易となる。
【発明の効果】
【００２１】
以上説明したように、本発明によれば、動作合成を行おうとする動作レベルの回路記述において、階層化されている関数がポインタによって接続されている場合であっても、上位関数の動作合成の際に下位関数をインラインに展開することなく動作合成をすることが可能になるという効果が得られる。
【発明を実施するための最良の形態】
【００２２】
次に、本発明の実施の形態について図面を参照して詳細に説明する。
【００２３】
（第１の実施形態）
図１は本発明の第１の実施形態の動作合成システムの構成を示すブロック図である。本実施形態の動作合成システムは、図１に示されるように、プログラム制御により動作するデータ処理装置（中央処理装置；プロセッサ；コンピュータ）２と、入力装置１と、記憶装置３と、出力装置４からから構成されている。
【００２４】
そして、データ処理装置２は、言語解析手段２１と、ポインタ−端子変換手段２２と、動作合成手段２３とを含む。また、記憶装置３は、システム内部表現記憶部３１を有する。
【００２５】
言語解析手段２１は、入力装置１により与えられた動作レベルの回路記述を解析し、動作合成用の内部表現に変換する。ここで内部表現とは、動作レベルの回路記述を解析した後に、その解析結果を内部で保持する際に使用される表現を意味している。具体的には、内部表現とは、動作レベルの回路記述を解析した結果を抽象構文木(abstract syntax tree; AST)やコントロールデータフローグラフ(control data flow graph; CDFG)と呼ばれるデータ構造で保存する際の表現を示している。
【００２６】
また、言語解析手段２１は、動作レベルの回路記述中のポインタタイプ指定に基づいて、ポインタ変数を具体的な回路実体に変換する際の対応関係を示す内部表現を生成する。
【００２７】
ポインタ−端子変換手段２２は、言語解析手段２１により生成された内部表現中のポインタ変数を、予め定められた変換ルールに基づいて、端子と条件部の組に変換する。
【００２８】
ここでの端子とは、ポインタ変数を具体的な回路実体に割り当てた場合の、外部入力端子／出力端子を示している。外部入力端子／出力端子は、上位関数と下位関数のインタフェースとなっている。１つのポインタから、変換ルールに基づいて、複数の（必要なだけの）入力端子／出力端子が、それぞれ、適切なビット幅で生成される。また、条件部とは、条件判定を行うｉｆ文のようなものを示している。
【００２９】
動作合成手段２３は、ポインタ−端子変換手段２２によりポインタ変数が除去された状態の内部表現に対して通常の動作合成処理を行い、抽象度の低い回路記述を生成して出力装置４に出力する。
【００３０】
通常の動作合成処理の一例としては、ＣＤＦＧを生成後に以下のような処理を行うものがあげられるが、これらの処理は本発明の特徴部分ではないため詳細な説明は省略する。
（１）ＣＤＦＧでの最適化（冗長な演算の削除や定数計算など）
（２）スケジューリング（各処理を行うサイクルを決める）
（３）バインディング（各処理の演算やメモリアクセスで、実際にどの演算器やメモリを使用するかを決める）
（４）データパス、コントローラ作成（データ部と制御部を分割して生成）
（５）ＲＴＬレベル記述生成
なお、言語解析手段２１、ポインタ−端子変換手段２２、動作合成手段２３の各々の処理手段は、必要に応じてシステムの内部表現を、記憶装置３のシステム内部表現記憶部３１に対して、書き出しおよび読み込みを行う。
【００３１】
次に、図２のシステムフロー図を参照して本実施形態の動作合成システムの全体の動作について詳細に説明する。
【００３２】
まず、利用者によりＣ言語などの抽象度の高い回路仕様が記述されている動作レベル記述が用意される（ステップＡ１）。この動作記述には、下位関数にポインタで引数を渡す記述が含まれているものとする。また、この動作記述中で各々の関数引数にあるポインタ変数をどのような具体的な回路実体（レジスタ、メモリ、外部入力端子など）に割り当てるかが、当該言語により規定されたデータ型、もしくは付加情報により定義されている。
【００３３】
次に、言語解析手段２１は、ステップＡ１の動作レベル記述を言語解析処理し（ブロックＡ２）、動作合成用の内部表現に変換する（ステップＡ３）。それと並行して、言語解析手段２１は、ステップＡ１に記述されているポインタタイプ指定（具体的な回路実体の指定）に基づいて、ポインタ変数を具体的な回路実体に変換する際の対応関係を示す内部表現を生成する（ステップＡ４）。
【００３４】
ステップＡ３およびステップＡ４の内部表現に基づき、関数の引数にあるポインタがどのような具体的な回路実体に割り当てられるかが決まるため、ポインタ−端子変換手段２２は、具体的な回路実体ごとの変換ルールに基づいて、ポインタ−端子変換処理を行い（ステップＡ５）、ポインタを必要な端子と条件部の組に変換する（ステップＡ６）。
【００３５】
最後に、動作合成手段２３は、一般的な動作合成処理を行い（ステップＡ７）、ＲＴＬレベル記述を生成する（ステップＡ８）。
【００３６】
本実施形態の動作合成システムでは、既存の一般的な動作合成処理の前処理として、ポインタタイプ指定に基づいてポインタを端子と条件部の組に変換するというように構成されているため、ポインタを引数にもつ関数が内部にある動作記述であっても、下位関数をインライン展開せずに、そのままブラックボックスとして合成することが可能となる。
【００３７】
つまり、ポインタを端子と条件部とに変換して、あたかもそのように動作記述が書かれていたように内部表現に反映することで、ＣＤＦＧ上での最適化処理以降の処理は、ポインタを引数として使用していない場合と同様に処理することができるため、既存の動作合成処理の大部分をそのまま使用することができる。
【００３８】
そして、上位関数の合成時に、下位関数の実装に依存しないように合成が可能になることにより、ポインタを引数に持つ下位関数を後から実装したり、実装を入れ替えたりすることが可能になる。
【００３９】
また、特定の機能を持った部分を下位関数として分離しているため、上位関数のデバッグ時にチェックしなければならない変数や動作を減らせるため、動作合成後の回路のデバグ効率を上げることができる。
【００４０】
また、下位関数の内部に書かれている記述を動作合成時に考慮する必要がないため、記述の解析やスケジューリングなどにおける探索の対象範囲が狭まることにより、動作合成速度の向上を図ることができる。
【００４１】
さらに、上位関数から同一の下位関数を複数箇所で呼び出している場合、下位関数を容易に共有化できるため、動作合成により合成された回路の面積を縮小できる。
【００４２】
（第２の実施形態）
次に、本発明の第２の実施形態の動作合成システムについて図面を用いて説明する。本発明の第２の実施の形態の動作合成システムは、図３に示されるように、プログラム制御により動作するデータ処理装置（中央処理装置；プロセッサ；コンピュータ）３２と、入力装置１と、記憶装置３と、出力装置４からから構成されている。図３において、図１中の構成要素と同一の構成要素には同一の符号を付し、説明を省略するものとする。
【００４３】
そして、データ処理装置３２は、言語解析手段２１と、ポインタ−端子変換手段２２と、動作合成手段２３と、ポインタタイプ指定解析手段２４とを含む。
【００４４】
本実施形態におけるデータ処理装置３２は、図１に示した第１の実施形態の動作合成システムにおけるデータ処理装置２に対して、ポインタタイプ指定解析手段２４が新たに追加された構成になっている。
【００４５】
ポインタタイプ指定解析手段２４は、入力装置１より与えられたポインタの具体的な回路実体の指定（ポインタタイプ指定）を解析し、動作合成用の内部表現に変換する。本実施形態におけるポインタタイプ指定解析手段２４も、他の処理手段と同様に、必要に応じてシステムの内部表現を、記憶装置３のシステム内部表現記憶部３１に対して、書き出しおよび読み込みを行う。
【００４６】
次に、図４のシステムフロー図を参照して本実施形態の動作合成システムの全体の動作について詳細に説明する。
【００４７】
まず、利用者によりＣ言語などの抽象度の高い回路仕様が記述されている動作レベル記述が用意される（ステップＢ１）。この動作記述には、下位関数にポインタで引数を渡す記述が含まれているものとする。また、この動作記述中で各々の関数引数にあるポインタ変数をどのような具体的な回路実体（レジスタ、メモリ、外部入力端子など）に割り当てるかを定義したポインタタイプ指定を用意する（ステップＢ２）。ポインタタイプ指定は、ファイルで用意するほか、コマンドラインでの指定やＧＵＩでの指定も可能とする。
【００４８】
次に、言語解析手段２１は、ステップＢ１の動作レベル記述を言語解析処理し（ステップＢ３）、動作合成用の内部表現に変換する（ステップＢ４）。それと並行して、ポインタタイプ指定解析手段２４により、ステップＢ２のポインタタイプ指定をポインタタイプ指定解析処理して（ステップＢ５）、ポインタ変数を具体的な回路実体に変換する際の対応関係を示す内部表現に変換する（ステップＢ６）。ここで、ポインタの具体的な回路実体変換方法の指定は、ステップＢ１において用意された動作レベル記述にも部分的に記述可能とし、言語解析処理（ステップＢ３）を経て、ポインタ変数を具体的な回路実体に変換する際の対応関係を示す内部表現に変換することができる（ステップＢ６）。ステップＢ５およびステップＢ６の内部表現に基づき、関数の引数にあるポインタがどのような具体的な回路実体に割り当てられるかが決まるため、ポインタ−端子変換手段２２は、具体的な回路実体ごとの変換ルールに基づいて、ポインタ−端子変換処理を行い（ステップＢ７）、ポインタを必要な端子と条件部の組に変換する（ステップＢ８）。
【００４９】
最後に、動作合成手段２３は、一般的な動作合成処理を行い（ステップＢ９）、ＲＴＬレベル記述を生成する（ステップＢ１０）。
【００５０】
本実施形態の動作合成システムでは、上記で説明した第１の実施形態の動作合成システムで動作記述内にデータ型や付加情報として記述されていたポインタタイプ指定が別の方法で入力するように構成されているため、動作記述からポインタの具体的な回路実体への割り当て方法を分離することができる。これにより、ポインタの具体的な回路実体への割り当て方法の情報を動作記述と分離して管理することができたり、ＧＵＩによるサポートを得られる利点がある。
【００５１】
（第３の実施形態）
次に、本発明の第３の実施形態の動作合成システムについて図面を用いて説明する。
【００５２】
本発明の第３の実施形態の動作合成システムは、図５に示されるように、プログラム制御により動作するデータ処理装置（中央処理装置；プロセッサ；コンピュータ）５２と、入力装置１と、記憶装置３と、出力装置４からから構成されている。
【００５３】
データ処理装置５２は、言語解析手段２１と、ポインタ−端子変換手段２２と、動作合成手段２３と、ポインタタイプ解析手段２５とを含む。
【００５４】
本実施形態におけるデータ処理装置５２は、図１に示した第１の実施形態の動作合成システムにおけるデータ処理装置２に対して、ポインタタイプ解析手段２５が新たに追加された構成になっている。
【００５５】
ポインタタイプ解析手段２５は、言語解析手段２１の解析結果を基にポインタ変数の具体的な回路実体への変換方法を決定する。本実施形態におけるポインタタイプ解析手段２５も、他の処理手段と同様に、必要に応じてシステムの内部表現を、記憶装置３のシステム内部表現記憶部３１に対して、書き出しおよび読み込みを行う。
【００５６】
次に、図６のシステムフロー図を参照して本実施形態の動作合成システムの全体の動作について詳細に説明する。
【００５７】
まず、利用者によりＣ言語などの抽象度の高い回路仕様が記述されている動作レベル記述が用意される（ステップＣ１）。この動作記述は、下位の関数にポインタで引数を渡す記述が含まれるものとする。
【００５８】
次に、言語解析手段２１は、ステップＣ１の動作レベル記述を言語解析処理し（ステップＣ２）、動作合成用の内部表現に変換する（ステップＣ３）。次に、ポインタタイプ解析手段２５により、ポインタタイプ変換方法解析処理を行って（ステップＣ４）、動作レベル記述により記述されていたポインタから具体的な回路への変換ルールを配列の大きさやアクセス頻度などの動作レベル記述上の使用方法から決定し、ポインタ変数を具体的な回路実体に変換する際の対応関係を示す内部表現を生成する（ステップＣ５）。
【００５９】
ステップＣ３およびステップＣ５の内部表現に基づき、関数の引数にあるポインタがどのような具体的な回路実体に割り当てられるかが決まるため、ポインタ−端子変換手段２２は、具体的な回路実体ごとの変換ルールに基づいて、ポインタ−端子変換処理を行い（ステップＣ６）、ポインタを必要な端子と条件部の組に変換する（ステップＣ７）。
【００６０】
最後に、動作合成手段２３は、一般的な動作合成処理を行い（ステップＣ８）、ＲＴＬレベル記述を生成する（ステップＣ９）。
【００６１】
本実施形態の動作合成システムによれば、上記で説明した第１の実施形態よび第２の実施形態の動作合成システムではでポインタタイプの指定を利用者が指定していたのに対し、動作レベル記述上の使用方法を解析して、ポインタタイプを決定することができるため、利用者がポイントタイプを指定することなく、あるいは、利用者がポインタの具体的な回路実体を意識せずに動作合成可能となる効果がある。
【００６２】
（第４の実施形態）
次に、本発明の第４の実施形態の動作合成システムについて詳細に説明する。
上記で説明した第１から第３の実施形態の動作合成システムでは、ポインタの具体的な回路実体を決定後、ポインタ変数を具体的な回路実体に変換する際の対応関係を示す内部表現を生成し、その情報を用いて、言語解析後の段階で、直ちにポインタを端子に変換しているが、本発明の第４の実施形態では、ポインタの端子と条件部への変換を一般的な動作合成の処理中、または処理後に行う。
【００６３】
本実施形態の動作合成システムによれば、上記で説明した第１から第３の実施形態の動作合成システムでは、必ず一般的な動作合成処理の前にポインタを解消していたのに対し、一般的な動作合成中または動作合成後にポインタを解消するように構成されているため、動作合成処理自体の拡張が容易なシステムにおいて、適切な処理タイミングでポインタを解消するようにできる効果が得られる。
【００６４】
また、図には示されていないが、上記第１から第４の実施形態の動作合成システムは、上記で説明した動作合成方法を実行するためのプログラムを記録した記録媒体を備えている。この記録媒体は磁気ディスク、半導体メモリまたはその他の記録媒体であってもよい。このプログラムは、記録媒体から動作合成システムに読み込まれ、動作合成システムの動作を制御する。具体的には、動作合成システム内のデータ処理装置２、３２、５２がこのプログラムの制御により動作合成システムのハードウェア資源に特定の処理を行うように指示することにより上記の処理が実現される。
【００６５】
さらに、上記第１から第４の実施形態では、システム内部表現記憶部３１を有する記憶装置３が、データ処理装置２、３２、５２の外部に設けられている場合を用いて説明しているが、本発明はこのような場合に限定されるものではなく、データ処理装置２、３２、５２内に記憶装置を設け、この記憶装置により内部表現を格納するようにしてもよい。
【実施例】
【００６６】
次に、本発明の第１の実施形態の動作合成システムを用いた実施例について説明する。
【００６７】
（第１の実施例）
先ず、図７−１に本システムへの入力となる動作レベル記述を示す。図７−１ではＡＮＳＩ−Ｃ言語をベースとして、外部入力端子にinput、外部出力端子にoutputというキーワードが追加されている。また、bool型は1ビットの変数を意味するものとする。図７−１は関数main()が親関数（上位関数）、関数func()が子関数（下位関数）の関係があり、外部端子は親関数に入力されるが、関数func()へポインタで渡されている。
【００６８】
ポインタ-端子変換後のmain()及びfunc()をそれぞれ図７−２、図７−３に示す。図７−２、図７−３のような変換により、ポインタが端子とその端子の使用条件となる。図７−２では、func_i、func_o、func_start、func_endは、関数func()の入出力端子であり、c1の条件毎に、接続される外部端子が決定する。この動作レベル記述では、func()の動作開始時に親関数側でfunc_startが１に設定され、func()の動作終了時に子関数側でfunc_endが１に設定される。図７−３では、図７−１でポインタであった*iと*oが端子func_i、func_oに変換され、func()の動作の開始と終了を表すfunc_startおよびfunc_endが生成される。この変換により、一般的な動作合成ツールのフローによる動作合成が可能となる。
【００６９】
（第２の実施例）
図８−１では、register型およびmemory型の配列を関数func()に渡している。ここで、この動作レベル記述ではRとMの変換ルールをレジスタおよびメモリと指定し、それぞれのアクセスポート数を４および２と定めていることを意味するものとする。また、func()の引数*rはアクセスポート数３として合成することが指示されている。図１、図２に示した第１の実施形態の動作合成システムにより、main()及びfunc()はそれぞれ図８−２、図８−３のように変換される。図８−２では、レジスタおよびメモリのポートの端子構成はstruct Port型として定義され、MとRはそれぞれのポート数に応じて端子としての表現に変換される。また、関数func()から生成される端子はそれぞれmおよびrの構造体として表現され、それぞれの端子はMおよびRの端子に接続される。この変換はfunc()の仮引数だけで決定し、func()の実装は必ずしも必要としない。図８−３は、func()の変換方法を示しており、mとrはそれぞれ外部端子に変換され、配列への代入・参照はread_dataの参照、write_dataへの代入に変換される。
【００７０】
（第３の実施例）
図９−１に示すように、関数func()に渡されるポインタの具体的な回路実体の種類が複数ある場合には、main()側の合成時に図９−２のように、関数の呼び出し毎に接続する具体的な回路実体を選択するように変換される。func()側の合成時には、図９−３のように具体的な回路実体に関わらず、ポート数に合わせて、端子へ入出力するように変換される。
【００７１】
（第４の実施例）
図１０−１に示すように、具体的な回路実体がmain()内の内部レジスタのときで、通常の動作合成フローでは配列として扱うときには、図１０−２のようにwrite_enable信号によって配列への書き込みと読み込みへ変換することで実現される。一方、図１０−３に示されるように、func()側では具体的な回路実体に関わらず端子への入出力に変換される。
【００７２】
また、図１０−１中の「func(R, &a, &x);」という関数呼び出しから、図１０−２中の「if(r.port[0].write_enable) [R[r.port[0].address] = r.port[0].write_data;] esle [r.port[0].read_data = R[r.port[0].address];]」が生成されていることにより、ポインタから入力端子/出力端子だけではなく「if文」が条件部として生成されていることがわかる。
【図面の簡単な説明】
【００７３】
【図１】本発明の第１の実施形態の動作合成システムの構成を示すブロック図である
【図２】本発明の第１の実施形態の動作合成システムの動作を示すシステムフロー図である。
【図３】本発明の第２の実施形態の動作合成システムの構成を示すブロック図である。
【図４】本発明の第２の実施形態の動作合成システムの動作を示すシステムフロー図である。
【図５】本発明の第３の実施形態の動作合成システムの構成を示すブロック図である。
【図６】本発明の第３の実施形態の動作合成システムの動作を示すシステムフロー図である。
【図７−１】本発明の第１の実施例の動作レベル記述を示す図である。
【図７−２】本発明の第１の実施例の動作レベル記述の親関数変換方法を示す図である。
【図７−３】本発明の第１の実施例の動作レベル記述の子関数変換方法を示す図である。
【図８−１】本発明の第２の実施例の動作レベル記述を示す図である。
【図８−２】本発明の第２の実施例の動作レベル記述の親関数変換方法を示す図である。
【図８−３】本発明の第２の実施例の動作レベル記述の子関数変換方法を示す図である。
【図９−１】本発明の第３の実施例の動作レベル記述を示す図である。
【図９−２】本発明の第３の実施例の動作レベル記述の親関数変換方法を示す図である。
【図９−３】本発明の第３の実施例の動作レベル記述の子関数変換方法を示す図である。
【図１０−１】本発明の第４の実施例の動作レベル記述を示す図である。
【図１０−２】本発明の第４の実施例の動作レベル記述の親関数変換方法を示す図である。
【図１０−３】本発明の第４の実施例の動作レベル記述の子関数変換方法を示す図である。
【符号の説明】
【００７４】
１    入力装置
２    データ処理装置
３    記憶装置
４    出力装置
２１    言語解析手段
２２    ポインタ−端子変換手段
２３    動作合成手段
２４    ポインタタイプ指定解析手段
２５    ポインタタイプ解析手段
３１    システム内部表現記憶部
３２    データ処理装置
５２    データ処理装置
Ａ１〜Ａ８    ステップ
Ｂ１〜Ｂ１０    ステップ
Ｃ１〜Ｃ９    ステップ
【図１】
0004730536.tif 000002
【図２】
0004730536.tif 000003
【図３】
0004730536.tif 000004
【図４】
0004730536.tif 000005
【図５】
0004730536.tif 000006
【図６】
0004730536.tif 000007
【図７−１】
0004730536.tif 000008
【図７−２】
0004730536.tif 000009
【図７−３】
0004730536.tif 000010
【図８−１】
0004730536.tif 000011
【図８−２】
0004730536.tif 000012
【図８−３】
0004730536.tif 000013
【図９−１】
0004730536.tif 000014
【図９−２】
0004730536.tif 000015
【図９−３】
0004730536.tif 000016
【図１０−１】
0004730536.tif 000017
【図１０−２】
0004730536.tif 000018
【図１０−３】
0004730536.tif 000019