Transcript Verilog
第10回 電力見積もりと省電力設計
慶應義塾大学 理工学部
天野
CMOS回路の消費電力
リーク電力
スイッチング電力
Cellの負荷容量を充放電することによる電力
VDD*VDD/2*Cload*TR (Toggle Rate)
TRは単位時間に出力の変化する回数
電源電圧の2乗に比例し、周波数に比例する
インターナル電力
トランジスタ内部(主としてドレーンとソース間)の漏れ電流によって消費
される電力。プロセスが進むにつれ、サイズが小さくなることから将来は
メジャーになると言われている。
各セルのリーク電力の総和となる
Cell内部で消費される電力、pMOSトランジスタとnMOSトランジスタが同
時にONになった瞬間に流れる貫通電流によるもの
TRに比例する
Design Compilerに組み込まれているPower Compilerによって見積
もることができる
ポリシリコン
n-MOSトランジスタに
おけるリーク電流
酸化膜
リーク電流
p-well
n-substrate
N-diffusion
Vdd
Vdd
貫通電流
容量の充電
A
A
Z
Z
放電
GND
GND
CMOS
インバータ
プロセスとライブラリの切り替え
Oklahoma State Univ.によるライブラリ
TSMC 0.18umプロセス
スタンダードセル数が少ない
今まで使ってきたRohm0.6umは、セルの内
部電力(インターナル電力)が定義されてい
ないため
cp –r ~hunga/vlsi07/10kai .
dc_shell-t –f ppico16.tclを実行
RTLでの見積もり
report_power –hier > ppico16.logで消費
電力を見積もってくれる
デフォルトは、TRを0.5と仮定
かなりいい加減で多くの場合、大目に出る
ppico16.logを見てみよう!
RTLでもTRをシミュレーションにより見積も
ることが可能だが、どうせならゲートレベル
でやった方が正確
ゲートレベルでの見積もり
合成の際にゲートの電力情報(lib.saif)を生成する
Switching Analysis Information File(だと思う)
ppico16.tcl中の記述
lib2saif –output “lib.saif” “osu018_stdcells.db”
SDF(Standard Dely Format)もversion1.0で出力しておく
write_sdf –version 1.0 ppico16.sdf
テストベンチ(ppico16_test_net.v)にTR測定を指定する
Forward Annotation
$read_lib_saif(“lib.saif”);
データ収集の範囲を指定
$set_toggle_region(“test.ppico16”);
$toggle_start();
$toggle_stop();
収集スタート
収集終わり
ゲートレベルでの見積もり
シミュレーションでデータを収集
./netsimにより下のコマンドを実行
vpower_dir = /usr/loca/vdec/synopsys/Synthesis-2004.12SP2/sparcOS5/power/vpower/libvpower.so:saifpli_bootstrap
verilog –u +loadpli1=${vpower_dir} ppico16_test_net.v ppico16.vnet
memory.v osu018_stdcells.v
実行時に、電力測定用のライブラリをロードする
実行の結果、ppico16.saifが得られる。ここに各ゲートの
TRの情報が含まれる
次にこれを再びdc_shellに掛けて(バックアノテーション)、
電力を算出する
dc_shell-t –f power_net.tcl
SDFとSAIFを読み込み、電力を出力するだけのスクリプト
結果はppico16_power.repに吐き出されている
ppico16.logと比較してみよう
レイアウトレベルの見積もり
実遅延シミュレーションで同様の見積もり
が可能
ちゃんとバックアノテーションされればより
正確
配線容量負荷
クロックツリーの電力
しかし、ここでは省略(Oklahoma State
Univ.のデザインフローはSoC Encounter
を使うので、これから新しいレイアウトツー
ルを習得するのは大変)
低消費電力設計
設計レベルで制御できるのはTR
必要な部分以外は動かさないようにする
Gated Clock (クロックゲーティング)
オペランドアイソレーション
通常の順序回路
MUX
クロック
制御回路
クロックは常に入力される
データを記憶するかどうかはマルチプレクサで
切り替える
Gated Clock
制御回路
クロック
クロックを制御して格納するかどうかを決める
制御回路
ラッチ
クロック
グリッジをなくすためにラッチを入れる場合もある
Gated Clockを施す
compileの前に
set_clock_gating_style –sequential_cell latch
insert_clock_gating
を入れると後は勝手に挿入してくれる
dc_shell-t –f ppico16g.tclを実行
ppico16_g.logができるのでこれを確認のこと
./netsimでTR採取用のシミュレーションを行う
dc_shell-f –f power_netg.tclを実行
ppico16_gpower.logに結果が入るのでこれを確認
若干のエラーが残るがこれはやむを得ないとする
今回の設計で電力削減の傾向を測定してみよう
マルチプレクサがなくなるため、面積も減り、TR
が小さくなって電力も減る
オペランドアイソレーション
データ入力値を固定し、変化を減らす
例:rf_stage.v
assign rope=(irif[`DecOpe] == `ROP);
assign sr_adr = rope ? ifir[`DecRs] : 3’b000;
…
regfile regfile (.clk(clk)…. .r_addr2(sr_adr)…);
…
always @(posedge clk) begin
…
if(rope) reg_b <= fregb;
else reg_im <= immex;
end
利用しない場
合、レジスタ
ファイルのアド
レスを固定
必要でない場合、レジスタ
の値を固定
効果を確認してみよう
低消費電力化のテクニック
周波数、動作電圧の制御
メモリの電力を減らす
キャッシュの分割と休止
Drowsyキャッシュ
リーク電力を減らす
必要な際のみに高い性能を得る
パワーゲーティング
今後とも益々重要になる
演習
前回設計したPICOを、性能を犠牲にす
ることなく、なるべく省電力化してみよ。
ファイルと、消費電力測定結果を
([email protected])まで提出の
こと。
最終課題
今回の演習で設計したPICOを完成させよ
以下の命令を実装せよ
以下のどれかを選択せよ
JAL、JR、MULT(乗算)
高性能を追及する
低消費電力を追及する
低面積を追及する
シミュレーションを行い動作を確認、レイアウトを行う
消費電力を追及する場合、電力計算は、Oklahoma
State Univ.のライブラリを用い、他はRohm0.6umプロ
セスを利用のこと
提出
設計方針、工夫した点、達成した性能、面積、電
力等をレポートにまとめる。verilogファイル、テス
トベンチ、テストベンチ用メモリ設定(mult.prg)な
どは添付のこと。レイアウトは画像ファイルの形
でレポートの一部とせよ(GDSファイルの提出は
必要ない)
7月27日(金)24時
[email protected]に、PDFなど当方が読
めればどのような形式でも良い
来週は休講(演習時間)とするので最終課題をが
んばってやっておくれ
質問は遠慮なくどうぞ。ただ、研究室のCAD環境
個別の問題は先輩に聞くことをお勧めする