限制运算符数量 - 2023.2 简体中文

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

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

显式限制运算符的数量以减小某些情况下所需的面积:Vitis HLS 的默认操作是首先最大限度提升性能。限制设计中的运算符数量是一项减小设计面积的实用技巧:它通过强制共享运算来减小面积。但是,这可能导致性能下降。

ALLOCATION 指令允许您限制设计中使用的运算符数量。例如,名为 foo 的设计包含 317 次乘法,但 FPGA 仅有 256 项乘法器资源(DSP 宏单元)。以下所示 ALLOCATION 编译指示可指令 Vitis HLS 创建含最多 256 个乘法 (mul) 运算符的设计:

dout_t array_arith (dio_t d[317]) {
 static int acc;
 int i;
#pragma HLS ALLOCATION instances=fmul limit=256 operation

 for (i=0;i<317;i++) {
#pragma HLS UNROLL
 acc += acc * d[i];
 }
 rerun acc;
}
注释: 如果指定的 ALLOCATION 限制超出所需数量,Vitis HLS 会尝试使用此项限制所指定的资源数量,从而导致减少共享量。

您可使用 type 选项来指定 ALLOCATION 指令是否限制运算、实现和函数数量。下表列出了可使用 ALLOCATION 指令控制的所有运算。

注释: 下列运算均受 ALLOCATION 编译指示或指令支持。BIND_OP 编译指示或指令可支持该命令语法中描述的小部分运算符。
表 1. Vitis HLS 运算符
运算符 描述
add 整数加法
ashr 算术右移
dadd 双精度浮点加法
dcmp 双精度浮点比较
ddiv 双精度浮点除法
dmul 双精度浮点乘法
drecip 双精度浮点倒数
drem 双精度浮点余数
drsqrt 双精度浮点平方根倒数
dsub 双精度浮点减法
dsqrt 双精度浮点平方根
fadd 单精度浮点加法
fcmp 单精度浮点比较
fdiv 单精度浮点除法
fmul 单精度浮点乘法
frecip 单精度浮点倒数
frem 单精度浮点余数
frsqrt 单精度浮点平方根倒数
fsub 单精度浮点减法
fsqrt 单精度浮点平方根
icmp 整数比较
lshr 逻辑右移
mul 乘法
sdiv 有符号的除法器
shl 左移
srem 有符号取余
sub 减法
udiv 无符号除法
urem 无符号取余