(57)【特許請求の範囲】
【請求項１】
電子回路最適化装置のシミュレーション手段が、機能を記述した機能記述データのシミュレーションを実行し、該シミュレーションにおける前記機能記述データの各コードの実行回数を含むプロファイル情報を得るシミュレーション工程と、
前記電子回路最適化装置のグラフ生成手段が、前記機能記述データを解析して分岐点と処理とに分割し、１または一連の処理が分岐点で分岐するフローグラフを生成するグラフ生成工程と、
前記電子回路最適化装置の算出手段が、前記プロファイル情報中の前記各コードの実行回数に基づいて、前記フローグラフにおける前記分岐点の各々での分岐確率を算出し、該分岐確率に基づいて前記処理のそれぞれの実行確率を算出する算出工程と、
前記電子回路最適化装置の決定手段が、前記処理のそれぞれの実行確率及び電子回路の設計条件に基づいて、各処理を実行する電子回路を生成する際に優先すべき最適化条件を処理毎に決定する決定工程と、
前記電子回路最適化装置の回路生成手段が、前記最適化条件に基づいて電子回路を生成する回路生成工程とを備えることを特徴とする電子回路最適化方法。
【請求項２】
前記決定工程では、前記設計条件に基づいて判定値を算出し、該判定値と前記実行確率とを比較することで、前記最適化条件を決定することを特徴とする請求項１記載の電子回路最適化方法。
【請求項３】
前記決定工程では、前記実行確率が前記判定値以上であれば、前記最適化条件を高速化に決定することを特徴とする請求項２記載の電子回路最適化方法。
【請求項４】
前記決定工程では、前記実行確率が前記判定値未満であれば、前記最適化条件を小面積化または低消費電力化に決定することを特徴とする請求項２記載の電子回路最適化方法。
【請求項５】
前記プロファイル情報は、前記機能記述データのコードカバレッジを含むことを特徴とする請求項１記載の電子回路最適化方法。
【請求項６】
前記設計条件は、最大ゲート数、動作周波数、消費電力、及び電子回路の実装に使用されるトランジスタのライブラリ情報のうちの少なくとも１つを含むことを特徴とする請求項１記載の電子回路最適化方法。
【請求項７】
機能を記述した機能記述データのシミュレーションを実行し、該シミュレーションにおける前記機能記述データの各コードの実行回数を含むプロファイル情報を得るシミュレーション手段と、
前記機能記述データを解析して分岐点と処理とに分割し、１または一連の処理が分岐点で分岐するフローグラフを生成するグラフ生成手段と、
前記プロファイル情報中の前記各コードの実行回数に基づいて、前記フローグラフにおける前記分岐点の各々での分岐確率を算出し、該分岐確率に基づいて前記処理のそれぞれの実行確率を算出する算出手段と、
前記処理のそれぞれの実行確率及び電子回路の設計条件に基づいて、各処理を実行する電子回路を生成する際に優先すべき最適化条件を処理毎に決定する決定手段と、
前記最適化条件に基づいて電子回路を生成する回路生成手段とを備えることを特徴とする電子回路最適化装置。
【請求項８】
機能を記述した機能記述データのシミュレーションを実行し、該シミュレーションにおける前記機能記述データの各コードの実行回数を含むプロファイル情報を得るシミュレーション工程と、
前記機能記述データを解析して分岐点と処理とに分割し、１または一連の処理が分岐点で分岐するフローグラフを生成するグラフ生成工程と、
前記プロファイル情報中の前記各コードの実行回数に基づいて、前記フローグラフにおける前記分岐点の各々での分岐確率を算出し、該分岐確率に基づいて前記処理のそれぞれの実行確率を算出する算出工程と、
前記処理のそれぞれの実行確率及び電子回路の設計条件に基づいて、各処理を実行する電子回路を生成する際に優先すべき最適化条件を処理毎に決定する決定工程と、
前記最適化条件に基づいて電子回路を生成する回路生成工程とをコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子回路の最適化手法に関する。
【背景技術】
【０００２】
図１７に、従来技術での電子回路生成の全体フローを示す。
図１７において、１０１は、電子回路の機能を記述した機能記述データである。従来から、電子回路の設計においてはＶＨＤＬやＶｅｒｉｌｏｇといったＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）を使用した設計が行われている。また、近年はＣ言語による抽象度の高いレベルでの機能記述による電子回路の設計が行われている。機能記述データ１０１は、これらＨＤＬやＣ言語により記述されている。
【０００３】
１０２は、機能記述データ１０１に記述された電子回路の機能が要求仕様を満たしているかを検証するためのテストベクタである。１０３は、シミュレータである。シミュレータ１０３は、機能記述データ１０１及びテストベクタ１０２を入力として電子回路に係るシミュレーションを実行する。１０４で、テストベクタ１０２による検証結果の判定を行う。検証結果が不合格である場合には、機能記述データ１０１の修正等が行われ、再度シミュレータ１０３によるシミュレーションが実行される。
【０００４】
１０５は、コードカバレッジである。コードカバレッジには、実行したシミュレーションにおいて機能記述データに記述された機能の各コードが実行された回数が記録される。コードカバレッジは、それを取得することにより機能記述データに記述されたすべてのコードが実行されたか否かを知ることができ、機能記述データの品質を測る指標の一つとして用いられる。コードカバレッジは、シミュレーションを実行することにより取得される機能記述データの動的解析によるプロファイル情報の一つである。
【０００５】
１０６では、コードカバレッジ１０５を基に機能記述データ１０１の検証が十分に行われたか否かの判定を行う。一般的には、機能記述データ１０１に記述されたすべてのコードが実行されていることが判定条件とされる。機能記述データ１０１の検証が十分に行われていない場合には、テストベクタ１０２を追加し再度シミュレータ１０３によるシミュレーションを実行する。機能記述データ１０１の検証が十分に行われた場合には、電子回路の生成を行う。
【０００６】
１０７は、電子回路設計条件である。電子回路設計条件１０７には、一般的に、電子回路の動作周波数、電子回路生成時の制約条件である最大ゲート規模、電子回路を実装する際に使用するライブラリ情報が含まれている。１０９は、最適化指示情報である。ここで電子回路の最適化とは、電子回路の高速化、低消費電力化、小面積化といった項目を指す。図１７に示す電子回路生成において、これらの最適化に係る最適化指示情報１０９は、設計者が手作業により与えている。
【０００７】
１１０は、電子回路生成ツールである。電子回路生成ツール１１０は、一般には合成ツールと呼ばれるものであり、ＨＤＬから合成を行うものを論理合成ツール、Ｃ言語から合成を行うものを動作合成ツールと呼んでいる。電子回路生成ツール１１０は、電子回路設計条件１０７及び最適化指示情報１０９を入力として、機能記述データ１０１から電子回路１１１を生成する。
【０００８】
近年、シミュレーションにより取得したコードカバレッジを機能記述データの品質を測る指標として用いるだけでなく、電子回路の最適化に利用する手法が提案されている（例えば、特許文献１や特許文献２）。特許文献１には、取得したコードカバレッジを基に、機能記述データの全コードのうち実行されていないコードを冗長であると判断して記述を削除又はコメントアウトすることで、電子回路の最適化を行う方法が記載されている。また、特許文献２には、取得したコードカバレッジを基に、機能記述データの全コードのうち実行されていないコードを削除、また、新たにコードカバレッジを取得し削除したコードが実行されている場合には復活させる方法が記載されている。これらの手法により、機能記述データにおける冗長部分が削除され、電子回路生成ツールによって、より小さな電子回路が生成される。その結果として、配置配線後の回路面積を小さくできるといった効果がある。
【０００９】
また、ソフトウェア開発においては高級言語であるＣ言語により機能を記述し、コンパイラにより機能記述データから実行形式のオブジェクトへ変換することが行われている。コンパイラによるコンパイル時にソフトウェアの最適化を行う手法として、Ｃ言語で記述された機能記述データを仮実行し、実行結果を基に最適化を行う手法が提案されている（例えば、特許文献３、特許文献４）。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００４−３５５１３０号公報
【特許文献２】特開２００８−１０２７６８号公報
【特許文献３】特開平１１−１４９３８０号公報
【特許文献４】特開２００１−２８２５４９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、前記特許文献１及び前記特許文献２に記載の技術では、機能記述データの各コードのうち実行されていないコードを削除するだけである。よって、機能記述データにおいて少なくとも１回以上実行されたコード記述に関しては、実行頻度の高低にかかわらず同じ条件で電子回路の生成が行われることになる。このため、ほとんど実行されないコードに対し高速化が図られ、結果として消費電力が増大することがある。また、ほとんど実行されないコードの高速化のために電子回路の配線が長くなったり、実装面積が大きくなったりすることで、結果として頻繁に実行されるコードの高速化において満足な結果が得られないことがある。
【００１２】
また、前記特許文献３に記載の技術では、機能記述データの仮実行を行い動的に解析を行いながら最適化を行っているが、仮実行を行うコンパイラとその結果を基に実行オブジェクトの変換を行うコンパイラは同一のものである。前記特許文献４に記載の技術においても、取得したプロファイル情報を実行オブジェクトの変換を行ったものと同一のコンパイラに対し入力を行う。このため、一般的に機能記述データの実行を行うシミュレータと、機能記述データから電子回路を生成するツールが分かれている電子回路の設計環境においては適用が困難である。
【課題を解決するための手段】
【００１３】
本発明に係る電子回路最適化方法は、電子回路最適化装置のシミュレーション手段が、機能を記述した機能記述データのシミュレーションを実行し、該シミュレーションにおける前記機能記述データの各コードの実行回数を含むプロファイル情報を得るシミュレーション工程と、前記電子回路最適化装置のグラフ生成手段が、前記機能記述データを解析して分岐点と処理とに分割し、１または一連の処理が分岐点で分岐するフローグラフを生成するグラフ生成工程と、前記電子回路最適化装置の算出手段が、前記プロファイル情報中の前記各コードの実行回数に基づいて、前記フローグラフにおける前記分岐点の各々での分岐確率を算出し、該分岐確率に基づいて前記処理のそれぞれの実行確率を算出する算出工程と、前記電子回路最適化装置の決定手段が、前記処理のそれぞれの実行確率及び電子回路の設計条件に基づいて、各処理を実行する電子回路を生成する際に優先すべき最適化条件を処理毎に決定する決定工程と、前記電子回路最適化装置の回路生成手段が、前記最適化条件に基づいて電子回路を生成する回路生成工程とを備えることを特徴とする。
【発明の効果】
【００１４】
本発明によれば、機能記述データの解析によるプロファイル情報に基づいて各コードの最適化条件を決定し電子回路の生成を行うことができ、より良好な状態で動作速度・実装面積・消費電力の平衡を図ることができる。
【図面の簡単な説明】
【００１５】
【図１】第１の実施形態における電子回路生成の流れを示す図である。
【図２】第１の実施形態における最適化処理手順を示すフローチャートである。
【図３】第１の実施形態における機能記述データの例を示す図である。
【図４】第１の実施形態における分岐点抽出の例を示す図である。
【図５】第１の実施形態におけるフローグラフの例を示す図である。
【図６】第１の実施形態におけるフローグラフ縮退処理を示すフローチャートである。
【図７】第１の実施形態における縮退処理後のフローグラフの例を示す図である。
【図８】第１の実施形態におけるプロファイル情報の例を示す図である。
【図９】第１の実施形態における分岐確率を含むフローグラフの例を示す図である。
【図１０】第１の実施形態における電子回路設計条件の例を示す図である。
【図１１】第１の実施形態における最適化指示情報の出力ファイル例を示す図である。
【図１２】第１の実施形態における最適化指示情報の出力ファイルの他の例を示す図である。
【図１３】第２の実施形態における最適化処理手順を示すフローチャートである。
【図１４】第２の実施形態におけるループ展開処理を示すフローチャートである。
【図１５】第２の実施形態におけるループ展開処理後の機能記述データの例を示す図である。
【図１６】第２の実施形態における最適化指示文挿入後の機能記述データの例を示す図である。
【図１７】従来技術での電子回路生成の流れを示す図である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施形態を図面に基づいて説明する。なお、以下に説明する実施形態は一例に過ぎず、本発明は図示された構成等に限定されるものではない。
【００１７】
（第１の実施形態）
本発明の第１の実施形態について説明する。
図１は、第１の実施形態に係る電子回路最適化を含む電子回路生成の全体フローを示す図である。図１において、１０１〜１０６の構成や動作は、図１７に示したものと同様である。１０１は、電子回路の機能を記述した機能記述データである。１０２は、機能記述データ１０１の検証に用いるテストベクタである。１０３はシミュレータである。１０４は、テストベクタ１０２による検証結果の判定を行う手段である。１０５は、シミュレーションの実行により取得したコードカバレッジである。１０６は、機能記述データ１０１の検証が十分であるか否かの判定を行う手段である。
【００１８】
１０７は、電子回路設計条件である。電子回路設計条件１０７には、例えば、電子回路の動作周波数、電子回路生成時の制約条件である最大ゲート数、消費電力、電子回路の実装に使用されるトランジスタのライブラリ情報のうちの少なくとも１つが含まれる。１０８は、電子回路最適化ツールである。電子回路最適化ツール１０８についての詳細な説明は、図２に示すフローチャートを用い後述する。電子回路最適化ツール１０８は、コードカバレッジ１０５と電子回路設計条件１０７を入力とし、最適化指示情報１０９を生成する。１１０は、電子回路生成ツールである。電子回路生成ツール１１０は、最適化指示情報１０９の指示に従い機能記述データ１０１から電子回路１１１を生成する。
【００１９】
図２は、第１の実施形態における電子回路最適化ツール１０８の処理手順を示すフローチャートである。電子回路の最適化処理が開始されると、まずステップＳ２００にて、ツール１０８は、機能記述データ１０１の構文解析を行う。図３に機能記述データ１０１の一例を示す。構文解析では、コメント文の排除とデリミタによるトークンの分割と解釈を行い、機能記述を１コード毎に分割する。図３に示した例では、２行目がコメント文であり排除される。また、本例では１行につき１コードの記述を行っているが、１行に複数コード、又は複数行で１コードの記述がなされていることもある。例えば、図３に示した例の５行目と６行目は、
Process2; Condition_B = true;
のように１行に記述される場合がある。この場合には、ツール１０８が、１行につき１コードへの変換を行う。
【００２０】
次に、ステップＳ２０１にて、ツール１０８は、解釈を行った機能記述データ１０１から複数の条件判断を含む分岐文を基に分岐点の抽出を行い、機能記述データ１０１を分岐点と処理部に分割しラベルを付けていく。図４に図３に示した機能記述データから分岐点抽出を行い、ラベル付けを行った例を示す。また、分岐文として解釈される構文一覧を表１に示す。
【００２１】
【表１】
0005843449.tif 000002
【００２２】
例えば、ツール１０８は、図３に示した例の
４行目、    if (Condition_A) [
７行目、    ] else [
１３行目、  ]
を１つのif構文内での処理であると解釈し、Condition_Aで表されている分岐条件を分岐点として抽出を行う。また、ツール１０８は、同時にラベル“分岐１”を付ける。
【００２３】
また、図３に示した例の５行目は、表１に示される構文とは一致しないため、ツール１０８は処理部として解釈を行う。また、ツール１０８は、同時にラベル“処理２”を付ける。続く６行目も、表１に示される構文とは一致しないため、ツール１０８は処理部として解釈を行う。ここで、ラベル“処理２”との間に分岐が存在しないため、ツール１０８は、６行目はラベル“処理２”からの一連の処理であると解釈し、同一のラベル“処理２”を付ける。
【００２４】
次に、ステップＳ２０２にて、ツール１０８は、ステップＳ２０１において抽出した分岐点を基にフローグラフの作成を行う。図３に例示した機能記述データから作成したフローグラフを図５に示す。フローグラフは、ステップＳ２０１において付けたラベルを使用して作成される。例えば、図３に例示した機能記述データに対して付けたラベル“分岐１”は、図５に示す要素５０２にあたり、ラベル“処理２”は、図５に示す要素５０３にあたる。なお、図５に示す他の各要素についても、例示した機能記述データに対して付けたラベルのそれぞれに対応している。
【００２５】
次に、ステップＳ２０３にて、ツール１０８は、ステップＳ２０２において作成したフローグラフの縮退を行う。図６に、ステップＳ２０３で行うフローグラフ縮退の処理手順を示す。ステップＳ６００にて、ツール１０８は、ループ処理に係る分岐があるか否かの判定を行う。ループ処理に係る分岐がある場合には、ステップＳ６０１にて、ツール１０８は、ループ内にgoto文等による処理のジャンプがあるか否かの判定を行う。goto文等による処理のジャンプがある場合には、ツール１０８は、縮退処理を実行せずに終了する。一方、goto文等による処理のジャンプがない場合には、ステップＳ６０３にて、ツール１０８は、ループ前後の処理とループ内の処理を１つのシーケンシャルな処理とみなしてフローグラフの縮退を行う。
【００２６】
また、ステップＳ６００での判定の結果、ループ処理に係る分岐がない場合には、ステップＳ６０２にて、ツール１０８は、分岐点における分岐条件が静的に固定されているか否かの判定を行う。分岐条件が静的に固定されている場合には、ツール１０８は、分岐前の処理と分岐後に実行される処理をシーケンシャルな一連の処理とみなしてフローグラフの縮退を行う。一方、分岐条件が静的に固定されていない場合には、ツール１０８は、縮退処理を実行せずに終了する。
【００２７】
本実施形態で、ループ前後の処理とは、図５に示したフローグラフにおいて分岐２（５０５）の前後の処理３（５０４）及び処理５（５０７）を指し、図４に示した機能記述データでは、８行目の処理３及び１２行目の処理５である。ループ内の処理とは、図５に示した処理４（５０６）を指し、図４に示した機能記述データでは、１０行目の処理４である。また、図５に示した例において、分岐５（５１３）の前後の処理８（５１２）及び処理１０（５１５）がループ前後の処理であり、処理９（５１４）がループ内の処理である。
【００２８】
また、本実施形態で、分岐条件が静的に固定されているとは、図５に示したフローグラフにおいて分岐３（５０８）の前の処理２（５０３）を指す。図４に示した機能記述データにおいて、５行目及び６行目の処理２では、１４行目の分岐３の条件をtrueに固定している。これにより、処理２を実行した後には必ず処理６が実行される。このため、ツール１０８は、処理２と処理６がシーケンシャルな一連の処理であるとみなし、フローグラフの縮退を行う。
【００２９】
図７に縮退処理後のフローグラフを示す。図７に示すフローグラフは、図５に示したフローグラフに対して縮退処理を行ったものである。図７に示すフローグラフでは、図５に示したフローグラフでの分岐２（５０５）及び処理４（５０６）のグラフが縮退され、処理４（７０５）の一つの処理で表されていることがわかる。同様に、図７に示すフローグラフでは、図５に示したフローグラフでの分岐５（５１３）及び処理９（５１４）のグラフが縮退され、処理９（７１２）の一つの処理で表されていることがわかる。また、図５に示したフローグラフでの処理２（５０３）は分岐３（５０８）へ入力されていたのが、図７に示すフローでの処理２（７０３）は、処理６（７０８）へ入力されていることがわかる。
【００３０】
次に、ステップＳ２０４にて、ツール１０８は、プロファイル情報とステップＳ２０３において作成されたフローグラフを基に各分岐点での分岐確率を計算する。ここで、プロファイル情報は、機能記述データのコードカバレッジ、機能カバレッジ、データ依存性、データ局所性の少なくとも１つ以上を含む。また、本実施形態において、分岐確率とは各分岐点での分岐条件の発生確率である。なお、本実施形態では、プロファイル情報として機能記述データ１０１のコードカバレッジを使用する。そのプロファイル情報の例を図８に示す。
【００３１】
例えば、図８に示す例において、４行目のif文に着目する。このif文は、図４に示した例において分岐１として識別されている。分岐１の分岐条件により、それぞれ処理２と処理３が実行される。図８に示す例において、５行目から６行目が処理２にあたり、８行目が処理３にあたる。図８に示すように、分岐１は１０回実行されている。また、処理２は３回実行されており、処理３は７回実行されている。これにより、分岐１において分岐条件が真になる確率は３０％、偽になる確率は７０％となる。
【００３２】
このようにして得られる各分岐点での分岐確率の計算結果をフローグラフへ反映する。図９に、図７に示したフローグラフに対して分岐確率を反映させた例を示す。例えば、図９に示す例において、分岐１（９０２）に対し、真になる確率３０％と偽になる確率７０％が記録されている。
【００３３】
ステップＳ２０５にて、ツール１０８は、図９に示した分岐確率計算後のフローグラフから、各処理の実行確率を計算する。本実施形態において実行確率とは、その処理が実行される割合を示す。例えば、処理１はプログラムの起動後に必ず実行されるので、その実行確率は１００％となる。また、分岐１後の処理２及び処理３は、入れ子やgoto文等による複雑な処理を含まない単純分岐であるので、その実行確率は分岐確率と一致しそれぞれ３０％と７０％になる。例示した機能記述データに係る各処理の実行確率を表２に示す。
【００３４】
【表２】
0005843449.tif 000003
【００３５】
ステップＳ２０６にて、ツール１０８は、電子回路設計条件１０７を基に、各処理から電子回路を生成する際の最適化条件を決定するための判定値を算出する。本実施形態においては、判定値以上の実行確率を持つ処理は電子回路を生成する際に高速化を優先するものとし、判定値以下の実行確率を持つ処理は電子回路を生成する際に小面積化を優先するものとする。図１０に電子回路設計条件１０７の例を示す。本実施形態では、電子回路設計条件１０７として電子回路の動作周波数、電子回路への実装時に使用されるライブラリ情報、電子回路設計時の制約条件となる最大ゲート規模数を用いる。このように、本実施形態における設計条件としては、最大ゲート数、動作周波数、消費電力、電子回路の実装に使用されるトランジスタのライブラリ情報の少なくとも１つ以上を含む。
【００３６】
ここで、動作周波数やゲート規模数は、機能記述データ１０１の複雑度やコード行数により左右される項目である。本実施形態では、簡易的にゲート規模数はコード行数に比例し、動作周波数はコード行数に反比例するものとして説明を行う。動作周波数Ｆを満たすコード行数ＫFは、ＫF＝（ＰF／Ｆ）と表され、ゲート規模数Ｇを満たすコード行数ＫGは、ＫG＝（ＰG×Ｇ）と表される。動作周波数及びゲート規模数を同時に満たすコード行数Ｋは、Ｋ＝（ＰFＰG／Ｆ）×Ｇと表すことができる。ここで、ＰGとＰFは電子回路の実装を行うライブラリ毎に決まる係数である。実際のコード行数をｋとし前述の数式より得られるコード行数Ｋとの割合から判定値を算出する。
【００３７】
例えば、実際のコード行数と算出したコード行数の差が１０％以内であれば、動作周波数及びゲート規模数の両者を満たすことが可能であるため５０％を判定値とする。また、実際のコード行数が算出したコード行数に対し１０％以上少ない場合は、動作周波数及びゲート規模数の両者を容易に満たすことが可能であると判断し、３０％を判定値とする。実際のコード行数が算出したコード行数に対し１０％以上多い場合は、７０％を判定値とする。本実施形態では、実際のコード行数と算出したコード行数がほぼ一致するものとし、５０％を判定値とするものとして説明を進める。
【００３８】
次に、ステップＳ２０７にて、ツール１０８は、ステップＳ２０６において求めた判定値とステップＳ２０５において求めた各処理の実行確率に従って、最適化条件を決定する。表３に５０％を判定値として決定した各処理に係る回路の最適化条件を示す。
【００３９】
【表３】
0005843449.tif 000004
【００４０】
例えば、表３において処理１は高速化を行うと決定している。これは、表２において処理１の実行確率が１００％であるからである。また、処理２は小面積化を行うと決定している。処理２の実行確率が３０％であるからである。
【００４１】
ステップＳ２０８にて、ツール１０８は、ステップＳ２０７において決定した最適化条件を最適化指示情報１０９としてファイル出力を行う。図１１に、最適化指示情報を出力したファイル例を示す。例えば、処理１に対する最適化指示は高速化であり、処理２に対する最適化指示は小面積化である。これをファイルへ出力すると、図１１に示す１行目及び２行目になる。
【００４２】
以上説明したように、第１の実施形態によれば、機能記述データに係るシミュレーション実行により取得したプロファイル情報等に基づいて、各処理の最適化条件を決定し電子回路の生成を行うことができる。これにより、より良好な状態で最適化された、動作速度・実装面積・消費電力の平衡を図った電子回路の生成が可能となる。例えば、プロファイル情報としてコードカバレッジを使用することで、実行頻度に応じて優先すべき最適化条件を与え細かな最適化を行うことが可能となる。
【００４３】
本実施形態では、最適化指示情報として高速化優先及び小面積化優先を使用したが、高速化優先と低消費電力化優先に置き換えてもよい。また、電子回路生成に使用するライブラリを指示してもよい。
図１２に例示するように、低Ｖｔ（低閾値のトランジスタ）のライブラリ及び高Ｖｔ（高閾値のトランジスタ）のライブラリを指示することにより高速性と消費電力をより良好に満たす回路を生成することが可能である。例えば、例示した機能記述データでの処理１に対しては、低Ｖｔのライブラリの使用を指示することにより高速化を行うことが可能である。
また、複数の指示を組み合わせることも可能である。例えば、例示した機能記述データでの処理１に対して、図１１に示した１行目の高速化指示と図１２に示した低Ｖｔのライブラリの使用指示を同時に行うことも可能である。
【００４４】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。
図１３は、第２の実施形態における電子回路最適化ツール１０８の処理手順を示すフローチャートである。図１３に示すステップＳ２００〜Ｓ２０７の各処理は、図２に示したステップＳ２００〜Ｓ２０７の各処理と同様である。また、第２の実施形態においても、第１の実施形態と同様に図３に示した機能記述データを一例に説明する。
【００４５】
第２の実施形態では、ステップＳ１３０８にて、ツール１０８は、機能記述データ１０１の最適化を実施する。ステップＳ１３０８での処理は、機能記述データ１０１内のすべての処理に対して実行される。本実施形態では、ループ処理の高速化を例に説明を行う。ループ処理の高速化としては、ループの展開が一般的である。図１４に、ステップＳ１３０８で行うループ展開処理のフローチャートを示す。
【００４６】
ステップＳ１４００にて、ツール１０８は、対象の処理の実行確率が判定値以上であるか否かの判定を行う。実行確率が判定値以下の処理であれば、ツール１０８は、この対象の処理についてのループ展開処理を終了する。ここで判定値は、第１の実施形態と同様に求められるものであり、以下では５０％を判定値とするものとして説明を進める。例えば、例示した機能記述データでの処理２は、表２に示したように実行確率が３０％であり判定値以下であるので、処理２についてはステップＳ１４００での判定によりループ展開処理を終了する。
【００４７】
次に、ステップＳ１４０１にて、ツール１０８は、対象の処理がループ内の処理であるか否かの判定を行う。ループ内の処理でなければ、ツール１０８は、この対象の処理についてのループ展開処理を終了する。ループ内の処理であるか否かの判定は、フローグラフ縮退処理（Ｓ２０３）時の情報を基に行われる。例えば、図５に示したフローグラフにおいて、分岐２（５０５）をループの分岐、処理４（５０６）をループ内の処理と判断してフローグラフの縮退を行っているが、この情報を基にツール１０８はループ内の処理であるか否かの判定を行う。例えば、例示した機能記述データでの処理１は、表２に示したように実行確率が１００％であるが、ループ内の処理ではないので、処理１についてはステップＳ１４０１での判定によりループ展開処理を終了する。一方、例示した機能記述データでの処理４は、表２に示したように実行確率が７０％であり、かつループ内の処理であるので、処理４については次のステップＳ１４０２へ進む。
【００４８】
次に、ステップＳ１４０２にて、ツール１０８は、ループ回数が固定か否かの判定を行うとともに、ループ回数が展開を行うのに現実的な回数であるか否かの判定を行う。本実施形態では、例えば４回以下を展開するのに現実的なループ回数として判定を行う。本実施形態において、ループの分岐は、図５に示したフローグラフで分岐２（５０５）と分岐５（５１３）の２箇所に存在している。
【００４９】
図３に示した機能記述データにおいて、分岐２（５０５）のループ回数は、９行目のCONSTANTで指定されている。CONSTANTは、１行目のdefine文で値が指定されているので、分岐２（５０５）のループ回数は固定となる。また、回数は４回であり現実的な回数と判定される。これにより、分岐２（５０５）により実行されるループ内の処理である処理４（５０６）については、次のステップＳ１４０３へ進む。
【００５０】
一方、分岐５（５１３）のループ回数は、２３行目のvariableで指定されている。variableは、２２行目でunsigned int型の変数として宣言されており、値が固定されていない変数である。これにより、分岐５（５１３）により実行されるループ内の処理である処理９（５１４）については、ステップＳ１４０２での判定によりループ展開処理を終了する。
【００５１】
次に、ステップＳ１４０３にて、ツール１０８は、対象の処理についてgoto文等による制御の移動がないかどうかの判定を行う。goto文等による制御の移動がある場合には、ツール１０８は、この対象の処理についてのループ展開処理を終了する。例えば、図５に示したフローグラフでの分岐２（５０５）のループ内で実行される処理４（５０６）にはgoto文等が存在しないため、処理４についてはさらに最適化処理を進める。
【００５２】
次に、ステップＳ１４０４にて、ツール１０８は、対象の処理についてサブルーチンコールがないかどうかの判定を行う。サブルーチンがある場合には、ツール１０８は、この対象の処理についてのループ展開処理を終了する。ここで、図５に示したフローグラフでの処理４（５０６）にはサブルーチンコールがないものとして、さらに説明を続ける。
【００５３】
ステップＳ１４０５にて、ツール１０８は、対象の処理についてループ展開を実行し、ファイルへの修正を行う。図１５にループ展開処理後の機能記述データを示す。図１５に示す機能記述データの処理４は、図３に示した機能記述データの１０行目にあたる処理である。これを展開すると、図１５に示す例での９行目から１２行目の処理になる。
【００５４】
また、ループ処理の展開を行うと同時に、ラベルの付け替えを実施する。例えば、ループ処理の展開によりfor文が削除されるので、削除されたfor文に対応する分岐ラベルを削除する。例えば、図４に示した例での９行目のラベル“分岐２”が、図１５に示す例では削除されている。また、例えば展開後のループ内の処理に対して展開前のループ内の処理と同一のラベルを付ける。図４に示した例ではラベル“処理４”は１０行目に付けられているが、図１５に示す例ではラベル“処理４”は９行目から１２行目へ付け替えられている。
【００５５】
機能記述データ１０１内のすべての処理（処理１〜処理１２）に対し、ステップＳ１３０８での最適化を実行し、次のステップＳ１３０９へ進む。
【００５６】
次に、ステップＳ１３０９にて、ツール１０８は、ステップＳ１３０８において最適化された機能記述データ１０１へのpragma文の追加を行う。pragma文により電子回路生成での最適化指示を行う。ステップＳ１３０９の処理では、ラベル付けされた各処理の前後にpragma文の追加を行う。なお、最適化指示情報及び判定値は第１の実施形態と同じものとして説明する。ツール１０８は、機能記述データ１０１の文頭からpragma文追加の処理を逐次的に行っていく。処理の先頭へ到達すると、その処理の前に最適化の指示を指定するpragma文を挿入し、その処理の最後へ到達すると、挿入した最適化の指示取消を指定するpragma文を挿入する。これを繰り返し、ツール１０８は、機能記述データの終端までpragma文の挿入処理を実行する。
【００５７】
図１６にpragma文挿入後の機能記述データの例を示す。例えば、ラベル“処理１”の処理に対し、３行目及び５行目にpragma文が挿入されている。ラベル“処理４”の処理に対しては、１５行目及び２０行目にpragma文が挿入されている。
【００５８】
第２の実施形態によれば、機能記述データに係るシミュレーション実行により取得したプロファイル情報等に基づいて、各処理の最適化条件を決定し電子回路の生成を行うことができる。これにより、より良好な状態で最適化された、動作速度・実装面積・消費電力の平衡を図った電子回路の生成が可能となる。例えば、プロファイル情報としてコードカバレッジを使用することで、実行頻度に応じて優先すべき最適化条件を与え細かな最適化を行うことが可能となる。さらに、機能記述データに対して最適化のための修正を行い、最適化指示をpragma文により与えているため、電子回路生成ツール１１０が最適化指示情報を解釈できない場合でも、電子回路生成ツール１１０がエラーにより電子回路の生成を中断することがない。
【００５９】
（本発明の他の実施形態）
また、本発明は、以下の処理を実行することによっても実現される。即ち、前述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【００６０】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００６１】
１０１…機能記述データ、１０３…シミュレータ、１０４…検証結果判定手段、１０５…コードカバレッジ、１０７…電子回路設計条件、１０８…電子回路最適化ツール、１０９…最適化指示情報、１１０…電子回路生成ツール、１１１…電子回路
【図１】
0005843449.tif 000005
【図２】
0005843449.tif 000006
【図３】
0005843449.tif 000007
【図４】
0005843449.tif 000008
【図５】
0005843449.tif 000009
【図６】
0005843449.tif 000010
【図７】
0005843449.tif 000011
【図８】
0005843449.tif 000012
【図９】
0005843449.tif 000013
【図１０】
0005843449.tif 000014
【図１１】
0005843449.tif 000015
【図１２】
0005843449.tif 000016
【図１３】
0005843449.tif 000017
【図１４】
0005843449.tif 000018
【図１５】
0005843449.tif 000019
【図１６】
0005843449.tif 000020
【図１７】
0005843449.tif 000021