電源・クロックゲーティングと低電力設計の原理
バッテリーが持たない、発熱で頭打ち──その鍵は電力を「使わない瞬間に止める」設計です。クロック停止で動的電力を、電源遮断でリーク電力を削る原理と、DVFS・C状態の効き方を掴めます。
- 1.動的電力は P=α·C·V²·f で決まり、クロックゲーティングはスイッチング確率 α を実質ゼロにして使わない瞬間の CV²f を消す。電圧 V の二乗が支配的なので DVFS の電圧下げが最も効く。
- 2.微細化で深刻化したリーク電力(サブスレッショルド漏れ)はクロックを止めても消えないため、パワーゲーティング(スリープトランジスタで電源を切断)が必要。状態保持にはリテンションFFや退避が要る。
- 3.C状態は CPU を段階的に深く眠らせ(クロック停止→キャッシュフラッシュ→電源遮断)、P状態は稼働中の電圧・周波数を DVFS で動かす。前者が静的・動的電力、後者が主に動的電力を削る。
なぜ電力が壁になるのか:動的とリークの2成分
CMOS の消費電力は大きく動的電力と静的(リーク)電力の2つに分かれます。動的電力はトランジスタがスイッチするたびに容量を充放電するエネルギーで、よく知られた式
P_dynamic = α · C · V² · f
で表されます。α はスイッチング確率(アクティビティ係数)、C は負荷容量、V は電源電圧、f はクロック周波数です。ここで効くのは V が二乗で入る点で、電圧を少し下げるだけで動的電力は大きく落ちます。一方の静的電力は、トランジスタがオフのはずでも漏れるリーク電流(主にサブスレッショルドリークとゲートリーク)によるもので、P_static = V · I_leak です。プロセスが微細化して閾値電圧が下がると I_leak は指数的に増え、いまや無視できない割合を占めます。
この2成分は止め方が違うことが低電力設計の出発点です。動的電力は「スイッチさせなければ」消えますが、リーク電力は回路に電圧がかかっている限り流れ続け、クロックを止めても消えません。だから手段が2系統に分かれます。
動的電力=スイッチングのエネルギー → クロックを止める(クロックゲーティング)。リーク電力=電圧がかかる限り漏れる → 電源を切る(パワーゲーティング)。この対応関係が本記事の背骨です。
クロックゲーティング:αを実質ゼロにする
クロックゲーティングは、使っていないブロックへ供給するクロックを止めて動的電力を削る技法です。P_dynamic = α·C·V²·f のうち、クロックが来なければレジスタはトグルせず、実効的な α がゼロになります。とくにクロックツリーそのものが大きな容量を持ち、全消費の数割を占めることも多いため、葉のレジスタだけでなくクロックツリーの末端を根元で止めるほど効果が大きくなります。
素朴には「クロックと有効信号の AND を取る」ですが、これはグリッチを生むため実際には**ラッチベースのクロックゲートセル(ICG)**を使います。イネーブルをクロックの片エッジでラッチしてからゲートすることで、出力クロックにヒゲ(毛羽立ち)が出ないようにします。
// 概念図:実機ではグリッチフリーな ICG セルを使う
// enable をラッチしてからクロックとANDする
assign gated_clk = clk & latched_enable;
導入の仕方には粒度があります。EDA ツールが自動で挿入するRTLクロックゲーティング(同じ値を書き戻すだけのレジスタへのクロックを止める)から、設計者がモジュール単位で明示的に止めるアーキテクチャレベルまであります。重要なのは、クロックゲーティングはリーク電力には無力な点です。クロックを止めても電源は入ったままなので、漏れ電流は流れ続けます。
パワーゲーティング:電源そのものを切る
リーク電力を断つには、ブロックへの電源供給自体を切るパワーゲーティングが必要です。電源レール(多くは電源側=ヘッダ、または接地側=フッタ)にスリープトランジスタを直列に挟み、スリープ時にこれをオフにして、ブロックを電源から切り離します。切り離されたブロックには電圧がかからないのでリーク電流もほぼ止まります。
ただし代償があります。
- 状態の喪失: 電源を切るとレジスタやキャッシュの内容が消える。復帰時に正しい状態へ戻す手立てが要る。
- 突入電流: 復帰時に容量を一気に充電するため大きな電流が流れ、電源ノイズを起こす。スリープトランジスタを段階的にオンにして抑える。
- 電圧降下(IRドロップ): スリープトランジスタは直列抵抗になるため、稼働中はわずかに電圧を落とす。
- 入出力の遮断: 電源を失ったブロックの出力は不定値になるので、アイソレーションセルで出力を既知値(0や1)にクランプし、隣の電源領域へ未定義値が伝播しないようにする。
状態を失わずに眠るための要がリテンションです。
全部を退避・復元すると時間とエネルギーを食います。そこでリテンションフリップフロップを使います。これは通常ロジック用の主電源(切れる)と、ごく低リークの「常時オン」電源で支えた小さなシャドウラッチ(バルーンラッチ)を併せ持つFFです。スリープ前に値をシャドウへ退避し、メイン部の電源を切ってリークを断ちつつ、シャドウだけは常時電源で値を保持します。復帰時はシャドウから即座に戻すため、メモリへの退避・復元より桁違いに速く眠って起きられます。リーク削減と高速復帰のトレードオフを取った折衷案です。
クロックゲーティングとパワーゲーティングは排他ではなく併用します。短い待機にはオーバーヘッドの小さいクロックゲーティング、長い待機にはリークまで断てるパワーゲーティング、と滞在時間で使い分けるのが定石です。深く眠るほど復帰の遅延とエネルギー(突入電流・状態復元)が増えるため、「眠って得する損益分岐点(ブレークイーブン時間)」を超える待機でないとパワーゲーティングは逆効果になります。
電圧・周波数ドメインとDVFS
V² が支配的という事実から、最も効く動的電力削減は電圧を下げることです。ただし電圧を下げると論理ゲートの遅延が伸びるため、動作可能な最大周波数も下がります。そこで負荷に応じて電圧と周波数を同時に動かすのが**DVFS(Dynamic Voltage and Frequency Scaling)**です。
DVFS の効きを直感するために、周波数だけ下げる場合と電圧も一緒に下げる場合を比べます。
| 手段 | 動的電力への効き | 総エネルギー(仕事量一定) | ねらい |
|---|---|---|---|
| 周波数だけ下げる | f に比例(線形) | ほぼ不変(時間が伸びるだけ) | 発熱・瞬時電力の平準化 |
| 電圧も下げる(DVFS) | V² × f で効く(超線形) | 大きく減る | 省電力の本命 |
| クロックゲート | 使わない瞬間の α をゼロに | アイドル分を削減 | 稼働中の隙間を埋める |
周波数だけを半分にしても、同じ仕事を倍の時間でこなすだけなので総エネルギーはほとんど減りません(電力は半分でも時間が倍)。これに対し電圧も下げられれば、V² の効果で電力が二乗で落ち、仕事あたりのエネルギーが本当に減ります。だから DVFS の本質は「周波数を落とせる分だけ電圧も落とす」点にあります。チップは複数の電圧ドメイン/周波数ドメインに分割され、各ドメインが独立した電圧レギュレータ(PLLや専用レギュレータ)を持ち、ドメインごとに別々の動作点で動きます。ドメイン境界をまたぐ信号はレベルシフタで電圧を変換し、非同期なクロック間は同期化が必要になります。
電圧は際限なく下げられません。トランジスタの閾値電圧やばらつきで動作が壊れる下限(最低動作電圧)があり、これより下げると論理が誤ります。さらに微細プロセスではリークが効くため、周波数を下げ過ぎて稼働時間が伸びると、その間に漏れ続けるリーク電力が動的電力の節約を食い潰す**「リークの壁」**が生じます。極端に遅く長く動かすより、**速く済ませて深く眠る(race-to-idle/race-to-halt)**方が総エネルギーで有利な領域があり、最適点は動的とリークの比率で決まります。
C状態とP状態:OSから見た電力制御
ここまでの回路技法を、OS が制御する形に標準化したのが ACPI の**C状態(Cステート)とP状態(Pステート)**です。両者は役割が違います。
- P状態(パフォーマンスステート): CPU が実行中の動作点。P0 が最高周波数・最高電圧で、P1, P2 …と下がるほど低電圧・低周波数です。これはまさに DVFS をソフトウェアから選ぶ仕組みで、主に動的電力を削ります。コアは命令を実行し続けます。
- C状態(アイドルステート): CPU が実行していないときの眠りの深さ。C0 が稼働、C1 以降がアイドルで、番号が大きいほど深く眠ります。浅い C1 は内部クロックを止める(≒クロックゲーティング)、深い C6 などはキャッシュをフラッシュしてコア電源を落とす(≒パワーゲーティング)といった段階で、**動的に加えて静的電力(リーク)**まで削ります。
| 状態 | CPUは実行中か | 主に削る電力 | 対応する回路技法 |
|---|---|---|---|
| P0〜Pn | 実行中 | 動的(V²f) | DVFS(電圧・周波数調整) |
| C1(浅い) | アイドル | 動的 | クロックゲーティング |
| C3 | アイドル | 動的+一部静的 | クロック停止+キャッシュ整理 |
| C6以深 | アイドル | 動的+静的(リーク) | パワーゲーティング+状態退避 |
深い C状態ほどリークまで消せて省電力ですが、復帰レイテンシ(電圧を戻し、PLLを再ロックし、キャッシュやレジスタの状態を復元する時間)が長くなります。OS のアイドルガバナは「次にどれくらい眠れそうか」を予測し、予測滞在時間がその C状態のブレークイーブン時間を超えるときだけ深く眠らせます。短い割り込みが頻発する状況で深く眠らせると、復帰オーバーヘッドばかりかかって逆に損をします。
「動的電力は α·C·V²·f、V が二乗で支配的」「クロックゲーティングは α をゼロにして動的電力だけを削り、リークには無力」「パワーゲーティングはスリープトランジスタで電源を切りリークを断つが、リテンションFFやアイソレーションが要る」「DVFS は電圧を下げてこそ総エネルギーが減る(周波数だけでは減らない)」「P状態=稼働中のDVFS、C状態=アイドルの深さで、深いCはパワーゲーティングに対応」が核です。クロックゲーティングとパワーゲーティングが削る電力の種類の違いを即答できると強い。
まとめ
- CMOS の電力は動的(α·C·V²·f)とリーク(V·I_leak)に分かれ、止め方が異なる。微細化でリークの比重が増えた。
- クロックゲーティングはクロックを止めて実効 α をゼロにし動的電力を削るが、電源は入ったままなのでリークは消せない。グリッチ回避に ICG セルを使う。
- パワーゲーティングはスリープトランジスタで電源を切りリークまで断つ。代償として状態喪失・突入電流・復帰遅延があり、リテンションFFとアイソレーションセルで状態保持と隔離を行う。
- DVFS は
V²の効きで総エネルギーを減らす本命。周波数だけ下げても総エネルギーは減らず、電圧を下げてこそ効く。下限電圧とリークの壁があり、race-to-idle が有利な領域もある。 - ACPI の P状態は稼働中の DVFS、C状態はアイドルの深さで、深い C ほどパワーゲーティングに踏み込みリークを削るが復帰遅延が増える。
電力を生む発熱を冷ます側の制約はCPIスタックによる性能分析とあわせて見ると、性能と電力のトレードオフが立体的に掴めます。
CPU/メモリ/ディスク Article
電源・クロックゲーティングと低電力設計の原理を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
低電力設計
比較で見る軸
難易度: advanced / カテゴリ: CPU/メモリ/ディスク / タグ数: 6
導入後に効く点
微細化で深刻化したリーク電力(サブスレッショルド漏れ)はクロックを止めても消えないため、パワーゲーティング(スリープトランジスタで電源を切断)が必要。状態保持にはリテンションFFや退避が要る。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- CPU/メモリ/ディスク
- タグ数
- 6
判断チェックリスト
- 自社の用途が「低電力設計 / クロックゲーティング」に近いか確認する。
- 強みである「動的電力は P=α·C·V²·f で決まり、クロックゲーティングはスイッチング確率 α を実質ゼロにして使わない瞬間の CV²f を消す。電圧 V の二乗が支配的なので DVFS の電圧下げが最も効く。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。