(57)【特許請求の範囲】
【請求項１】
機能を実現する回路の動作を記述した動作記述であって、繰り返し処理を記述したループ記述を複数含むとともに繰り返し処理ではない処理を記述した論理記述を含む動作記述に対して高位合成を実行する高位合成装置において、
複数のループ記述から、前記機能を変更せずに前記論理記述とマージすることが可能なループ記述をループ記述候補として抽出し、前記論理記述を前記ループ記述候補の各々にマージした場合の前記回路の特性を回路特性として算出する抽出部と、
前記回路特性に基づいて、前記ループ記述候補から前記論理記述とマージするループ記述を決定する決定部と、
前記決定部により決定されたループ記述に前記論理記述をマージするマージ部と
を備えた高位合成装置。
【請求項２】
前記抽出部は、
前記論理記述の前に実行されるループ記述のうち最も前記論理記述に近いループ記述である前ループ記述と、前記論理記述の後に実行されるループ記述のうち最も前記論理記述に近い後ループ記述とを前記ループ記述候補として抽出する請求項１に記載の高位合成装置。
【請求項３】
前記抽出部は、
前記動作記述に含まれる前記複数のループ記述および前記論理記述の各々をノードとするデータフローグラフを生成し、前記データフローグラフを用いて、前記前ループ記述と前記後ループ記述とを前記ループ記述候補として抽出する請求項２に記載の高位合成装置。
【請求項４】
前記抽出部は、
前記回路特性として、前記回路のレイテンシおよび前記回路が必要とするメモリ容量との少なくともいずれかを算出する請求項３に記載の高位合成装置。
【請求項５】
前記抽出部は、
前記論理記述を前記ループ記述候補の各々にマージした場合のデータフローグラフをマージデータフローグラフとして生成し、前記マージデータフローグラフにおけるノード間の入出力変数の総ビット数を前記回路特性として算出し、
前記決定部は、
前記入出力変数の総ビット数が最も少ないマージデータフローグラフにおいて前記論理記述とマージされているループ記述を前記論理記述とマージするループ記述として決定する請求項４に記載の高位合成装置。
【請求項６】
前記マージ部は、
前記論理記述を前記前ループ記述にマージする場合、前記前ループ記述における最後の繰り返し処理の中で前記論理記述による処理が実行されるように前記論理記述を前記前ループ記述にマージし、前記論理記述を前記後ループ記述にマージする場合、前記後ループ記述における最初の繰り返し処理の中で前記論理記述による処理が実行されるように前記論理記述を前記後ループ記述にマージする請求項２から５のいずれか１項に記載の高位合成装置。
【請求項７】
前記動作記述は、複数の論理記述を含み、
前記抽出部は、
前記複数の論理記述のうち隣接する論理記述を合わせて前記論理記述とする請求項１から５のいずれか１項に記載の高位合成装置。
【請求項８】
機能を実現する回路の動作を記述した動作記述であって、繰り返し処理を記述したループ記述を複数含むとともに繰り返し処理ではない処理を記述した論理記述を含む動作記述に対して高位合成を実行する高位合成装置の高位合成方法において、
抽出部が、複数のループ記述から、前記機能を変更せずに前記論理記述とマージすることが可能なループ記述をループ記述候補として抽出し、
抽出部が、前記論理記述を前記ループ記述候補の各々にマージした場合の前記回路の特性を回路特性として算出し、
決定部が、前記回路特性に基づいて、前記ループ記述候補から前記論理記述とマージするループ記述を決定し、
マージ部が、前記決定部により決定されたループ記述に前記論理記述をマージする高位合成方法。
【請求項９】
機能を実現する回路の動作を記述した動作記述であって、繰り返し処理を記述したループ記述を複数含むとともに繰り返し処理ではない処理を記述した論理記述を含む動作記述に対して高位合成を実行する高位合成装置の高位合成プログラムにおいて、
複数のループ記述から、前記機能を変更せずに前記論理記述とマージすることが可能なループ記述をループ記述候補として抽出する抽出処理と、
前記論理記述を前記ループ記述候補の各々にマージした場合の前記回路の特性を回路特性として算出する回路特性算出処理と、
前記回路特性に基づいて、前記ループ記述候補から前記論理記述とマージするループ記述を決定する決定処理と、
前記決定処理により決定されたループ記述に前記論理記述をマージするマージ処理と
をコンピュータである前記高位合成装置に実行させる高位合成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動作記述からＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）記述を自動生成する高位合成装置に関する。特に、動作合成を利用した半導体設計を支援する高位合成装置、高位合成方法および高位合成プログラムに関する。
【背景技術】
【０００２】
従来の半導体集積回路設計では、ハードウェア記述言語で回路に含まれるレジスタ（フリップフロップ）間の組み合わせ回路の動作を記述するＲＴＬで設計をしていた。近年では集積回路の回路規模が増大しており、ＲＴＬ設計時間を多大に要することが問題となっていた。そこで、ＲＴＬよりも抽象度が高いＣ言語、Ｃ＋＋言語、ＳｙｓｔｅｍＣ言語、あるいはＭＡＴＬＡＢ言語といった高級言語を用いて設計を行い、ＲＴＬを自動的に生成する技術が提唱されている。そして、この技術を実現するツールが高位合成ツールとして市販されている。
また、設計者は、高級言語では表現できない、あるいはソースコードで表現するには効率的でない回路仕様については、オプション、アトリビュート、あるいはプラグマといった高位合成オプションを設定して、高位合成ツールに入力することで、回路設計を行う。【０００３】
しかしながら、現在の高位合成ツールでは、ｆｏｒループ記述内の配列記述については、設計者がメモリの種類および個数を決める設計を行い、設計した構成になるようにソースコードを変更する。そして、設計者は、さらに、適切なオプション、アトリビュート、あるいはプラグマを設定する必要がある。これらの設計は、ハードウェアの知識が必要となり、ハードウェアの知識がない設計者は、上述の設計が出来ないため、回路規模および性能が適切である回路を作ることができない。【０００４】
特許文献１では、ループ記述内の配列のアクセスに着目し、自動的にメモリ構成を決める手法が開示されている。また、特許文献２では、Ｃ言語の階層構造に着目し、ソースコードを演算要素と制御要素とに分離し、制御要素をデータ転送単位変換器で変換することで、ハードウェアの知識が必要となる制御要素を分離することが開示されている。これらの特許文献が示しているように、高位合成では、モジュールという概念が存在する。このモジュールは、高位合成単位となるものである。設計者は、モジュールを適切に分割し、モジュール間のデータ転送を設計することになる。
１つの通常のメモリをモジュール間に挿入するような単純なデータ転送の場合は、設計者は高位合成ツールを利用して、オプション設定のみ与えればよい。しかし、実際は、データ転送効率を高めたり、レイテンシを短縮したり、回路規模を抑える目的で、特殊なデータ転送を設ける。
このように高位合成を使う場合、設計者がモジュールを定義し、モジュール間のバッファおよび制御について設計を行うのが一般的である。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−２３５４７４号公報
【特許文献２】特開２０１１−２１５９６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、モジュールの定義は設計者によって異なる。ソースコード中、どこをモジュールの切れ目にするかを判断するのが難しい。一般に高位合成は、ハードウェアとしてアクセラレートすることを前提としているため、ループ記述が多い。したがって、ループ記述をひとつのモジュールとして定義することは、わかりやすく、容易な判断基準で実施できる。しかし、実際には複数のループ記述の間にループではない論理がある場合が多い。複数のループ記述の間に論理がある場合、この論理をひとつのモジュールとして定義するか、またはループ記述とまとめて、ひとつのモジュールとして定義するかを決める必要がある。【０００７】
特許文献１ではループ間のアクセスのみに着目しており、ループ間にループではない他の論理があった場合について、その論理をモジュールとしてマージするかの判定がなされていない。
また、特許文献２ではＣ言語の階層構造に着目しており、演算部分と制御部分に分離しているが、単純なループ以外のｉｆ文といった記述をひとつの単位としてしまうと、ブロックが多くなり、遅延が増大するとともに設計者の手間が増える。【０００８】
このように複数のループ間に論理がある場合、その論理のモジュールの定義が課題となる。【０００９】
本発明は、ソースコード中のループ記述の前後に存在するループではない論理を、その論理のソースコードの上に存在する前ループ、または下に存在する後ループにマージすることが可能な高位合成装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明に係る高位合成装置は、機能を実現する回路の動作を記述した動作記述であって、繰り返し処理を記述したループ記述を複数含むとともに繰り返し処理ではない処理を記述した論理記述を含む動作記述に対して高位合成を実行する高位合成装置において、
複数のループ記述から、前記機能を変更せずに前記論理記述とマージすることが可能なループ記述をループ記述候補として抽出し、前記論理記述を前記ループ記述候補の各々にマージした場合の前記回路の特性を回路特性として算出する抽出部と、
前記回路特性に基づいて、前記ループ記述候補から前記論理記述とマージするループ記述を決定する決定部と、
前記決定部により決定されたループ記述に前記論理記述をマージするマージ部と
を備えた。
【発明の効果】
【００１１】
本発明に係る高位合成装置は、繰り返し処理を記述したループ記述を複数含むとともに繰り返し処理ではない処理を記述した論理記述を含む動作記述に対して高位合成を実行する。抽出部が、複数のループ記述から、機能を変更せずに論理記述とマージすることが可能なループ記述をループ記述候補として抽出する。また、抽出部が、論理記述をループ記述候補の各々にマージした場合の回路の特性を回路特性として算出する。決定部は、回路特性に基づいて、ループ記述候補から論理記述とマージするループ記述を決定する。そして、マージ部が、決定部により決定されたループ記述に論理記述をマージする。よって、本発明に係る高位合成装置によれば、ソースコードのモジュール分割を、自動かつ適切に実施することができ、短時間で最適な回路の設計が可能になる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１に係る高位合成装置１００の構成図。
【図２】実施の形態１に係る動作記述１５１のサンプルコード。
【図３】実施の形態１に係る高位合成方法６１０および高位合成プログラム６２０の高位合成処理Ｓ１００を示すフロー図。
【図４】実施の形態１に係るデータフローグラフ１５３の例。
【図５】実施の形態１に係る上位検索処理Ｓ２０を示すフロー図。
【図６】実施の形態１に係る上位検索処理Ｓ２０により出力されるマージデータフローグラフＡ１５３ａの例。
【図７】実施の形態１に係る下位検索処理Ｓ３０を示すフロー図。
【図８】実施の形態１に係る下位検索処理Ｓ３０により出力されるマージデータフローグラフＢ１５３ｂの例。
【図９】実施の形態１に係る回路特性情報１５４の例。
【図１０】実施の形態１に係る前マージ処理Ｓ１３１を示すフロー図。
【図１１】実施の形態１に係る前マージ処理Ｓ１３１を実施した際の変換動作記述１５７ａの例。
【図１２】実施の形態１に係る後マージ処理Ｓ１３２を示すフロー図。
【図１３】実施の形態１に係る後マージ処理Ｓ１３２を実施した際の変換動作記述１５７ｂの例。
【図１４】実施の形態１の変形例に係る高位合成装置１００の構成図。
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態について、図を用いて説明する。なお、各図中、同一または相当する部分には、同一符号を付している。実施の形態の説明において、同一または相当する部分については、説明を適宜省略または簡略化する。
【００１４】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１を用いて、本実施の形態に係る高位合成装置１００の構成について説明する。
図１に示すように、高位合成装置１００は、コンピュータである。
高位合成装置１００は、プロセッサ９１０、記憶装置９２０、入力インタフェース９３０、および出力インタフェース９４０といったハードウェアを備える。記憶装置９２０は、メモリ９２１と補助記憶装置９２２とを含む。
【００１５】
高位合成装置１００は、機能構成として、抽出部１１０と、決定部１２０と、マージ部１３０と、高位合成部１４０と、記憶部１５０とを備える。記憶部１５０には、動作記述１５１と、非機能要件１５２と、データフローグラフ１５３と、回路特性情報１５４と、ＲＴＬ１５５と、合成レポート１５６と、変換動作記述１５７とが記憶される。
抽出部１１０と、決定部１２０と、マージ部１３０と、高位合成部１４０のそれぞれの機能は、ソフトウェアで実現される。
記憶部１５０は、メモリ９２１により実現される。また、記憶部１５０は、補助記憶装置９２２のみ、あるいは、メモリ９２１および補助記憶装置９２２で実現されてもよい。記憶部１５０の実現方法は任意である。
【００１６】
プロセッサ９１０は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。プロセッサ９１０は、演算処理を行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。プロセッサ９１０の具体例は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
【００１７】
メモリ９２１は、データを一時的に記憶する記憶装置である。メモリ９２１の具体例は、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００１８】
補助記憶装置９２２は、データを保管する記憶装置である。補助記憶装置９２２の具体例は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）である。また、補助記憶装置９２２は、ＳＤ（登録商標）（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）メモリカード、ＣＦ（ＣｏｍｐａｃｔＦｌａｓｈ）、ＮＡＮＤフラッシュ、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）といった可搬記憶媒体であってもよい。
【００１９】
入力インタフェース９３０は、マウス、キーボード、タッチパネルといった入力装置と接続されるポートである。入力インタフェース９３０は、具体的には、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）端子である。なお、入力インタフェース９３０は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）と接続されるポートであってもよい。
【００２０】
出力インタフェース９４０は、ディスプレイといった表示機器のケーブルが接続されるポートである。出力インタフェース９４０は、具体的には、ＵＳＢ端子またはＨＤＭＩ（登録商標）（Ｈｉｇｈ  Ｄｅｆｉｎｉｔｉｏｎ  Ｍｕｌｔｉｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ）端子である。ディスプレイは、具体的には、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）である。
【００２１】
補助記憶装置９２２には、抽出部１１０と、決定部１２０と、マージ部１３０と、高位合成部１４０のそれぞれの機能を実現するプログラムが記憶されている。抽出部１１０と、決定部１２０と、マージ部１３０と、高位合成部１４０の機能を実現するプログラムを高位合成プログラム６２０ともいう。このプログラムは、メモリ９２１にロードされ、プロセッサ９１０に読み込まれ、プロセッサ９１０によって実行される。また、補助記憶装置９２２はＯＳを記憶している。補助記憶装置９２２にされているＯＳの少なくとも一部がメモリ９２１にロードされる。プロセッサ９１０はＯＳを実行しながら、高位合成プログラム６２０を実行する。
【００２２】
高位合成装置１００は、１つのプロセッサ９１０のみを備えていてもよいし、複数のプロセッサ９１０を備えていてもよい。複数のプロセッサ９１０が、抽出部１１０と、決定部１２０と、マージ部１３０と、高位合成部１４０のそれぞれの機能を実現するプログラムを連携して実行してもよい。
【００２３】
抽出部１１０と、決定部１２０と、マージ部１３０と、高位合成部１４０のそれぞれの処理の結果を示す情報、データ、信号値、および変数値は、高位合成装置１００の補助記憶装置９２２、メモリ９２１、または、プロセッサ９１０内のレジスタまたはキャッシュメモリに記憶される。
【００２４】
抽出部１１０と、決定部１２０と、マージ部１３０と、高位合成部１４０のそれぞれの機能を実現するプログラムは、可搬記録媒体に記憶されてもよい。可搬記録媒体とは、具体的には、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）である。
なお、高位合成プログラムプロダクトとは、高位合成プログラム６２０が記録された記憶媒体および記憶装置である。高位合成プログラムプロダクトは、外観に関わらず、コンピュータ読み取り可能なプログラムをロードしているものを指す。
【００２５】
図２を用いて、本実施の形態に係る動作記述１５１について説明する。
動作記述１５１は、機能を実現する回路の動作を記述したソースコードである。動作記述１５１は、Ｃ言語、Ｃ＋＋言語、ＳｙｓｔｅｍＣ言語、またはＭＡＴＬＡＢ言語といった高級言語を用いて記述される。動作記述１５１は、繰り返し処理を記述したループ記述５１１を複数含むとともに繰り返し処理ではない処理を記述した論理記述５１２を含む。図２に示すように、動作記述１５１は複数の論理記述５１２を含む。なお、動作記述１５１に含まれる論理記述５１２は、１つであっても本実施の形態を適用できる。
図２は、動作記述１５１のサンプルコードを示す図である。このサンプルコードは、２つのループ記述５１１とそのループ間に２つの論理記述５１２があるサンプルである。サンプルコードには、説明を簡単にするためのラベルを振ってあるが、ラベルはなくてもよい。また、このサンプルコードは、本実施の形態を説明するために必要のない論理は除いてあり、Ｃ言語として不完全である。
【００２６】
非機能要件１５２は、要求する回路のレイテンシおよびメモリ使用量といった非機能要件を定義したファイルである。
高位合成部１４０には、動作記述１５１が変換された変換動作記述１５７と、非機能要件１５２とが入力される。なお、変換動作記述１５７により表される回路の機能は、動作記述１５１により表される回路の機能と同一である。また、高位合成部１４０は、動作記述１５１と非機能要件１５２とに基づいて高位合成を行い、ＲＴＬ１５５と、ＲＴＬ１５５の非機能要件である合成レポート１５６とを出力する。合成レポート１５６は、非機能要件１５２と同一項目である。
データフローグラフ１５３は、動作記述１５１に記述された実行単位であるモジュール間の関係を図示したグラフである。データフローグラフは、ＤＦＧと略される場合がある。
【００２７】
＊＊＊動作の説明＊＊＊
図３を用いて、本実施の形態に係る高位合成方法６１０および高位合成プログラム６２０の高位合成処理Ｓ１００について説明する。
高位合成処理Ｓ１００は、抽出処理Ｓ１１０と、決定処理Ｓ１２０と、マージ処理Ｓ１３０と、高位合成実行処理Ｓ１４０とを有する。抽出処理Ｓ１１０は、データフローグラフ生成処理Ｓ１０と、上位検索処理Ｓ２０と、下位検索処理Ｓ３０と、検索結果統合処理Ｓ４０と、回路特性算出処理Ｓ５０とを有する。また、マージ処理Ｓ１３０は、前マージ処理Ｓ１３１と、後マージ処理Ｓ１３２とを有する。
【００２８】
＜抽出処理Ｓ１１０＞
抽出処理Ｓ１１０において、抽出部１１０は、複数のループ記述５１１から、機能を変更せずに論理記述５１２とマージすることが可能なループ記述５１１をループ記述候補５１３として抽出する。具体的には、抽出部１１０は、ループ記述５１１とそのループ記述５１１の前後にある繰り返し処理ではない論理記述５１２を解析し、論理記述５１２がどのループ記述５１１にマージできるかを抽出する。そして、抽出部１１０は、論理記述５１２をループ記述候補５１３の各々にマージした場合の回路の特性を回路特性５１４として算出する。
【００２９】
＜データフローグラフ生成処理Ｓ１０＞
ステップＳ１１１において、抽出部１１０は、データフローグラフ生成処理Ｓ１０を実行する。抽出部１１０は、動作記述１５１に含まれる複数のループ記述５１１および論理記述５１２の各々をノードとするデータフローグラフを生成する。
図４は、本実施の形態に係るデータフローグラフ１５３の例である。図４のデータフローグラフ１５３は、図２の動作記述１５１に基づいて生成されたものである。抽出部１１０は、実行単位をノードとして、ノード間の入出力を表したデータフローグラフ１５３を生成する。図４では、抽出部１１０は、実行単位であるＬＯＯＰ＿Ａ、ＥＸＥ＿Ｂ１、ＥＸＥ＿Ｂ２、およびＬＯＯＰ＿Ｃをノードとして、ノード間の入出力を表したデータフローグラフ１５３を生成する。図４のデータフローグラフ１５３は、ループ記述５１１であるＬＯＯＰ＿Ａから、ｂが、論理記述５１２であるＥＸＥ＿Ｂ１に出力されるといったノード間の関係を表している。抽出部１１０は、データフローグラフ１５３の各ノードに、ｌｏｏｐ、ｎｏｎ−ｌｏｏｐをノード属性として付加する。抽出部１１０は、このノード属性として、ノードがループ記述５１１であればｌｏｏｐを付加し、ノードがループ記述５１１でない論理記述５１２であればｎｏｎ−ｌｏｏｐを付加する。
【００３０】
ステップＳ１１２およびステップＳ１１３では、抽出部１１０は、複数のループ記述５１１から、機能を変更せずに論理記述５１２とマージすることが可能なループ記述５１１をループ記述候補５１３として抽出する。ステップＳ１１２およびステップＳ１１３では、抽出部１１０は、ループ記述５１１の前後にある論理記述５１２と、その論理記述５１２とマージするループ記述候補５１３を抽出する。ステップＳ１１２において、抽出部１１０は、論理記述５１２であるｎｏｎ−ｌｏｏｐの上方向にあるｌｏｏｐを検索して抽出する上位検索処理Ｓ２０を実行する。ステップＳ１１３において、抽出部１１０は、論理記述５１２であるｎｏｎ−ｌｏｏｐの下方向にあるｌｏｏｐを検索して抽出する下位検索処理Ｓ３０を実行する。
【００３１】
＜上位検索処理Ｓ２０＞
図５を用いて、本実施の形態に係る上位検索処理Ｓ２０について説明する。
上位検索処理Ｓ２０において、抽出部１１０は、データフローグラフ１５３を用いて、論理記述５１２の前に実行されるループ記述５１１のうち最も論理記述５１２に近いループ記述５１１である前ループ記述５３１をループ記述候補５１３として抽出する。具体的には、抽出部１１０は、以下のように上位検索処理Ｓ２０を行う。
ステップＳ２１において、抽出部１１０は、データフローグラフ１５３から、ｎｏｎ−ｌｏｏｐノードを検索する。
ステップＳ２２において、抽出部１１０は、ｎｏｎ−ｌｏｏｐノードがあればステップＳ２３に進む。抽出部１１０は、ｎｏｎ−ｌｏｏｐノードがなければ処理を終了する。
ステップＳ２３において、抽出部１１０は、そのｎｏｎ−ｌｏｏｐノードの入力変数を出力するノードがｌｏｏｐノードであるかを判定する。抽出部１１０は、ｎｏｎ−ｌｏｏｐノードの入力変数を出力するノードがｌｏｏｐノードである場合、このｌｏｏｐノードをループ記述候補５１３として、ステップＳ２４に進む。抽出部１１０は、ｎｏｎ−ｌｏｏｐノードの入力変数を出力するノードがｌｏｏｐノードでない場合、処理を終了する。
ステップＳ２４において、抽出部１１０は、ループ記述候補５１３であるｌｏｏｐノードと、処理対象のｎｏｎ−ｌｏｏｐノードとをマージする。このとき、ループ記述候補５１３とされたｌｏｏｐノードを前ループ記述５３１とする。抽出部１１０は、ループ記述候補５１３であるｌｏｏｐノードと、処理対象のｎｏｎ−ｌｏｏｐノードとをマージしたデータフローグラフをマージデータフローグラフＡ１５３ａとする。
ステップＳ２５において、抽出部１１０は、データフローグラフ１５３が終了したか、あるいは、ｎｏｎ−ｌｏｏｐノードの出力がｌｏｏｐノードであるかを判定する。データフローグラフ１５３が終了したか、あるいは、ｎｏｎ−ｌｏｏｐノードの出力がｌｏｏｐノードである場合、抽出部１１０は、マージデータフローグラフＡ１５３ａを出力し（ステップＳ２８）、処理を終了する。データフローグラフ１５３が終了しておらず、かる、ｎｏｎ−ｌｏｏｐノードの出力がｌｏｏｐノードでない場合、抽出部１１０は、ステップＳ２６に進む。
ステップＳ２６において、抽出部１１０は、ｎｏｎ−ｌｏｏｐノードの出力がｎｏｎ−ｌｏｏｐノードに入力されるかを判定する。ｎｏｎ−ｌｏｏｐノードの出力がｎｏｎ−ｌｏｏｐノードに入力されない場合、抽出部１１０は、マージデータフローグラフＡ１５３ａを出力し（ステップＳ２８）、処理を終了する。ｎｏｎ−ｌｏｏｐノードの出力がｎｏｎ−ｌｏｏｐノードに入力される場合、抽出部１１０は、ステップＳ２７に進む。
ステップＳ２７において、抽出部１１０は、処理対象のｎｏｎ−ｌｏｏｐノードの出力が入力されるｎｏｎ−ｌｏｏｐノードと、処理対象のｎｏｎ−ｌｏｏｐとをマージする。すなわち、動作記述１５１が複数の論理記述を含む場合、抽出部１１０は、複数の論理記述のうち隣接する論理記述を合わせて１の論理記述とする。結果的に、ループ記述候補５１３のノードに、処理対象のｎｏｎ−ｌｏｏｐノードと、処理対象のｎｏｎ−ｌｏｏｐノードの出力が入力されるｎｏｎ−ｌｏｏｐノードとがマージされる。
抽出部１１０は、ステップＳ２５からステップＳ２７までの処理を、処理対象のｎｏｎ−ｌｏｏｐノードの出力がｌｏｏｐノードになるか、データフローグラフ１５３の終了となるまで繰り返す。このように、論理記述５１２である処理対象のｎｏｎ−ｌｏｏｐノードの前に実行されるループ記述５１１のうち最も処理対象のｎｏｎ−ｌｏｏｐノードに近いループ記述５１１が前ループ記述５３１として抽出される。抽出部１１０は、前ループ記述５３１と、処理対象のｎｏｎ−ｌｏｏｐノードと、処理対象のｎｏｎ−ｌｏｏｐノードの出力が入力されるｎｏｎ−ｌｏｏｐノードとがマージされたマージデータフローグラフＡ１５３ａを出力する。
【００３２】
次に、具体例として、上位検索処理Ｓ２０に図２の動作記述１５１のサンプルコードが入力される場合の抽出部１１０の動作を示す。
まず、図２の動作記述１５１のサンプルコードから、図４のデータフローグラフ１５３が生成される。そして、抽出部１１０は、処理対象のｎｏｎ−ｌｏｏｐノードとしてＥＸＥ＿Ｂ１を検出する。抽出部１１０は、ＥＸＥ＿Ｂ１ノードの入力変数ｂを出力するノードが、ｌｏｏｐ属性のＬＯＯＰ＿Ａであると判定し、ＬＯＯＰ＿Ａをループ記述候補５１３とする。そして、抽出部１１０は、ＥＸＥ＿Ｂ１とＬＯＯＰ＿Ａをマージする。さらに、抽出部１１０は、ＥＸＥ＿Ｂ１の出力変数ｃがｎｏｎ−ｌｏｏｐ属性のＥＸＥ＿Ｂ２へ入力されると判定し、ＥＸＥ＿Ｂ１とＥＸＥ＿Ｂ２をマージする。ＥＸＥ＿Ｂ２の出力変数ａがｌｏｏｐ属性のＬＯＯＰ＿Ｃに入力されるため、処理は終了する。
なお、抽出部１１０が、処理対象としてＥＸＥ＿Ｂ２を検出した後、ＥＸＥ＿Ｂ２から検索する場合は、ＥＸＥ＿Ｂ２ノードの入力変数ｃを出力するノードがＥＸＥ＿Ｂ１ノードであり、ｌｏｏｐノードでないために処理を終了し、ＬＯＯＰ＿Ａノードはループ記述候補５１３としては抽出されない。
このように、論理記述５１２であるＥＸＥ＿Ｂ１ノードの前に実行されるループ記述５１１のうち最もＥＸＥ＿Ｂ１ノードに近いループ記述５１１であるＬＯＯＰ＿Ａノードが前ループ記述５３１として抽出される。
【００３３】
図６は、本実施の形態に係る上位検索処理Ｓ２０により出力されるマージデータフローグラフＡ１５３ａの例である。
図６に示すように、ＬＯＯＰ＿ＡノードにＥＸＥ＿Ｂ１とＥＸＥ＿Ｂ２がマージされ、１つのループ記述５１１となっている。抽出部１１０は、ＥＸＥ＿Ｂ１とＥＸＥ＿Ｂ２との各々の前に実行されるループ記述５１１のうち最もＥＸＥ＿Ｂ１とＥＸＥ＿Ｂ２との各々に近いループ記述であるＬＯＯＰ＿Ａノードを前ループ記述５３１として抽出する。
【００３４】
＜下位検索処理Ｓ３０＞
図７を用いて、本実施の形態に係る下位検索処理Ｓ３０について説明する。
下位検索処理Ｓ３０において、抽出部１１０は、データフローグラフ１５３を用いて、論理記述５１２の後に実行されるループ記述５１１のうち最も論理記述５１２に近いループ記述５１１である後ループ記述５３２をループ記述候補５１３として抽出する。具体的には、抽出部１１０は、以下のように下位検索処理Ｓ３０を行う。
ステップＳ３１において、抽出部１１０は、データフローグラフ１５３から、ｎｏｎ−ｌｏｏｐノードを検索する。
ステップＳ３２において、抽出部１１０は、ｎｏｎ−ｌｏｏｐノードがあればステップＳ３３に進む。抽出部１１０は、ｎｏｎ−ｌｏｏｐノードがなければ処理を終了する。
ステップＳ３３において、抽出部１１０は、そのｎｏｎ−ｌｏｏｐノードの出力変数が入力されるノードがｌｏｏｐノードであるかを判定する。抽出部１１０は、ｎｏｎ−ｌｏｏｐノードの出力変数が入力されるノードがｌｏｏｐノードである場合、このｌｏｏｐノードをループ記述候補５１３として、ステップＳ３４に進む。抽出部１１０は、ｎｏｎ−ｌｏｏｐノードの出力変数が入力されるノードがｌｏｏｐノードでない場合、処理を終了する。
ステップＳ３４において、抽出部１１０は、ループ記述候補５１３であるｌｏｏｐノードと、処理対象のｎｏｎ−ｌｏｏｐノードとをマージする。このとき、ループ記述候補５１３とされたｌｏｏｐノードを後ループ記述５３２とする。抽出部１１０は、ループ記述候補５１３であるｌｏｏｐノードと、処理対象のｎｏｎ−ｌｏｏｐノードとをマージしたデータフローグラフをマージデータフローグラフＢ１５３ｂとする。
ステップＳ３５において、抽出部１１０は、データフローグラフ１５３が終了したか、あるいは、ｎｏｎ−ｌｏｏｐノードへの入力がｌｏｏｐノードからであるかを判定する。データフローグラフ１５３が終了した、あるいは、ｎｏｎ−ｌｏｏｐノードへの入力がｌｏｏｐノードからである場合、抽出部１１０は、マージデータフローグラフＢ１５３ｂを出力し（ステップＳ３８）、処理を終了する。データフローグラフ１５３が終了しておらず、かつ、ｎｏｎ−ｌｏｏｐノードへの入力がｌｏｏｐノードでない場合、抽出部１１０は、ステップＳ３６に進む。
ステップＳ３６において、抽出部１１０は、ｎｏｎ−ｌｏｏｐノードへの入力がｎｏｎ−ｌｏｏｐノードからであるかを判定する。ｎｏｎ−ｌｏｏｐノードへの入力がｎｏｎ−ｌｏｏｐノードからでない場合、抽出部１１０は、マージデータフローグラフＢ１５３ｂを出力し（ステップＳ３８）、処理を終了する。ｎｏｎ−ｌｏｏｐノードへの入力がｎｏｎ−ｌｏｏｐノードからである場合、抽出部１１０は、ステップＳ３７に進む。
ステップＳ３７において、抽出部１１０は、処理対象のｎｏｎ−ｌｏｏｐノードへの入力を出力するｎｏｎ−ｌｏｏｐノードと、処理対象のｎｏｎ−ｌｏｏｐノードとをマージする。すなわち、動作記述１５１が複数の論理記述を含む場合、抽出部１１０は、複数の論理記述のうち隣接する論理記述を１つの論理記述とする。
結果的に、ループ記述候補５１３のノードに、処理対象のｎｏｎ−ｌｏｏｐノードと、処理対象のｎｏｎ−ｌｏｏｐノードへの入力を出力するｎｏｎ−ｌｏｏｐノードとがマージされる。
抽出部１１０は、ステップＳ３５からステップＳ３７までの処理を、処理対象のｎｏｎ−ｌｏｏｐノードへの入力がｌｏｏｐノードからになるか、データフローグラフ１５３の終了となるまで繰り返す。このように、論理記述５１２である処理対象のｎｏｎ−ｌｏｏｐノードの後に実行されるループ記述５１１のうち最も処理対象のｎｏｎ−ｌｏｏｐノードに近いループ記述５１１が後ループ記述５３２として抽出される。抽出部１１０は、後ループ記述５３２と、処理対象のｎｏｎ−ｌｏｏｐノードと、処理対象のｎｏｎ−ｌｏｏｐノードへの入力変数を出力するｎｏｎ−ｌｏｏｐノードとがマージされたマージデータフローグラフＢ１５３ｂを出力する。
【００３５】
次に、具体例として、下位検索処理Ｓ３０に図２の動作記述１５１のサンプルコードが入力される場合の抽出部１１０の動作を示す。
まず、図２の動作記述１５１のサンプルコードから、図４のデータフローグラフ１５３が生成される。そして、抽出部１１０は、処理対象のｎｏｎ−ｌｏｏｐノードとしてＥＸＥ＿Ｂ２を検出する。抽出部１１０は、ＥＸＥ＿Ｂ２ノードの出力変数ａが入力されるノードが、ｌｏｏｐ属性のＬＯＯＰ＿Ｃであると判定し、ＬＯＯＰ＿Ｃをループ記述候補５１３とする。そして、抽出部１１０は、ＥＸＥ＿Ｂ２とＬＯＯＰ＿Ｃをマージする。さらに、抽出部１１０は、ＥＸＥ＿Ｂ２への入力変数ｃがｎｏｎ−ｌｏｏｐ属性のＥＸＥ＿Ｂ１からの出力であると判定し、ＥＸＥ＿Ｂ１とＥＸＥ＿Ｂ２をマージする。ＥＸＥ＿Ｂ１への入力変数ｂがｌｏｏｐ属性のＬＯＯＰ＿Ａからの出力であるため、処理は終了する。
なお、抽出部１１０が、処理対象としてＥＸＥ＿Ｂ１を検出した後、ＥＸＥ＿Ｂ１から検索する場合は、ＥＸＥ＿Ｂ１ノードの出力変数ｃが入力されるノードがＥＸＥ＿Ｂ２ノードであり、ｌｏｏｐノードでないために処理を終了し、ＬＯＯＰ＿Ｃノードはループ記述候補５１３としては抽出されない。
このように、論理記述５１２であるＥＸＥ＿Ｂ２ノードの後に実行されるループ記述５１１のうち最もＥＸＥ＿Ｂ２ノードに近いループ記述５１１であるＬＯＯＰ＿Ｃノードが後ループ記述５３２として抽出される。
【００３６】
図８は、本実施の形態に係る下位検索処理Ｓ３０により出力されるマージデータフローグラフＢ１５３ｂの例である。
図８に示すように、ＬＯＯＰ＿ＣノードにＥＸＥ＿Ｂ１とＥＸＥ＿Ｂ２がマージされ、１つのループ記述５１１となっている。抽出部１１０は、ＥＸＥ＿Ｂ１とＥＸＥ＿Ｂ２との各々の後に実行されるループ記述５１１のうち、最もＥＸＥ＿Ｂ１とＥＸＥ＿Ｂ２との各々に近いループ記述であるＬＯＯＰ＿Ｃノードを後ループ記述５３２として抽出する。
【００３７】
なお、図２の動作記述１５１をＬＯＯＰ＿Ａがないサンプルコードに変更した場合、下位検索処理Ｓ３０では、図８においてＬＯＯＰ＿Ａノードがないデータフローグラフが生成される。また、図２の動作記述１５１をＬＯＯＰ＿Ａがないサンプルコードに変更した場合、上位検索処理Ｓ２０ではループ記述候補５１３として何もヒットしないことになる。
逆に、図２の動作記述１５１をＬＯＯＰ＿Ｃがないサンプルコードに変更した場合、上位検索処理Ｓ２０では、図６においてＬＯＯＰ＿Ｃノードがないデータフローグラフが生成される。また、図２の動作記述１５１をＬＯＯＰ＿Ｃがないサンプルコードに変更した場合、下位検索処理Ｓ３０ではループ記述候補５１３として何もヒットしないことになる。
【００３８】
以上のように、上位検索処理Ｓ２０と下位検索処理Ｓ３０とにより、抽出部１１０は、論理記述５１２をループ記述候補５１３の各々にマージした場合のデータフローグラフをマージデータフローグラフとして生成する。
【００３９】
＜検索結果統合処理Ｓ４０＞
ステップＳ１１４において、抽出部１１０は、検索結果統合処理Ｓ４０を実行する。抽出部１１０は、上位検索処理Ｓ２０と下位検索処理Ｓ３０とを実行し、同一の結果が得られた場合のみ検索結果を削除して、上位検索結果と下位検索結果とを統合する。具体的には、抽出部１１０は、上位検索処理Ｓ２０により得られたマージデータフローグラフＡ１５３ａと、下位検索処理Ｓ３０より得られたマージデータフローグラフＢ１５３ｂとを比較する。抽出部１１０は、マージデータフローグラフＡ１５３ａとマージデータフローグラフＢ１５３ｂとが同一の場合は検索結果を削除して、上位検索結果と下位検索結果とを統合する。
【００４０】
＜回路特性算出処理Ｓ５０＞
ステップＳ１１５において、抽出部１１０は、回路特性算出処理Ｓ５０を実行する。抽出部１１０は、論理記述５１２をループ記述候補５１３の各々にマージした場合の回路の特性を回路特性５１４として算出する。抽出部１１０は、回路特性５１４として、回路のレイテンシ、および、回路が必要とするメモリ容量との少なくともいずれかを算出する。なお、回路が必要とするメモリ容量を回路特性５１４として算出する場合、抽出部１１０は、マージデータフローグラフにおけるノード間の入出力変数の総ビット数を回路特性５１４として算出する。抽出部１１０は、算出した総ビット数を回路特性情報１５４として記憶部１５０に記憶する。具体的には、抽出部１１０はマージデータフローグラフＡ１５３ａとマージデータフローグラフＢ１５３ｂとの各々について、各ノードの入出力変数のビット数の総和を算出する。
【００４１】
図９は、本実施の形態に係る回路特性情報１５４の例を示す図である。
回路特性情報１５４は、候補となるデータフローグラフと、変数の出力元のノードであるＦＲＯＭノードと、変数の出力先のノードであるＴＯノードと、ビット数とを項目として有する。
回路特性情報１５４の１行目は、図６に示すデータフローグラフＡに関する情報である。ＦＲＯＭノードは、ＬＯＯＰ＿ＡとＥＸＥ＿Ｂ１とＥＸＥ＿Ｂ２とがマージされたループ記述５１１である。ＴＯノードは、ＬＯＯＰ＿Ｃである。このとき、ｘが３２ｂｉｔでありＮ個（１００個）と、ａが１６ｂｉｔ（ｓｈｏｒｔ定義）となり、その総和は３２１６ビットとなる。
また、回路特性情報１５４の２行目は、図８に示すデータフローグラフＢに関する情報である。ＦＲＯＭノードは、ＬＯＯＰ＿Ａである。ＴＯノードは、ＥＸＥ＿Ｂ１とＥＸＥ＿Ｂ２とＬＯＯＰ＿Ｃとがマージされたループ記述５１１である。このとき、ｘが３２ｂｉｔ（ｉｎｔ定義）で、Ｎ個（１００個）と、ｂが３２ｂｉｔとなり、その総和は３２３２ビットである。
【００４２】
＜決定処理Ｓ１２０＞
決定処理Ｓ１２０において、決定部１２０は、回路特性５１４に基づいて、ループ記述候補５１３から論理記述５１２とマージするループ記述５１１を決定する。ここで、決定部１２０により決定されたループ記述５１１を決定ループ記述５１５とする。
具体的には、決定部１２０は、記憶部１５０から回路特性情報１５４を取得する。決定部１２０は、回路特性情報１５４を参照し、回路特性５１４が最も効率的な値であるマージデータフローグラフを選択する。たとえば、回路特性５１４が回路のレイテンシである場合は、レイテンシが最も小さいマージデータフローグラフが選択される。また、回路特性５１４が回路のメモリ容量ある場合は、入出力変数のビット総和が最も小さいマージデータフローグラフが選択される。決定部１２０は、選択したマージデータフローグラフにおいて、論理記述５１２とマージされているループ記述５１１を決定ループ記述５１５とする。このように、決定部１２０は、入出力変数の総ビット数が最も少ないマージデータフローグラフにおいて論理記述とマージされているループ記述を論理記述とマージするループ記述とし決定する。
具体例として、決定部１２０は、図９の回路特性情報１５４を取得した場合、総ビット数が最も小さいマージデータフローグラフＡ１５３ａが選択される。そして、決定部１２０は、マージデータフローグラフＡ１５３ａにおいて論理記述５１２であるＥＸＥ＿Ｂ１およびＥＸＥ＿Ｂ２とマージされているＬＯＯＰ＿Ａを決定ループ記述５１５とする。
【００４３】
＜マージ処理Ｓ１３０＞
マージ処理Ｓ１３０において、マージ部１３０は、決定処理Ｓ１２０により決定されたループ記述、すなわち決定ループ記述５１５に論理記述５１２をマージする。決定ループ記述５１５に論理記述５１２をマージした動作記述１５１を変換動作記述１５７とする。上述したように、論理記述５１２とマージするループ記述候補５１３には、前ループ記述５３１と後ループ記述５３２とがある。前マージ処理Ｓ１３１は、マージ部１３０が、論理記述５１２を前ループ記述５３１にマージする処理である。後マージ処理Ｓ１３２は、マージ部１３０が、論理記述５１２を後ループ記述５３２にマージする処理である。
【００４４】
＜前マージ処理Ｓ１３１＞
図１０を用いて、本実施の形態に係る前マージ処理Ｓ１３１について説明する。
前マージ処理Ｓ１３１において、マージ部１３０は、論理記述５１２を前ループ記述５３１にマージする場合、前ループ記述５３１における最後の繰り返し処理の中で論理記述５１２による処理が実行されるように論理記述５１２を前ループ記述５３１にマージする。具体的には、マージ部１３０は、前ループ記述５３１のｆｏｒ文の最後の実行で、マージする論理記述５１２による処理が実行されるように動作記述１５１を変換し、変換動作記述１５７ａを出力する。
【００４５】
ステップＳ３１１において、マージ部１３０は、動作記述１５１の決定ループ記述５１５におけるｆｏｒ文の最後の実行条件を抽出する。
ステップＳ３１２において、マージ部１３０は、ｆｏｒ文の最後の実行条件をｉｆ文に変換する。
ステップＳ３１３において、マージ部１３０は、マージする論理記述部分を、ｆｏｒ文内部のｉｆ文内に移動する。
ステップＳ３１４において、マージ部１３０は、マージ前の論理記述部分を消去する。マージ部１３０は、動作記述１５１を変換した変換動作記述１５７を記憶部１５０に記憶する。
【００４６】
図１１は、本実施の形態に係る前マージ処理Ｓ１３１を実施した際の変換動作記述１５７ａの例である。図１１に点線で示した部分が、論理記述５１２をマージした部分である。変換動作記述１５７ａでは、ＬＯＯＰ＿Ａ内のｆｏｒ文の最後の実行で、ＥＸＥ＿Ｂ１およびＥＸＥ＿Ｂ２が実行されるように変換されている。
【００４７】
＜後マージ処理Ｓ１３２＞
図１２を用いて、本実施の形態に係る後マージ処理Ｓ１３２について説明する。
後マージ処理Ｓ１３２において、マージ部１３０は、論理記述５１２を後ループ記述５３２にマージする場合、後ループ記述５３２における最初の繰り返し処理の中で論理記述５１２による処理が実行されるように論理記述５１２を後ループ記述５３２にマージする。具体的には、マージ部１３０は、後ループ記述５３２のｆｏｒ文の最初の実行で、マージする論理記述５１２による処理が実行されるように動作記述１５１を変換し、変換動作記述１５７ｂを出力する。
【００４８】
ステップＳ３２１において、マージ部１３０は、動作記述１５１の決定ループ記述５１５におけるｆｏｒ文の最初の実行条件を抽出する。
ステップＳ３２２において、マージ部１３０は、ｆｏｒ文の最初の実行条件をｉｆ文に変換する。
ステップＳ３２３において、マージ部１３０は、マージする論理記述部分を、ｆｏｒ文内部のｉｆ文内に移動する。
ステップＳ３２４において、マージ部１３０は、マージ前の論理記述部分を消去する。マージ部１３０は、動作記述１５１を変換した変換動作記述１５７を記憶部１５０に記憶する。
【００４９】
図１３は、本実施の形態に係る後マージ処理Ｓ１３２を実施した際の変換動作記述１５７ｂの例である。図１３に点線で示した部分が、論理記述５１２をマージした部分である。変換動作記述１５７ｂでは、ＬＯＯＰ＿Ｃ内のｆｏｒ文の最初の実行で、ＥＸＥ＿Ｂ１およびＥＸＥ＿Ｂ２が実行されるように変換されている。
【００５０】
前マージ処理Ｓ１３１あるいは後マージ処理Ｓ１３２といった動作記述１５１の変換処理では、マージ部１３０は、一度データフローグラフから抽象木構造に変換し、ソースコードとして変換を行う。
【００５１】
＜高位合成実行処理Ｓ１４０＞
高位合成実行処理Ｓ１４０において、高位合成部１４０は、記憶部１５０から変換動作記述１５７と非機能要件１５２とを取得し、高位合成を実行する。高位合成部１４０は、高位合成の結果として、ＲＴＬ１５５と合成レポート１５６とを出力する。
【００５２】
＊＊＊他の構成＊＊＊
本実施の形態では、変換動作記述に対して通常の高位合成処理を実施した。しかし、この変換動作記述を、より効率的に高位合成を実施することができる既存のツールに入力してもよい。
【００５３】
本実施の形態では、動作記述１５１の具体例として、ソースコードにおける処理について説明した。しかし、ソースコードから生成されるコントロールデータフローグラフ、あるいは抽象木構文といった動作記述１５１に対して、本実施の形態を適用してもよい。
【００５４】
本実施の形態では、決定部は、回路特性情報１５４から最適なマージデータフローグラフを選択した。しかし、決定部は、全ての候補に対して一旦高位合成部による合成を実施後、各モジュールのレイテンシが大きいものをマージ対象から外す処理をしてもよい。モジュールのレイテンシが大きい場合、マージしないほうがレイテンシが小さくなる可能性があるため、このようなレイテンシ制約を与えることで、より適切にマージが可能となる。
【００５５】
また、本実施の形態に係る高位合成装置１００は、ネットワークを介して他の装置と通信する通信装置を有していてもよい。通信装置は、レシーバとトランスミッタとを有する。通信装置は、有線または無線で、ＬＡＮ、インターネット、あるいは電話回線といった通信網に接続している。通信装置は、具体的には、通信チップまたはＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）である。通信装置は、データを通信する通信部である。レシーバは、データを受信する受信部である。トランスミッタは、データを送信する送信部である。本実施の形態に係る高位合成装置１００は、動作記述および非機能要件を、通信装置を介して取得してもよい。また、本実施の形態に係る高位合成装置１００は、変換動作記述を、通信装置を介して他の装置に送信してもよい。
【００５６】
本実施の形態では、抽出部１１０と、決定部１２０と、マージ部１３０と、高位合成部１４０の機能がソフトウェアで実現される。しかし、変形例として、抽出部１１０と、決定部１２０と、マージ部１３０と、高位合成部１４０の機能がハードウェアで実現されてもよい。
【００５７】
図１４を用いて、本実施の形態の変形例に係る高位合成装置１００の構成について説明する。
図１４に示すように、高位合成装置１００は、処理回路９０９、入力インタフェース９３０、および出力インタフェース９４０といったハードウェアを備える。
【００５８】
処理回路９０９は、上述した抽出部１１０と、決定部１２０と、マージ部１３０と、高位合成部１４０の機能および記憶部１５０を実現する専用の電子回路である。処理回路９０９は、具体的には、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ、ＡＳＩＣ、または、ＦＰＧＡである。ＧＡは、Ｇａｔｅ  Ａｒｒａｙの略語である。ＡＳＩＣは、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略語である。ＦＰＧＡは、Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略語である。
【００５９】
抽出部１１０と、決定部１２０と、マージ部１３０と、高位合成部１４０の機能は、１つの処理回路９０９で実現されてもよいし、複数の処理回路９０９に分散して実現されてもよい。
【００６０】
別の変形例として、抽出部１１０と、決定部１２０と、マージ部１３０と、高位合成部１４０の機能がソフトウェアとハードウェアの組合せで実現されてもよい。すなわち、高位合成装置１００の一部の機能が専用のハードウェアで実現され、残りの機能がソフトウェアで実現されてもよい。
【００６１】
高位合成装置１００のプロセッサ９１０、記憶装置９２０、および、処理回路９０９を、総称して「プロセッシングサーキットリ」という。つまり、高位合成装置１００の構成が図１および図１４のいずれに示した構成であっても、抽出部１１０と、決定部１２０と、マージ部１３０と、高位合成部１４０の機能および記憶部１５０は、プロセッシングサーキットリにより実現される。
【００６２】
「部」を「工程」または「手順」または「処理」に読み替えてもよい。また、「部」の機能をファームウェアで実現してもよい。
【００６３】
＊＊＊本実施の形態の効果の説明＊＊＊
本実施の形態に係る高位合成装置１００は、動作記述中のループ記述の前後にあるループ記述ではない論理記述を抽出する抽出部を備える。また、本実施の形態に係る高位合成装置１００は、ループ記述ではない論理記述を、機能を変更しないで、ひとつのループ記述へマージするマージ部を備える。よって、本実施の形態に係る高位合成装置１００よれば、動作記述のモジュール分割を、自動かつ適切に実施することができ、短時間で最適な回路の設計が可能になる。
【００６４】
本実施の形態に係る高位合成装置１００は、ループ記述ではない論理記述をループ記述へマージする際に、レイテンシ制約、あるいはメモリ容量を基準にマージするループ記述を選択する。よって、本実施の形態に係る高位合成装置１００よれば、最適なモジュール分割を自動的に実現できる。
【００６５】
本実施の形態に係る高位合成装置１００は、動作記述からデータフローグラフを生成し、ループ記述ではないノードとループ記述の複数の組み合わせが存在する際に、たとえば、データフローグラフ上で入出力の総ビット数が最も小さくなるようなマージの組み合わせを抽出する。また、本実施の形態に係る高位合成装置１００は、動作記述からデータフローグラフを生成し、ループ記述ではないノード群を一つのノードとしてマージする。よって、本実施の形態に係る高位合成装置１００よれば、総ビット数が最も小さくなるといった最適な候補を抽出することができる。また、本実施の形態に係る高位合成装置１００よれば、総ビット数が最も少なくなるような統合を行うことで、モジュール間のメモリ容量を削減する効果がある。
【００６６】
実施の形態１では、高位合成装置１００の各部が独立した機能ブロックとして高位合成装置１００を構成している。しかし、上述した実施の形態のような構成でなくてもよく、高位合成装置１００の構成は任意である。高位合成装置１００の機能ブロックは、上述した実施の形態で説明した機能を実現することができれば、任意である。これらの機能ブロックを、他のどのような組み合わせ、あるいは任意のブロック構成で、高位合成装置１００を構成しても構わない。
また、高位合成装置１００は、１つの装置でなく、複数の装置から構成されたシステムでもよい。
【００６７】
実施の形態１について説明したが、この実施の形態のうち、複数の部分を組み合わせて実施しても構わない。あるいは、この実施の形態のうち、１つの部分を実施しても構わない。その他、この実施の形態を、全体としてあるいは部分的に、どのように組み合わせて実施しても構わない。
なお、上述した実施の形態は、本質的に好ましい例示であって、本発明、その適用物および用途の範囲を制限することを意図するものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【００６８】
１００  高位合成装置、１１０  抽出部、１２０  決定部、１３０  マージ部、１４０  高位合成部、１５０  記憶部、１５１  動作記述、１５２  非機能要件、１５３  データフローグラフ、１５３ａ  マージデータフローグラフＡ、１５３ｂ  マージデータフローグラフＢ、１５４  回路特性情報、１５５  ＲＴＬ、１５６  合成レポート、１５７，１５７ａ，１５７ｂ  変換動作記述、５１１  ループ記述、５１２  論理記述、５１３  ループ記述候補、５１４  回路特性、５１５  決定ループ記述、５３１  前ループ記述、５３２  後ループ記述、６１０  高位合成方法、６２０  高位合成プログラム、９０９  処理回路、９１０  プロセッサ、９２０  記憶装置、９２１  メモリ、９２２  補助記憶装置、９３０  入力インタフェース、９４０  出力インタフェース、Ｓ１００  高位合成処理、Ｓ１１０  抽出処理、Ｓ１２０  決定処理、Ｓ１３０  マージ処理、Ｓ１４０  高位合成実行処理、Ｓ１０  データフローグラフ生成処理、Ｓ２０  上位検索処理、Ｓ３０  下位検索処理、Ｓ４０  検索結果統合処理、Ｓ５０  回路特性算出処理、Ｓ１３１  前マージ処理、Ｓ１３２  後マージ処理。
【図１】
0006545406.tif 000002
【図２】
0006545406.tif 000003
【図３】
0006545406.tif 000004
【図４】
0006545406.tif 000005
【図５】
0006545406.tif 000006
【図６】
0006545406.tif 000007
【図７】
0006545406.tif 000008
【図８】
0006545406.tif 000009
【図９】
0006545406.tif 000010
【図１０】
0006545406.tif 000011
【図１１】
0006545406.tif 000012
【図１２】
0006545406.tif 000013
【図１３】
0006545406.tif 000014
【図１４】
0006545406.tif 000015