显式限制运算符的数量以减小某些情况下所需的面积: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 编译指示或指令可支持该命令语法中描述的小部分运算符。
运算符 | 描述 |
---|---|
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 | 无符号取余 |