运算符配置 - 2023.2 简体中文

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文

syn.op 命令允许您为用于 HLS 组件的不同运算符配置默认实现风格、时延和精度。您可向配置文件添加多条 syn.op 命令,以指定不同运算符的详细信息。如果未指定运算符,那么该工具会判定该组件的默认值。

您可使用 syn.directive.bind_op 命令为特定变量覆盖 syn.op 命令所指定的默认设置。

syn.op
syn.op 命令的语法如下:
syn.op=op:mul impl:dsp
syn.op=op:add impl:fabric latency:6
syn.op=op:fmacc precision:high
syn.op=op:hdiv latency:5
  • syn.op=:启动命令
  • op:<operator>:指定 op 关键字,后接当前要定义的运算符。受支持的运算符包括:
    • mul:整数乘法运算

    • add:整数加法运算

    • sub:整数减法运算

    • fadd:单精度浮点加法运算

    • fsub:单精度浮点减法运算

    • fdiv:单精度浮点除法运算

    • fexp:单精度浮点指数运算

    • flog:单精度浮点对数运算

    • fmul:单精度浮点乘法运算

    • frsqrt:单精度浮点平方根倒数运算

    • frecip:单精度浮点倒数运算

    • fsqrt:单精度浮点平方根运算

    • dadd:双精度浮点加法运算

    • dsub:双精度浮点减法运算

    • ddiv:双精度浮点除法运算

    • dexp:双精度浮点指数运算

    • dlog:双精度浮点对数运算

    • dmul:双精度浮点乘法运算

    • drsqrt:双精度浮点平方根倒数运算

    • drecip:双精度浮点倒数运算

    • dsqrt:双精度浮点平方根运算

    • hadd:半精度浮点加法运算

    • hsub:半精度浮点减法运算

    • hdiv:半精度浮点除法运算

    • hmul:半精度浮点乘法运算

    • hsqrt:半精度浮点平方根运算

    • facc:单精度浮点累加运算

    • fmacc:单精度浮点乘积累加运算

    • fmadd:单精度浮点乘加运算

    提示: 比较运算符(如 dcmp)是在 LUT 中实现的,不得在互连结构外部实现,也不能映射到 DSP,因此无法通过 syn.op 命令或 syn.directive.bind_op 命令来配置。
  • impl:<value>:指定实现 (impl) 关键字,后接指定运算符的值。不指定 impl 时,默认工具会为给定运算符判定最佳实现。支持值包括:
    • all:所有实现。这是默认设置。

    • dsp:使用 DSP 资源

    • fabric:使用非 DSP 资源

    • meddsp:浮点 IP 中度使用 DSP 资源

    • fulldsp:浮点 IP 完全使用 DSP 资源

    • maxdsp:浮点 IP 最大程度使用 DSP 资源

    • primitivedsp:浮点 IP 原语使用 DSP 资源

    • auto:启用组合 facc | fmacc | fmadd 运算符的推断

    • none:禁用组合 facc | fmacc | fmadd 运算符的推断

  • latency:<value>:指定 latency 关键字,后接值。定义默认时延,用于将运算符绑定到实现资源。有效值范围因运算的每个实现而异 (impl)。默认值为 -1,即允许该工具为实现资源应用标准时延。
    提示: 您无需指定实现,即可为特定运算指定时延。这将交由该工具在管理时延的同时选择实现。
  • precision:<value>:用于浮点运算符(faccfmaccfmadd),它会指定 precision 关键字,后接以下值之一:
    • low:使用低精度(60 位和 100 位整数)累加实现(如果可用)。该选项仅在某些非 AMD Versal™ 器件上可用,由于 C++ 仿真相关精度不足,因此它可能导致 RTL/协同仿真发生不匹配。它始终采用流水打拍,且 II=1,无源代码更改,但所使用的资源量约为 standard 精度浮点累加所用资源量的 3 倍。
    • high:使用高精度(1 个额外的位)融合乘加实现(如果可用)。该选项可用于高精度应用,在 Versal 器件上非常高效,但由于 C++ 仿真相关的额外精度,因此它可能导致 RTL/协同仿真发生不匹配。它使用的资源比 standard 精度浮点累加更多。
    • standard:标准精度浮点累加和乘加适合大部分浮点用例,它是默认设置。它始终使用真正的浮点累加器,可在 Versal 器件上采用 II=1 来进行流水打拍,在非 Versal 器件上,II 通常介于 3 到 5 之间(取决于时钟频率和目标器件)。