vivado hls中循环(一)

张开发
2026/4/15 22:29:57 15 分钟阅读

分享文章

vivado hls中循环(一)
一、循环1.循环包括for循环while循环do-while循环在vivado hls中都是可以综合的。2.LOOP循环在vivado hls中受到了全面的可综合3.循环可以进行pipeline流水线化设计4.LOOP循环可以使用unroll展开或者部分展开5.LOOP循环可以使用Loop_flatten扁平化设计6.多LOOP循环可以使用Loop_merge进行合并。二、循环中的注意事项1.循环的索引变量索引变量建议定义局部变量不要使用全局变量使用了全局变量是可以的但是不推荐因为这个影响你的代码被工具优化设计使用全局变量不利于设计优化对综合rtl代码会有影响。2.循环变量的边界问题循环的边界是变量的时候很多优化是没有变化进行的。因为综合工具没有办法推断循环什么时候结束所以工具的优化就变得非常保守甚至放弃了优化。3.循环变量的循环无法进行unroll因为工具不知道要拷贝多少次这样的资源逻辑从而放弃unroll展开工作案例一不可unroll的for循环#include ap_cint.h#define N 32typedef int8 din_t;typedef int13 dout_t;typedef uint5 dsel_t;dout_t code028(din_t A[N], dsel_t width) {dout_t out_accum0;dsel_t x;LOOP_X:for (x0;xwidth; x) {out_accum A[x];}return out_accum;}案例二可以unroll的for循环#include ap_cint.h#define N 32typedef int8 din_t;typedef int13 dout_t;typedef uint5 dsel_t;dout_t loop_max_bounds(din_t A[N], dsel_t width) {dout_t out_accum0;dsel_t x;LOOP_X:for (x0;xN; x) {if (xwidth) {out_accum A[x];}}return out_accum;}4.循环的边界是变量会阻止该循环上个层级的循环或者函数的流水线优化如果某个函数或者循环内部有一个循环这个循环的循环边界是变量那么如果你对这个函数或者父级循环进行流水化设计那么就会要求对子循环进行展开设计但是你的循环边界是变量没办法展开所以流水线优化会失败。

更多文章