LoginSignup
3
3

More than 5 years have passed since last update.

FPGAで加算器つくるとき、何入力にすればいいの??

Last updated at Posted at 2018-11-01

FPGAで加算器つくるとき、何入力にすればいいの??

と思ってググったら、

を見つけた。

Altaraでは3入力にするとコスパがいいらしい。
ALMの共有演算モードというのを使うことができるから、とのことだが、こいつはIntel(Altera)のデバイスのプリミティブである。Arria10の共有演算モードに詳細が書いてある。

で、Xilinx(Kintex Ultrascale)はどうなの???
と調べたところ、3入力と4入力はあまりかわらず、2入力のFmaxが400MHz越えとかなり良い結果になった。

Xilinxでは200MHz程度の動作周波数でよければ3入力、400MHz動作が必要な場合は2入力が良さそう。

Xilinxのデバイスの下調べ

DSPについての話はいくつかあって、公式にも記載されている。

LUT(CLB?)についてはug574に書いてあるが、加算器の構成についてはよくわからない。

Xilinxデバイスでの実験

KCU105のボード設定で、クロック入力を300MHzに制約してVivado 2018.2でインプリしてみた。雑な実験なのでクロックだけ別にして全部まとめてimplしたので、その悪影響はあるかもしれない。LUT/FF使用量は、synthの結果で、WNSはimplの結果を記載している。
(冒頭の記事を参考に、VHDLに書き直したのと雑なシミュレーション環境とかを追加した)

なんか、Fmaxが異常に良いし、素直に2入力加算器使えってことなのかな?
あと、下調べで多入力できることが分かっているDSP使うとどうなるのかな?

Latency LUT FF WNS1 Fmax2 (Altera Fmax3)
256入力加算器 1clk 4149 32 -4.246ns 132MHz (70MHz)
2入力加算器 8clk 8160 8160 +0.921ns 415MHz (225MHz)
3入力加算器 6clk 4224 4224 -0.380ns 269MHz (213MHz)
4入力加算器 4clk 7735 2720 -0.598ns 254MHz (159MHz)

Xilinxデバイスでの実験(DSP)

単純に、以下のような記述を追加して同じようにimplを実施してみた。(今ug901見たらuse_dspが推奨なのね。。。)

    attribute use_dsp48 : string;
    attribute use_dsp48 of sum_reg : signal is "yes";

性能は悪くなった。DSP使用数をみると意図通りにできていないようにも見える。

Latency LUT FF DSP WNS1 Fmax2
256入力加算器(DSP) 1clk 0 0 254 -11.332ns 68MHz
2入力加算器(DSP) 8clk 7936 7680 7 +0.751ns 387MHz
3入力加算器(DSP) 6clk 4220 4064 2 -0.681ns 249MHz
4入力加算器(DSP) 4clk 7574 2432 4 -1.008ns 230MHz

  1. create_clock -period 3.333で制約したときのimpl結果 

  2. 1000 / (3.333 - WNS)で算出(参考URL(AR# 57304)

  3. Cyclone V / Quartus 17.0.0 Lite Edition / 300 MHz 制約 (元記事から引用) 

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3