Intel Agilex® 7可変精度DSPブロック・ユーザーガイド

ID 683037
日付 10/02/2023
Public
ドキュメント目次

10.2. Native Floating Point DSP Intel Agilex® FPGA IPコアでサポートされる演算モード

表 107.   Native Floating Point DSP Intel Agilex® FPGA IPコアでサポートされる演算モード
演算モード 詳細 サポートされる例外フラグ
FP32乗算モード

このモードでは、単精度乗算演算を行います。

このモードでは、次の式が適用されます。
  • fp32_result = fp32_result = fp32_mult_a*fp32_mult_b
  • fp32_mult_overflow
  • fp32_mult_underflow
  • fp32_mult_inexact
  • fp32_mult_invalid
FP32加算または減算モード このモードでは、単精度の加算または減算演算を行います。
このモードでは、次の式が適用されます。
  • fp32_result = fp32_adder_b+fp32_adder_a
  • fp32_result = fp32_adder_b-fp32_adder_a
  • fp32_adder_overflow
  • fp32_adder_underflow
  • fp32_adder_inexact
  • fp32_adder_invalid
FP32乗算と加算または減算モード

このモードでは、単精度の乗算、およびそれに続いて加算または減算演算が行われます。

このモードでは、次の式が適用されます。
  • チェーンイン機能が有効になっている場合
    • fp32_result = (fp32_mult_a*fp32_mult_b) + fp32_chainin
    • fp32_result = (fp32_mult_a*fp32_mult_b) - fp32_chainin
  • チェーンイン機能が無効になっている場合
    • fp32_result = (fp32_mult_a*fp32_mult_b) + fp32_adder_a
    • fp32_result = (fp32_mult_a*fp32_mult_b) - fp32_adder_a
  • fp32_mult_overflow
  • fp32_mult_underflow
  • fp32_mult_inexact
  • fp32_mult_invalid
  • fp32_adder_overflow
  • fp32_adder_underflow
  • fp32_adder_inexact
  • fp32_adder_invalid
FP32乗算と累算モード

このモードでは、浮動小数点乗算を行い、それに続いて前の乗算結果との浮動小数点加算または減算を行います。

このモードでは、次の式が適用されます。
  • accumulate 信号がHighに駆動されている場合
    • fp32_result(t) = [fp32_mult_a(t)*fp32_mult_b(t)] + fp32_result(t-1)
    • fp32_result(t) = [fp32_mult_a(t)*fp32_mult_b(t)] - fp32_result(t-1)
  • accumulate 信号がLowに駆動されている場合
    • fp32_result = fp32_mult_a*fp32_mult_b
FP32ベクトル1モード

このモードでは、浮動小数点乗算を行い、それに続いて前の可変DSPブロックからのチェーンイン入力との浮動小数点加算または減算を行います。

このモードでは、次の式が適用されます。
  • チェーンイン機能が有効になっている場合
    • fp32_result = (fp32_mult_a * fp32_mult_b) + fp32_chainin、fp32_chainout = fp32_adder_a
    • fp32_result = (fp32_mult_a * fp32_mult_b) - fp32_chainin、fp32_chainout = fp32_adder_a
  • チェーンイン機能が無効になっている場合
    • fp32_result = fp32_mult_a * fp32_mult_b、fp32_chainout = fp32_adder_a
FP32ベクトル2モード このモードでは、浮動小数点乗算を行います。乗算結果は直接 chainout に供給されます。また、入力 Ax に対して前の可変DSPブロックからの chainin 入力を加算または減算し、その結果を出力します。

このモードでは、次の式が適用されます。

  • チェーンイン機能が有効になっている場合
    • fp32_result = fp32_adder_a + fp32_chainin、fp32_chainout = fp32_mult_a * fp32_mult_b
    • fp32_result = fp32_adder_a - fp32_chainin、fp32_chainout = fp32_mult_a * fp32_mult_b
  • チェーンイン機能が無効になっている場合
    • fp32_result = fp32_adder_a、fp32_chainout = fp32_mult_a * fp32_mult_b
2つのFP16乗算の合計モード

このモードでは、2つの半精度乗算の和を計算し、単精度の結果を提供します。

このモードでは、次の式が適用されます。
  • fp32_result = (fp16_mult_top_a*fp16_mult_top_b) + (fp16_mult_bot_a*fp16_mult_bot_b)
  • fp32_result = (fp16_mult_top_a*fp16_mult_top_b) - (fp16_mult_bot_a*fp16_mult_bot_b)
