ラベル PowerCompiler の投稿を表示しています。 すべての投稿を表示
ラベル PowerCompiler の投稿を表示しています。 すべての投稿を表示

2022年10月12日水曜日

DesignCompilerの電力解析結果

 ボスが面白いデータをくれた.DesignCompiler の電力解析結果である.乗算器を遅延制約を変えて合成している.

Period Intl     Switch Leak         Total
1 ns 636.4446 uW 523.31 uW 2.20E+04 nW 1.18E+03 uW
10 ns 63.6445 uW 52.331 uW 2.20E+04 nW 137.9381 uW
100 ns 6.3645 uW 5.2331 uW 2.20E+04 nW 33.5603 uW

すべて電力(ワット)で書かれているが,単なる和では Total は求まらない.

変換するにはエネルギーに変える.回路が同じだから処理あたりのエネルギーは同じ.
Intl+Sw (Power)        Intl+Sw (Energy)
1159.7546    nW 1159.76 fJ
115.9755     nW 1159.76 fJ
11.5976     nW 1159.76 fJ

リークもエネルギーに変える.単位時間に応じてリークは増える.
Leak (Energy)
2.20E+04 aJ
2.20E+05 aJ
2.20E+06 aJ

和を取ってエネルギーを求め,それをクロック時間で割って時間あたりのエネルギーである電力を計算する.結局,DesignCompilerの電力解析結果は,サイクルあたりの電力の総和を計算している事になる.
Total (Energy) Total (Power)
1.18E+03 fJ 1.18E+03 uW
1.38E+03 fJ 1.38E+02 uW
3.36E+03 fJ 3.36E+01 uW

[内部電力] = [内部エネルギー] / [時間]
[外部電力] = [外部エネルギー] / [時間]
[処理あたりのエネルギー] = [内部電力 + 外部電力 + リーク電力] * [時間] 
ということですね.



2021年12月18日土曜日

電力とエネルギーと電力解析CADの中身

集積回路CADでは,回路において電気がする仕事量として,エネルギー(電力量,electrical energy)ではなくなぜか電力(power)が使われる. PowerCompiler などのレポートも電力(W)で表示される.
電力とエネルギーは混同されがちだが違うので,本来の仕事量はエネルギーとなるべきである.ではツールはどう取り扱っているのか各種マニュアルを調べてみた.ちなみに,マニュアル中でも電力とエネルギーは割とグチャグチャです(もしくは凄くセンシティブに使い分けているのか)

・キャラクタライズツール側(SilicoonSmart, LibraryCompiler)
キャラクタライズツールは,電力を3要素に分解し,そのうち内部電力(Internal power)とリーク電力の項を.libとして保持する.
(1)リーク電力:静止時の電力
(2)内部電力:セル内部で消費される電力.貫通電流など.
(3)スイッチング電力:外部容量の充放電による電力
電力は本来時間の関数だが,時間の関数として持つ事は難しい.電力はある波形が入ったときに流れた電荷量の積分値に電圧をかけたもの(エネルギー)から,出力容量の充放電エネルギー量,リークによるエネルギー量を引くことで内部電力(正確にはエネルギー)を計算する.

.libの Power Table は,第一軸入力スリュー,第二軸出力容量,そして肝心の第三軸はトグルあたりのエネルギーなっている(Eint/transition, in units of fJouls).
リーク電力は入力論理値それぞれ一意の値となる.

・電力解析側(PowerCompiler)
こちらは一部憶測で,回路の消費電力を以下のように計算すると思われる(トグル確率による平均電力評価の場合).
(1) リーク電力:入力がHighの確率,Lowの確率,それぞれの時のリーク電力からリーク電力の期待値を計算し,全てのセルの総和を取る.
(2) 内部電力:全ての入力から出力へのエネルギー量に,入出力の遷移確率とパスの重みをかけたものの総和を取る※
(3) スイッチング電力:全てのパスの出力容量と対応するトグル確率をかけた物の総和をとり,Vdd^2/2をかける.

動的電力の単位は.lib中の容量単位,電圧単位,時間単位から以下のように計算する.静的電力は単位が.libに書いてある.

power_unit = (capacitive_load_unit * voltage_unit^2)/time_unit

要約すると以下の通り.
・キャラクタライズ側は,きちんとエネルギーを測ってそれをエネルギーとして Power table に登録している.リーク電力はそのまま.
・解析側は,Power tableに書かれたエネルギーとトグル確率から動的エネルギーを計算し,電力に変換.リーク電力は全セルの和をとる.

あたりまえ?かもしれないが,動的電力は回路が動いたときに消費した正味の電力なので,意味合いはエネルギーと等価.電力を周期で割った物ではない.

最初から最後までエネルギーとして取り扱えばこんな問題は起きなかったのに,なんでなんや...

※P_int = Σ_{i=A,B} E_{i→Z} x PathWeight x TggleRateという式がでてくる(A,Bは入力,Zは出力).P_intはエネルギーの総和を評価している.

.lib (Liberty)については Synopsys がその仕様をオープンにしているので参考にした.といっても800ページ近くあるので一部だけしか読めてないですが.

2019年1月18日金曜日

DesignCompilerにおける電力を考慮した論理合成

compileコマンドを使うとき
set_max_dynamic_power [val]
set_max_leakage_power [val]
compile -power_effort [none|low|medium|high]

compile_ultraコマンドを使うとき
set_leakage_optimization true
set_dynamic_optimization true
compile_ultra

compile_ultraはデフォルトで-area_high_effort_scriptオプションが
ついてしまい取り消せないので,上記の2つのコマンドの場合,compile -power_effort highの方が電力は減るっぽい(dynamicが2/3ぐらいになった).