Vitis HLS 通过转换区域来应用 DATAFLOW 最优化。赛灵思建议在此区域内部(称为“规范区域”)使用规范格式来编写代码。 数据流最优化有 2 种主要的规范形式:
- 适用于未内联的子函数的函数规范形式。
void dataflow(Input0, Input1, Output0, Output1) { #pragma HLS dataflow UserDataType C0, C1, C2; func1(read Input0, read Input1, write C0, write C1); func2(read C0, read C1, write C2); func3(read C2, write Output0, write Output1); }
- 循环主体内部的数据流。
对于 for 循环(内部函数未内联),整型循环变量应包含:
- 循环头文件中声明初始值(设置为 0)。
- 循环条件为正数常量或常量函数实参。
- 按 1 递增。
- 数据流编译指示需位于循环内。
void dataflow(Input0, Input1, Output0, Output1) { for (int i = 0; i < N; i++) { #pragma HLS dataflow UserDataType C0, C1, C2; func1(read Input0, read Input1, write C0, write C1); func2(read C0, read C0, read C1, write C2); func3(read C2, write Output0, write Output1); } }