本発明は、消費電力見積方法、回路設計支援装置及びプログラムに係り、特に大規模集積回路(LSI:Large Scale Integrated circuit)の消費電力の見積を行う消費電力見積方法、回路設計支援装置、及びコンピュータにそのような消費電力の見積を行わせるプログラムに関する。
LSIの設計手法として、論理合成ツールを利用する設計手法がある。論理合成ツールを利用する設計手法では、レジスタ転送レベル(RTL:Register Transfer Level)の設計データ(以下、RTL設計データと言う)を作成し、RTL設計データを論理合成ツールに入力する。論理合成ツールは、ゲートレベル(Gate Level)の設計を自動的に行う。このようなRTL設計データを論理合成可能な記述をRTL記述と呼ぶ。RTL記述は、一部ゲートレベルの記述を含んでいても良い。RTL記述は、例えばASIC(Application Specific Integrated Circuit)セルのゲーテッドクロックバッファ(GCB:Gated Clock Buffer)を直接記述しても良い。GCBは、クロックゲートセル(Clock Gate Cell)と呼ばれることもある。
従来、消費電力解析(又は、消費電力見積)では、ゲートレベルの設計データを利用した解析が主流であったが、近年、RTL設計データを利用した消費電力解析(以下、RTL消費電力解析と言う)が普及してきた。RTL消費電力解析は、ゲートレベル設計データを利用した消費電力解析よりも設計の早期の段階で行えると共に、短時間(短ターンアラウンドタイム(TAT:Turn Around Time))で消費電力の見積が可能である。RTL消費電力解析の一例は、例えば特許文献1にて提案されている。
図1は、例えば特許文献1にて提案されているような従来のRTL消費電力解析を説明するフローチャートである。図1に示すように、RTL消費電力解析では、論理合成ツールの入力となる解析対象となる回路に関するRTL設計データ1D00と、解析対象となる回路に関するRTLシミュレーション結果(波形データ若しくはSAIF(Switching Activity Interchange Format)に代表されるスイッチング情報)1D01と、テクノロジライブラリ(Technology Library)1D02を入力とする。
例えば、RTL設計データ1D00として図2に示す記述例Ea、記述例Eaと図3及び図4に示すテストベンチ(Test Bench)の記述例Ebをシミュレーションして、図5に示す記述例EcのRTLシミュレーション結果1D01 を作成する。説明の便宜上、RTLシミュレーション結果1D01は、波形データの代わりに図5に示す記述例Ecを用いて説明する。
テクノロジライブラリデータ(以下、テクノロジライブラリと言う)1D02には基本的なセルの電力データが格納されている。RTL消費電力解析では、図1に示すように、最初に簡易合成ステップ(又は、処理)1P00により、RTL設計データ1D00及びテクノロジライブラリ1D02に基づいて簡易ネットリスト(Net List)1D03が生成される。上記特許文献1には、論理合成とネットリストを簡易化した消費電力解析が開示されている。特許文献1によれば、テクノロジライブラリ1D02に対応する電力データがあればテクノロジライブラリ1D02で定義されたパワーモデルを用いてネットリストを生成し、テクノロジライブラリ1D02に対応する電力データがなければテクノロジライブラリ1D02に依存しないパワーモジュールで構成されたネットリストを生成する。特許文献1では、上記論理合成がマイクロ合成と呼ばれており、ネットリストがパワーネットリストと呼ばれている。マイクロ合成及びパワーネットリストは、夫々図3及び図4の簡易合成ステップ1P00及び簡易ネットリスト1D03に対応する。 以下の説明では、一例として、簡易合成ステップ1P00で一般的な論理合成と同様にテクノロジライブラリ1D02にマッピングされたネットリストを説明する。
例えば、記述例EaのRTL設計データを入力にして、簡易合成ステップ1P00を実行し、図6に示す簡易ネットリスト1D03を作成する。説明の便宜上、図6では同期リセットの図示は省略する。図6中、FFはフリップフロップ(Flip-Flop)を示し、SCUADDFXCAは加算回路を示す。
次に、RTLシミュレーション結果1D01に基づいて図1に示す活性化率算出ステップ(又は、処理)1P01を行う。消費電力のうち、動的電力は、一旦活性化率と呼ばれる統計量を算出して、この統計量を用いて算出される。ある信号の動的電力Pは、P=C*V*V*Op*Fで算出され、ここでCは容量、Vは電圧、Fは基準とする周波数(以下、基準周波数と言う)、Opは動作率を示す。 動作率Opとは、ある信号の変化回数が基準周波数Fの変化回数を1回とした時の割合を示す。 例えば、基準周波数100MHzで1μs期間の測定結果があり、ある信号の変化回数が10回であったとすると、この信号の動作率Opは、10/(1μs/(1/100(MHz))=0.01となる。
又、後述する確率伝播計算やRAM(Random Access Memory)の消費電力見積では信号のレベルが必要になる。このため、測定期間を「1」として信号が「1」(又は、「0」)になっている期間の割合を算出する。1μs期間中、信号のレベルが「1」になっている期間が100nsであれば、測定期間を「1」として信号が「1」になっている期間の割合は100ns/1μs=0.1から算出する。
本明細書では、上記動作率Opと信号が「1」になる期間の割合を合わせて活性化率と呼ぶ。
例えば、記述例Ecを図1に示す活性化率算出ステップ1P01に入力すると、図7に示す活性化率データ1D04が生成される。図7に示す活性化率データ1D04は、信号名、活性化率及び動作率を含む。
次に、簡易ネットリスト1D03及び活性化率データ1D04に基づいて図1に示す確率伝播ステップ(又は、処理)1P02を実行する。この確率伝播ステップ1P02の処理は、論理合成で自動生成された信号の活性化率を算出するために行う。例えば、RTL記述(記述a)やネットリストの場合、n_000〜n_006はネットリストにはあるが、RTL記述には無い信号名である。これらのRTL記述には無い信号名の信号の変化データが波形データ(記述Ec)に含まれていないため、これらの信号の活性化率は活性化率算出ステップ1P01では算出できない。そこで、確率伝播技術を用いて、これらのRTL記述には無い信号名の信号の活性化率を算出する。
確率伝播技術とは、活性化率がわかっている信号の活性化率データを使って、活性化率がわかっていない信号の活性化率を算出する技術である。例えば、2入力アンド(AND)ゲートの入力の「1」になる期間の割合が夫々0.3であるとすると、2入力ANDゲートの出力が「1」になる条件は一方の入力0が「1」、且つ、他方の入力1が「1」である時に限る。そこで、〔出力が「1」になる期間〕を〔入力0が「1」になる期間〕*〔入力1が「1」になる期間〕から算出する。この計算式に従うと、出力が「1」になる期間は 0.3*0.3=0.09から算出される。これは、確率伝播技術で用いる式の一例にすぎないが、確率伝播技術では入力の活性化率を使って出力の活性化率を推定する。
このようにして、図1に示す確率伝播ステップ1P02によりRTL記述には無い信号の活性化率が求まる。RTL記述には無い信号の活性化率データを、図1に示す差分活性化率データ1D05と呼ぶ。
以上の処理により、活性化率データ1D04及び差分活性化率データ1D05を生成することができる。これら2つのデータ1D04, 1D05をマージすると、簡易ネットリスト1D03中の全信号の活性化率データがわかる。これらのデータ1D04, 1D05とテクノロジライブラリ1D02を使って図1に示す電力計算ステップ(又は、処理)1P03を実行し、電力見積値1D06を算出する。
ネットリストは、一般的な論理合成技術又は上記特許文献1に開示されている方法により、テクノロジライブラリで定義されているセルと関係付けられる。一般的な論理合成技術の場合、通常はテクノロジマッピングによりテクノロジで定義されたセルを用いたネットリストを生成する。特許文献1の方法では、一旦テクノロジに依存しないネットリストを作成しておき、電力計算の際にテクノロジに依存しないセルとテクノロジライブラリにあるセルの関係付けを行う。電力計算ステップ1P03を実行するまでに、或いは、電力計算ステップ1P03を実行中に、ネットリストとテクノロジライブラリにあるセルの関係付けを行う。以下の説明では便宜上、簡易ネットリスト1D03が既にテクノロジライブラリにマッピングされている場合を例に取って説明する。
テクノロジライブラリには、各セルの電力モデルが記載されている。例えば、テクノロジライブラリに信号変化1回当たりの電力量pが示されているとすると、基準周波数F及び動作率Opを用いて、このセルの電力をp*Op*Fから算出できる。テクノロジライブラリの電力モデルに従ってネットリスト1D03中の全要素の電力を求めて合計すれば、RTL設計データ1D00をRTLシミュレーション結果1D01のように動作させた場合の電力見積値を算出できる。
上記の方式は、RTLシミュレーション及び確率伝播技術が高速であることから、効率の良い消費電力見積手段となっている。しかし、確率伝播技術を用いているため、誤差が生じることがある。動作率Opが高くない箇所については問題がないが、動作率Opが高い箇所については誤差が消費電力見積全体に与える影響が大きくなる。
例えば、a&bという式があるとする。この式a&bの出力値の「1」になる割合を確率伝播技術で算出する場合を説明する。仮に、aとbの波形の関係が図8のようになっていた場合、a&bは図8のa&bの行に示した波形になる。 従って、実際の波形では「1」になる期間の割合は0である。一方、確率伝播技術で求めると、0.3*0.3=0.09となり、実際の波形と確率伝播技術で算出した波形との間に誤差が生じる。
一方、aとbの波形の関係が図9のようになっていた場合、a&bは図9のa&bの行に示した波形になる。従って、実際の波形では「1」になる期間の割合は0.3である。 しかし、確率伝播技術で求めると、0.3*0.3=0.09となり、実際の波形と確率伝播技術で算出した波形との間に誤差が生じる。
従って、確率伝播技術は高速で良い見積方法ではあるが、誤差が生じる可能性があり、 誤差の影響範囲が解析対象として重要な場合には問題になり、誤差を補正する必要がある。
近年、設計技術における改善として、RTL記述を元にゲーテッドクロックバッファ(GCB)を自動挿入する技術(以下、GCB技術と言う)が普及している。このGCB技術は、クロックclkが必要な時だけクロックclkを供給することにより、クロックパス系の動作率を低くする技術である。例えば、
always @(posedge clk) if (a==1'b1) A >= B;
があった時、GCB技術を使わなかった場合、レジスタAのクロック端子の信号は〔(clkの周波数)*2〕回変化することになる。
ゲーテッドクロックバッファ(GCB)の自動挿入技術では、前記の記述を機能が等価な下記の記述に変換する。ここで、GCBはゲーテッドクロックバッファであり、イネーブル信号enが「1」の期間だけclkの波形が n_0000に出力される回路を示すものとする。従って、aが「1」になる割合が0.1であると、n_0000の動作率Opはクロックclkの動作率の10分の1になり、回路の消費電力を削減することができる。
GCB i_gcb(.clk(clk), .en(a), .gclk(n_0000)); always @(posedge n_0000) A >= B;
尚、if文が下記のようにネストされている場合、
always @(posedge clk) if(a==1) if(b==1) A >= B;
ゲーテッドクロックバッファ(GCB)の自動挿入技術によれば、下記のような回路に変換される。ここで、n_0001はシミュレーション波形には無い信号なので、この信号に関しても確率伝播技術が適用される。
assign n_0001 = (a & b);
GCB i_gcb(.clk(clk), .en(n_0001), .gclk(n_0000));
always @(posedge n_0000) A >= B;
クロックclkは、通常は高周波信号であるため、回路の消費電力が大きくなる傾向がある。従って、確率伝播技術による誤差が大きく出る場合もあり、そのような場合には誤差を補正することが望ましい。
米国特許第6151568号公報
特許第3576928号公報
特開平7−73232号公報
確率伝播技術はLSIの消費電力見積手段として有効な手段ではあるが、全部又は一部分の活性化率の精度を向上させる必要がある場合もある。このような場合の解決策の1つでは、論理合成をしてネットリストで消費電力を見積もる。しかし、この解決策では、論理合成及びネットリストシミュレーションを行う必要があるため、手間と時間がかかり、RTL消費電力見積の1つの特徴である簡便さと高速性が損なわれてしまう。このため、RTL消費電力見積の簡易さと高速性が損なわれることなく高精度の消費電力見積を行う要望があった。
そこで、本発明は、RTL消費電力見積の簡易さと高速性が損なわれることなく高精度の消費電力見積を行うことができる消費電力見積方法、回路設計支援装置及びプログラムを提供することを目的とする。
本発明の一観点によれば、回路の消費電力を見積もる消費電力見積方法であって、前記回路に関するRTL設計データに基づいて簡易ネットリストを生成する簡易合成ステップと、前記回路に関するRTLシミュレーション結果に基づいて活性化率データを生成する活性化率算出ステップと、前記簡易ネットリストから前記回路に含まれる組み合わせ回路を抽出すると共に、前記RTLシミュレーション結果から前記組み合わせ回路への入力データを抽出し、該入力データを前記組み合わせ回路に適用した再シミュレーションにより差分活性化率データを生成する再シミュレーションステップと、前記活性化率データと前記差分活性化率データをマージしたデータに基づいて、前記RTL設計データに無い信号データの活性化率データを確率伝播技術により算出する確率伝播ステップと、前記確率伝播ステップが算出した活性化率データに基づいて前記回路の消費電力を見積もる電力計算ステップをコンピュータに実行させる消費電力見積方法が提供される。
本発明の一観点によれば、回路の消費電力を見積もる消費電力見積機能を有する回路設計支援装置であって、前記回路に関するRTL設計データに基づいて簡易ネットリストを生成する簡易合成手段と、前記回路に関するRTLシミュレーション結果に基づいて活性化率データを生成する活性化率算出手段と、前記簡易ネットリストから前記回路に含まれる組み合わせ回路を抽出すると共に、前記RTLシミュレーション結果から前記組み合わせ回路への入力データを抽出し、該入力データを前記組み合わせ回路に適用した再シミュレーションにより差分活性化率データを生成する再シミュレーション手段と、前記活性化率データと前記差分活性化率データをマージしたデータに基づいて、前記RTL設計データに無い信号データの活性化率データを確率伝播技術により算出する確率伝播手段と、前記確率伝播手段が算出した活性化率データに基づいて前記回路の消費電力を見積もる電力計算手段を備えた回路設計支援装置が提供される。
本発明の一観点によれば、コンピュータに、回路の消費電力を見積もる消費電力見積を行わせるプログラムであって、前記回路に関するRTL設計データに基づいて簡易ネットリストを生成する簡易合成手順と、前記回路に関するRTLシミュレーション結果に基づいて活性化率データを生成する活性化率算出手順と、前記簡易ネットリストから前記回路に含まれる組み合わせ回路を抽出すると共に、前記RTLシミュレーション結果から前記組み合わせ回路への入力データを抽出し、該入力データを前記組み合わせ回路に適用した再シミュレーションにより差分活性化率データを生成する再シミュレーション手順と、前記活性化率データと前記差分活性化率データをマージしたデータに基づいて、前記RTL設計データに無い信号データの活性化率データを確率伝播技術により算出する確率伝播手順と、前記確率伝播手順が算出した活性化率データに基づいて前記回路の消費電力を見積もる電力計算手順を前記コンピュータに実行させるためのプログラムが提供される。
開示の消費電力見積方法、回路設計支援装置及びプログラムによれば、RTL消費電力見積の簡易さと高速性が損なわれることなく高精度の消費電力見積を行うことができる。
開示の消費電力見積方法、回路設計支援装置及びプログラムは、回路に関するRTL設計データに基づいて簡易ネットリストを生成し、前記回路に関するRTLシミュレーション結果に基づいて活性化率データを生成し、前記簡易ネットリストから前記回路の組み合わせ回路を抽出すると共に、前記RTLシミュレーション結果から前記組み合わせ回路への入力データを抽出し、前記入力データを前記組み合わせ回路に適用した再シミュレーションにより差分活性化率データを生成し、前記活性化率データと前記差分活性化率データをマージしたデータに基づいて、前記RTL設計データに無い信号データの活性化率データを確率伝播技術により算出し、前記確率伝播技術により算出した活性化率データに基づいて前記回路の消費電力を見積もる。
以下に、本発明の消費電力見積方法、回路設計支援装置及びプログラムの各実施例を、図10以降と共に説明する。
RTL消費電力見積の利点の1つは、RTL論理シミュレーション環境を使ったデータをそのまま入力にできる点である。これに対し、ゲートレベル設計データを使った消費電力見積をする場合、一旦論理合成をしてゲートレベルの設計データを生成し、更にシミュレーションをしなければならないため、手間と時間がかかる。RTL消費電力見積の他の利点は、消費電力見積の高速性である。ゲートレベル設計データのシミュレーションと比較すると、RTL設計データのシミュレーションは高速であり、シミュレーションデータがコンパクトであるため、消費電力見積を高速に行える。一方、RTL消費電力見積の場合、入力される情報としてはRTL記述やRTLシミュレーション結果しかなく、RTLシミュレーション結果に残ることが保証されるような記述がなされることは約束されていない。そこで、この条件を満たしつつ、消費電力見積の精度を向上する必要がある。
図10は、本発明の各実施例が適用可能なコンピュータシステムを示す斜視図である。図10に示すコンピュータシステム100は、中央処理装置(CPU:Central Processing Unit)やディスクドライブ等を内蔵した本体部101、本体部101からの指示により表示画面102a上に消費電力見積結果(又は、消費電力解析結果)等を表示するディスプレイ102、コンピュータシステム100に種々の情報を入力するためのキーボード103、ディスプレイ102の表示画面102a上の任意の位置を指定するマウス104及び外部のデータベース等にアクセスして他のコンピュータシステムに記憶されているプログラム等をダウンロードするモデム105を有する。
ディスク110等の可搬型記録媒体に格納されるか、モデム105等の通信装置を使って他のコンピュータシステムの記録媒体106からダウンロードされる、コンピュータシステム100に少なくとも消費電力見積機能を持たせるプログラム(消費電力見積ソフトウェア又はツール)は、コンピュータシステム100に入力されてコンパイルされる。プログラムは、コンピュータシステム100(即ち、後述するCPU201)を消費電力見積機能を有する回路設計支援装置(又は、シミュレーションシステム)として動作させる。プログラムは、例えばディスク110等のコンピュータ読み取り可能な記録媒体に格納されていても良い。コンピュータ読み取り可能な記録媒体は、ディスク110、ICカードメモリ、フロッピー(登録商標)ディスク等の磁気ディスク、光磁気ディスク、CD−ROM等の可搬型記録媒体に限定されるものではなく、モデム105やLAN(Local Area Network)等の通信装置や通信手段を介して接続されるコンピュータシステムでアクセス可能な各種記録媒体を含む。
図11は、コンピュータシステム100の本体部101内の構成を説明するブロック図である。図11に示す本体部101は、バス200により接続されたCPU201、RAMやROM(Read Only Memory)等を有するメモリ部202、ディスク110用のディスクドライブ203及びハードディスクドライブ(HDD:Hard Disk Drive)204を有する。本実施例では、ディスプレイ102、キーボード103及びマウス104も、バス200を介してCPU201に接続されているが、これらは直接CPU201に接続されていても良い。又、ディスプレイ102は、入出力画像データの処理を行う周知のグラフィックインタフェース(図示せず)を介してCPU201に接続されていても良い。
コンピュータシステム100において、キーボード103やマウス104は回路設計支援装置の入力部(又は、入力手段)を構成する。ディスプレイ102は、消費電力見積結果等を画面102a上に表示する表示部(又は、表示手段)を構成する。CPU201は、半導体集積回路の設計段階で回路の消費電力見積を行う見積部(又は、見積手段)として機能する。メモリ部202、ディスクドライブ102及びHDD204は、格納部(又は、格納手段)を構成し、レジスタ(図示せず)等を含んでも良い。
尚、コンピュータシステム100の構成は図10及び図11に示す構成に限定されるものではなく、代わりに各種周知の構成を使用しても良い。
図12は、本発明の第1実施例における消費電力見積方法を説明するフローチャートである。図12中、図1と同一部分には同一符号を付し、その説明は省略する。図12に示す処理は、LSI等の半導体集積回路の設計段階でCPU201により実行される。
図12において、1D00〜1D02は入力データであり、1P00〜1P03は基本的には図1と同様のステップである。確率伝播ステップ(又は、処理)1P02は、図1の場合と同様の活性化率データID04と活性化率データ2D04をマージしたものを処理する点が図1の場合と異なる。1D03〜1D06は中間又は最終データであり、基本的には図1と同様のデータである。ただし、図1の差分活性化率データ1D05にはシミュレーションによる差分活性化率データに含まれている信号についても確率伝播技術で求めた値が含まれるが、図12の差分活性化率データ1D05にはシミュレーションによる差分活性化率データ2D04に示されているデータが記載されている。FORK0は、後続の2つの処理系列の両方が実行されることを示してる。JOIN0は、前段の2つの処理系列の両方が完了すると後続の処理系列を開始することを示している。尚、説明の便宜上、図12では上記2つの処理系列が並列に実行される場合を示すが、これらの2つの処理系列は逐次的に実行されるものであっても良い。
尚、RTL設計データ1D00、RTLシミュレーション結果1D01、テクノロジライブラリ1D02、簡易ネットリスト1D03、活性化率データ1D04、確率伝播による差分活性化率データ1D05、電力見積値1D06、入力信号リスト2D00、再観測信号リスト2D01、差分モジュール記述2D02、差分テストベンチ記述2D03及びシミュレーションによる差分活性化率データ2D04は、例えば格納部に格納される。
先ず、本実施例で用いる入力データについて説明する。ここでは説明の便宜上、RTL設計データの記述例Eaが図2に示す如くであり、記述例Eaの設計データ用のテストベンチの記述例Ebが図3及び図4に示す如くであるものとする。記述例Ea/Ebをシミュレーションすると、 記述例Ebの90行目〜98行目の標準出力文により信号値が出力される。この信号値の出力の記述例Ecは、図5に示す如くであるものとする。
図13は、この場合の波形データ、即ち、RTLシミュレーション結果1D01を示す。 図13中、a,b,A,...は、図6の簡易ネットリスト上の線分で示すノードにおける信号を示す。図13では、データフォーマットの一例としてVCD(Value Change Dump)フォーマットが用いられている。VCDフォーマットは、時刻とその時刻に変化した信号のみ、その信号ID番号と信号値を記録することでデータを圧縮できる。
ここでは説明の便宜上、波形データの代わりに本質的に同等である標準出力結果(記述例Ec)を使って説明する。又、見積期間が5ns〜165nsの場合を対象として説明する。記述例Ecに165nsなる値が書かれているが、通常この値は165ns+δns(δは限りなく0に近い正の数値)とし、δが分解能を超えている小さい値であるため数値上は165nsであるが165ns丁度よりも後の時刻を指しているものとして理解する。
次に、中間データ1D03について説明する。簡易合成ステップ1P00は、RTL設計データ1D00を例えば図6に示す如き簡易ネットリスト1D03に変換する。図6は記述例Eaに対してゲーテッドクロックバッファを自動推定しなかった場合に相当する。図14は、簡易ネットリスト1D03の他の例を示す。図14中、FFはフリップフロップ(Flip-Flop)を示し、SCUADDFXCAは加算回路を示す。図14は、ゲーテッドクロックバッファを推定した場合に相当する。つまり、図14の簡易ネットリスト1D03は、図9に示す場合に対してGCBの自動挿入を行うことで合成されるもので、図6の回路部分B000の代わりに図14の回路部分B001を用いて消費電力を見積もる。尚、説明の便宜上、図14では同期リセットの図示は省略する。以下では、図14の簡易ネットリスト1D03を用いて説明する。尚、一旦図6の簡易ネットリストID03を生成した後のいずれかのステップでゲーテッドクロックバッファを挿入する場合の処理も、基本的には同じである。
図14は、演算器マクロが残っている場合の簡易ネットリスト1D03を示す。図14のように最小単位が演算器であっても良いが、32ビット加算器の内部がゲートレベルになっていても良い。
図12の差分モジュール抽出ステップ(又は、処理)2P00は、RTLシミュレーション結果1D01及び簡易ネットリスト1D03に基づいて簡易合成ステップ1P00が自動生成した信号を抽出する。抽出方法としては、簡易ネットリスト1D03から簡易ネットリストの信号の一覧を生成し、RTLシミュレーション結果1D01又はテクノロジライブラリ1D02からRTLの信号の一覧を生成して、自動生成された信号、即ち、RTL設計データ1D00には無い信号の一覧を作成する方法がある。別の方法としては、簡易合成ステップ1P00が自動生成した信号のリストを出力する方法がある。簡易合成ステップ1P00は信号を自ら生成するので、自動生成された信号を知っている。従って、簡易合成ステップ1P00が自動生成した信号を出力することにより、所望の機能を達成できる。更に別の方法として、自動生成される信号にネーミングルールがある場合には、このネーミングルールにより信号を検出しても良い。
上記の処理を図14の簡易ネットリスト1D03に適用した場合を説明すると、最初に自動生成された信号n_003〜n_008を抽出する。次に、クロックツリーに含まれる自動生成した信号をリストから削除する。尚、クロックツリーに含まれる自動生成した信号はリストから削除しなくても良い。この例では、信号n_007はクロックツリーに含まれるので削除する。信号n_003, n_004, n_005, n_006, n_008はリストから削除しない。信号n_007を削除した場合には、図14中のGCB(i_007)ではこの出力である信号n_007は削除せずに入力である信号n_008のみを計測する。信号n_007の動作率は、〔信号n_008が「1」になる割合(イネーブルになる割合)〕*〔clkの動作率〕により算出する。
信号n_003, n_004, n_005, n_006, n_008全てを計測しても良いが、フリップフロップ(FF:Flip-Flop)のデータ入力端子の入力になっているものを削除するとしても良い。 RTLにおいて0遅延でシミュレーションしている場合、後続のFFの活性化率に近い値になるので計測対象から外す。これにより、信号n_003, n_004, n_008が再観測信号リスト2D01に残る。図15は、再観測信号リスト2D01を示す図であり、再観測信号リスト2D01はインスタンス名と再観測信号を含む。
次に検出した信号n_003, n_004, n_008から回路の入力方向に回路をたどり、RTLシミュレーション結果1D01にある信号を見つけるまでさかのぼり、全入力がRTLシミュレーション結果1D01に含まれる図16の部分回路を抽出する。図16中、部分回路i_000はAND回路、部分回路i_002は加算器、部分回路i_003は加算器である。RTLシミュレーション結果1D01にある信号の見つけ方としては、RTLシミュレーション結果1D01にあるか否かを判定する方法、信号n_003, n_004, n_008のリストに無い信号に到達することで判定する方法、ネーミングルールで判定する方法がある。例えば、自動生成された信号のネーミングルールがn_>数値<である場合、これにマッチするか否かで信号を判定できる。
次に、部分回路の包含関係を調べる。重複する部分回路がある場合には、他の部分回路を包含する方の部分回路を残す。例えば、図17に示すような2つのAND回路と2つの排他的論理和(Exclusive-OR)回路を有する回路から複雑な部分回路を抽出する場合、信号n_0010, n_0011, n_0012, n_0013を終点とする4個の部分回路が抽出されるが、信号n_0010, n_0011, n_0012を終点とする部分回路は信号n_0013を終点とする部分回路に含まれるので取り除く。つまり、信号n_0010〜n_0012を出力とする部分回路は、信号n_0013を出力とする部分回路に含まれるので、この場合は信号n_0013を出力とする部分回路のみを残す。
次に、上記の如く包含関係を調べた結果残された部分回路を含むモジュール(以下、差分モジュールと言う)を生成する。差分モジュールの生成を図14の簡易ネットリスト1D03に適用した場合の差分モジュール記述2D02を図18に示す。図18に示す記述例Eeは、部分回路B001を有し、各部分回路に必要な信号が宣言された記述になっており、このような差分モジュール記述2D02が出力される。
次に、これらの部分回路の入力となる信号のリスト(以下、入力信号リストと言う)2D00を抽出する。この例では、信号i_Sample.a, i_Sample.b, i_Sample.A, i_Sample.B, i_Sample.C, i_Sample.Dが入力信号リスト2D00として出力される。図19は、入力信号リスト2D00を示す図であり、入力信号リスト2D00はインスタンス名と入力信号を含む。
以上が差分モジュール抽出ステップ2P00の処理である。次に、差分テストベンチ生成ステップ2P01(又は、処理)を説明する。
差分テストベンチ生成ステップ2P01は、信号入力リスト2D00及び再観測信号リスト2D01に基づいて、先ずRTLシミュレーション結果1D01から差分モジュール内の部分回路の入力となるデータを抽出する。部分回路の入力データはi_Sample.a, i_Sample.b, i_Sample.A, i_Sample.B, i_Sample.C, i_Sample.Dである。これらの値はシミュレーション結果に書き込まれている。 i_Sample.a, i_Sample.b, i_Sample.A, i_Sample.B, i_Sample.C, i_Sample.Dは夫々のシミュレーション結果を抽出する。シミュレーション結果(図5の記述例Ec)の場合、4番目、5番目、6番目、7番目、8番目、9番目の列を抽出する。これにより、差分モジュール内の部分回路の入力のデータとして、図20に示す記述例Ed(description_d.txt)が得られる。
次に、差分テストベンチ生成ステップ(又は、処理)2P01は、description_d.txtをロードするテストベンチを生成し、差分テストベンチ記述2D03として出力する。図5に対する差分テストベンチ記述2D03の例を図21乃至図23に示す。
以下に、図21乃至図23に示す記述例Efの記述内容を説明する。
記述例Efの1,2行目は、図21に示すようにRTLシミュレーション結果1D01に残っている信号にデータをロードするための信号を宣言している。これらの信号は、記述例Efの15行目〜20行目で部分回路の入力端子に結線している。従って、この信号にdescription_d.txtをロードすれば部分回路に入力値を与えることができる。
記述例Efの26行目〜36行目でdescription_d.txtのデータをロードしている。記述例Efの26行目でdescription_d.txtに含まれているサンプル数を与えている。この例では、クロックclkで16サイクルのシミュレーションを行った結果なのでサンプル数は16個ある。記述例Edのデータはi_Sample.a, i_Sample.b, i_Sample.A, i_Sample.B, i_Sample.C, i_Sample.D の順に入っている。そこで、図21及び図22に示す記述例Efの29行目〜34行目で値をfscanfでリードして、各々、\i_Sample_ReSim/a, \i_Sample_ReSim /b, \i_Sample_ReSim /A, \i_Sample_ReSim /B, \i_Sample_ReSim /C, \i_Sample_ReSim /Dに読み込んでいる。このようにして、description_d.txtのデータを部分回路にロードしている。
記述例Efの3,4行目は、図21に示すように部分回路に含まれる再計測対象の信号(簡易合成が自動生成した信号)をアサインする信号を宣言している。更に、記述例Efの21〜23行目で階層参照した元の信号をこれらの信号に代入している。記述例Efの5,6行目は再計測対象の信号の値を保持するレジスタを宣言している。記述例Efの79行目〜81行目では、図23に示すように現在の再計測対象の信号の値を格納部に記憶している。この値は1サイクル前の結果として次のサイクルで参照される。
記述例Efの8,9行目は、図21に示すように信号変化回数をカウントするためのレジスタを宣言している。図22及び図23に示す記述例Efの59,61,63行目で実際に信号変化を検出してカウントしている。記述では0→1、1→0への変化があった時に「1」を加算している。
記述例Efの10,11行目は、図21に示すように信号値が「1」の時をカウントするためのレジスタを宣言している。図22及び図23に示す記述例Efの60,62,65行目で実際に信号レベルを検出してカウントしている。
入力データがなくなったら、記述例Efの28行目〜36行目のループから抜けて、37行目〜55行目を処理する。記述例Efの37行目〜45行目までは、エッジ数のカウント結果を周期数で割って動作率を算出し、これを記載している。記述例Efの46行目〜54行目までは、レベル1の期間のカウント結果を周期数で割って「1」の期間の割合を算出し、これを記載している。
次に、差分テストベンチ生成ステップ2P01の後に実行される差分シミュレーションステップ(又は、処理)2P02を説明する。
差分シミュレーションステップ2P02は、差分モジュール記述2D02と差分テストベンチ記述2D03に基づくシミュレーションを実行する。図24は、差分シミュレーションステップ2P02の差分シミュレーション結果を示す図である。図24中、例えば\Sample_ReSim/Aは図14に示す信号Aの差分シミュレーション結果を示し、他の信号B, C, ..., n_003等も同様の表記で示されている。図24の差分シミュレーション結果では、信号n_003の各々のビットと信号n_008の信号変化回数と「1」(ハイレベル)の期間が算出されている。信号変化回数は、末尾が_counterで終わっている信号名の変化回数のカウント値であり、「1」(ハイレベル)の期間は、末尾が_counter_levで終わっている信号名が「1」(ハイレベル)の期間のサイクル数である。信号変化を調べるためには、1サイクル前の値が必要であり、_prevで終わっている信号名は、1サイクル前の値を保持しているレジスタの様子を示す。
又、記述例Efのテストベンチの標準出力により、図25に示す記述例Egが得られる。記述例Egには、i_Sample.n_003, i_Sample.n_004, i_Sample.n_008夫々の活性化率、即ち、動作率と「1」の期間の割合が記載されている。記述例Eg中、Sample.n_003等は動作率を示し、L)Sample/n_003等は「1」の期間の割合を示す。従って、信号n_003, n_004, n_008の活性化率が算出できる。このように算出した活性化率を表形式にまとめると、図26のようになり、シミュレーションによる差分活性化率データ2D04として出力される。
以上が、図12に破線で囲んで示す再シミュレーションステップ2000に含まれるステップ2P00〜2P02の処理の説明である。
次に、図12に示す活性化率算出ステップ1P01の処理を説明する。活性化率算出ステップ1P01は、RTLシミュレーション結果1D01に基づいて基準周波数の周期でシミュレーションサイクルを数え、この例ではクロックclkを基準とすると16サイクルをシミュレーション時間(又は、周期)として数える。又、活性化率算出ステップ1P01は、RTLシミュレーション結果1D01を用いて立ち上がり変化、立ち下がり変化を数える。この立ち上がり変化、立ち下がり変化のカウント回数を、シミュレーション時間(又は、周期)、即ち、16で割ったものを動作率とする。i_Sample.aに印加された信号の場合、15nsで立ち上がり、85nsで立ち下がっているので、信号変化は2回である。従って、i_Sample.aに印加された信号の場合、2/16=0.012500が動作率として算出される。
ここでは便宜上、立ち上がり変化を1'b0→1'b1、立ち下がり変化を1'b1 → 1'b0に限定してカウントし、どちらか一方又は両方が1'bz又は1'bxの時は立ち上がり、立ち下がり変化無しとみなした。更に、活性化率算出ステップ1P01は、記述例Ecから「1」の期間を算出する。例えばi_Sample.aに印加された信号の場合、「1」の期間は15ns+δns−95nsであり、80nsの間「1」だったことがわかる。一方、シミュレーション時間は165ns−5ns=160nsであり、「1」の期間の割合は80/160より0.50000になる。
活性化率算出ステップ1P01は、同様にしてRTLシミュレーション結果1D01の中に含まれている信号について動作率と「1」の期間の割合を算出し、これらを例えば図7に示すような活性化率データ1D04に書き出す。説明の便宜上、図7はA[4:0]、rst, a, bについてのみ活性化率と動作率を示す。
以上が活性化率算出ステップ1P01と再シミュレーションステップ2000の処理の説明である。これらの処理を実行すると、活性化率データ1D04及びシミュレーションによる差分活性化率データ2D04が生成される。活性化率算出ステップ1P01と差分シミュレーションステップ2P02が共に終了すると、JOIN0で示すように制御がマージされ、確率伝播ステップ1P02に制御が移る。
次に、確率伝播ステップ1P02の入力を作成する。活性化率データ1D04のフォーマットに合わせて、活性化率データ1D04とシミュレーションによる差分活性化率データ2D04をマージしたデータを作成し、確率伝播ステップ1P02に入力する。これにより、RTLシミュレーションで観測可能だった信号と、再シミュレーションで観測した信号に対する活性化率データが作成できる。 マージしたデータを図1の場合と同様に確率伝播ステップ1P02に入力する。その結果、RTL設計データ1D00になかった信号データの活性化率データを用いた確率伝播ステップ1P02が実行でき、確率伝播技術により確率伝播ステップ1P02が生成する差分活性化率データ1D05の精度を向上することができる。このように、確率伝播ステップ1P02には、再シミュレーションステップ2000の差分シミュレーションステップ2P02で求めたシミュレーションによる差分活性化率データ2D04と活性化率算出ステップ1P01で求めた活性化率データ1D04が、簡易ネットリスト1D03と共に入力される。又、確率伝播ステップ1P02で求めた活性化率データ2D04, 1D04以外の信号については、図1と同様の確率伝播技術を用いて算出される。
更に、図1の場合と同様に電力計算ステップ1P03の処理を実行することにより、最終的な電力値が算出できる。ただしこの場合、電力計算ステップ1P03は、簡易ネットリスト1D03、活性化率データ1D04、シミュレーションによる差分活性化率データ2D04、確率伝播による差分活性化率データ1D05及びテクノロジライブラリ1D02に基づいた電力計算を行って電力見積値1D06を出力する。
図1の場合、差分活性化率データ1D05に含まれる信号は確率伝播技術により算出され誤差を含んでいるが、図12のシミュレーションによる差分活性化率データ2D04の場合、再シミュレーションにより正確な値が算出されている。例えば、i_Sample.n_008が「1」の期間は1サイクルなので、「1」の期間の割合は1/16より0.0625になる。一方、確率伝播技術でandの場合は出力が「1」になる期間の割合を入力側の「1」になる期間の割合の積で算出すると定義されていたとする。この時、i_0000は入力0(i_Sample.aが接続されている)が「1」になる期間の割合は0.50000、入力1(i_Sample.bが接続されている)が「1」になる期間の割合は0.43750なので、0.50000*0.43750より0.21875になる。従って、図1の場合、(1−(0.0635/0.21875))より71%の誤差が生じることがわかる。これに対し、図12の場合には再シミュレーションにより誤差無しで正確な値が算出され、動作率に関しても任意の計算式により算出される。
次に、再シミュレーションについて更に説明する。上記の説明では、RTLシミュレーションソフトウェアを利用する場合を例に取ったが、同等の計算をする専用ソフトウェアを利用するようにしても良い。又、既存のソフトウェアを改良して、同等の計算を行うオブジェクト又は関数を既存のソフトウェアから呼び出すことにより上記の計算を実行するようにしても良い。ソースコードを生成してコンパイルした実行形式を利用することにより、高速実行を可能とする例については後述する。
上記の説明で用いた確率伝播技術の計算方法は一例にすぎず、どのような伝播方式であっても、算出ポイントの周辺の情報から推定する計算方法であるという点では同じであることから本質的に誤差が生じる可能性があると考えられる。
次に、本実施例における消費電力見積の実行時間について説明する。本実施例において、ケース(1)〜(5)について消費電力見積のシミュレーションを実行した結果を図27に示す。図27に示す消費電力見積の実行時間のシミュレーション結果は、16サイクルを100万サイクル分にしたテストベンチを用いて計測した。ケース(1)は元のRTLシミュレーション、即ち、RTL設計データ1D01を生成するシミュレーション時間である。ケース(2)は、記述例Efと記述例Eeでシミュレーションを実行した結果であり、sample_num=100万とした。ケース(3)は記述例Efから波形データを出力する記述を取り除いた記述と記述例Eeでシミュレーションした実行結果である。ケース(4)は、ケース(2)では記述例Efのfscanfでデータをリードしているのを記述例Ehに示すメモリリードで実行した際のシミュレーション結果である。ケース(5)は記述例Efのfscanfでデータをリードしているのを記述例Ehに示すメモリリードに変更した記述から波形データの出力を削除した記述と記述例Eeでシミュレーションした結果である。
このケース(5)では、活性化率の算出を含む処理で、消費電力見積の実行時間がケース(1)の実行時間の約80%であり、比較的高速に処理できていると言える。尚、データパス系の動作率が高い場合を例に挙げて説明したが、データパス系の動作率が低い場合には高周波のクロックパス系が無い分消費電力見積の高速性が多少損なわれると考えられる。
本実施例では、解析対象となる回路の組み合わせ回路を切り出して再シミュレーションを行う。具体的には、簡易ネットリスト1D03から組み合わせ回路を抽出し、RTLシミュレーション結果1D01から組み合わせ回路への入力データを抽出し、組み合わせ回路に入力データを適用して再シミュレーションを行い、簡易合成処理が推定した回路部分のシミュレーションデータを生成して活性化率の算出に用いて活性化率を算出する。信号の計測方法としては、再シミュレーション時に再シミュレーションに用いる回路の出力をカウントする回路を入れてシミュレーションしたり、RTLシミュレーションシステムと活性化率算出用のライブラリを利用してシミュレーションしたりする方法を用いることで、シミュレーション時に活性化率をカウントする。
本実施例によれば、RTL設計データ1D00(RTL記述)とRTLシミュレーション結果1D01を入力としつつ、消費電力見積の精度を向上することができる。
上記第1実施例は、ゲートレベル相当になった組み合わせ回路について再シミュレーションを実行する。このため、ゲートレベルシミュレーションを実行する場合程は長くないものの、消費電力見積の実行時間が比較的長く、シミュレーション結果のデータサイズが比較的大きくなる。そこで、消費電力見積の実行時間を更に短縮可能な実施例を以下に説明する。
以下に説明する本発明の第2実施例及び後述する本発明の第3乃至第7実施例では、基本的には図12に示す上記第1実施例の処理を実行するが、消費電力見積の更なる高速化のための最適化処理を更に実行する。
本実施例では、図12に示す差分モジュール抽出ステップ2P00において、消費電力見積を高速化するために計測ポイントを削減する。具体的には、ゲーテッドクロックバッファ(GCB)、クロックゲート(又は、クロックドゲート)、クロックゲーティングセル等を基準に計測ポイントを絞り込む。以下の説明では、便宜上GCBを基準に計測ポイントを絞り込むものとする。
GCBを手動で挿入した場合、通常はイネーブル信号及び出力値の波形データがRTLシミュレーション結果1D01に残っている。一方、GCBを自動挿入した場合、イネーブル信号がRTLシミュレーション結果1D01内に残らない可能性がある。ネストやifの条件式にif(a & b)やif(a==2'b10)と記載された場合には、信号値がRTLシミュレーション結果1D01に残らない。従って、通常、このようなイネーブル信号は確率伝播技術によって算出される。
クロックパス系以外のデータパス系であれば、少なくともFFにおいての活性化率が算出可能である。仮に活性化率の誤差が大きくなっても、FF等の活性化率データが正確に求められているポイントで活性化率を修正することができる。
一方、GCBの出力信号データはRTLシミュレーション結果1D01には残らない。従って、確率伝播を是正する方法が無い。一方、1個のGCBで数100ビットのFFを制御していることもあり、GCBの影響力が大きい場合がある。更に、クロックゲーテッドによる低電力化は一般的な手法であり、この手法の効果を評価する要望がある。特にクロックゲーテッドによる低電力化手法の適用前後において差を見る場合、ゲーテッド適用箇所に着目して評価することになる。従って、活性化率のデータが正確であればある程、回路設計支援装置のオペレータ(又は、ユーザ)が活性化率のデータに基づいて行う各種判断が正しくなって解析対象となる回路の解析に良好に反映させることができる。
既存のRTL消費電力見積ツールは、RTL記述を入力としながら、自動挿入されるGCBで制御されるクロックツリー及びFFの電力を見積もる機能を有する。このような機能を有するRTL消費電力見積ツールは、何らかの方法でGCBを推定することができる。簡易合成ステップ1P00において、図14のようにGCBが含まれた簡易ネットリストを生成する方法は一例にすぎず、図6のような記述の簡易ネットリストから後段の処理においてGCB推定しても良い。いずれにせよ、既存のRTL消費電力見積ツールはGCBの自動挿入を模擬する機能を有するので、GCBセルの一覧を生成することができる。
ここでは、簡易合成ステップ1P00において図14のようにGCBが推定される場合を例に取って説明する。この場合、簡易合成ステップ1P00は、論理合成ツールに倣って、マルチブレプレクサMUXをGCBに置き換える処理を行って図14の回路を生成する。又、簡易合成ステップ1P00の処理を拡張して、GCBのイネーブル信号につながる信号の一覧を生成する。図14の場合、図29に示すGCBイネーブル一覧表を生成し、このGCBイネーブル一覧表を再観測信号リストとして用いて上記第1実施例と同様の処理を行う。これにより、GCB部分のみ消費電力見積の精度が向上した見積結果が得られる。
本実施例は、消費電力見積の更なる高速化に有効である。実設計データでは、GCBの数は通常、全回路要素数の約0.3%程度にしかすぎない。従って、計測ポイントをGCBの部分に絞れば、消費電力見積の高速化が図れる。クロックパス系の活性化率のデータに関しては殆ど、或いは、全てをシミュレーション結果に基づくデータから算出できる。このため、クロックパス系の不確定要素を大幅に減少させることができる。上記第1実施例で用いた例の場合、本実施例では信号n_008を含む部分回路のみが計測ポイントの絞り込みの対象となる。従って、部分回路3個のうち1個のみに対して上記第1実施例と同様の計測をすれば良くなる。
このように、本実施例では、確率伝播技術の性質に着目する。つまり、確率伝播技術を用いる場合、組み合わせ回路に関してはデータパス上の結節点毎に活性化率が求まっている可能性が高く、且つ、求まっている活性化率は一定の許容範囲の精度を有する点に着目する。そこで、データパスに関しては確率伝播技術を用いる。ゲーテッドクロックバッファ(GCB)については、RTL消費電力見積で推定された入力側の活性化率しか求められていない。更に高周波な信号であり電力への影響が大きい場合がある。そこで、GCBのイネーブル信号enの入力を生成する回路に着目して、上記消費電力見積の高速化を図る。
本実施例は、差分モジュール抽出ステップ2P00を改良することで、ネットリスト上のGCB若しくはGCBのイネーブル信号を推定するデータを抽出し、GCBのイネーブル信号enから入力側にさかのぼっていきRTLシミュレーション結果1D01にある信号データを検出し、全入力がRTLシミュレーション結果1D01にある信号でGCBのイネーブル信号enを駆動する組み合わせ回路を抽出し、抽出した組み合わせ回路の入力をRTLシミュレーション結果1D01から抽出し、シミュレーション結果から抽出された組み合わせ回路の入力をGCBのイネーブル信号enを駆動する組み合わせ回路に適用してシミュレーションを行い、このシミュレーションの結果から活性化率を算出する。その結果、図8の差分活性化率のデータのうちのGCBクロックに関するデータの精度を向上できる。
本実施例では、再シミュレーションする回路の規模を比較的小さくすることができ、再シミュレーションする回路はRTLで良く、出力のイネーブル信号のみを再シミュレーションの対象とするので、波形データのデータサイズを比較的小さくすることができる。又、消費電力見積の速度低下を低く抑えられる。例えば、上記の記述例では、次のように(a & b)を再シミュレーションして信号n_0001の 活性化率を算出すれば良い。
assign n_0001 = (a & b);
解析対象となる回路の一例では、GCBの数は8500個以内であり、FFは20万個以上、ゲートは150万個以上あった。この場合、シミュレーション結果を生成するデータ、若しくは、活性化率を算出するべき信号は、全信号数の約0.3%程度しかない。従って、波形データを作るコスト及び活性化率を算出するコストは、消費電力見積全体のコストの約0.3%程度であると推定できる。更に、出力信号のみを評価するので、出力信号を生成する回路部分はゲートレベル記述であっても、RTL記述であっても良い。
本発明の第3実施例では、差分モジュールのデータを制限することで、データパス系のシミュレーション結果を精査する。データパス系のシミュレーション結果を精査するために、図12の差分モジュール抽出ステップ2P00においてシミュレーション結果の絞り込みを行う。シミュレーション結果の絞り込みの一例として、信号にインスタンス名を与えてそのインスタンスに含まれる信号のシミュレーション結果に限定する方法がある。この場合、例えばインスタンス名の一覧を入力し、上記第1実施例で生成された再観測信号リスト2D01の中から指定インスタンス名に属する信号のみを選択して後段の処理に渡す処理を追加で実行する。
シミュレーション結果の絞り込みの他の例として、演算器の出力信号のシミュレーション結果に限定する方法がある。この場合、例えば簡易合成ステップ1P00が演算器マクロを推定した時に、推定した演算器の出力信号名を記憶しておき、出力信号名の一覧を生成する。更に、この出力信号名の一覧を後段の処理に渡す処理を追加で実行する。
シミュレーション結果の更に他の例として、バス幅でシミュレーション結果を制限する方法がある。この場合、簡易合成ステップ1P00の処理の拡張で、wire [7:0] A,B,C,D,E;があって、簡易合成ステップ1P00の処理の対象がassign E = (A | B) &(C | D);であったとすると、(A | B)、(C | D)の結果は8ビットで推定される。更に、wire [7:0] n_0000, n_0001; が生成される。この時、n_0000, n_0001 を8ビットの信号の部分として記憶する。例えば、wire [7:0] n_0000; wire n_0001_00, ..., n_0001_07;が生成され、(C | D)の出力が{n_0001_00, ..., n_0001_07}につながっている回路が生成された場合には、{n_0001_00, ..., n_0001_07}の各信号が8ビットの信号の部分になっていることを記憶する。このようにして自動生成信号は何ビットのバスの部分になっているかを示す情報を取得することができる。最後に、閾値として入力されたビット数より多いビット数を選択して一覧を生成する処理を追加で実行し、更にこの一覧を後段の処理に渡す処理を追加で実行する。
シミュレーション結果の絞り込みの他の例として、RTLの指定範囲を入力して、この指定範囲に含まれる演算のみにシミュレーション結果を限定する方法がある。この場合、例えばインスタンス名を指定してこのインスタンス名の要素中に含まれる演算器を選択して一覧を生成する処理を追加で実行し、更にこの一覧を後段の処理に渡す処理を追加で実行する。
RTLの指定範囲を入力する方法は、手動ではなく自動的に行っても良い。この場合、確率伝播技術による算出結果のうち、動作率が閾値よりも大きいインスタンス名、或いは、動作率が大きい順に並べた時の上位N個のインスタンス名を自動的に選択する等の処理を追加で実行する。このように、RTLの指定範囲を自動的な入力することで、確率伝播技術による算出結果を評価したり、消費電力見積に与える影響が大きい箇所を補正することができる。
組み合わせ回路においてRTLシミュレーション結果1D01には無い信号線を計測して、確率伝播技術の誤差を低くすることができる。例えば、
always @(posedge clk) A <= ((B + C) * (D + E));
なる記述があった場合、信号A, B, C, D, Eのシミュレーション結果はRTLシミュレーション結果1D01内に含まれている。しかし、(B + C), (D + E) の出力値はRTLシミュレーション結果1D01内に残っていない。従って、これらの出力を用いる演算器(又は、乗算器)は、確率伝播された結果を用いて更に確率伝播を行うことになる。その結果、確率伝播技術の誤差が大きくなる可能性がある。
そこで、本実施例では、差分モジュール抽出ステップ2P00を改良することで、簡易合成ステップ1P00で生成した信号を駆動するネットリストを抽出し、抽出したネットリストの回路への入力をシミュレーション結果から抽出して再シミュレーションを実行し、(B+C), (D+E)の活性化率を算出する。これにより、消費電力見積の精度を向上することができる。例えば、加算器もゲートレベルに展開されていれば、加算器内の信号に関しても再シミュレーションにを実行することにより活性化率を得ることができる。
本実施例の方法は、GCBに着目した方法よりはシミュレーション時間が長くなる可能性があるが、少なくとも波形が残っている変数のみで行われている演算、例えば
assign A = B + C;
のような式は再シミュレーションの対象から外される。又、RTL設計データに含まれるゲートレベルの設計データも対象外になる。
本発明の第4実施例では、図12の差分モジュール抽出ステップ2P00において、図14のように演算器マクロが認識できる簡易ネットリスト1D03があるか、若しくは、演算器マクロを推定した簡易合成ステップ1P00が演算器の生成情報を生成している場合を想定する。この時、演算器がRTLの演算で簡便に表現可能であるか否かを判定し、簡易に表現可能な場合にはRTLの式を推定する。例えば、i_002が加算器であるという生成情報を用いて、assign n_003 = A + B; を推定する。
このように、本実施例では、差分モジュール抽出ステップ2P00を改良することで、簡易ネットリスト1D03からではなくRTLシミュレーション結果1D01から解析対象の回路を抽出する。つまり、RTLシミュレーション結果1D01から解析対象の回路を抽出し、抽出した回路の入力となる信号データ(即ち、入力データ)をシミュレーション結果から抽出し、抽出した回路に抽出した入力データを適用して再シミュレーションを行い、ネットリストレベルを用いた消費電力見積よりも高速に消費電力見積を行う。通常、RTLシミュレーション結果1D01では加算演算、比較演算等が記述されており、これらの演算はCPUの加算命令、比較命令等と関係付けられるため、多ビットの演算であってもCPUでは少ない演算回数で実行することができる。しかし、これらの演算がゲートレベルに展開されている場合、ゲート毎に計算を実行する必要があり演算時間がその分長くなる。
尚、RTLシミュレーション結果1D01の代わりに、加算器、比較演算器等がマクロとして認識できる簡易ネットリスト1D03を用いても良いことは言うまでもない。
本発明の第5実施例では、図12の差分モジュール抽出ステップ2P00及び差分テストベンチ生成ステップ2P01において、独立に実行できる組み合わせ回路と、独立に実行できる組み合わせ回路を駆動するテストベンチを個々に作成して差分シミュレーションステップ2P02においてシミュレーションを並列に実行する。例えば、図16の回路の場合、3個の部分回路が互いに関係しない。このような場合、部分回路を1個づつ記述(即ち、インスタンス化)して3個の回路を生成する。次に、生成した3個の回路に対応するテストベンチを作成し、個々のテストベンチを用いて別々のCPUにおいて消費電力見積の計算を実行する。これにより、TATの短縮が図れる。
簡易合成ステップ1P00が生成した信号を決定できる部分回路を抽出する場合、再シミュレーション時間が比較的長くなる可能性がある。そこで、特定の演算要素、特定のバス幅以上のものを選択し、再シミュレーションの計算量を削減するようにしても良い。
尚、組み合わせ回路を全て精査するとしたが、変形例として、オペレータが再検査が必要なブロックを指定し、指定されたブロックに対してのみ上記の如き処理を実行することもできる。更に、この変形例の更なる拡張として、指定されたブロックの電力値、指定されたブロックの組み合わせ回路の電力値、指定されたブロック全体の電力の中で組み合わせ回路の電力が占める割合等に閾値を設け、閾値を超えた電力値又は割合等を有するブロックに対してのみ上記の如き処理を実行することで、特に高精度の消費電力見積が要求される部分のみを精査するようにしても良い。
次に、本発明の第6実施例を説明する。
GCBが多段(又は、マルチステージ)で接続される場合がある。図30は、GCBが2段で接続されたマルチステージ回路の一例を示す図であり、図31は図30のマルチステージ回路の動作を説明する図である。図30中、i_000はGCB、b_000はバッファである。図30のマルチステージ回路において、信号n_0000, n_0001が図31に示す波形を有する場合、信号c_0002の動作率は「0」であるが、GCBの確率伝播式が〔信号n_0000が「1」になる期間の割合〕*〔(クロックCLKの立ち上がりエッジ数)/基本周波数〕であると、信号c_0002の動作率は0.14になり、実際の動作率と算出した動作率との間に誤差が生じる。
本実施例は、図12の差分モジュール抽出ステップ2P00において、2段目以降のGCBの出力の活性化率を別途算出することにより、イネーブル信号を計測して活性化率を算出する場合であっても誤差を生じさせない。つまり、2段目以降のGCBi_001を検索し、このGCBi_001のイネーブル信号n_0001を検索する。回路のクロックCLKの経路を辿って行き、GCBi_002を検索し、このGCBi_002のイネーブル信号n_0000を検索する。回路のクロックCLKの経路を更に辿って行き、クロックCLKのソースclkを検索し、一連の検索処理を終える。次に、検索した信号n_0000, n_0001を使って、assign c_0000_en = (n_0000 & n_0001);を生成して再シミュレーションの対象に加える。再シミュレーションの結果、信号c_0000_enの活性化率が求まる。信号c_0002の動作率は、〔信号c_0000_enの「1」になる期間〕*〔CLKの動作率〕で算出する。信号c_0002の動作率を、このようにして算出した値に置き換えるように電力計算ステップ1P03に指示をする。従って、イネーブル信号部分の再シミュレーションに限定しつつ、マルチステージのCGBの消費電力見積の精度低下を避けることができる。又、本実施例の処理は、GCBが3段以上で接続されたマルチステージ回路に対しても同様に適用可能である。
このように、本実施例では、差分モジュール抽出ステップ2P00を改良することで、GCBのイネーブル信号の精査を行う。つまり、GCBを入力側に辿って行き、そのGCB自身よりも入力側にあるGCBを全て検索し、各々のGCBのイネーブル信号enを抽出してandを取る記述を生成し、生成した記述を再シミュレーションの部分回路に加え、計測結果から導かれた該当するGCBに対してイネーブル信号enに再シミュレーションにより算出したイネーブル信号enの活性化率を与え、クロック信号clkにイネーブル信号enの動作率を与え、この動作率が前段のGCBのイネーブル信号の動作率の計算に使われる確率伝播アルゴリズムが回路設計支援装置に実装されている場合にはこの動作率が前段の動作率の算出に利用されないようにする。
図32は、本発明の第7実施例における消費電力見積方法を説明するフローチャートである。図32中、図12と同一部分には同一符号を付し、その説明は省略する。図32に示す処理は、LSI等の半導体集積回路の設計段階でCPU201により実行される。又、図32に示す処理は、図12において、差分テストベンチ生成ステップ2P01及び差分シミュレーションステップ2P02の代わりに実行される。本実施例では、再シミュレーションを実行する実行形式を生成して実行し、再シミュレーションの結果を算出する。図32に示すステップ3P00〜3P03は、RTLシミュレーション結果1D01及び差分モジュールから再シミュレーションを実行する実行形式を生成する実行形式生成ステップを形成する。
図32において、結果解析ステップ(又は、処理)3P00は、RTLシミュレーション結果1D00から信号を抽出しリストにする。ここでは、図5に示す記述例Ecの信号リストの1行目が図33に示す記述例Eiのように信号幅が明記されたRTLシミュレーション結果1D01が入力される場合を例に取って説明する。VCD(Value Change Dump)形式の波形等では、通常はビット幅が明記されているので、一般的な運用においても差しつかえが無い。
図34は、結果解析処理3P00が出力する信号マップ3D00の一例を示す。信号データ3D01は、図35の記述例Ekの2〜18行目に相当する。記述例Ekは、上記記述例Ecと同等の情報を有し、記述例Ecから時間の列以外をカンマ「,」で区切ったものに相当する。
カウント用記述生成ステップ(又は、処理)3P01は、信号マップ3D00、入力信号リスト2D00、再観測信号リスト2D01及び差分モジュール記述2D02に基づき、カウントするカウント記述3D02を生成する。カウント記述3D02としては、例えば図36乃至図39に示す如き記述例Ejが生成される。記述例Ejは、基本的には図21乃至図23に示す記述例Efと同等の計算を実現するC言語ソースである。記述例Ejは、2値論理で動作率に使うための変化回数をカウントする例を示す。
記述例Ejでは、data_arrayに信号データ3D01を読み込む。記述例Ekの場合では、1回目のサンプルデータをアドレス0番からclk, rst, i_Sample.a, ..., i_Sample.Wの順に書き込み、2回目のサンプルデータをアドレス18番から、同様に書き込み、17回目のサンプルデータまでが書き込まれている。 又、記述例Ejのbaseには、計測対象の要素数が書かれている。ここでは、clk,...,i_Sample.Wが18個なので、base = 18である。offsetとデータの関係は図34のようになり、これを信号マップ3D00として出力する。
記述例Ejのbitsには、ビット数が書かれている。例えば、クロックclkは1ビットなので、bits[0]=1、i_Sample.Aは32ビットなので、bits[4]=32となる。このようなビット数の各信号のの立ち上がり又は立ち下がりが発生した回数は、計算によりカウントできる。
拡張部分は、抽出した自動生成された信号に対する再シミュレーション、及び、変化回数の計測部分になる。例えば図40のような構造体std::vector<std::vector<unsigned>>等を用意して、count_arrayとする。図40は変化回数の計測を行うカウンタの一例を示す図である。尚、1回前の計算結果は配列prevに含まれている。
又、記述例Ejには、差分モジュール記述2D02に相当する記述を行う。例えば、assign n_008 = (a & b); に相当する記述は、記述例Ejの図38中矢印X1で示す行のようになる。又、i_Sample.aに相当する信号のインデックスを調べて、data_arrayの現在の値を参照するようする。同様にして、i_Sample.bに相当する信号のインデックスを調べて、data_arrayの現在の値を参照する。記述例Ejの図38中矢印X2で示す行でエッジを算出し、エッジが算出できたら図38中矢印X3で示す行で「1」を加算する。
コンパイルステップ(又は、処理)3P02は、カウント記述3D02として出力された記述例EjをC++コンパイル等でコンパイルし、記述例Ejの実行形式のカウンタプログラム3D03を生成する。
カウント実行ステップ(又は、処理)3P03は、記述例Ejの実行形式のカウンタプログラム3D03及び信号データ3D01に基づいてカウントを実行することで、記述例Ejの実行形式に信号データが入力され、RTLシミュレーション結果1D01にある信号と再観測信号リスト2D01で定義された信号の活性化率を含む活性化率データ3D04が算出される。この活性化率データ3D04は、図26に示す差分活性化率データと、図7に示す活性化率データをマージしたデータであり、後段の確率伝播ステップ1P02において図12のシミュレーションによる差分活性化率データ2D04の代わりに用いられる。
このように、本実施例では、再シミュレーションを活性化率データの生成段階で行う。このため、活性化率の算出ソースを自動生成し、この算出ソースをコンパイルし、コンパイル結果を使ってRTLシミュレーション結果1D01を入力し、RTLシミュレーション結果1D01にある信号と抽出した自動生成した信号の活性化率を同時に解析する。
このような選択的な精査をする場合、一旦確率伝播技術で高速に電力値を見積もった後、経験的に回路の構造上誤差が生じやすいことがわかっているブロックや電力的に支配的であるため時間がかかっても精査が必要であるブロック等をオペレータが指定するか、或いは、回路設計支援装置が閾値を用いて自動的に判別しても良い。
尚、拡張部分を関数化してコールバック関数にし、この関数の中身を自動生成してダイナミックリンクライブラリ化して、通常のカウントプログラムを拡張するようにしても良い。
本実施例では、ベクタ形式のデータをRTLシミュレーション結果1D01としたが、通常は信号変化のみを記載したVCD形式等のデータ形式が使われる。そこで、このようなデータ形式の場合、現在の値を保持して計算する。更にVerilog等のSimulation実装に習い、イベントドリブンで計算する拡張をしても良い。このようにすることで、再シミュレーションを活性化率の算出プログラムに組み込み、RTLシミュレーション結果1D01の読み込みを1回にまとめることができる。
以上の解決手段ではRTL電力見積手段が生成するデータから抽出する手段としたが、これに限らない。簡易合成時においては本発明が対照としている差分回路部分を生成するため、上記処理に必要なデータを持っている。合成時に上記相当の処理をあわせて行い、必要な回路を出力する手段を設けるとしても良い。又、簡易合成では一旦ゲーテッドクロックバッファの自動挿入がなされていない回路後推定され、別の手段でゲーテッドクロックバッファを推定する場合は、推定時に回路を出力するものとする。
上記各実施例によれば、確率伝播技術によって推定された値の代わりに実際に計測した値を使うため、消費電力見積の誤差がなくなり、消費電力見積の精度が向上する。又、再シミュレーションの範囲を限定した場合には、再シミュレーションの実行時間を短縮でき、TATを更に低減できる。
尚、本発明は、以下に付記する発明をも包含するものである。
(付記1)
回路の消費電力を見積もる消費電力見積方法であって、
前記回路に関するRTL設計データに基づいて簡易ネットリストを生成する簡易合成ステップと、
前記回路に関するRTLシミュレーション結果に基づいて活性化率データを生成する活性化率算出ステップと、
前記簡易ネットリストから前記回路に含まれる組み合わせ回路を抽出すると共に、前記RTLシミュレーション結果から前記組み合わせ回路への入力データを抽出し、該入力データを前記組み合わせ回路に適用した再シミュレーションにより差分活性化率データを生成する再シミュレーションステップと、
前記活性化率データと前記差分活性化率データをマージしたデータに基づいて、前記RTL設計データに無い信号データの活性化率データを確率伝播技術により算出する確率伝播ステップと、
前記確率伝播ステップが算出した活性化率データに基づいて前記回路の消費電力を見積もる電力計算ステップ
をコンピュータに実行させる消費電力見積方法。
(付記2)
前記活性化率データは、信号の変化回数が基準周波数の変化回数を1回とした時の割合を示す動作率と、所定測定期間に信号が所定論理値になっている期間の割合を含む、付記1記載の消費電力見積方法。
(付記3)
前記再シミュレーションステップは、
前記簡易合成ステップが自動生成した信号を抽出し、包含関係を調べた結果残された部分回路を含む差分モジュールを抽出する差分モジュール抽出ステップと、
前記RTLシミュレーション結果から前記差分モジュール内の部分回路の入力となるデータを抽出して該データをロードするテストベンチを生成する差分テストベンチ生成ステップと、
前記テストベンチに基づくシミュレーションを実行する差分シミュレーションステップを有する、付記1又は2記載の消費電力見積方法。
(付記4)
前記差分モジュール抽出ステップは、ゲーテッドクロックバッファを基準に前記回路の計測ポイントを削減する、付記3記載の消費電力見積方法。
(付記5)
前記差分モジュール抽出ステップは、前記差分モジュールのデータを制限する、付記3記載の消費電力見積方法。
(付記6)
前記差分モジュール抽出ステップは、前記簡易ネットリストに代えて前記RTLシミュレーション結果から前記回路を抽出する、付記3項記載の消費電力見積方法。
(付記7)
前記差分モジュール抽出ステップ及び前記差分テストベンチ生成ステップにおいて、独立に実行できる組み合わせ回路と、独立に実行できる組み合わせ回路を駆動するテストベンチを個々に作成し、前記差分シミュレーションステップにおいてシミュレーションを並列に実行する、付記3記載の消費電力見積方法。
(付記8)
前記差分モジュール抽出ステップは、解析回路の前記回路の2段目以降のゲーテッドクロックバッファの出力の活性化率を別途算出する、付記3項記載の消費電力見積方法。
(付記9)
前記再シミュレーションステップは、
前記簡易合成ステップが自動生成した信号を抽出し、包含関係を調べた結果残された部分回路を含む差分モジュールを抽出する差分モジュール抽出ステップと、
前記RTLシミュレーション結果及び前記差分モジュールから再シミュレーションを実行する実行形式を生成する実行形式生成ステップを有する、付記1又は2記載の消費電力見積方法。
(付記10)
前記活性化率算出ステップと前記再シミュレーションステップは、並行して実行される、付記1乃至9のいずれか1項記載の消費電力見積方法。
(付記11)
回路の消費電力を見積もる消費電力見積機能を有する回路設計支援装置であって、
前記回路に関するRTL設計データに基づいて簡易ネットリストを生成する簡易合成手段と、
前記回路に関するRTLシミュレーション結果に基づいて活性化率データを生成する活性化率算出手段と、
前記簡易ネットリストから前記回路に含まれる組み合わせ回路を抽出すると共に、前記RTLシミュレーション結果から前記組み合わせ回路への入力データを抽出し、該入力データを前記組み合わせ回路に適用した再シミュレーションにより差分活性化率データを生成する再シミュレーション手段と、
前記活性化率データと前記差分活性化率データをマージしたデータに基づいて、前記RTL設計データに無い信号データの活性化率データを確率伝播技術により算出する確率伝播手段と、
前記確率伝播手段が算出した活性化率データに基づいて前記回路の消費電力を見積もる電力計算手段
を備えた回路設計支援装置。
(付記12)
コンピュータに、回路の消費電力を見積もる消費電力見積を行わせるプログラムであって、
前記回路に関するRTL設計データに基づいて簡易ネットリストを生成する簡易合成手順と、
前記回路に関するRTLシミュレーション結果に基づいて活性化率データを生成する活性化率算出手順と、
前記簡易ネットリストから前記回路に含まれる組み合わせ回路を抽出すると共に、前記RTLシミュレーション結果から前記組み合わせ回路への入力データを抽出し、該入力データを前記組み合わせ回路に適用した再シミュレーションにより差分活性化率データを生成する再シミュレーション手順と、
前記活性化率データと前記差分活性化率データをマージしたデータに基づいて、前記RTL設計データに無い信号データの活性化率データを確率伝播技術により算出する確率伝播手順と、
前記確率伝播手順が算出した活性化率データに基づいて前記回路の消費電力を見積もる電力計算手順
を前記コンピュータに実行させるためのプログラム。
以上、本発明を実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
従来のRTL消費電力解析を説明するフローチャートである。
RTL設計データの記述例Eaを示す図である。
テストベンチの記述例Ebを示す図である。
テストベンチの記述例Eb(図3からの続き)を示す図である。
RTLシミュレーション結果データの記述例Ecを示す図である。
簡易ネットリストの一例を示す図である。
活性化率データの一例を示す図である。
式a&bの出力値の「1」になる期間の割合が実際の波形では0の場合を説明する図である。
式a&bの出力値の「1」になる期間の割合が実際の波形では0.3の場合を説明する図である。
本発明の各実施例が適用可能なコンピュータシステムを示す斜視図である。
コンピュータシステムの本体部内の構成を説明するブロック図である。
本発明の第1実施例における消費電力見積方法を説明するフローチャートである。
RTLシミュレーション結果を示す図である。
簡易ネットリストの他の例を示す図である。
再観測信号リストを示す図である。
差分モジュール抽出ステップで抽出される部分回路の一例を示す図である。
抽出される複雑な部分回路の一例を示す図である。
差分モジュールの記述例Eeを示す図である。
入力信号リストを示す図である。
差分モジュール内の部分回路の入力となるデータの記述例Edを示す図である。
差分テストベンチの記述例Efを示す図である。
差分テストベンチの記述例Ef(図21からの続き)を示す図である。
差分テストベンチの記述例Ef(図22からの続き)を示す図である。
差分シミュレーションステップのシミュレーション結果を示す図である。
記述例Efのテストベンチの標準出力の記述例Egを示す図である。
差分活性化率データを示す図である。
消費電力見積の実行時間のシミュレーション結果を示す図である。
記述例Ehを示す図である。
GCBイネーブル一覧表を示す図である。
GCBが2段で接続されたマルチステージ回路の一例を示す図である。
図30のマルチステージ回路の動作を説明する図である。
本発明の第7実施例における消費電力見積方法を説明するフローチャートである。
記述例Eiを示す図である。
信号マップを示す図である。
記述例Ekを示す図である。
記述例Ejを示す図である。
記述例Ej(図36からの続き)を示す図である。
記述例Ej(図37からの続き)を示す図である。
記述例Ej(図38からの続き)を示す図である。
カウンタの一例を示す図である。
符号の説明
100 コンピュータシステム
101 本体部
102 ディスプレイ
102a 表示画面
103 キーボード
104 マウス
105 モデム
106 記録媒体
110 ディスク
200 バス
201 CPU
202 メモリ部
203 ディスクドライブ
204 ハードディスクドライブ