フラッシュおよびbfloat16形式でサポートされる例外フラグ
  • fp16_mult_top_invalid
  • fp16_mult_top_inexact
  • fp16_mult_top_overflow
  • fp16_mult_top_underflow
  • fp16_mult_bot_invalid
  • fp16_mult_bot_inexact
  • fp16_mult_bot_overflow
  • fp16_mult_bot_underflow
  • fp16_adder_invalid
  • fp16_adder_inexact
  • fp16_adder_overflow
  • fp16_adder_underflow
拡張形式でサポートされる例外フラグ
  • fp16_mult_top_invalid
  • fp16_mult_top_inexact
  • fp16_mult_top_infinite
  • fp16_mult_top_zero
  • fp16_mult_bot_invalid
  • fp16_mult_bot_inexact
  • fp16_mult_bot_infinite
  • fp16_mult_bot_zero
  • fp16_adder_invalid
  • fp16_adder_inexact
  • fp16_adder_infinite
  • fp16_adder_zero
2つのFP16乗算の合計とFP32加算モード

このモードでは、2つの半精度乗算の和を計算し、単精度の結果を提供します。

このモードでは、次の式が適用されます。
  • fp32_result = (fp16_mult_top_a*fp16_mult_top_b) + (fp16_mult_bot_a*fp16_mult_bot_b) - fp32_adder_a
  • fp32_result = (fp16_mult_top_a*fp16_mult_top_b) - (fp16_mult_bot_a*fp16_mult_bot_b) - fp32_adder_a
  • fp32_result = (fp16_mult_top_a*fp16_mult_top_b) + (fp16_mult_bot_a*fp16_mult_bot_b) + fp32_adder_a
  • fp32_result = (fp16_mult_top_a*fp16_mult_top_b) - (fp16_mult_bot_a*fp16_mult_bot_b) + fp32_adder_a
フラッシュおよびbfloat16形式でサポートされる例外フラグ
  • fp16_mult_top_invalid
  • fp16_mult_top_inexact
  • fp16_mult_top_overflow
  • fp16_mult_top_underflow
  • fp16_mult_bot_invalid
  • fp16_mult_bot_inexact
  • fp16_mult_bot_overflow
  • fp16_mult_bot_underflow
  • fp16_adder_invalid
  • fp16_adder_inexact
  • fp16_adder_overflow
  • fp16_adder_underflow
  • fp32_adder_invalid
  • fp32_adder_inexact
  • fp32_adder_overflow
  • fp32_adder_underflow
拡張形式でサポートされる例外フラグ
  • fp16_mult_top_invalid
  • fp16_mult_top_inexact
  • fp16_mult_top_infinite
  • fp16_mult_top_zero
  • fp16_mult_bot_invalid
  • fp16_mult_bot_inexact
  • fp16_mult_bot_infinite
  • fp16_mult_bot_zero
  • fp16_adder_invalid
  • fp16_adder_inexact
  • fp16_adder_infinite
  • fp16_adder_zero
  • fp32_adder_invalid
  • fp32_adder_inexact
  • fp32_adder_overflow
  • fp32_adder_underflow
2つのFP16乗算の合計と累算モード

このモードでは、2つの半精度乗算の和を計算し、その値を単精度形式に累算します。

このモードでは、次の式が適用されます。
  • accumulate 信号がHighに駆動されている場合
    • fp32_result (t) = [fp16_mult_top_a(t) * fp16_mult_top_b(t)] + [fp16_mult_bot_a(t) * fp16_mult_bot_b(t)] + fp32_result(t-1)
    • fp32_result (t) = [fp16_mult_top_a(t) * fp16_mult_top_b(t)] - [fp16_mult_bot_a(t) * fp16_mult_bot_b(t)] + fp32_result(t-1)
    • fp32_result (t) = [fp16_mult_top_a(t) * fp16_mult_top_b(t)] + [fp16_mult_bot_a(t) * fp16_mult_bot_b(t)] - fp32_result(t-1)
    • fp32_result (t) = [fp16_mult_top_a(t) * fp16_mult_top_b(t)] - [fp16_mult_bot_a(t) * fp16_mult_bot_b(t)] - fp32_result(t-1)
  • accumulate 信号がLowに駆動されている場合
    • fp32_result = [fp16_mult_top_a * fp16_mult_top_b] + [fp16_mult_bot_a * fp16_mult_bot_b]
    • fp32_result = [fp16_mult_top_a * fp16_mult_top_b] - [fp16_mult_bot_a * fp16_mult_bot_b]
フラッシュおよびbfloat16形式でサポートされる例外フラグ
  • fp16_mult_top_invalid
  • fp16_mult_top_inexact
  • fp16_mult_top_overflow
  • fp16_mult_top_underflow
  • fp16_mult_bot_invalid
  • fp16_mult_bot_inexact
  • fp16_mult_bot_overflow
  • fp16_mult_bot_underflow
  • fp16_adder_invalid
  • fp16_adder_inexact
  • fp16_adder_overflow
  • fp16_adder_underflow
  • fp32_adder_invalid
  • fp32_adder_inexact
  • fp32_adder_overflow
  • fp32_adder_underflow
