第10回 電力見積もりと省電力設計 慶應義塾大学 理工学部 天野
CMOS回路の消費電力 リーク電力 スイッチング電力 インターナル電力 トランジスタ内部(主としてドレーンとソース間)の漏れ電流によって消費される電力。プロセスが進むにつれ、サイズが小さくなることから将来はメジャーになると言われている。 各セルのリーク電力の総和となる スイッチング電力 Cellの負荷容量を充放電することによる電力 VDD*VDD/2*Cload*TR (Toggle Rate) TRは単位時間に出力の変化する回数 電源電圧の2乗に比例し、周波数に比例する インターナル電力 Cell内部で消費される電力、pMOSトランジスタとnMOSトランジスタが同時にONになった瞬間に流れる貫通電流によるもの TRに比例する Design Compilerに組み込まれているPower Compilerによって見積もることができる
ポリシリコン n-MOSトランジスタに おけるリーク電流 酸化膜 N-diffusion p-well リーク電流 n-substrate
Vdd 貫通電流 容量の充電 A A Z Z 放電 CMOS インバータ GND GND
Oklahoma State Univ.によるライブラリ TSMC 0.18umプロセス スタンダードセル数が少ない プロセスとライブラリの切り替え 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測定を指定する $read_lib_saif(“lib.saif”); $set_toggle_region(“test.ppico16”); $toggle_start(); $toggle_stop(); Forward Annotation データ収集の範囲を指定 収集スタート 収集終わり
ゲートレベルでの見積もり シミュレーションでデータを収集 ./netsimにより下のコマンドを実行 vpower_dir = /usr/loca/vdec/synopsys/Synthesis-2004.12-SP2/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を、性能を犠牲にすることなく、なるべく省電力化してみよ。 ファイルと、消費電力測定結果を(hunga@am.ics.keio.ac.jp)まで提出のこと。
最終課題 今回の演習で設計したPICOを完成させよ 以下の命令を実装せよ 以下のどれかを選択せよ JAL、JR、MULT(乗算) 以下のどれかを選択せよ 高性能を追及する 低消費電力を追及する 低面積を追及する シミュレーションを行い動作を確認、レイアウトを行う 消費電力を追及する場合、電力計算は、Oklahoma State Univ.のライブラリを用い、他はRohm0.6umプロセスを利用のこと
提出 設計方針、工夫した点、達成した性能、面積、電力等をレポートにまとめる。verilogファイル、テストベンチ、テストベンチ用メモリ設定(mult.prg)などは添付のこと。レイアウトは画像ファイルの形でレポートの一部とせよ(GDSファイルの提出は必要ない) 7月27日(金)24時 hunga@am.ics.keio.ac.jpに、PDFなど当方が読めればどのような形式でも良い 来週は休講(演習時間)とするので最終課題をがんばってやっておくれ 質問は遠慮なくどうぞ。ただ、研究室のCAD環境個別の問題は先輩に聞くことをお勧めする