このコラムでは「意外と知られていないけど、知っていると差がつく FPGA の技術情報」をご紹介します。
FPGA初心者の方からベテランの方まで、幅広くご活用いただける内容ですので、ぜひ最後までお付き合いください。

【第 6 回】 負荷容量(C)を低減する方法

低消費電力設計手法は細かな対策の積み重ねです。
消費電力計算式を理解するために、代表的な低消費電力手法をご紹介致します。

まずは、消費電力計算式の中から負荷容量の “C” を低減する方法を検討します。

一般的に、負荷容量の “C” は“配線容量”と“次段につながった入力ピンのピン容量”の合計です。
“C” を減らすとダイナミック電力だけでなく、リソースが減るのでリーク電力も下がります。

イメージが付きやすいように、負荷容量を「バケツ」、電荷を「水」に例えると、ホースから出た水でバケツを一杯にしたら “H”、
バケツを空にしたら “L” になるとします。
少ない水で全てのバケツを満タンにする方法は、バケツの「数を減らす」方法とバケツの大きさを「小さく」する方法があります。

図1 : 動作時の CMOS 回路

まずはバケツの数を減らす方法、つまり FPGA のリソースを減らす方法を検討してみます。

高速化して並列度を下げる

500MHz で動作する回路を 1GHz で動作させると、データ・パス幅が半分になりリソースを大幅に削減できます。
例えば、Stratix® 10 は HyperFlex アーキテクチャにより従来の 2 倍の性能を実現するので、回路の並列度を半分に下げてリソースを削減できます。

ALM の使用率を下げる

FPGA の基本モジュールである ALM (Adaptive Logic Module)は組み合わせ回路用の 2 つの ALU、加算器、レジスタなどで構成されています。同じ論理なら使用する ALM の数を減らすと “C” を低減できます。 

(a)Quartus® Prime Pro の“エリア優先”で論理合成を行うと ALU の使用率が下がります。

表1 : エリア優先と速度優先での ALU 使用数の差
表2 : 表1での消費電力削減率

FPGA は Fanout の最大値が決まっているので、高速にすると ALM を複数使う事があります。
速度が必要でないブロックは“エリア優先”で合成してください。

(b)ハードマクロ
ロジック用の ALM でメモリや DSP を作ることはできますが、メモリや DSP のハードマクロの方がトランジスタの大きさや数が最適化されているので、 “C” は大幅に小さくなります。
できるだけALMでなく、メモリや DSP など専用のハードマクロを使うようにしてください。

(c)Power-Driven Synthesis
論理合成のオプションで、極端にエリアを小さくするとトグル数が増えて逆に消費電力が上がることがあります。
Quartus Prime の「Power-Driven Synthesis」を使うと、低消費電力を優先して論理合成します。

(d)パーシャル・リコンフィグレーション
パーシャル・リコンフィグレーションは動作中に一部のブロックの回路構成を変える機能です。
使用していない回路を外すと、その回路のリーク電力やクロックによる無駄な電力を使わないようになります。

(e)アーキテクチャやアルゴリズムの最適化による ALM 数の削減
アルゴリズムを作る際に回路規模が小さくなることを意識して設計してください。
RTL 完成後の細かな低消費電力対策よりもアルゴリズム設計時の対策の方が効果は高くなります。

(f)速度の速い(スピードグレードの小さい) FPGA を採用
速度が遅い FPGA よりも、速度が速い FPGA で論理合成する方が小さな回路を生成する事があります。
無理なパフォーマンス要求をして論理合成を行うと、並列度を上げた回路を合成する場合があるので、エリアが1つ大きなデバイスよりもスピードグレードを1つ上げたデバイスを選んだ方が最適な場合があります。

(g)HDL 記述の最適化
HDL の記述方法によって、使用されるリソースが減ります。
例えば、Verilog-HDL は “always” を減らすとレジスタの数が減り、“ドントケア(不定)”を多く使うとリソースが減ります。
記述による面積の最適化は他にも数多くの方法があります。

記述1 : レジスタが多く使われる記述
記述2 : レジスタが少ない記述

 

(h)コードカバレッジ
コードカバレッジを使うと、使われていない回路が見つかります。
仕様変更が多いと不要になった回路が取り残されるケースがあるので、コードカバレッジで不要な回路を検索して削除します。 

次はバケツの大きさを小さくする方法、つまり容量を小さくする方法です。

容量の削減

(a)トグル率の高いネットは短く
FPGA の消費電力は配線部分が大きいので、トグル率の高いネットはできるだけ短く配線します。

ALM 間でトグル率が高いネットはロジック・アレイ・ブロック(LAB)内の ALM 間で接続すると配線容量が削減します。
例えば、イネーブルやセットなどの共有制御信号を多くの回路で共有すると、LAB 内で収まりづらいので、できるだけ制御信号は少なくします。

とは言っても、マニュアルで行うのは難しいですね。
Quartus Prime の「Power-Driven Fitting」を使うと、トグルの多いネットを優先して配線することで配線長を短くしたり、メモリを分割して消費電力を下げることが可能です。効果を高めるために“できるだけ正確なトグル情報”を入力するようにしてください。

トグルの多い配線はブロック内部になるようにパーティショニングしても効果があります。

(b)FPGA 周辺の配線は短く
FPGA の出力ピンに繋がった配線長を短くすると、出力バッファの消費電力が下がります。
外部負荷容量は内部配線容量とは桁違いに大きいので影響は大きいです。

FPGA はピンの配置の自由度が高いので、FPGA 周辺のデバイスの位置を考慮して配線が短くなるようにピンをアサインします。

(c)FPGA で 1 チップ化
FPGA 周辺にある古いプロセスのデバイスが担っている機能を FPGA に取り込むことで、FPGA 周辺の配線容量とデバイスが少なくなります。特にアナログ部分はできるだけデジタル化してください。
FPGA のプロセスは周辺デバイスよりも微細化されて低消費電力なので、古いプロセスのデバイスで実現するよりも消費電力が下がることがあります。

最近では、FPGA の周辺にあるマイコンをインテル SoC FPGA で 1 デバイスに収めると、FPGA ⇔マイコン間の配線容量が小さくなり、高速かつ低消費電力を実現できます。
また、高速通信を行うときは、FPGA 外部に SerDes を置く代わりに、FPGA 内蔵のトランシーバを使用することをお勧めします。

(d)Logic Lock を活用
Logic Lock ブロック・ベース・デザインを使う際に、ブロック間の配線はブロック内部より長くなる事が多いので、ブロック間のトグル数が少なくなるようにブロックのパーティショニングをします。

(e)微細プロセスのデバイスの採用
微細化されたプロセスはトランジスタが小さくなるので容量は小さくなります。
回路規模が同じなら、微細化された最新プロセスのデバイスを使う方が消費電力は低くなります。

ピン容量の削減

インテル以外の FPGA や ASIC は、バスにトライ・ステート・バッファを使用することがあります。

トライ・ステート・バッファは閉じている時の入力ピン容量が非常に大きいので、バスにトライステート・バッファは使わずにマルチプレクサ(セレクタ)を使う事をお勧めします。

図2 : バスにトライ・ステート・バッファを使った例

“C” を減らす方法は他にも沢山の手法があります。
できるだけ使用トランジスタ数を減らして、配線を短くするよう心がけてください。