拡張形式でサポートされる例外フラグ
  • fp16_mult_top_invalid
  • fp16_mult_top_inexact
  • fp16_mult_top_infinite
  • fp16_mult_top_zero
  • fp16_mult_bot_invalid
  • fp16_mult_bot_inexact
  • fp16_mult_bot_infinite
  • fp16_mult_bot_zero
  • fp16_adder_invalid
  • fp16_adder_inexact
  • fp16_adder_infinite
  • fp16_adder_zero
  • fp32_adder_invalid
  • fp32_adder_inexact
  • fp32_adder_overflow
  • fp32_adder_underflow
FP16ベクトル1モード

このモードでは、2つの半精度乗算の和と、前の可変DSPブロックからのチェーンイン入力の合計を計算します。出力は単精度浮動小数点値で、チェーンアウトに供給されます。

このモードでは、次の式が適用されます。
  • チェーンイン機能が有効になっている場合
    • fp32_result = (fp16_mult_top_a * fp16_mult_top_b) + (fp16_mult_bot_a * fp16_mult_bot_b) + fp32_chainin、fp32_chainout = fp32_adder_a
    • fp32_result = (fp16_mult_top_a * fp16_mult_top_b) - (fp16_mult_bot_a * fp16_mult_bot_b) + fp32_chainin、fp32_chainout = fp32_adder_a
    • fp32_result = (fp16_mult_top_a * fp16_mult_top_b) + (fp16_mult_bot_a * fp16_mult_bot_b) - fp32_chainin、fp32_chainout = fp32_adder_a
    • fp32_result = (fp16_mult_top_a * fp16_mult_top_b) - (fp16_mult_bot_a * fp16_mult_bot_b) - fp32_chainin、fp32_chainout = fp32_adder_a
  • チェーンイン機能が無効になっている場合
    • fp32_result = (fp16_mult_top_a * fp16_mult_top_b) + (fp16_mult_bot_a * fp16_mult_bot_b)、fp32_chainout = fp32_adder_a
    • fp32_result = (fp16_mult_top_a * fp16_mult_top_b) - (fp16_mult_bot_a * fp16_mult_bot_b)、fp32_chainout = fp32_adder_a
フラッシュおよびbfloat16形式でサポートされる例外フラグ
  • fp16_mult_top_invalid
  • fp16_mult_top_inexact
  • fp16_mult_top_overflow
  • fp16_mult_top_underflow
  • fp16_mult_bot_invalid
  • fp16_mult_bot_inexact
  • fp16_mult_bot_overflow
  • fp16_mult_bot_underflow
  • fp16_adder_invalid
  • fp16_adder_inexact
  • fp16_adder_overflow
  • fp16_adder_underflow
  • fp32_adder_invalid
  • fp32_adder_inexact
  • fp32_adder_overflow
  • fp32_adder_underflow
拡張形式でサポートされる例外フラグ
  • fp16_mult_top_invalid
  • fp16_mult_top_inexact
  • fp16_mult_top_infinite
  • fp16_mult_top_zero
  • fp16_mult_bot_invalid
  • fp16_mult_bot_inexact
  • fp16_mult_bot_infinite
  • fp16_mult_bot_zero
  • fp16_adder_invalid
  • fp16_adder_inexact
  • fp16_adder_infinite
  • fp16_adder_zero
  • fp32_adder_invalid
  • fp32_adder_inexact
  • fp32_adder_overflow
  • fp32_adder_underflow
FP16ベクトル2モード

このモードでは、2つの半精度乗算の和を計算し、チェーンアウトに供給します。また、入力 fp32_adder_a に対して前の可変DSPブロックからのチェーンイン入力を加算または減算し、その結果を出力します。

このモードでは、次の式が適用されます。
  • チェーンイン機能が有効になっている場合
    • fp32_result = fp32_adder_a + fp32_chainin、fp32_chainout = (fp16_mult_top_a * fp16_mult_top_b) + (fp16_mult_bot_a * fp16_mult_bot_b)
    • fp32_result = fp32_adder_a - fp32_chainin、fp32_chainout = (fp16_mult_top_a * fp16_mult_top_b) + (fp16_mult_bot_a * fp16_mult_bot_b)
    • fp32_result = fp32_adder_a + fp32_chainin、fp32_chainout = (fp16_mult_top_a * fp16_mult_top_b) - (fp16_mult_bot_a * fp16_mult_bot_b)
    • fp32_result = fp32_adder_a - fp32_chainin、fp32_chainout = (fp16_mult_top_a * fp16_mult_top_b) - (fp16_mult_bot_a * fp16_mult_bot_b)
  • チェーンイン機能が無効になっている場合
    • fp32_result = fp32_adder_a、fp32_chainout = (fp16_mult_top_a * fp16_mult_top_b) + (fp16_mult_bot_a * fp16_mult_bot_b)
    • fp32_result = fp32_adder_a、fp32_chainout = (fp16_mult_top_a * fp16_mult_top_b) - (fp16_mult_bot_a * fp16_mult_bot_b)
