循环是表示重复算法代码的基本 C/C++/OpenCL API 方法。以下示例展示了循环结构的各个实现方面:
for(int i = 0; i<255; i++) {
out[i] = in[i]+in[i+1];
}
out[255] = in[255];
此代码基于值阵列进行迭代并添加连续值,最后一个值除外。如果此循环作为写入来执行,则每个循环迭代需要两个实现周期,这将导致总共 510 个实现周期。可以通过 HLS 工程的调度查看器对此进行详细分析:
图 1. 调度查看器中已实现的循环结构
也可通过 Vivado 综合结果对总数和时延进行分析:
图 2. 综合结果性能估算
此处的关键数值是时延数量和 LUT 使用总量。例如,根据配置,结果可能是时延数量为 511,LUT 使用总量为 47。因此,这些值可能根据所选实现而异。虽然此实现所需面积可能非常小,但可能产生巨大的时延。