インテル® Agilex™ 可変精度DSPブロック・ユーザーガイド

ID 683037
日付 2/05/2021
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 Blockからのチェーンイン入力で浮動小数点加算または減算を実行します。

このモードでは、次の式が適用されます。
  • チェーンイン機能がイネーブルになっている場合、
    • 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 に供給される浮動小数点乗算を実行します。次に、前の変数DSP Blockからの chainin 入力が、出力結果として入力 Ax に加算または減算されます。

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

  • チェーンイン機能がイネーブルになっている場合、
    • 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
FP32加算での2つのFP16乗算の合計モード

このモードは、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モード

このモードは、前の変数DSP Blockからのチェーンイン入力を使用して2つの半精度乗算の合計を実行します。出力は、チェーンアウトに供給される単精度浮動小数点値となります。

このモードでは、次の式が適用されます。
  • チェーンイン機能がイネーブルになっている場合、
    • 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つの半精度乗算の合計を実行し、チェーンアウトに供給されます。前の変数DSP Blockからのチェーンイン入力は、出力結果として入力 fp32_adder_a に加算または減算されます。

このモードでは、次の式が適用されます。
  • チェーンイン機能がイネーブルになっている場合、
    • 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