英特尔Agilex® 7可变精度DSP模块用户指南

ID 683037
日期 4/11/2023
Public
文档目录

10.2. Native Floating Point DSP 英特尔® Agilex™ FPGA IP核支持的操作模式

表 107.   Native Floating Point DSP 英特尔® Agilex™ FPGA IP核支持的操作模式
操作模式 描述 支持的异常标志
FP32 multiplication mode(FP32乘法模式)

该模式执行单精度乘法操作。

此模式应用以下方程式:
  • fp32_result = fp32_result = fp32_mult_a*fp32_mult_b
  • fp32_mult_overflow
  • fp32_mult_underflow
  • fp32_mult_inexact
  • fp32_mult_invalid
FP32 addition or subtraction mode(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 multiplication with addition or subtraction mode(FP32乘法以及加法或减法模式)

该模式执行单精度乘法,而后进行加法或减法操作。

此模式应用以下方程式:
  • 启用chainin功能时:
    • fp32_result = (fp32_mult_a*fp32_mult_b) + fp32_chainin
    • fp32_result = (fp32_mult_a*fp32_mult_b) - fp32_chainin
  • 当禁用 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 multiplication with accumulation mode(FP32乘法以及累加模式)

该模式执行浮点乘法,而后通过之前的乘法所得结果进行浮点加法或减法。

此模式应用以下方程式:
  • accumulate信号被驱动为高电平时:
    • 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信号被驱动为低电平时:
    • fp32_result = fp32_mult_a*fp32_mult_b。
FP32 vector one mode(FP32 vector one模式)

该模式执行浮点乘法,而后通过前面精度可调DSP块的chainin输入进行浮点加法或减法。

此模式应用以下方程式:
  • 使能chainin功能时:
    • 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
  • 禁用chainin功能时:
    • fp32_result = fp32_mult_a * fp32_mult_b, fp32_chainout = fp32_adder_a
FP32 vector two mode(FP32 vector two模式) 此模式执行浮点乘法,其中乘法结果直接馈送到chainout。该chainin从之前的可变精度DSP Block来,并作为输出结果被添加到Ax输入或从其中减去。

此模式应用以下方程式:

  • 启用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
  • 当禁用chainin功能时:
    • fp32_result = fp32_adder_a, fp32_chainout = fp32_mult_a * fp32_mult_b
Sum of two FP16 multiplication mode(两个FP16乘法求和模式)

此模式执行两个半精度乘法的求和,并提供单精度结果。

此模式应用以下方程式:
  • 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)
支持的flushed和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
Sum of two FP16 multiplication with FP32 addition mode(两个FP16乘法与FP32加法求和模式)

此模式执行两个半精度乘法的求和,并提供单精度结果。

此模式应用以下方程式:
  • 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
支持的flushed和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
Sum of two FP16 multiplication with accumulation mode(两个FP16乘法与累加求和模式)

此模式执行两个半精度乘法并将该值累加成单精度格式:

此模式应用以下方程式:
  • accumulate信号被驱动为高电平时:
    • 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信号被驱动为低电平时:
    • 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]
flushed和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 vector one mode(FP16 vector one模式)

该模式通过从先前可变精度DSP模块来的chainin输入执行两个半精度乘法的求和。该输出是一个单精度浮点值,并被馈入chainout。

此模式应用以下方程式:
  • 启用chainin功能时:
    • 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
  • 禁用chainin功能时:
    • 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
flushed和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 vector two mode(FP16 vector two模式)

此模式运行两个半精度乘法运算求和,并被馈入chainout。然后从可变精度DSP模块来的chainin输入被加入fp32_adder_a或从其中减去后作为输出结果。

此模式应用以下方程式:
  • 启用chainin功能时:
    • 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)
  • 禁用chainin 功能时:
    • 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)
flushed和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 Vector Three

此模式执行单精度累加和两个半精度乘法的求和。

此模式应用以下方程式:
  • accumulate被驱动为高电平时:
    • 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被驱动为低电平时:
    • 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}
flushed和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