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環境
個別の問題は先輩に聞くことをお勧めする