学习目标为:
- 如何使用高级综合生成流水线
- 如何使用Stratus进行层次化设计
1.生成流水线
Stratus允许指定一个主循环(while(1)
)中的内容为流水线方式实现,即每个时钟周期均可以进入数据执行,需要在主循环开始时添加如下语句指定使用流水线实现:
HLS_PIPELINE_LOOP(<STALL_TYPE>, <cycle>, <name>);
上述指定该loop为流水线实现,具有三个参数,分别如下所示:
- STALL_TYPE:实现类型,包括
HARD_STALL
和SOFT_STALL
两种 - cycle:数据进入间隔,即“每隔多少个时钟周期可进入一个数据”,当cycle=1时表示每个周期均可进入数据
- name:流水线配置名称,每个循环流水线名称不同即可
对于STALL_TYPE中的两种,具有以下的区别:
-
HARD_STALL
:当流水线的某一级阻塞时,整条流水线停止运行 -
SOFT_STALL
:当流水线的某一级阻塞时,仅阻塞级之前的流水线停止运行,阻塞级之后的流水线继续运行
对于要生成流水线的代码片(循环体),Stratus有以下的要求:
- 循环展开(Nested Loops):循环体中仅可以嵌套次