(57)【要約】【課題】  本発明の課題は、構造記述による回路データから、設計中の集積回路の電力を見積もることを目的とする。【解決手段】  上記課題は、集積回路の消費電力検証方法であって、回路データで記述される論理回路モジュール毎のデータトグル率を算出する動作率算出手順と、データ電力を要する素子に対しては前記データトグル率を用いて該データ電力を算出して、全素子の電力の総和を算出する電力総和算出手順とをコンピュータが実行することにより達成される。【選択図】  図２
2011013713.tif 000002
【特許請求の範囲】
【請求項１】
集積回路の消費電力検証方法であって、
回路データで記述される論理回路モジュール毎のデータトグル率を算出する動作率算出手順と、
データ電力を要する素子に対しては前記データトグル率を用いて該データ電力を算出して、全素子の電力の総和を算出する電力総和算出手順とをコンピュータが実行することを特徴とする集積回路の消費電力検証方法。
【請求項２】
電力総和算出手順は、
前記データ電力を要する素子に対しては、前記データトグル率にデータトグル１回当たりの電力と動作回数を示すクロックトグル回数とを乗算することによってデータ電力を算出することを特徴とする請求項１記載の集積回路の消費電力検証方法。
【請求項３】
動作率算出手順は、
前記論理回路モジュールを有する集積回路の動作をプログラムした動作記述プログラムの第一の変数と前記回路データの第二の変数との対応表を参照することにより、該動作記述プログラムを実行することによって得られた動作結果ログを用いて、該第二の変数が対応する該第一の変数のデータの１クロック当たりの変化回数を変化率として算出する変化回数算出手順と、
データパス間の変数の変化率の平均をデータトグル率として算出するデータトグル率算出手順とを有することを特徴とする請求項２記載の集積回路の消費電力検証方法。
【請求項４】
データフローを示すデータパスを解析して、該データパス上の前記論理回路モジュール毎の動作時間を出力するデータパス解析手順を前記コンピュータに実行させ、
電力総和算出手順は、クロック当たりの変化回数と前記動作時間とを乗算することによってクロックトグル回数を算出することを特徴とする請求項３記載の集積回路の消費電力検証方法。
【請求項５】
前記動作結果ログを用いて論理回路モジュール間の依存関係を解析し、前記対応表を用いて依存関係における前記動作記述プログラムの第一の変数を対応する前記回路データの第二の変数で示した動作解析結果を出力するログ解析手順を前記コンピュータに実行させ、
前記データパス解析手順は、前記第二の変数による前記依存関係を示す動作解析結果を用いて前記データパスを解析することを特徴とする請求項４記載の集積回路の消費電力検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、論理回路設計における集積回路の消費電力検証方法に関する。
【背景技術】
【０００２】
集積回路（以下、ＬＳＩと言う）を論理設計において、消費電力（電流）は重要な設計制約のひとつであり、電源層設計やチップパッケージ種の選定など、ＬＳＩの物理設計の初期決定条件を導くものである。そのため、設計早期段階で精度の良い見積もりが求められている。
【０００３】
例えば、論理シミュレータを実行して得られた信号レベルの変化回数や時間的変化を用いて消費電力を算出すること、トランザクションが集積回路の動作頻度をよく反映していることに着目して、設計対象となる集積回路のトランザクション量を事象として統計分布であらわして格納するデータベースを備えたトランザクション解析用モデルを利用して、高速な消費電力推定を行なう等が提案されている（例えば、特許文献１、２を参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平３−９５５０号公報
【特許文献２】特開２００１−３３８０１０号公報
【特許文献３】特開平１０−１５４７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
システムＬＳＩのレイアウト設計では、レイアウト本番に入る前に、回路が物理的に製造できるかどうかを検討する。各ブロックの設計がある程度進み、回路規模がほぼ決定する時期に行っている。各フロックの設計や検証シミュレーションが進み、ブロックの論理記述がほぼ決まってきた段階で、ブロックを全て集約することで、チップの回路規模を見積もることができる。設計途中のブロックを不完全ながら結合させて、レイアウトを行い、合成可能性、配線可能性、サイズが実現可能な範囲かを検討すること（レイアウト・プロトタイプ）が行なわれている。
【０００６】
従来の技術では、CMOS回路の電力は回路の動作（回路の変化回数）に大きく依存するため、電力見積もりのためには、回路の動作シミュレーション結果が要求されている。しかし、システムＬＳＩ全体を動作させるのは論理設計の最終段階であり、動作結果よりシステムＬＳＩの電力が見積もれるのは、さらに数ヶ月後になるため、正確な電力が出るまで待たされた場合、時間的に厳しい工程で電力の見積もりが行なわれることになる。
【０００７】
レイアウト検討時には、チップ全体としては動作しない回路を用いて行っているため、動作結果による正確な電力は、見積もれない。システムＬＳＩ全体での動作をシミュレーションができないため、ブロックごとのブロック検証動作の電力を見積もり、それを足し合わせて、全体電力概算としている。しかし、ブロックレベルでは、ループが含まれる等の実使用と合った動作をシミュレーションさせることが困難なため、実使用時の回路動作率を求めるのが困難であった。したがって、電力見積もりの精度が悪いという問題があった。
【課題を解決するための手段】
【０００８】
開示の集積回路の消費電力検証方法は、回路データで記述される論理回路モジュール毎のデータトグル率を算出する動作率算出手順と、データ電力を要する素子に対しては前記データトグル率を用いて該データ電力を算出して、全素子の電力の総和を算出する電力総和算出手順とをコンピュータが実行する。
【発明の効果】
【０００９】
開示の集積回路の消費電力検証方法において、機能仕様書（ＦＳ）の段階であっても、構造記述による回路データから、設計中の集積回路の電力を見積もりことができる。
【図面の簡単な説明】
【００１０】
【図１】消費電力検証装置のハードウェア構成例を示すブロック図である。
【図２】消費電力検証処理の全体フローを示す図である。
【図３】消費電力検証の対象となる回路構成例を示す図である。
【図４】動作記述プログラムの例を示す図である。
【図５】回路と動作記述の対応表の例を示す図である。
【図６】プログラム動作結果ログの例を示す図である。
【図７】図２の処理１にて行なわれる結果ログ解析について説明するためのフローチャートである。
【図８】動作記述プログラムの他の例を示す図である。
【図９】第１の中間テーブルのデータ例を示す図である。
【図１０】第２の中間テーブルのデータ例を示す図である。
【図１１】動作解析結果の作成方法を示す図である。
【図１２】図２の処理２にて行なわれるデータパス解析について説明するためのフローチャートである。
【図１３】図１２のステップＳ２３におけるデータパスの処理時間の計算方法を説明するためのフローチャート図である。
【図１４】動作時間の算出例を説明するための図である。
【図１５】図２の処理３にて行なわれるデータトグル率の算出方法について説明するためのフローチャートである。
【図１６】図２の処理４にて行なわれる電力見積もり方法について説明するためのフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態を図面に基づいて説明する。
【００１２】
論理回路設計においてＬＳＩの消費電力を検証する消費電力検証装置は、例えば、図１に示すようなハードウェア構成を有する。図１において、消費電力検証装置１００は、コンピュータによって制御される端末であって、ＣＰＵ（Central Processing Unit）１１と、メモリユニット１２と、表示ユニット１３と、出力ユニット１４と、入力ユニット１５と、通信ユニット１６と、記憶装置１７と、ドライバ１８とを有し、システムバスＢに接続される。
【００１３】
ＣＰＵ１１は、メモリユニット１２に格納されたプログラムに従って消費電力検証装置１００を制御する。メモリユニット１２は、ＲＡＭ（Random Access Memory）及びＲＯＭ（Read-Only Memory）等にて構成され、ＣＰＵ１１にて実行されるプログラム、ＣＰＵ１１での処理に必要なデータ、ＣＰＵ１１での処理にて得られたデータ等を格納する。また、メモリユニット１２の一部の領域が、ＣＰＵ１１での処理に利用されるワークエリアとして割り付けられている。
【００１４】
表示ユニット１３は、ＣＰＵ１１の制御のもとに必要な各種情報を表示する。出力ユニット１４は、プリンタ等を有し、ユーザからの指示に応じて各種情報を出力するために用いられる。入力ユニット１５は、マウス、キーボード等を有し、ユーザが消費電力検証装置１００が処理を行なうための必要な各種情報を入力するために用いられる。通信ユニット１６は、例えばインターネット、ＬＡＮ（Local Area Network）等に接続し、外部装置との間の通信制御をするための装置である。記憶装置１７は、例えば、ハードディスクユニットにて構成され、各種処理を実行するプログラム等のデータを格納する。
【００１５】
消費電力検証装置１００よって行われる処理を実現するプログラムは、例えば、ＣＤ−ＲＯＭ（Compact Disc Read-Only Memory）等の記憶媒体１９によって消費電力検証装置１００に提供される。即ち、プログラムが保存された記憶媒体１９がドライバ１８にセットされると、ドライバ１８が記憶媒体１９からプログラムを読み出し、その読み出されたプログラムがシステムバスＢを介して記憶装置１７にインストールされる。そして、プログラムが起動されると、記憶装置１７にインストールされたプログラムに従ってＣＰＵ１１がその処理を開始する。尚、プログラムを格納する媒体としてＣＤ−ＲＯＭに限定するものではなく、コンピュータが読み取り可能な媒体であればよい。本実施例に係る消費電力検証処理を実現するプログラムは、通信ユニット１６によってネットワークを介してダウンロードし、記憶装置１７にインストールするようにしても良い。また、ＵＳＢ対応の消費電力検証装置１００であれば、ＵＳＢ接続可能な外部記憶装置からインストールするようにしても良い。更に、ＳＤカード等のフラッシュメモリ対応の消費電力検証装置１００であれば、そのようなメモリカードからインストールするようにしても良い。
【００１６】
図２は、消費電力検証処理の全体フローを示す図である。図２において、ＣＰＵ１１は、回路データ３１と、回路動作記述の対応表３２と、動作記述プログラム３３と、プログラム動作結果ログ３４とを、各々が格納されている記憶装置１７内の領域から読み出して、消費電力検証処理２０を開始する。
【００１７】
回路データ３１は、レイアウトの際にプロトタイプに用いる回路データであり、例えば、ＲＴＬ（Register Transfer Level）によって記述されたゲート回路、又は、論理合成後のテクノロジマッピングされた論理回路モジュールとしてのゲート回路のデータである。
【００１８】
回路動作記述の対応表３２は、予めユーザによって対応付けられた回路情報と動作記述との対応を示すテーブルであり、ブロック名と関数名の対応、メモリ名と変数名の対応などを示す。
【００１９】
動作記述プログラム３３は、例えば、動作仕様を表したＣ言語で開発されたソースプログラムであり、実行されるメモリとブロック間、ブロックと他ブロック間のアルゴリズムの実行手順を示す。
【００２０】
プログラム動作結果ログ３４は、動作記述プログラム３３を実行させて取得した実行プロファイルであり、実際に実行された手順がログで示される。
【００２１】
消費電力検証処理２０の処理１において、ＣＰＵ１１は、プログラム動作結果ログ３４を解析して、回路と対応する部分の動作の実行手順に変換して、メモリユニット１２の作業領域又は記憶装置１１の所定記憶領域（以下、単に記憶領域と言う）に動作解析結果３５を出力する（結果ログ解析）。次に、処理２において、ＣＰＵ１１は、回路データ３１を用いてデータパスを解析し、実行パスの遅延解析を行ない、記憶領域に遅延解析結果３６を出力する（データパス解析）。
【００２２】
更に、処理３において、ＣＰＵ１１は、遅延解析結果３６を用いて、プログラムの変数のビットトグル率から回路のネットのトグル率を算出して、動作率見積もり結果３７を出力する（データトグル率算出）。そして、処理４において、ＣＰＵ１１は、動作率見積もり結果３７を用いて、電力を見積もり、電力結果３８を出力する（電力見積もり）。
【００２３】
消費電力検証処理を行う際に予め作成しておく回路と動作記述の対応表３２について,
図３、図４、及び図５で説明する。図３は、消費電力検証の対象となる回路構成例を示す図である。図３において、消費電力検証の対象となるＬＳＩ３は、例えば、メモリＡと、ブロックＣと、ブロックＤと、ブロックＥと、メモリＢとを有し、夫々に対応させて回路内での動作が、例えばＲＴＬなどで作成される。
【００２４】
ＬＳＩ３において、ブロックＣはメモリポートＢＣｐからメモリＡのデータを受信し、所定処理の後にブロックＤとブロックＥへとデータを供給する。ブロックＤは、ブロックＣからのデータを入力レジスタＢＤｒで受信し、所定処理の後にメモリポートＢＤｐからメモリＢへとデータを供給する。ブロックＥは、ブロックＣからのデータを入力レジスタＢＥｒで受信し、所定処理の後にメモリポートＢＥｐからメモリＢへとデータを送信する。メモリＢは、ブロックＤから送られるデータとブロックＥから送られるデータとを格納する。
【００２５】
このような、メモリとブロック間、ブロックとブロック間などの論理回路モジュール間のデータのフローが制御データフローとして、例えばＣプログラムで開発され動作記述プログラム３３となる。
【００２６】
図４は、動作記述プログラム３３の例を示す図である。図４に例示される動作記述プログラム３３において、main()関数３３ａがＬＳＩ３の全体の制御データフローに対応し、data_in配列３３ｂがメモリＡに対応し、stream2content関数３３ｃがブロックＣに対応し、temp2変数３３ｄがブロックＣメモリポートＢＣｐに対応する。
【００２７】
また、process_a関数３３ｅがブロックＤに対応し、temp_a変数３３ｆがブロックＤの入力レジスタＢＤｒに対応し、a_out配列３３ｇがブロックＤのメモリポートＢＥｐに対応する。更に、process_b関数３３ｈがブロックＥに対応し、temp_b変数３３ｉがブロックＥの入力レジスタＢＥｒに対応し、b_out配列３３ｊがブロックＥのメモリポートＢＥｐに対応する。
【００２８】
このような図３及び図４の例示に対する回路と動作記述の対応は、例えば、図５に例示されるように、ユーザによって作成される。図５は、回路と動作記述の対応表３２の例を示す図である。
【００２９】
図５に例示される回路と動作記述の対応表３２は、例えばＣプログラムによる動作記述プログラム３３で定義されている関数名、配列名、変数名等の動作記述名毎に、例えばＲＴＬで記述されたＬＳＩ３、及びＬＳＩ３に含まれるブロック、メモリ、レジスタ等の回路記述名を対応させたテーブルである。
【００３０】
回路と動作記述の対応表３２では、例えば、main()関数３３ａをＬＳＩ３全体に対応させ、data_in配列３３ｂをメモリＡに対応させ、stream2content関数３３ｃをブロックＣに対応させ、temp2変数３３ｄをブロックＣメモリポートＢＣｐに対応させている。
【００３１】
また、process_a関数３３ｅをブロックＤに対応させ、temp_a変数３３ｆをブロックＤの入力レジスタＢＤｒに対応させ、a_out配列３３ｇへの書き込みをブロックＤのメモリポートＢＥｐに対応させる。更に、process_b関数３３ｈをブロックＥに対応させ、temp_b変数３３ｉをブロックＥの入力レジスタＢＥｒに対応させ、b_out配列３３ｊへの書き込みをブロックＥのメモリポートＢＥｐに対応させる。
【００３２】
次に、プログラム動作結果ログ３４の例として、図４に例示される動作記述プログラム３３の実行ログで説明する。図６は、プログラム動作結果ログ３４の例を示す図である。図６に例示されるプログラム動作結果ログ３４は、ＣＰＵ１１が動作記述プログラム３３を実行した順に、時系列に付与されるログ行番号と、動作記述プログラム３３のプログラム行番号を示す実行行番号と、実行内容とを出力した結果を示すログである。
【００３３】
実行行番号は、プログラムが実行された順番を示している。実行内容は、この例では、形式「aaa配列（aaa値）からデータが読み出され、bbb変数へ書き込まれる。」で示し、行内で使われた各変数の値を出力している。このような形式とすることで、全ての変数について、書き込みされた行番号、参照された行番号、それらの順番がわかる。変数の依存関係と合わせて、データの流れを追跡することが出来る。
【００３４】
図７は、図２の処理１にて行なわれる結果ログ解析について説明するためのフローチャートである。図７において、処理１での結果ログ解析を簡潔に説明するために、動作記述プログラム３３の他の例と、そのプログラム動作結果ログ３４の他の例とを、夫々、動作記述プログラム３３ｓとそのプログラム動作結果ログ３４ｓとして、図８に示す。図８は、動作記述プログラム３３の他の例を示す図である。
【００３５】
図８に例示される動作記述プログラム３３ｓを実行した際のその実行ログの出力例をプログラム動作結果ログ３４ｓとして示している。この例においても、時系列に付与されるログ行番号と、動作記述プログラム３３ｓのプログラム行番号を示す実行行番号と、実行内容とを出力した結果を示す。この例では、実行内容には、演算処理によって変更される変数を出力変数として、また演算処理によって入力される変数を入力変数とが書き出される。つまり、演算処理によって出力変数は入力変数によって変更される。
【００３６】
例えば、ログ行番号「ｌｏｇ−１」としてログ出力された実行行番号「１」では、動作記述プログラム３３ｓを参照すると、「ｄ＝ｒｅｇｃ+ｒｅｇｄ」が行なわれているため、出力変数を「ｄ」、入力変数を「ｒｅｇｃ」と「ｒｅｇｄ」として認識することができる。
【００３７】
ログ行番号「ｌｏｇ−２」としてログ出力された実行行番号「２」では、動作記述プログラム３３ｓを参照すると、「ｃ＝ｒｅｇｂ−ｒｅｇｃ」が行なわれているため、出力変数を「ｃ」、入力変数を「ｒｅｇｂ」と「ｒｅｇｃ」として認識することができる。
【００３８】
ログ行番号「ｌｏｇ−３」としてログ出力された実行行番号「３」では、動作記述プログラム３３ｓを参照すると、「ａ＝ｃ＊ｄ」が行なわれているため、出力変数を「ａ」、入力変数を「ｃ」と「ｄ」として認識することができる。
【００３９】
ログ行番号「ｌｏｇ−４」としてログ出力された実行行番号「４」では、動作記述プログラム３３ｓを参照すると、「ｂ＝ｃ+ｄ」が行なわれているため、出力変数を「ｂ」、入力変数を「ｃ」と「ｄ」として認識することができる。
【００４０】
ログ行番号「ｌｏｇ−５」としてログ出力された実行行番号「５」では、動作記述プログラム３３ｓを参照すると、「ｒｅｇａ＝ｍｉｎ（ａ，ｂ）」が行なわれているため、出力変数を「ｒｅｇａ」、入力変数を「ａ」と「ｂ」として認識することができる。
【００４１】
図７に戻り、ＣＰＵ１１は、図８に示すようなプログラム動作結果ログ３４ｓから１行ずつ読み出して、変数の最終変更情報４１ｍが記録されている第１の中間テーブル４１（後述）を参照することによって、プログラム動作結果ログ３４ｓに示される入力変数に一致する変数名に対応する変更情報４１ｍを読み出す（ステップＳ１１）。変更情報４１ｍは、ログ行番号とプログラム行番号とで示され、ステップＳ１２での処理によって更新される。
【００４２】
続けて、ＣＰＵ１１は、プログラム動作結果ログ３４ｓに示されるログ行番号と実行行番号とを、第１の中間テーブル４１において出力変数と一致する変数名に対応させて、ログ行番号とプログラム行番号として変更情報４１ｍを書き込む（ステップＳ１２）。
【００４３】
そして、ＣＰＵ１１は、プログラム動作結果ログ３４ｓの処理中のログ行番号と、出力変数と、入力変数と、ステップＳ１１で取得した入力変数の最新の変更情報４１ｍとを、第２の中間テーブル４２に格納する（ステップＳ１３）。
【００４４】
ＣＰＵ１１は、プログラム動作結果ログ３４ｓの全ての行を終了したか否かを判断する（ステップＳ１４）。未処理の行がある場合、ＣＰＵ１１は、ステップＳ１１へ戻り、上記した同様の処理を繰り返す。一方、全ての行を終了した場合、ＣＰＵ１１は、図８の動作記述プログラム３３ｓに対応する回路の動作記述の対応表３２ｓを参照して、動作記述名として存在する入力変数と出力変数とを残し、更に、回路データにおける変数の依存関係回路記述名の対応によって示される動作解析結果３５を出力する（ステップＳ１５）。
【００４５】
図９は、第１の中間テーブル４１のデータ例を示す図である。図９に例示される第１の中間テーブル４１は、変数名、ログ行番号、プログラム行番号等の項目を有する。変数名は、動作記述プログラム３３ｓの変数名のうち、プログラム動作結果ログ３４ｓに記録された変数名である。ログ行番号は、その変数が変更された最新のプログラム動作結果ログ３４ｓのログ行番号を示す。プログラム行番号は、その変数が変更された最新の動作記述プログラム３３ｓの行番号を示す。
【００４６】
第１の中間テーブル４１では、変数名「ａ」、「ｂ」、「ｃ」、「ｄ」、「ｒｅｇａ」、「ｒｅｇｂ」、「ｒｅｇｃ」、及び「ｒｅｇｄ」が格納され、そのうち変数名「ａ」、「ｂ」、「ｃ」、「ｄ」、及び「ｒｅｇａ」が、それら値が変更されていることを示している。これら変数名に対応するログ行番号及びプログラム行番号が、変更された最新の変更情報４１ｍとなる。変数名「ｒｅｇｂ」、「ｒｅｇｃ」、及び「ｒｅｇｄ」については、それら値が変更されなかったことを示している。
【００４７】
図１０は、第２の中間テーブル４２のデータ例を示す図である。図１０に例示される第２の中間テーブル４２は、ログ行番号、出力変数、入力変数１、入力変数２等の項目を有する。入力変数に関して入力変数１、入力変数２の２項目を有する例としているが、項目数は、動作記述プログラム３３ｓにおける入力変数の数に対応した項目数とすればよい。
【００４８】
ログ行番号は、出力変数がログ出力された際のプログラム動作結果ログ３４ｓのログ行番号を示す。入力変数１及び入力変数２は、夫々、第１の中間テーブル４１から取得した変更情報４１ｍのログ行番号と入力変数との対で示される。ここで、出力変数、入力変数１及び入力変数２は、動作記述プログラム３３ｓの動作記述名（例えばＣプログラムの変数名）である。
【００４９】
このデータ例において、動作記述名「ｒｅｇａ」、「ｒｅｇｂ」、「ｒｅｇｃ」、及び「ｒｅｇｄ」に対応する回路記述名が回路と動作記述の対応表３２ｓで示されている場合に、図７のステップＳ１５の処理について図１１で説明する。図１１は、動作解析結果３５の作成方法を示す図である。
【００５０】
図１１において、図１０に示す第２の中間テーブル４２のデータ例からプログラム変数によるプログラム変数依存関係５１が導かれる。このプログラム変数依存関係５１において、図８の動作記述プログラム３３ｓに対応する回路の動作記述の対応表３２ｓを参照して、対応する回路記述名によって依存関係を示す回路記述依存関係５２が導き出される。
【００５１】
ログ作業テーブル４５は、図７のステップＳ１５での処理によって、図８の動作記述プログラム３３ｓに対応する回路の動作記述の対応表３２ｓを参照して、図１０に示す第２の中間テーブル４２から動作記述名として存在する入力変数と出力変数とを残したテーブルである。
【００５２】
動作解析結果３５では、ログ作業テーブル４５の出力変数、入力変数１、入力変数２、入力変数３に対応する回路記述名を設定され。この際、入力変数１、入力変数２、入力変数３には、図７のステップＳ１１で取得した変更情報のログ行番号を併せて設定される。
【００５３】
次に、図２における処理２について説明する。図１２は、図２の処理２にて行なわれるデータパス解析について説明するためのフローチャートである。図１２において、ＣＰＵ１１は、回路記述名で変数が示される動作解析結果３５を参照して、依存関係を示すものを活性化データパスとして取得する（ステップＳ２１）。例えば、図３に示すＬＳＩ３の回路構成例において、メモリＡから、ブロックＣを通り、ブロックＥを通り、メモリＢに至るデータパスが取得される。
【００５４】
次に、ＣＰＵ１１は、データパスにおけるメモリのスループットを算出する（ステップＳ２２）。ステップＳ２２において、ＣＰＵ１１は、動作記述プログラム３３と回路データ３１とを参照して、メモリのＩ／Ｏのスループットを計算する。格納データのサイズとメモリのＩ／Ｏ幅から必要クロックを算出する。
【００５５】
例えば、図５の回路と動作記述の対応表３２により、メモリＡとdata_in配列とが対応する場合、Ｃプログラム言語による動作記述プログラム３３を参照することによりdata_in配列の１回のアクセスがＡバイトであることを取得し、ＲＴＬによる回路データ３１を参照することによりメモリＩ／ＯのスループットがＢバイト／クロックであることを取得することができる。よって、data_in配列の１回のアクセスのクロック数は、Ａ／Ｂクロックとなる。
【００５６】
そして、ＣＰＵ１１は、データパスの処理時間を計算する（ステップＳ２３）。依存関係の被参照位置から参照位置までのデータパスのスループットが算出される。ＣＰＵ１１は、ＲＴＬの回路データ３１によって動作する回路範囲（動作モジュール）を推定、動作するデータパスのレジスタ段数を抽出して見積もる。
【００５７】
更に、ＣＰＵ１１は、ステップＳ２１で選択した活性化データパスにおける依存関係からブロック間の動作時間を算出して、遅延解析結果３６として記憶領域に出力する（ステップＳ２４）。各ブロックの動作状況が決定され、動作率が算出される。例えば、動作記述プログラム３３に沿って、各ブロックの処理時間の積み上げを行い、全体の処理時間をスケジュールして全体の処理時間を決定する。
【００５８】
図１３は、図１２のステップＳ２３におけるデータパスの処理時間の計算方法を説明するためのフローチャート図である。図１３において、ＣＰＵ１１は、回路データ３１を参照して、メモリやレジスタなどの順序回路素子をノードとしてレジスタグラフを作成する」（ステップＳ２３−１）。メモリやレジスタなどの順序回路素子をノードとして抽出した後、メモリを含むレジスタ（以下、単にレジスタ）の出力から組み合わせ回路により接続された次のレジスタまでのデータパスを有効アークとして、レジスタグラフ４３を作成し記憶領域に出力する。
【００５９】
そして、ＣＰＵ１１は、プログラム動作結果ログ３４から、回路データ３１との間で対応のある入力ポイント（入力変数）と出力ポイント（出力変数）とを読み取って、レジスタグラフ４３の対応するレジスタ間の最多パス（同じ段数で到達するパスが多いもの）をレジスタ段数とする（ステップＳ２３−２）。経路が見つからなかった場合、最も近いレジスタ間にパスがあるものと仮定する。
【００６０】
次に、ＣＰＵ１１は、処理時間を算出する（ステップＳ２３−３）。データパスのレジスタ段数から処理時間を算出する。或いは、動作記述プログラム３３を参照することによって、配列で定義されるデータのサイズをデータ量とし、データパスのバンド幅で割る演算によって処理時間を算出してもよい。
【００６１】
更に、ＣＰＵ１１は、処理のステップ数を算出する（ステップＳ２３−４）。例えば、ループ回数を判定することによってステップ数を算出する。ループ回数で判定する場合には、
（１）ループは２回として計算する。
（２）具体的な回数を集計せず、変数（例えばNloop）として式で出力する。
（３）ログから推定する。
【００６２】
ログから推定する場合には、データ量から関係する／関係しそうな変数を入力として用いてプログラム動作結果ログ３４から得られたログの量（ログ行数）に基づいてステップ数を算出する。
【００６３】
図１２のステップＳ２４では、このステップＳ２３−４で算出されたステップ数を用いて、ブロック間の動作時間を算出する。図１４は、動作時間の算出例を説明するための図である。図１４では、図３に示すＬＳＩ３の構成例に基づいて、回路データ３１におけるメモリやブロックの回路記述名（変数名）毎の動作状態を、時間軸に沿って例示している。
【００６４】
図１４において、時刻Ｔａで、ブロックＤはメモリＡの読み出しを開始する。時刻Ｔａから時刻Ｔｂ間で、メモリＡの読み出しに６サイクルかかることを示している。ブロックＣのメモリポートＢＣｐから出力先のブロックＤの入力レジスタＢＤｒまでの処理には、４サイクルかかることを示している。
【００６５】
従って、時刻Ｔｂから時刻Ｔｃ間で、ブロックＣがメモリＡから読み出しを終了してから４サイクル後に、ブロックＣはブロックＤへデータを渡す。時刻Ｔｃから時刻Ｔｆ間で、ブロックＤはメモリＢへの書き込みの６サイクルを含めて、１０サイクルで処理を行うことを示している。
【００６６】
また、時刻Ｔｃで、ブロックＤは次のメモリＡの読み出しを開始する。時刻Ｔｃから時刻Ｔｅ間で、メモリＡの読み出しに６サイクルかかることを示している。ブロックＣのメモリポートＢＣｐから出力先のブロックＥの入力レジスタＢＥｒまでの処理には、４サイクルかかることを示している。
【００６７】
従って、時刻Ｔｅから時刻Ｔｆ間で、ブロックＣがメモリＡから読み出しを終了してから４サイクル後に、ブロックＣはブロックＥへデータを渡す。時刻Ｔｆから時刻Ｔｈ間で、ブロックＥはメモリＢへの書き込みの６サイクルを含めて、１０サイクルで処理を行うことを示している。
【００６８】
このように処理にかかったサイクル数が、記憶領域に遅延解析結果３６として出力される。
【００６９】
次に、図２における処理３について説明する。図１５は、図２の処理３にて行なわれるデータトグル率の算出方法について説明するためのフローチャートである。トグル率とは、クロック１回当たりの平均変化回数である。図１５において、ＣＰＵ１１は、回路と動作記述の対応表で対応付けされている変数の変化率を算出して、回路データ３１におけるレジスタの変化率とする（ステップＳ３１）。
【００７０】
そして、ＣＰＵ１１は、ブロック毎にデータパス間のレジスタの変化率の平均を算出して、そのブロックのデータトグル率とする（ステップＳ３２）。
【００７１】
また、ＣＰＵ１１は、プログラム動作結果ログ３４を参照することによって、各メモリの読み出し回数と書き込み回数とをそのメモリのアクセス情報として取得して、ブロック毎のデータトグル率と、データトグル率を算出する際に用いたクロックサイクル数と、メモリ毎のアクセス情報とを動作率見積もり結果３７として記憶領域に出力する（ステップＳ３３）。
【００７２】
ＣＰＵ１１は、プログラム動作結果ログ３４を参照することによって、回路と動作記述の対応表で対応付けされている変数が変更される回数をカウントすることで変更回数を得ることができる。例えば、レジスタＡとレジスタＢとが回路と動作記述の対応表３２で対応付けされており、また、レジスタＡが３２ビット幅であると仮定して説明する。
【００７３】
例えば、レジスタＡが５クロックサイクルで、ＤＡ１−＞ＤＡ２−＞ＤＡ３−＞ＤＡ４と３回データが変更されたとすると、一回のデータ変化は、変化ビット数をビット幅で割り算した値で求められるため、
ＤＡ１−＞ＤＡ２でビットの変化が８箇所である場合、８／３２変化であり、
ＤＡ２−＞ＤＡ３でビットの変化が６箇所である場合、６／３２変化であり、
ＤＡ３−＞ＤＡ４でビットの変化が７箇所である場合、７／３２変化である。
【００７４】
レジスタのクロック当たりの平均データトグル率は、
ビット変化総数÷（ビット総数×クロックサイクル数）
＝（８+６+７）÷（３２×５）＝０．１３１２５  となる。
【００７５】
同様にレジスタＢでの平均データトグル率を計算した結果、０．３となった場合、レジスタＡ−Ｂ間で示されるブロックのデータトグル率を２つの平均の０．２１５６２５とする。このようにして算出されたブロックのデータトグル率は、組み合わせ回路トグル率として参照される。
【００７６】
次に、図２における処理４について説明する。図１６は、図２の処理４にて行なわれる電力見積もり方法について説明するためのフローチャートである。図１６において、ＣＰＵ１１は、レイアウト後セル情報５１と、各ネットの負荷容量値５２と、素子電力情報５３と、電源電圧値５４と、処理３による動作率見積もり結果３７とを参照して、各素子について、素子の分類に応じたステップＳ６１からＳ６４の処理を実行して電力を計算し、それらの総和を求める（ステップＳ６０）。
【００７７】
素子がクロック素子の場合はステップＳ６１を実行して、クロック素子の電力を計算する。素子がＦＦ（フリップフロップ）素子の場合はステップＳ６２を実行して、ＦＦ素子の電力を計算する。素子がメモリ素子の場合はステップＳ６３を実行して、メモリ素子の電力を計算する。素子が上記以外の素子の場合はステップＳ６４を実行して、データパス系のゲート電力を計算する。
【００７８】
上述した電力見積もり方法は、例えば、ＣＭＯＳ回路の動的電力は、各素子出力の充放電電力の総和で求められることに基づく。すなわち、
全素子Σ｛素子内部電力＋出力ネット充放電電力｝
で表される。
【００７９】
データパスのノードとなる素子毎の動作回数は、
時間（クロック）当たりのトグル率（変化回数）×動作時間（クロック数）
で求められる。動作時間は、上述処理２で算出された遅延解析結果３６を参照することによって得られる。
【００８０】
各素子の電力は、
負荷容量×動作回数
となる。
【００８１】
以下、素子の分類毎の電力見積もり方法について示す。上記動作回数は、クロックトグル回数によって表される。また、処理３で算出されたデータトグル率は、組合せ回路トグル率として表される。クロック素子電力はステップＳ６１、ＦＦ電力はステップＳ６２、メモリ電力はステップＳ６３、そして、組合せ回路電力はステップＳ６４にて算出される。
【００８２】
・クロック素子電力＝（クロックトグル回数×クロックトグル１回当たりの電力）
・ＦＦ電力＝クロック電力＋データ電力
＝（クロックトグル回数×クロック１回当りの電力）＋
（クロックトグル回数×組合せ回路トグル率×データトグル１回当たりの電力）
・メモリ電力＝メモリ読み出し回数×メモリ読み出し１回当たりの電力
＋メモリ書き込み回数×メモリ書き込み１回当たりの電力
・組合せ回路電力＝データ電力
＝（クロックトグル回数×組合せ回路トグル率×データトグル１回当たりの電力）
【００８３】
メモリ読み出し１回当たりの電力、及びメモリ書き込み１回当たりの電力は、素子電力情報５３から入力される。
【００８４】
上記計算において、データトグル１回当たりの電力は、
データトグル１回当たりの素子内部電力
＋データトグル１回当たりの出力ネット放電電力
で求められる。処理３で算出したデータトグル率を組合せ回路トグル率として、データトグル１回当たりの電力と動作回数を示すクロックトグル回数とを乗算することによってデータ電力を求めることができる。
【００８５】
ここで、データトグル１回当たりの素子内部電力は、素子電力情報５３から入力される。半導体製造テクノロジに依存して決められる情報である。
【００８６】
また、データトグル１回当たりの出力ネット放電電力は、素子電力情報５３から入力される。レイアウト後セル情報５１を参照することによって特定した処理中の素子を示すネット駆動セルと、各ネットの負荷容量値５２を参照することによって特定されるそのネット駆動セルのネットの負荷容量値との組合せによって、素子電力情報５３から出力ネット充放電電力を取得する。
【００８７】
上述より、ＲＴＬによる回路データ３１から、ＬＳＩ３の電力を見積もることができる。つまり、動作プログラムログから得た依存関係においてＲＴＬの変数に置き換えたデータパスを用いて算出した素子の動作時間を用いて、各素子の動作率や電力を算出し、電力の総和で集積回路の電力を見積もることができる。
【００８８】
従って、ＬＳＩ３の動作率の見積もりを、チップ全体のレベルで実行可能なネットがない状態である機能仕様書（ＦＳ）の段階であっても、早期に行なうことができる。また、電力見積もり結果を電源設計に用いることができるため、設計見直しなどの手戻りの発生を低減することができ、効率的なＬＳＩ設計を行なうことができる。
【００８９】
以上の説明に関し、更に以下の項を開示する。
（付記１）
集積回路の消費電力検証方法であって、
回路データで記述される論理回路モジュール毎のデータトグル率を算出する動作率算出手順と、
データ電力を要する素子に対しては前記データトグル率を用いて該データ電力を算出して、全素子の電力の総和を算出する電力総和算出手順とをコンピュータが実行することを特徴とする集積回路の消費電力検証方法。
（付記２）
電力総和算出手順は、
前記データ電力を要する素子に対しては、前記データトグル率にデータトグル１回当たりの電力と動作回数を示すクロックトグル回数とを乗算することによってデータ電力を算出することを特徴とする付記１記載の集積回路の消費電力検証方法。
（付記３）
動作率算出手順は、
前記論理回路モジュールを有する集積回路の動作をプログラムした動作記述プログラムの第一の変数と前記回路データの第二の変数との対応表を参照することにより、該動作記述プログラムを実行することによって得られた動作結果ログを用いて、該第二の変数が対応する該第一の変数のデータの１クロック当たりの変化回数を変化率として算出する変化回数算出手順と、
データパス間の変数の変化率の平均をデータトグル率として算出するデータトグル率算出手順とを有することを特徴とする付記２記載の集積回路の消費電力検証方法。
（付記４）
データフローを示すデータパスを解析して、該データパス上の前記論理回路モジュール毎の動作時間を出力するデータパス解析手順を前記コンピュータに実行させ、
電力総和算出手順は、クロック当たりの変化回数と前記動作時間とを乗算することによってクロックトグル回数を算出することを特徴とする付記３記載の集積回路の消費電力検証方法。
（付記５）
前記動作結果ログを用いて論理回路モジュール間の依存関係を解析し、前記対応表を用いて依存関係における前記動作記述プログラムの第一の変数を対応する前記回路データの第二の変数で示した動作解析結果を出力するログ解析手順を前記コンピュータに実行させ、
前記データパス解析手順は、前記第二の変数による前記依存関係を示す動作解析結果を用いて前記データパスを解析することを特徴とする付記４記載の集積回路の消費電力検証方法。
（付記６）
集積回路の消費電力検証装置であって、
回路データで記述される論理回路モジュール毎のデータトグル率を算出する動作率算出手段と、
データ電力を要する素子に対しては前記データトグル率を用いて該データ電力を算出して、全素子の電力の総和を算出する電力総和算出手段とを有することを特徴とする集積回路の消費電力検証装置。
（付記７）
集積回路の消費電力検証装置としてコンピュータに機能させるプログラムを格納したコンピュータ読取可能な記憶媒体であって、該コンピュータに、
回路データで記述される論理回路モジュール毎のデータトグル率を算出する動作率算出手段と、
データ電力を要する素子に対しては前記データトグル率を用いて該データ電力を算出して、全素子の電力の総和を算出する電力総和算出手段として機能させることを特徴とするコンピュータ読取可能な記憶媒体。
（付記８）
集積回路の消費電力検証装置としてコンピュータに機能させるコンピュータ実行可能プログラムであって、該コンピュータに、
回路データで記述される論理回路モジュール毎のデータトグル率を算出する動作率算出手順と、
データ電力を要する素子に対しては前記データトグル率を用いて該データ電力を算出して、全素子の電力の総和を算出する電力総和算出手順とを実行させることを特徴とするコンピュータ実行可能プログラム。
【００９０】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【００９１】
３            ＬＳＩ
１１          ＣＰＵ
１２          メモリユニット
１３          表示ユニット
１４          出力ユニット
１５          入力ユニット
１６          通信ユニット
１７          記憶装置
１８          ドライバ
１９          記憶媒体
３１          回路データ
３２、３２ｓ  回路と動作記述の対応表
３３、３３ｓ  動作記述プログラム
３４、３４ｓ  プログラム動作結果ログ
３５          動作解析結果
３６          遅延解析結果
３７          動作率見積もり結果
３８          電力結果
４１          第１の中間テーブル
４２          第２の中間テーブル
４３          レジスタグラフ
４５          ログ作業テーブル
１００        消費電力検証装置
【図１】
2011013713.tif 000003
【図２】
2011013713.tif 000004
【図３】
2011013713.tif 000005
【図４】
2011013713.tif 000006
【図５】
2011013713.tif 000007
【図６】
2011013713.tif 000008
【図７】
2011013713.tif 000009
【図８】
2011013713.tif 000010
【図９】
2011013713.tif 000011
【図１０】
2011013713.tif 000012
【図１１】
2011013713.tif 000013
【図１２】
2011013713.tif 000014
【図１３】
2011013713.tif 000015
【図１４】
2011013713.tif 000016
【図１５】
2011013713.tif 000017
【図１６】
2011013713.tif 000018