(57)【要約】【課題】設計効率の向上を図ること。【解決手段】設計支援装置１００は、設計対象回路の動作を模擬するプログラム１０１のうち特定種類の演算を指示する命令文の各々について、設計対象回路に入力可能な入力データ１０２によってプログラム１０１を実行した場合に命令文が実行される回数を導出する。設計支援装置１００は、命令文の各々について、導出した回数と、特定種類の演算に要する電力量に応じた値である重み付け係数と、を乗算した指標値を算出する。「ｚ＝ｘ／ｙ」は３０回であり、除算“／”の重み付け係数は８であるため、指標値は２４０である。「ｃ＝ａ＊ｂ」は５０回であり、乗算“＊”の重み付け係数は６であるため、指標値は３００である。【選択図】図１
2015035033.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが、
設計対象の演算回路の動作を模擬するプログラムのうち特定種類の演算を指示する命令文の各々について、前記演算回路に入力可能な入力データによって前記プログラムを実行した場合に前記命令文が実行される回数を導出し、
前記命令文の各々について、導出した前記回数と、前記特定種類の演算に要する電力量に応じた値と、を乗算した値を算出する、
処理を実行することを特徴とする設計支援方法。
【請求項２】
前記コンピュータが、
前記プログラム（以下、「第１プログラム」と称する）に基づいて、前記命令文のうち算出した前記値が第１所定条件を満たす命令文を、前記第１所定条件を満たす命令文と、前記第１所定条件を満たす命令文が指示する演算と等価な演算を指示する命令文と、のうちのいずれかを第２所定条件に応じて実行することを指示する命令文に置き換えた第２プログラムを生成する処理を実行することを特徴とする請求項１に記載の設計支援方法。
【請求項３】
前記等価な演算がシフト演算である場合において、
前記コンピュータが、
前記入力データによって前記第１プログラムを実行した場合に行われる前記特定種類の演算のうち被演算子となる値が２のべき乗である前記特定種類の演算の割合を特定する処理を実行し、
前記第２プログラムを生成する処理では、特定した前記割合が第３所定条件を満たさない場合に前記第２プログラムを生成しないことを特徴とする請求項２に記載の設計支援方法。
【請求項４】
コンピュータに、
設計対象の演算回路の動作を模擬するプログラムのうち特定種類の演算を指示する命令文の各々について、前記演算回路に入力可能な入力データによって前記プログラムを実行した場合に前記命令文が実行される回数を導出し、
前記命令文の各々について、導出した前記回数と、前記特定種類の演算に要する電力量に応じた値と、を乗算した値を算出する、
処理を実行させることを特徴とする設計支援プログラム。
【請求項５】
設計対象の演算回路の動作を模擬するプログラムのうち特定種類の演算を指示する命令文の各々について、前記演算回路に入力可能な入力データによって前記プログラムを実行した場合に前記命令文が実行される回数を導出する導出部と、
前記命令文の各々について、導出した前記回数と、前記特定種類の演算に要する電力量に応じた値と、を乗算した値を算出する算出部と、
を有することを特徴とする設計支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、設計支援方法、設計支援プログラム、および設計支援装置に関する。
【背景技術】
【０００２】
従来、プログラムの構文解析または命令セットシミュレータによるプログラムに定義された各関数の処理量や消費電力量の見積もり結果に基づいて各関数をハードウェアとソフトウェアのうちいずれで実現させるかを判断する技術が公知である（例えば、下記特許文献１参照。）。
【０００３】
また、従来、システムの動作が記述されたプログラム内の各命令の出現頻度に基づいて、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）に実装する演算器に実行させる命令を決定する技術が公知である（例えば、下記特許文献２参照。）。
【０００４】
また、プログラムにより生成したデータフローグラフに基づくレジスタに割り当てられるポイントの変数データ代入回数と保持データ遷移回数のいずれかを含む動的解析データに基づいて、プログラムに対して回路素子を割り付ける技術が公知である（例えば、下記特許文献３参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−１４２９２７号公報
【特許文献２】特開２００３−２４１９７５号公報
【特許文献３】特開２００９−１５７４４０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、高位設計においては、設計対象回路の使用時の各演算部の消費電力量が不明であるため、設計効率が低いという問題点がある。
【０００７】
１つの側面では、本発明は、設計効率の向上を図ることができる設計支援方法、設計支援プログラム、および設計支援装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一側面によれば、設計対象の演算回路の動作を模擬するプログラムのうち特定種類の演算を指示する命令文の各々について、前記演算回路に入力可能な入力データによって前記プログラムを実行した場合に前記命令文が実行される回数を導出し、前記命令文の各々について、導出した前記回数と、前記特定種類の演算に要する電力量に応じた値と、を乗算した値を算出する設計支援方法、設計支援プログラム、および設計支援装置が提案される。
【発明の効果】
【０００９】
本発明の一態様によれば、設計効率の向上を図ることができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、本発明の一動作例を示す説明図である。
【図２】図２は、半導体集積回路の設計手順例を示すフローチャートである。
【図３】図３は、設計支援装置のハードウェア構成例を示すブロック図である。
【図４】図４は、プログラム例を示す説明図である。
【図５】図５は、設計支援装置の機能的構成例を示すブロック図である。
【図６】図６は、命令文の特定例を示す説明図である。
【図７】図７は、ＣＤＦＧの生成例を示す説明図である。
【図８】図８は、見積もり電力テーブル例を示す説明図である。
【図９】図９は、回数をカウント可能なＡＰＩ記述が追加された第２プログラム例を示す説明図である。
【図１０】図１０は、実行結果例を示す説明図である。
【図１１】図１１は、静的電力解析の他の例を示す説明図である。
【図１２】図１２は、動的電力解析の他の例を示す説明図である。
【図１３】図１３は、２のべき乗の特定例を示す説明図である。
【図１４】図１４は、論理変更パターン用ライブラリ例を示す説明図である。
【図１５】図１５は、置換前後のプログラム例１を示す説明図である。
【図１６】図１６は、置換前後のプログラム例２を示す説明図である。
【図１７】図１７は、置換前後のプログラム例２についてのＣＤＦＧ例を示す説明図である。
【図１８】図１８は、置換前後のプログラム例２についてのＲＴＬ例を示す説明図である。
【図１９】図１９は、設計支援装置が行う全体の処理手順例を示すフローチャートである。
【図２０】図２０は、静的および動的電力解析処理手順例を示すフローチャートである。
【図２１】図２１は、最適化箇所特定処理手順例を示すフローチャートである。
【図２２】図２２は、最適化処理手順例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、本発明にかかる設計支援方法、設計支援プログラム、および設計支援装置の実施の形態を詳細に説明する。
【００１２】
図１は、本発明の一動作例を示す説明図である。設計支援装置１００は、設計対象の演算回路の設計を支援するコンピュータである。ここでの設計対象の演算回路とは、演算機能を有する回路を含む。以降、設計対象の演算回路は、対象回路と称する。
【００１３】
設計支援装置１００は、設計対象の演算回路の動作を模擬するプログラム１０１のうち特定種類の演算を指示する命令文の各々について、演算回路に入力可能な入力データ１０２によってプログラム１０１を実行した場合に命令文が実行される回数を導出する。特定種類の演算は、例えば、四則演算や論理演算などが挙げられる。図１の例では、特定種類の演算は、除算“／”と乗算“＊”とである。
【００１４】
つぎに、設計支援装置１００は、命令文の各々について、導出した回数と、特定種類の演算に要する電力量に応じた値と、を乗算した値を算出する。ここで、乗算した値を消費電力量の指標値と称する。これにより、対象回路の使用時の消費電力量を見積もることができる。
【００１５】
図２は、半導体集積回路の設計手順例を示すフローチャートである。まず、半導体集積回路の設計では、設計対象回路の機能を表すアルゴリズムを開発する（ステップＳ２０１）。これにより、アルゴリズムがＣ言語やＣ＋＋言語などによりコーディングされたプログラムが得られる。つぎに、半導体集積回路の設計では、プログラム内の命令文を置き換える（ステップＳ２０２）。実装される演算器には制限があり、この制約を遵守させるためにプログラムの置き換えが行われる。
【００１６】
そして、半導体集積回路の設計では、合成ツールを用いて高位合成を行う（ステップＳ２０３）。これにより、ハードウェア記述言語などによるＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）で記述されたプログラムが得られる。
【００１７】
つぎに、半導体集積回路の設計では、ＲＴＬ記述の構文チェックを行い（ステップＳ２０４）、ＲＴＬのシミュレーションを行う（ステップＳ２０５）。半導体集積回路の設計では、論理合成を行う（ステップＳ２０６）。これにより、ネットリストが得られる。そして、半導体集積回路の設計では、ネットリストに基づいて配置配線が行われる（ステップＳ２０７）。
【００１８】
論理合成後のネットリストを用いたシミュレーションによって電力見積もりが行われる。そのため、設計変更が生じる場合に、ＲＴＬ設計や高位設計を再度行うには時間がかかる。これに対して、本実施の形態にかかる設計支援装置１００は、ステップＳ２０１やステップＳ２０２において電力見積もりを行うことができるため、設計効率を向上させることができる。
【００１９】
（設計支援装置１００のハードウェア構成例）
図３は、設計支援装置のハードウェア構成例を示すブロック図である。図３において、設計支援装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０３と、ディスクドライブ３０４と、ディスク３０５と、を有している。設計支援装置１００は、Ｉ／Ｆ３０６と、入力装置３０７と、出力装置３０８と、を有している。また、各部はバス３００によってそれぞれ接続されている。
【００２０】
ここで、ＣＰＵ３０１は、設計支援装置１００の全体の制御を司る。ＲＯＭ３０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ３０３は、ＣＰＵ３０１のワークエリアとして使用される。ディスクドライブ３０４は、ＣＰＵ３０１の制御にしたがってディスク３０５に対するデータのリード／ライトを制御する。ディスク３０５は、ディスクドライブ３０４の制御で書き込まれたデータを記憶する。ディスク３０５としては、磁気ディスク、光ディスクなどが挙げられる。
【００２１】
Ｉ／Ｆ３０６は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークＮＥＴに接続され、このネットワークＮＥＴを介して他の装置に接続される。そして、Ｉ／Ｆ３０６は、ネットワークＮＥＴと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ３０６には、例えばモデムやＬＡＮアダプタなどを採用することができる。
【００２２】
入力装置３０７は、キーボード、マウス、タッチパネルなど利用者の操作により、各種データの入力を行うインターフェースである。また、入力装置３０７は、カメラから画像や動画を取り込むこともできる。また、入力装置３０７は、マイクから音声を取り込むこともできる。出力装置３０８は、ＣＰＵ３０１の指示により、データを出力するインターフェースである。出力装置３０８には、ディスプレイやプリンタが挙げられる。
【００２３】
図４は、プログラム例を示す説明図である。第１プログラム４００は、対象回路の動作を模擬可能であり、Ｃ言語やＣ＋＋言語などによって記述される。
【００２４】
（設計支援装置１００の機能的構成例）
図５は、設計支援装置の機能的構成例を示すブロック図である。設計支援装置１００は、第１特定部５０１と、ＣＤＦＧ生成部５０２と、第１生成部５０３と、導出部５０４と、算出部５０５と、第１判断部５０６と、第２特定部５０７と、第２判断部５０８と、第２生成部５０９と、を含む。各部の処理は、例えば、ＣＰＵ３０１がアクセス可能な記憶装置に記憶された設計支援プログラムにコーディングされている。そして、ＣＰＵ３０１が記憶装置から設計支援プログラムを読み出して、設計支援プログラムにコーディングされている処理を実行する。これにより、各部の処理が実現される。また、各部の処理結果は、例えば、ＲＡＭ３０３、ディスク３０５などの記憶装置に記憶される。
【００２５】
まず、第１特定部５０１は、対象回路の動作を模擬する第１プログラム４００から複数種類の演算の少なくともいずれかを行うことを指示する命令文を特定する。複数種類の演算とは、四則演算、論理演算、論理演算や四則演算の組み合わせなどが挙げられる。具体的には、第１特定部５０１は、第１プログラム４００を一行ずつスキャンし、演算記述がある命令文を特定する。
【００２６】
図６は、命令文の特定例を示す説明図である。第１特定部５０１は、第１プログラム４００から、８行目の比較演算“＜”が記述された命令文を特定する。第１特定部５０１は、第１プログラム４００から、８行目に加算“＋＋”が記述された命令文を特定する。第１特定部５０１は、第１プログラム４００から、１１行目の加算“＋”が記述された命令文を特定する。第１特定部５０１は、第１プログラム４００から、１３行目の乗算“＊”記述された命令文を特定する。
【００２７】
また、第１特定部５０１は、特定した命令文のうち、Ｆｏｒ−Ｌｏｏｐ文やＷｈｉｌｅ文を除外する。これにより、１１行目の加算“＋”と１３行目の乗算“＊”とが特定される。Ｆｏｒ−Ｌｏｏｐ文やＷｈｉｌｅ文については、高位合成ツールによって最適化されるため、本発明においては、処理の対象から除外される。
【００２８】
ＣＤＦＧ生成部５０２は、第１プログラム４００に基づいてＣＤＦＧ（Ｃｏｎｔｒｏｌ  Ｄａｔａ  Ｆｌｏｗ  Ｇｒａｐｈ）を生成する。ＣＤＦＧは、対象回路の実装時における制御の流れと、データの流れと、が記述された情報である。ここでは、ＣＤＦＧは、理解の容易化のためにディスプレイなどの出力装置３０８を介して出力させる情報である。
【００２９】
図７は、ＣＤＦＧの生成例を示す説明図である。ＣＤＦＧ生成部５０２は、例えば、第１プログラム４００に応じたＣＤＦＧを生成する。ここで、ＣＤＦＧによると、特定された命令文は、それぞれＣＤＦＧにおいてパスを構成する。そこで、特定された命令文を示す識別情報と、命令文が指示する演算と、演算の引数とは、関連付けられ、以降パスと称する。ここでは、パスに含まれる識別情報が示す命令文をパスの命令文と称する。
【００３０】
第１特定部５０１は、パスごとに、見積もり電力テーブルから重み付け係数を取得する。重み付け係数は、演算の種類に応じて演算の消費電力値に応じた値である。
【００３１】
図８は、見積もり電力テーブル例を示す説明図である。見積もり電力テーブル８００は、演算ごとに重み付け係数が記憶される。見積もり電力テーブル８００は、演算、重み付け係数のフィールドを有する。各フィールドに情報が設定されることにより、レコード（８０１−１〜８０１−２など）として記憶される。見積もり電力テーブル８００は、例えば、ＲＡＭ３０３やディスク３０５などの記憶装置に記憶される。
【００３２】
演算のフィールドには、各演算を示す識別情報が設定される。重み付け係数のフィールドには、各演算に要する電力量に応じた値が設定される。ここでは、例えば、電力量に応じた値を単位実行サイクルごとの消費電力量［Ｗ／Ｃｙｃｌｅ］とするが、これに限らず、演算に要する電力量を相対的に特定可能な値であってもよい。
【００３３】
第１生成部５０３は、第１プログラム４００に基づいて、対象回路の動作を模擬する第２プログラム９００であって、パスの各々についての回数のカウントを指示する命令文を含む第２プログラム９００を生成する処理を実行する。ここでの回数とは、入力データによって第１プログラム４００を実行した場合に特定した命令文が実行される回数である。ここでの入力データは、対象回路の設計仕様に基づいて利用者によって作成された情報である。入力データは、例えば、対象回路の入力端子に入力可能な信号値である。ここでは、入力データによって第２プログラム９００を実行させることにより、対象回路の動作のシミュレーションが行われる。入力データを含み、各プログラムを実行させるための情報をテストベンチと称する。
【００３４】
図９は、回数をカウント可能なＡＰＩ記述が追加された第２プログラム例を示す説明図である。第２プログラム９００には、回数をカウント可能なＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）記述であるｃｏｕｎｔｐａｔｈ（行数、計算式、被演算子）が記述される。
【００３５】
つぎに、導出部５０４は、入力データによって第１プログラム４００を実行した場合に特定した命令文が指示する演算が行われる回数を導出する。具体的には、導出部５０４は、ＡＰＩが挿入された第２プログラム９００と、テストベンチと、によってシミュレーションを実行することにより、特定した命令文が実行される回数をカウントする。
【００３６】
算出部５０５は、導出した回数と、特定した命令文が指示する演算に応じた重み付け係数と、に基づいて、対象回路へ入力データを入力させた場合に特定した命令文が指示する演算に要する電力量の指標値を算出する。
【００３７】
図１０は、実行結果例を示す説明図である。実行結果１０００では、理解の容易化のために、“ｉ”の値と“ｏｐ１”の値とを併せて示す。例えば、パスＰａｔｈ［０］の命令文が実行された回数は３回であり、Ｐａｔｈ［１］の命令文が実行された回数は２である。
【００３８】
算出部５０５は、導出された回数と命令文が指示する演算に要する電力量に応じた値とを乗算した指標値を算出する。上述したように、演算に要する電力量に応じた値は重み付け係数である。例えば、各パスの指標値は以下のようになる。
【００３９】
パスＰａｔｈ［０］の指標値＝２×３＝６
パスＰａｔｈ［１］の指標値＝６×２＝１２
【００４０】
図１１は、静的電力解析の他の例を示す説明図である。第１特定部５０１は、パスの各々について取得された重み付け係数の合計値に対するパスごとの重み付け係数の比率を特定してもよい。図１１に示すプログラム例は、上述した第１プログラム４００と異なる。理解の容易化のために、図１１中のＣＤＦＧにおける四角はＦＦ（Ｆｌｉｐ  Ｆｌｏｐ）を示す。図１１の例では、重み付け係数の合計を１００［％］とした場合の相対比ＲＰ（Ｒｅｌａｔｉｖｅ  Ｐｏｗｅｒ）が特定される。このように、パスＰＡの相対比ＲＰは１０であり、パスＰＢの相対比ＲＰは５０であり、パスＰＣの相対比ＲＰは４０である。これにより、図の例では、パスＰＢが最も高い相対比ＲＰであることが特定される。
【００４１】
図１２は、動的電力解析の他の例を示す説明図である。図１２の例は、算出部５０５は、導出した回数に応じた値と、演算に要する電力量に応じた値と、を乗算した指標値を算出する。図１２の例では、導出した回数に応じた値は、動作率である。そのため、動作率の合計は１００［％］となる。パスＰＡの動作率は、１０［％］であり、パスＰＢの動作率は、３０［％］であり、パスＰＣの動作率は６０［％］である。
【００４２】
例えば、パスＰＡの指標値は１００であり、パスＰＢの指標値は１５００であり、パスＰＣの指標値は２４００である。このように、相対比ＰＲについては、パスＰＢが最も大きいが、パスＰＣは実行された回数が多いため、指標値はパスＰＣが最も大きくなる。
【００４３】
つぎに、第１判断部５０６は、特定されたパスの各々について算出された指標値が第１所定条件を満たすか否かを判断する。ここでは、第１所定条件は、予め利用者によって定められ、ディスク３０５やＲＡＭ３０３などの記憶装置に記憶される。第１所定条件は、例えば、指標値が閾値以上であるか否かである。例えば、第１判断部５０６は、指標値が閾値以上であるか否かを判断する。閾値については例えば、利用者によって定められ、ディスク３０５やＲＡＭ３０３などの記憶装置に記憶される。また、ここでは、閾値は、ＰＪと表す。
【００４４】
第２生成部５０９は、第１判断部５０６によって指標値が閾値ＰＪ以上であると判断されたパスの命令文を置き換えた第３プログラムを生成する。また、第１判断部５０６によって指標値が所定条件を満たすと判断されたパスについては、最適化の対象パスとして出力される。ここでは、例えば、閾値ＰＪを１０とし、パスＰａｔｈ［１］が最適化の対象パスＯｐｔ＿Ｐａｔｈとして出力される。算出された指標値と、演算式と、命令文の識別情報と、演算式に与える引数と、が関連付けられて最適化の対象パスとして記憶される。命令文の識別情報は、例えば、第１プログラム４００内の先頭から数えた場合の行数である。
【００４５】
例えば、第２生成部５０９は、第１プログラム４００に基づいて第３プログラムを生成する。第３プログラムは、例えば、命令文のうち算出した指標値が第１所定条件を満たす第１命令文を、特定種類の演算と等価な演算を指示する命令文に置き換えたプログラムである。また、第３プログラムは、第１命令文を、第１命令文と、第１命令文が指示する演算と等価な演算を指示する第２命令文と、のうちのいずれかを第２所定条件に応じて実行することを指示する命令文に置き換えたプログラムである。
【００４６】
また、第３プログラムについては、命令文の置き換えを行うか否かを判断した後に、生成してもよい。そのため、等価な演算がシフト演算である場合に、第２特定部５０７は、入力データによって第１プログラム４００を実行した場合に行われる特定種類の演算のうち被演算子となる値が２のべき乗である特定種類の演算の割合を特定する。そして、第２判断部５０８は、特定した割合が第３所定条件を満たすか否かを判断する。
【００４７】
具体的には、第２特定部５０７は、入力データによって第２プログラム９００を実行することによるシミュレーションにおいてパスの命令文の被演算子となる値の組み合わせである被演算子の入力データを取得する。そして、第２特定部５０７は、被演算子となる値のうち２のべき乗である数をカウントする。
【００４８】
図１３は、２のべき乗の特定例を示す説明図である。被演算子の入力データ１３００は、第１プログラム４００内の１１行目に記述された命令文の被演算子であるａとｂとのそれぞれについて入力される値の組み合わせである。
【００４９】
表１３０１は、被演算子ａの２のべき乗と、被演算子ｂの２のべき乗と、被演算子ａと被演算子ｂのいずれも２のべき乗でない回数Ｍと、被演算子ａまたは被演算子ｂのいずれかが２のべき乗である回数Ｓと、を示す。回数Ｍは最終的に３であり、回数Ｓは最終的に７である。
【００５０】
つぎに、第２特定部５０７は、論理変更パターン用ライブラリから、最適化の対象パスについての演算に対応する論理変更の候補を引く。そして、第２特定部５０７は、論理変更の候補についての判定式を取得する。
【００５１】
図１４は、論理変更パターン用ライブラリ例を示す説明図である。論理変更パターン用ライブラリ１４００は、論理変更の候補、判定式のフィールドを有する。各フィールドに情報が設定されることにより、レコード（１４０１−１〜１４０１−３など）として記憶される。論理変更パターン用ライブラリ１４００はディスク３０５などの記憶装置に記憶される。
【００５２】
論理変更パターン用ライブラリ１４００によれば、例えば、乗算“＊”は加算“＋”やシフト演算“＜＜”に置き換えられ、除算“／”はシフト演算“＞＞”置き換えられる。また、図示していないが加算“＋”は排他的論理和“ｘｏｒ”に置き換えられる。“−”は“ｘｏｒ”に置き換えられる。
【００５３】
ここでは、第２特定部５０７は、パスＰａｔｈ［１］の演算は乗算“＊”であるため、例えば、変換候補［＊→＜＜］と対応付けられた判定式を取得する。例えば、第２判断部５０８は、判定式の各引数に値を代入することにより、判定式が成り立つか否かを判断する。判定式の各引数は以下に示す通りである。ｄは、２のべき乗である割合であり、（１−ｄ）は、２のべき乗でない割合である。変換候補［＊→＜＜］の例では、ｄはシフト演算“＜＜”が実行される割合であり、（１−ｄ）は乗算“×”が実行される割合である。Ｗ［  ］は［  ］内の演算の重み付け係数である。上述したように、例えばＷ［  ］の単位は［Ｗ／Ｃｙｃｌｅ］である。ｃｙｃ［  ］は［  ］内の乗算の実行サイクル数である。各演算の種類ごとに実行サイクル数は、予め定められてあり、ディスク３０５などの記憶装置に記憶されてある。または、実行サイクル数は、予め判定式に代入してあってもよい。除算の実行サイクル数は１６であるが、それ以外の演算の実行サイクル数は１である。ｃｏｎｄは２のべき乗である条件であり、後述する第２所定条件である。Ｗ［ｃｏｎｄ］は２のべき乗である条件判定のための論理回路（以下、「条件判定回路」と称する。）の重み付け係数である。ここでは、条件判定回路がビット演算回路または減算回路である場合、重み付け係数は２とする。ｃｙｃ［ｃｏｎｄ］は条件判定回路の実行サイクル数である。条件判定回路がビット演算回路である場合、１とする。条件判定回路が減算回路の場合、見積もり電力テーブル８００に記憶された減算“−”の重み付け係数が利用される。以下に本実施の形態における具体例を示す。
【００５４】
ｄ＝Ｓ／（Ｓ＋Ｍ）＝７／（７＋３）＝０．７
１−ｄ＝０．３
Ｗ［＊］＝６
ｃｙｃ［＊］＝１
Ｗ［＜＜］＝１
ｃｙｃ［＜＜］＝１
Ｗ［ｃｏｎｄ］＝２
ｃｙｃ［ｃｏｎｄ］＝１
【００５５】
第２判断部５０８は、各引数の値が判定式に代入されると、左辺が６となり、右辺が２．５となるため、判定式が成り立つ。そこで、判定式が成り立つ場合に、第２生成部５０９は、上述したように第３プログラムを生成する。また、第３プログラムは、指標値が第１所定条件を満たす第１命令文を、第１命令文と、第１命令文が指示する演算と等価な演算を指示する第２命令文と、のうちのいずれかを第２所定条件に応じて実行することを指示する命令文に置き換えたプログラムである。
【００５６】
例えば、第１所定条件を満たす命令文が指示する演算が乗算であり、等価な演算がシフト演算である場合において、第２所定条件は、乗算において被演算子となる値が２のべき乗であるか否かである。第２所定条件に応じて実行することを指示する命令文は、被演算子となる値が２のべき乗である場合に等価な演算を指示する命令文を実行することを指示し、被演算子となる値が２のべき乗でない場合に第１所定条件を満たす命令文を実行することを指示する。
【００５７】
図１５は、置換前後のプログラム例１を示す説明図である。左側が置換前の第１プログラム４００であり、右側が置換後の第３プログラム１５００である。例えば、第３プログラム１５００には、シフト数を被演算子ａとするシフト演算“＜＜”を指示する命令文と、シフト数を被演算子ｂとしてシフト演算“＜＜”を指示する命令と、乗算“＊”を指示する命令文と、が記述されてある。また第３プログラム１５００には、ｉｆ文の条件に応じていずれかの命令文が実行される。ｉｆ文の条件は、ｃｏｎｄ（）関数の結果によって定まる。
【００５８】
ｃｏｎｄ（）関数によれば、被演算子ａの値２のべき乗であれば、シフト数を被演算子ａの値とするシフト演算“＜＜”を指示する命令が実行される。ｃｏｎｄ（）関数によれば、被演算子ｂの値が２のべき乗であれば、シフト数を被演算子ｂの値とするシフト演算“＜＜”を指示する命令が実行される。ｃｏｎｄ（）関数によれば、被演算子ａと被演算子ｂのいずれの値も２のべき乗でなければ、乗算“＊”を指示する命令が実行される。
【００５９】
また、例えば、第１所定条件を満たす命令文が指示する演算が除算であり、等価な演算がシフト演算である場合において、第２所定条件は、除算において除数となる値が２のべき乗であるか否かである。例えば、第２所定条件に応じて実行することを指示する命令文は、除数となる値が２のべき乗である場合に等価な演算を指示する命令文を実行することを指示し、除数となる値が２のべき乗でない場合に第１所定条件を満たす命令文を実行することを指示する。
【００６０】
図１６は、置換前後のプログラム例２を示す説明図である。左側が置換前の第１プログラム１６００であり、右側が置換後の第３プログラム１６０１である。第３プログラム１６０１では、シフト数を被演算子Ｙとしてシフト演算“＜＜”を指示する命令と、除算“／”を指示する命令と、が記述されてあり、ｃｏｎｄ（）関数によっていずれが実行されるかが定まる。図の下側には、第１プログラム１６００と第３プログラム１６０１との関係を示す。
【００６１】
ｃｏｎｄ（）関数によれば、被除数である被演算子Ｙの値が２のべき乗であれば、シフト数を被演算子Ｙの値とするシフト演算“＞＞”を指示する命令が実行される。ｃｏｎｄ（）関数によれば、ｂが２のべき乗であれば、シフト数を被演算子ｂの値とするシフト演算“＞＞”を指示する命令が実行される。ｃｏｎｄ（）関数によれば、被除数である被演算子Ｙの値が２のべき乗でなければ、除算“／”を指示する命令が実行される。
【００６２】
図１７は、置換前後のプログラム例２についてのＣＤＦＧ例を示す説明図である。図１８は、置換前後のプログラム例２についてのＲＴＬ例を示す説明図である。例えば、置換前の第１プログラム１６００では、除算“／”の重み付け係数が８であり、回数がｎ回であると、消費電力量の指標値は８ｎである。置換後の第３プログラム１６０１では、例えば、ｃｏｎｄ（）関数において、除算“／”の重み付け係数が８であり、シフト演算“＞＞”の重み付け係数が１であるため、除算“／”が選択される確率が３０［％］であると、指標値は３．１ｎ（＝０．７×ｎ×１＋０．３×ｎ×８）である。このような場合、２倍近く消費電力量を低減可能となる。
【００６３】
（設計支援装置１００が行う最適化処理手順）
図１９は、設計支援装置が行う全体の処理手順例を示すフローチャートである。本実施の形態では、設計支援装置１００が行う処理手順を第１フェーズから第３フェーズの３つに分けて説明する。
【００６４】
設計支援装置１００は、繰り返し回数＝０とする（ステップＳ１９０１）。設計支援装置１００は、繰り返し回数＝繰り返し回数＋１とする（ステップＳ１９０２）。設計支援装置１００は、第１プログラム４００に基づいて、静的電力解析を行う（ステップＳ１９０３）。つぎに、設計支援装置１００は、テストベンチ１９００により第１プログラム４００を実行することにより、動的電力解析を行う（ステップＳ１９０４）。テストベンチ１９００は、上述したように、対象回路に入力可能な入力データ１０２を含む。設計支援装置１００は、シミュレーション結果に基づいて、最適化箇所を特定する（ステップＳ１９０５）。
【００６５】
設計支援装置１００は、特定した最適化箇所について最適化を行う（ステップＳ１９０６）。設計支援装置１００は、すべて最適化済みであるか否かを判断する（ステップＳ１９０７）。最適化済みでないと判断された場合（ステップＳ１９０７：Ｎｏ）、設計支援装置１００は、ステップＳ１９０６へ戻る。すべて最適化済みであると判断された場合（ステップＳ１９０７：Ｙｅｓ）、設計支援装置１００は、繰り返し回数が所定数Ｘより大きいか否かを判断する（ステップＳ１９０８）。所定数Ｘについては、予めディスク３０５やＲＡＭ３０３などに記憶されてある。
【００６６】
繰り返し回数が所定数Ｘ以下である場合（ステップＳ１９０８：Ｎｏ）、設計支援装置１００は、ステップＳ１９０２へ戻る。これにより、最適化されたプログラムについて再度最適化を行うことができる。繰り返し回数が所定数Ｘより多い場合（ステップＳ１９０８：Ｙｅｓ）、設計支援装置１００は、一連の処理を終了する。このように、所定数Ｘとなるまで、最適化されたプログラムを再度最適化の対象とすることができる。
【００６７】
図２０は、静的および動的電力解析処理手順例を示すフローチャートである。設計支援装置１００は、プログラムを取得する（ステップＳ２００１）。つぎに、設計支援装置１００は、ｎ＝０とする（ステップＳ２００２）。設計支援装置１００は、未選択の命令文があるか否かを判断する（ステップＳ２００３）。未選択の命令文がある場合（ステップＳ２００３：Ｙｅｓ）、設計支援装置１００は、未選択の命令文から先頭の命令文を選択する（ステップＳ２００４）。つぎに、設計支援装置１００は、選択した命令文が特定種類の演算を指示する命令文であるか否かを判断する（ステップＳ２００５）。選択した命令文が特定種類の演算を指示する命令文でない場合（ステップＳ２００５：Ｎｏ）、設計支援装置１００は、ステップＳ２００３へ戻る。
【００６８】
選択した命令文が特定種類の演算を指示する命令文である場合（ステップＳ２００５：Ｙｅｓ）、設計支援装置１００は、選択した命令文がＦｏｒ−Ｌｏｏｐ文またはＷｈｉｌｅ文であるか否かを判断する（ステップＳ２００６）。選択した命令文がＦｏｒ−Ｌｏｏｐ文またはＷｈｉｌｅ文のいずれかである場合（ステップＳ２００６：Ｙｅｓ）、設計支援装置１００は、ステップＳ２００３へ戻る。
【００６９】
選択した命令文がＦｏｒ−Ｌｏｏｐ文およびＷｈｉｌｅ文のいずれでもない場合（ステップＳ２００６：Ｎｏ）、設計支援装置１００は、選択した命令文の識別情報と演算内容と被演算子とを関連付けてパスＰａｔｈ［ｎ］とする（ステップＳ２００７）。設計支援装置１００は、ｎ＝ｎ＋１とする（ステップＳ２００８）。そして、設計支援装置１００は、プログラムにカウント用ＡＰＩ記述を追加し（ステップＳ２００９）、ステップＳ２００３へ戻る。ステップＳ２００９によって上述した第２プログラム９００が得られる。
【００７０】
未選択の命令文がない場合（ステップＳ２００３：Ｎｏ）、設計支援装置１００は、テストベンチによりプログラムを実行する（ステップＳ２０１０）。設計支援装置１００は、パスＰａｔｈ［０〜ｎ］ごとに、回数と、パスＰａｔｈの演算についての重み付け係数と、により指標値を算出する（ステップＳ２０１１）。設計支援装置１００は、算出結果を出力し（ステップＳ２０１２）、一連の処理を終了する。
【００７１】
図２１は、最適化箇所特定処理手順例を示すフローチャートである。設計支援装置１００は、利用者の操作により、閾値ＰＪを設定する（ステップＳ２１０１）。つぎに、設計支援装置１００は、ｎ＝０とする（ステップＳ２１０２）。設計支援装置１００は、パスＰａｔｈ［ｎ］の指標値を取得する（ステップＳ２１０３）。設計支援装置１００は、パスＰａｔｈ［ｎ］の指標値＞閾値ＰＪであるか否かを判断する（ステップＳ２１０４）。
【００７２】
パスＰａｔｈ［ｎ］の指標値＞閾値ＰＪでない場合（ステップＳ２１０４：Ｎｏ）、ステップＳ２１０６へ移行する。パスＰａｔｈ［ｎ］の指標値＞閾値ＰＪである場合（ステップＳ２１０４：Ｙｅｓ）、設計支援装置１００は、パスＰａｔｈ［ｎ］を最適化対象のパスＯｐｔ＿Ｐａｔｈとする（ステップＳ２１０５）。設計支援装置１００は、ｎ＜パスの数ｍであるか否かを判断する（ステップＳ２１０６）。ｎ＜パスの数ｍである場合（ステップＳ２１０６：Ｙｅｓ）、設計支援装置１００は、ｎ＋＝１とし（ステップＳ２１０７）、ステップＳ２１０３へ戻る。ｎ＜パスの数ｍでない場合（ステップＳ２１０６：Ｎｏ）、設計支援装置１００は、一連の処理を終了する。
【００７３】
図２２は、最適化処理手順例を示すフローチャートである。まず、設計支援装置１００は、ｎ＝０とする（ステップＳ２２０１）。つぎに、設計支援装置１００は、最適化対象のパスＯｐｔ＿Ｐａｔｈ［ｎ］を取得する（ステップＳ２２０２）。そして、設計支援装置１００は、パスＯｐｔ＿Ｐａｔｈ［ｎ］の被演算子の値である入力データを取得する（ステップＳ２２０３）。
【００７４】
設計支援装置１００は、入力データの２のべき乗の割合を特定する（ステップＳ２２０４）。設計支援装置１００は、論理変更パターン用ライブラリ１４００から判定式に特定した割合を代入する（ステップＳ２２０５）。設計支援装置１００は、判定式が成立したか否かを判断する（ステップＳ２２０６）。判定式が成立しない場合（ステップＳ２２０６：Ｎｏ）、設計支援装置１００は、ステップＳ２２０８へ移行する。
【００７５】
判定式が成立する場合（ステップＳ２２０６：Ｙｅｓ）、設計支援装置１００は、パスＯｐｔ＿Ｐａｔｈ［ｎ］の命令文を変換候補に置き換える（ステップＳ２２０７）。設計支援装置１００は、ｎ＜最適化対象のパスの数ｋであるか否かを判断する（ステップＳ２２０８）。ｎ＜最適化対象のパスの数ｋである場合（ステップＳ２２０８：Ｙｅｓ）、設計支援装置１００は、ｎ＋＝１とし（ステップＳ２２０９）、ステップＳ２２０２へ戻る。
【００７６】
ｎ＜最適化対象のパスの数ｋでない場合（ステップＳ２２０８：Ｎｏ）、設計支援装置１００は、一連の処理を終了する。
【００７７】
以上説明したように、本実施の形態にかかる設計支援装置１００は、対象回路の動作を模擬するプログラム内の特定種類の演算を指示する命令文ごとに、該対象回路の入力データにおける該命令文の実行回数に応じた消費電力量の指標値を算出する。これにより、高位設計において対象回路の使用時の消費電力量を見積もることができる。したがって、設計効率を向上させることができる。
【００７８】
また、設計支援装置１００は、命令文のうち算出した指標値が第１所定条件を満たす命令文を、所定条件を満たす命令文が指示する演算と等価な演算を指示する命令文に置き換えたプログラムを生成する。これにより、アルゴリズムを変更することにより、低消費電力化を図ることができる。
【００７９】
また、設計支援装置１００は、命令文のうち算出した指標値が第１所定条件を満たす第１命令文を特定する。そして、設計支援装置１００は、第１命令文と、第１命令文が指示する演算と等価な演算を指示する第２命令文と、のうちのいずれかを第２所定条件に応じて実行することを指示する命令文に置き換えた第２プログラムを生成する。これにより、複数の命令のいずれかを実行可能なようにアルゴリズムを変更することにより、低消費電力化を図ることができる。
【００８０】
また、演算が除算であり、等価な演算がシフト演算である場合、設計支援装置１００は、被除数の値が２のべき乗である場合に第２命令文を実行し、２のべき乗でない場合に第１命令文を実行することを指示する命令文に置き換えた第２プログラムを生成する。これにより、被除数が２のべき乗であれば、除算よりも消費電力量が少ないシフト演算が可能となるため、低消費電力化を図ることができる。
【００８１】
また、演算が乗算であり、等価な演算がシフト演算である場合、設計支援装置１００は、被演算子の値が２のべき乗である場合に第２命令文を実行し、２のべき乗でない場合に第１命令文を実行することを指示する命令文に置き換えた第２プログラムを生成する。これにより、被演算子が２のべき乗であれば、乗算よりも消費電力量が少ないシフト演算が可能となるため、低消費電力化を図ることができる。
【００８２】
また、設計支援装置１００は、入力データによってプログラムを実行した場合に行われる特定種類の演算のうち被演算子の値が２のべき乗である特定種類の演算の割合により命令文を置き換えたプログラムを生成するか否かを判定する。これにより、命令文を置き換えて低消費電力となるか否かを判断することができる。
【００８３】
また、設計支援装置１００は、特定種類の演算を指示する命令文の各々について、実行される回数のカウントを指示する命令文を含むプログラムを生成する。これにより、プログラムを実行するだけで、特定種類の演算を指示する命令文が実行される回数を導出可能となる。
【００８４】
なお、本実施の形態で説明した設計支援方法は、予め用意された設計支援プログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本設計支援プログラムは、磁気ディスク、光ディスク、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）フラッシュメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、設計支援プログラムは、インターネット等のネットワークを介して配布してもよい。
【００８５】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００８６】
（付記１）コンピュータが、
設計対象の演算回路の動作を模擬するプログラムのうち特定種類の演算を指示する命令文の各々について、前記演算回路に入力可能な入力データによって前記プログラムを実行した場合に前記命令文が実行される回数を導出し、
前記命令文の各々について、導出した前記回数と、前記特定種類の演算に要する電力量に応じた値と、を乗算した値を算出する、
処理を実行することを特徴とする設計支援方法。
【００８７】
（付記２）前記コンピュータが、
前記命令文のうち算出した前記値が所定条件を満たす命令文を、前記所定条件を満たす命令文が指示する演算と等価な演算を指示する命令文に置き換えたプログラムを生成する処理を実行することを特徴とする付記１に記載の設計支援方法。
【００８８】
（付記３）前記コンピュータが、
前記プログラム（以下、「第１プログラム」と称する）に基づいて、前記命令文のうち算出した前記値が第１所定条件を満たす命令文を、前記第１所定条件を満たす命令文と、前記第１所定条件を満たす命令文が指示する演算と等価な演算を指示する命令文と、のうちのいずれかを第２所定条件に応じて実行することを指示する命令文に置き換えた第２プログラムを生成する処理を実行することを特徴とする付記１に記載の設計支援方法。
【００８９】
（付記４）前記第１所定条件を満たす命令文が指示する演算が除算であり、前記等価な演算がシフト演算である場合において、
前記第２所定条件は、前記除算において除数となる値が２のべき乗であるか否かであって、
前記第２所定条件に応じて実行することを指示する命令文は、前記除数となる値が２のべき乗である場合に前記等価な演算を指示する命令文を実行することを指示し、前記除数となる値が２のべき乗でない場合に前記第１所定条件を満たす命令文を実行することを指示することを特徴とする付記３に記載の設計支援方法。
【００９０】
（付記５）前記第１所定条件を満たす命令文が指示する演算が乗算であり、前記等価な演算がシフト演算である場合において、
前記第２所定条件は、前記乗算において被演算子となる値が２のべき乗であるか否かであって、
前記第２所定条件に応じて実行することを指示する命令文は、前記被演算子となる値が２のべき乗である場合に前記等価な演算を指示する命令文を実行することを指示し、前記被演算子となる値が２のべき乗でない場合に前記第１所定条件を満たす命令文を実行することを指示することを特徴とする付記３に記載の設計支援方法。
【００９１】
（付記６）前記等価な演算がシフト演算である場合において、
前記コンピュータが、
前記入力データによって前記第１プログラムを実行した場合に行われる前記特定種類の演算のうち被演算子となる値が２のべき乗である前記特定種類の演算の割合を特定する処理を実行し、
前記第２プログラムを生成する処理では、特定した前記割合が第３所定条件を満たさない場合に前記第２プログラムを生成しないことを特徴とする付記３〜５のいずれか一つに記載の設計支援方法。
【００９２】
（付記７）前記コンピュータが、
前記プログラム（以下「第１プログラム」と称する）から、前記特定種類の演算を指示する命令文を特定し、
前記第１プログラムに基づいて、前記演算回路の動作を模擬する第２プログラムであって、特定した前記命令文の各々についての前記回数のカウントを指示する命令文を含む第２プログラムを生成する処理を実行し、
前記回数を導出する処理では、前記入力データによって前記第２プログラムを実行することにより、特定した前記命令文の各々について前記回数を導出することを特徴とする付記１〜６のいずれか一つに記載の設計支援方法。
【００９３】
（付記８）コンピュータに、
設計対象の演算回路の動作を模擬するプログラムのうち特定種類の演算を指示する命令文の各々について、前記演算回路に入力可能な入力データによって前記プログラムを実行した場合に前記命令文が実行される回数を導出し、
前記命令文の各々について、導出した前記回数と、前記特定種類の演算に要する電力量に応じた値と、を乗算した値を算出する、
処理を実行させることを特徴とする設計支援プログラム。
【００９４】
（付記９）設計対象の演算回路の動作を模擬するプログラムのうち特定種類の演算を指示する命令文の各々について、前記演算回路に入力可能な入力データによって前記プログラムを実行した場合に前記命令文が実行される回数を導出する導出部と、
前記命令文の各々について、導出した前記回数と、前記特定種類の演算に要する電力量に応じた値と、を乗算した値を算出する算出部と、
を有することを特徴とする設計支援装置。
【００９５】
（付記１０）設計対象の演算回路の動作を模擬するプログラムのうち特定種類の演算を指示する命令文の各々について、前記演算回路に入力可能な入力データによって前記プログラムを実行した場合に前記命令文が実行される回数を導出し、
前記命令文の各々について、導出した前記回数と、前記特定種類の演算に要する電力量に応じた値と、を乗算した値を算出する、
処理をコンピュータに実行させる設計支援プログラムを記録したことを特徴とする記録媒体。
【符号の説明】
【００９６】
１００  設計支援装置
４００，１６００  第１プログラム
５０１  第１特定部
５０３  第１生成部
５０４  導出部
５０５  算出部
５０６  第１判断部
５０７  第２特定部
５０８  第２判断部
５０９  第２生成部
８００  見積もり電力テーブル
９００  第２プログラム
１０００  実行結果
１５００，１６０１  第３プログラム
【図１】
2015035033.tif 000003
【図２】
2015035033.tif 000004
【図３】
2015035033.tif 000005
【図４】
2015035033.tif 000006
【図５】
2015035033.tif 000007
【図６】
2015035033.tif 000008
【図７】
2015035033.tif 000009
【図８】
2015035033.tif 000010
【図９】
2015035033.tif 000011
【図１０】
2015035033.tif 000012
【図１１】
2015035033.tif 000013
【図１２】
2015035033.tif 000014
【図１３】
2015035033.tif 000015
【図１４】
2015035033.tif 000016
【図１５】
2015035033.tif 000017
【図１６】
2015035033.tif 000018
【図１７】
2015035033.tif 000019
【図１８】
2015035033.tif 000020
【図１９】
2015035033.tif 000021
【図２０】
2015035033.tif 000022
【図２１】
2015035033.tif 000023
【図２２】
2015035033.tif 000024