フラッシュおよびbfloat16形式でサポートされる例外フラグ
  • fp16_mult_top_invalid
  • fp16_mult_top_inexact
  • fp16_mult_top_overflow
  • fp16_mult_top_underflow
  • fp16_mult_bot_invalid
  • fp16_mult_bot_inexact
  • fp16_mult_bot_overflow
  • fp16_mult_bot_underflow
  • fp16_adder_invalid
  • fp16_adder_inexact
  • fp16_adder_overflow
  • fp16_adder_underflow
  • fp32_adder_invalid
  • fp32_adder_inexact
  • fp32_adder_overflow
  • fp32_adder_underflow
拡張形式でサポートされる例外フラグ
  • fp16_mult_top_invalid
  • fp16_mult_top_inexact
  • fp16_mult_top_infinite
  • fp16_mult_top_zero
  • fp16_mult_bot_invalid
  • fp16_mult_bot_inexact
  • fp16_mult_bot_infinite
  • fp16_mult_bot_zero
  • fp16_adder_invalid
  • fp16_adder_inexact
  • fp16_adder_infinite
  • fp16_adder_zero
  • fp32_adder_invalid
  • fp32_adder_inexact
  • fp32_adder_overflow
  • fp32_adder_underflow
FP16ベクトル3

このモードでは、単精度の累算と、2つの半精度乗算の和の計算を行います。

このモードでは、次の式が適用されます。
  • accumulate がHighに駆動されている場合
    • fp32_result(t) = fp32_adder_a(t) + fp32_result(t-1)、fp32_chainout = {fp16_mult_top_a * fp16_mult_top_b} + {fp16_mult_bot_a * fp16_mult_bot_b}

    • fp32_result(t) = fp32_adder_a(t) - fp32_result(t-1)、fp32_chainout = {fp16_mult_top_a * fp16_mult_top_b} + {fp16_mult_bot_a * fp16_mult_bot_b}
    • fp32_result(t) = fp32_adder_a(t) + fp32_result(t-1)、fp32_chainout = {fp16_mult_top_a * fp16_mult_top_b} - {fp16_mult_bot_a * fp16_mult_bot_b}

    • fp32_result(t) = fp32_adder_a(t) - fp32_result(t-1)、fp32_chainout = {fp16_mult_top_a * fp16_mult_top_b} - {fp16_mult_bot_a * fp16_mult_bot_b}
  • accumulate がLowに駆動されている場合
    • fp32_result = fp32_adder_a、fp32_chainout = {fp16_mult_top_a * fp16_mult_top_b} + {fp16_mult_bot_a * fp16_mult_bot_b}
    • fp32_result = fp32_adder_a、fp32_chainout = {fp16_mult_top_a * fp16_mult_top_b} - {fp16_mult_bot_a * fp16_mult_bot_b}
フラッシュおよびbfloat16形式でサポートされる例外フラグ
  • fp16_mult_top_invalid
  • fp16_mult_top_inexact
  • fp16_mult_top_overflow
  • fp16_mult_top_underflow
  • fp16_mult_bot_invalid
  • fp16_mult_bot_inexact
  • fp16_mult_bot_overflow
  • fp16_mult_bot_underflow
  • fp16_adder_invalid
  • fp16_adder_inexact
  • fp16_adder_overflow
  • fp16_adder_underflow
  • fp32_adder_invalid
  • fp32_adder_inexact
  • fp32_adder_overflow
  • fp32_adder_underflow
拡張形式でサポートされる例外フラグ
  • fp16_mult_top_invalid
  • fp16_mult_top_inexact
  • fp16_mult_top_infinite
  • fp16_mult_top_zero
  • fp16_mult_bot_invalid
  • fp16_mult_bot_inexact
  • fp16_mult_bot_infinite
  • fp16_mult_bot_zero
  • fp16_adder_invalid
  • fp16_adder_inexact
  • fp16_adder_infinite
  • fp16_adder_zero
  • fp32_adder_invalid
  • fp32_adder_inexact
  • fp32_adder_overflow
  • fp32_adder_underflow