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>
:用于浮点运算符(facc
、fmacc
和fmadd
),它会指定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 之间(取决于时钟频率和目标器件)。
-
-