ARRAY_RESHAPE 指令通过垂直重映射模式来重构阵列,用于减少所耗用的块 RAM 的数量,同时提供对数据的并行访问。
给定以下示例代码:
void foo (...) {
int array1[N];
int array2[N];
int array3[N];
#pragma HLS ARRAY_RESHAPE variable=array1 type=block factor=2 dim=1
#pragma HLS ARRAY_RESHAPE variable=array2 type=cyclic factor=2 dim=1
#pragma HLS ARRAY_RESHAPE variable=array3 type=complete dim=1
...
}
ARRAY_RESHAPE 指令可将阵列转换为下图所示形式。
图 1. 阵列重塑
ARRAY_RESHAPE 指令支持在单一时钟周期内访问更多数据。只要能在单一时钟周期内访问更多数据,Vitis HLS 即可自动展开使用此数据的所有循环,前提是这样有助于提升吞吐量。循环可全部或部分展开以创建足够的硬件以便在单一时钟周期内使用更多数据。此功能特性是使用 syn.unroll.tripcount_threshold
配置命令来控制的,如 展开设置 中所述。
在以下示例中,循环次数小于 16 的任何循环都将自动展开(前提是可提高吞吐量)。
syn.unroll.tripcount_threshold=16