インテル® Quartus® Prime プロ・エディションのユーザーガイド: デザインの推奨事項

ID 683082
日付 8/03/2023
Public
ドキュメント目次

1.3.2. 乗累および積和関数の推論

合成ツールは乗累または積和関数を検出し、それらをインテル FPGA IPコアとして実装する、もしくはデバイスアトムに直接マッピングします。 配置配線時に、 インテル® Quartus® Prime開発ソフトウェアは、乗累および積和関数をDSPブロックに配置します。
注: 合成ツールは、乗累および積和関数を推論します。ただし、インテル・デバイスファミリーにこれらの関数をサポートする専用のDSPブロックがある場合に限ります。

単純な乗累演算器は、加算演算子に供給される乗算器で構成されます。加算演算子は一連のレジスターに供給され、その後、2番目の入力を加算演算子に供給します。単純な積和演算器は2から4個の乗算器で構成され、1から2レベルの加算、減算、または加算/減算演算子に供給されます。加算は、使用されている場合は常に第2レベルの演算子です。乗累演算器と積和演算器の他にも、 インテル® Quartus® Primeのフィッターは、入力および出力レジスターをDSPブロックに配置してレジスターをパッキングし、パフォーマンスと領域使用率を向上させます。

一部のデバイスファミリーは、高度な累乗および積和演算 (複雑な乗算、入力シフトレジスター、またはより大きな乗算など) の追加機能を提供します。

Verilog HDLおよびVHDLコード例では、入力、出力、パイプライン・レジスター、およびオプションの非同期 clear 信号を備える乗累および積和関数を推論します。3セットのレジスターを使用すると、関数全体で最良のパフォーマンスが得られます。レイテンシーは3です。レイテンシーを小さくするには、デザインのレジスターを削除します。
注: DSPのデザインで高いパフォーマンスを得るには、レジスターのパイプライン化を使用して、レジスターされないDSP機能を避けるようにします。

Verilog HDL乗累演算器

module sum_of_four_multiply_accumulate
   #(parameter INPUT_WIDTH=18, parameter OUTPUT_WIDTH=44)
   (
      input clk, ena,
      input [INPUT_WIDTH-1:0] dataa, datab, datac, datad,
      input [INPUT_WIDTH-1:0] datae, dataf, datag, datah,
      output reg [OUTPUT_WIDTH-1:0] dataout
   );
   // Each product can be up to 2*INPUT_WIDTH bits wide.
   // The sum of four of these products can be up to 2 bits wider.
   wire [2*INPUT_WIDTH+1:0] mult_sum;

   // Store the results of the operations on the current inputs
   assign mult_sum = (dataa * datab + datac * datad) +
                     (datae * dataf + datag * datah);

   // Store the value of the accumulation
   always @ (posedge clk)
   begin
      if (ena == 1)
         begin
            dataout <= dataout + mult_sum;
         end
   end
endmodule