位宽传输 - 2023.2 简体中文

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

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

编码样式对于函数的主要影响在于影响函数实参和接口。如果准确调整函数实参大小,Vitis HLS 即可在整个设计中传输此信息。无需为每个变量创建任意精度类型。在以下示例中,有 2 个整数相乘,但仅低 24 位用于生成结果。

#include "ap_int.h"
 
ap_int<24> foo(int x, int y) { 
 int tmp;
 
 tmp = (x * y);
 return tmp
}

对此代码进行综合时,可生成 32 位乘法器,输出截位至 24 位。

如果将输入大小正确调整为 12 位类型 (int12)(如下代码示例所示),则最终 RTL 使用 24 位乘法器。

#include "ap_int.h"
typedef ap_int<12> din_t;
typedef ap_int<24> dout_t;
 
dout_t func_sized(din_t x, din_t y) { 
 int tmp;
 
 tmp = (x * y);
 return tmp
}

针对 2 项函数输入使用任意精度类型即可足以确保 Vitis HLS 使用 24 位乘法器创建设计。这样即可在整个设计中传输 12 位类型。AMD 建议您正确调整层级中所有函数实参的大小,这样即可避免调整局部变量大小。

总而言之,从函数接口(尤其是从顶层函数接口)直接驱动变量时,这些变量即可阻止执行最优化。常见用例是使用输入作为循环索引上限。