FPGA のリソースはデータビット幅の違いでどのように変わるのか (1)


こんにちは、ドルフィンシステムの笹生です。



今回から数回はFPGA のリソースはデータビット幅の違いでどのように変わるのか」をテーマにお送りします。

FPGA では、実装したい関数のリソースを見積もる場合単純にはいかない場合が多いです。

基本的に FPGA は ルックアップテーブル、レジスタで構成されますが、Xilinx Intel など FPGA は多くの種類でエンベデッドの DSP回路、RAMがも一緒に構成要素として実装されています。これらFPGA の「ハードウェア構成要素」は物理的に粒度 (ビット幅等の最小単位) が決まっており、FPGA の型番やファミリによっても異なります。
またコンパイラの設定などでは、論理圧縮をしてリソースを消費しない方向でコンパイルする場合もあれば、スピード重視、並列化重視でリソースを多く消費する方向でコンパイルする場合もあります。
こういった諸条件が多くあるので、コンパイルをせずに事前に正確なリソース見積もりをするのは正直に言って難しいです。でもある程度のざっくりした傾向を知っておくことは重要ではないかと思います。なぜなら FPGA はファミリによっては現在でも大変高価なデバイスですので、購入してから「リソースが足りなくて実装ができない!」ということを避ける必要があるからです。

リソースを比較する関数の候補について

さて検証したい関数の候補をざっと挙げてみます。
ビット幅を変えて影響がある関数なのですが、ベーシックなものからよく使う割と複雑な関数までを検証してみます。
・加算
・乗算
・除算
CORDIC
FIRフィルタ
FFT

今回は加算と乗算回路を LabVIEW FPGA を使ってターゲットは FlexRIO 7951R (Virtex5 LX30) で確認をしました。残りの除算以降は次回以降に検証したいと思います。

加算回路のリソースはビット幅でどう変わるか

加算回路として以下のような実装をしてみました。



この加算器の入力側の Input A/B それぞれのビット幅を 8,16,,,64 bit 8bit づつ変更してコンパイルをし、使用したリソースを比較してみます。

Resouce
ベース
Add FIX8
Add FIX16
Add FIX24
Add FIX32
Add FIX40
Add FIX48
Add FIX56
Add FIX64
Total Slice
665
709
733
798
776
769
772
816
849
Slice Register
1414
1529
1585
1641
1738
1762
1786
1810
1833
Slice LUT
1315
1392
1417
1442
1543
1567
1591
1614
1710
Block RAM
0
0
0
0
0
0
0
0
0
DSP 48s
0
0
0
0
0
0
0
0
0
レジスタ消費
0
115
171
227
324
348
372
396
419
LUT消費
0
77
102
127
228
252
276
299
395
ベースの列は、LabVIEW FPGA で最初から使用されているリソースです。
レジスタ消費と LUT 消費をグラフにすると以下のようになりました。



加算回路はレジスタ、LUT どちらもビット幅に対しては線形に近い増え方をしています。
加算回路はビット幅が倍になれば消費リソースは概ね倍になるようです。

乗算回路のリソースはビット幅でどう変わるか

乗算回路として以下のような実装をしてみました。



この乗算器の入力側の Input A/B それぞれのビット幅を 8,16,,,64 bit 8bit づつ変更してコンパイルをし、使用したリソースを比較してみます。

Resouce
ベース
Mul FIX8
Mul FIX16
Mul FIX24
Mul FIX32
Mul FIX40
Mul FIX48
Mul FIX56
Mul FIX64
Total Slice
665
725
804
781
855
781
899
928
722
Slice Register
1414
1564
1660
1737
1769
1785
1802
1817
1833
Slice LUT
1315
1399
1430
1507
1530
1652
1750
1801
1851
Block RAM
0
0
0
0
0
0
0
0
0
DSP 48s
0
1
1
2
4
8
11
12
12
レジスタ消費
0
150
246
323
355
371
388
403
419
LUT消費
0
84
115
192
215
337
435
486
536
DSP消費
0
1
1
2
4
8
11
12
12

乗算回路についてもレジスタとLUT の消費量をグラフにしてみました。



LUT消費はほぼ線形な感じですが、レジスタ消費が線形的でないのは実は出力ビット幅の上限が 64bit だからのようです。というのは横軸の Mul FIX32 以降は入力レジスタは増えても出力レジスタはすべて 64bit で残りは捨てられているからだと思われます。

DSP 48s の消費量もグラフにしてみます。



こちらも線形にはなっていません。おそらく出力ビット幅 64bit の制限がなければ、2乗カーブに近くなると思われます。今回は頭打ちのようなグラフですが、これは LabVIEW の制約だと思われ、HDL で記述すればまた違った結果になるかもしれません。

まとめ

FPGA のリソースはデータビット幅の違いでどのように変わるのか」をテーマに、今回は信号処理で基本中の基本の関数「加算回路」と「乗算回路」について検証してみました。
結論から言うと基本的には加算回路は線形にビット幅に対応し、乗算回路は少なくとも入力ビット幅が 32bit 以下の時はビット幅の二乗に対応しそうなことがわかりました。

0 件のコメント :

コメントを投稿