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


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

さて今回も続きとしまして、「FPGA のリソースはデータビット幅の違いでどのように変わるのか」の第3弾をお送りします。

前々回は「加算」と「乗算」といった基本的な演算回路について、前回は「除算」と「CORDIC」といった少し複合的な回路について、それぞれビット幅対リソースの関係を調査しました。
今回はもう少しアプリケーションに近い「FIRフィルタ」と「FFT」に関してビット幅と FPGA リソース消費量の関係を検証してみたいと思います。今回は LabVIEW FPGA を使い、ターゲットは FlexRIO 7976R (Kintex7 410T) で確認をしました。



FIR フィルタのリソースはビット幅でどう変わるか

 

FIR フィルタの回路として以下のような実装をしてみました。



FIR フィルタの入力ビット幅を 8,16,,,40 bit 8bit づつ変更してコンパイルをし、使用したリソースを比較してみます。

Resouce
ベース
FIR FIX8
FIR FIX16
FIR FIX24
FIR FIX32
FIR FIX40
Total Slice
20889
20920
21146
20423
20647
21554
Slice Register
50640
51086
51406
51726
52059
52347
Slice LUT
54107
54256
54340
54405
54615
54823
Block RAM
116
116
116
116
116
116
DSP 48s
0
11
11
11
23
23
レジスタ消費
0
446
766
1086
1419
1707
LUT消費
0
149
233
298
508
716
BRAM消費
0
0
0
0
0
0
DSP消費
0
11
11
11
23
23

ベースの列は、LabVIEW FPGA で最初から使用されているリソースです。
レジスタ消費と LUT 消費をグラフにすると以下のようになりました。




縦軸のオーダーが違いすぎるので別グラフにしましたが、DSP消費は以下のようになりました。



レジスタ消費、LUT 消費はおおむねリニアに増えていきます。
ただ、これは FIR のタップ係数のビット幅が 16bit 固定だからかもしれません。
タップ係数も変動させるのであれば前回の除算器同様に放物線状に増加する傾向があるかもしれません。
DSP 消費は 24bit 32bit で明確に差がありますが、これは DSP 回路の入力ビット幅の制限があるため一定のビット幅以上で消費量が跳ね上がるのが理由だと推測されます。

FFT のリソースはビット幅でどう変わるか

FIR フィルタの回路として以下のような実装をしてみました。


FFTの入力ビット幅を 実部、虚部 8,16,,,32 bit 8bit づつ変更してコンパイルをし、使用したリソースを比較してみます。

Resouce
ベース
FFT FIX8
FFT FIX16
FFT FIX24
FFT FIX32
Total Slice
20889
21368
21206
22050
22104
Slice Register
50640
53572
55060
56788
58540
Slice LUT
54107
55857
56642
57665
58544
Block RAM
116
119
119
121
122
DSP 48s
0
12
12
24
24
レジスタ消費
0
2932
4420
6148
7900
LUT消費
0
1750
2535
3558
4437
BRAM消費
0
3
3
5
6
DSP消費
0
12
12
24
24

一言 FFT といっても設定パラメータによって機能などが変化するため、上記の結果がすべてではありません。
今回は 1024ポイントの FFT で、パイプライン設定をしたストリーム信号をリアルタイムで処理できるタイプの設定にしました。

レジスタ消費と LUT 消費をグラフにすると以下のようになりました。


FFT では BRAM(メモリ) DSP も消費します。以下のようになりました。


FFT でもレジスタ消費、LUT 消費はおおむねリニアに増えていきます。
DSP 消費は 16bit 24bit で明確に差がありますが、これは DSP 回路の入力ビット幅の制限があるため一定のビット幅以上で消費量が跳ね上がるのが理由だと推測されます。
BRAM のほうはこれだけ見ますとほぼリニアのような増え方です。

まとめ

3回にわたって、ビット幅によって使用リソースの変化がどのようになるのかを調査してみました。
回路によっては、ビット幅に比例しているものもあれば、放物線的に増えるものもあり、アプリケーションよりの FIR フィルタや FFT では割とリニアに対応していることがわかりました。
実際のところ実装後にビット幅を変更することはかなり難しい部分も多いので、実装前の見積もり段階である程度ビット幅によるリソース消費量はどのような感じかつかんでおくと後で困ることは少ないのではないかと思います。

0 件のコメント :

コメントを投稿