目录
1. 简介
2. 优缺点对比
2.1 Stalled Pipeline
2.2 Free-Running/Flushable Pipeline
2.3 Flushable Pipeline
3. 设置方法
4. FRP的特殊优势
5. 总结
1. 简介
Vitis HLS 会自动选择正确的流水线样式,用于流水打拍函数或循环。
停滞的流水线(STP, Stalled Pipeline)
- 只要在流水线输入端数据可用,流水线就会持续执行。如果没有可供处理的数据,流水线就会停滞。
- 无使用约束。通常总体资源利用率最低。
- 可能出现死锁。
- 可能扇出过高导致序问题。
可刷新的流水线(FLP, Flushable Pipeline)
- 如果没有新输入可用(由流水线起始位置的数据 valid 信号来判定),流水线就会停止读取,但仍会继续处理并关闭后续每个流水线阶段,直至最终输入已处理至流水线输出为止。
*运行/可刷新的流水线(FRP, Free-Running/Flushable Pipeline)
- 只能从数据流区域调用。
- 时序更好,扇出更少,流水线控制逻辑更简单。
- 由于输出上添加的 FIFO,资源增加量中等。
2. 优缺点对比
2.1 Stalled Pipeline
即停滞的流水线,简写为STP。
使用场景:
- 流水线控制上不存在因扇出过高而导致的时序问题
- 无需可刷新流水线(如不存在因停滞而导致的性能或死锁问题)
#pragma HLS pipeline style=stp
优点:
- 通常情况下,总体资源消耗最低。
缺点:
- 导致数据流中出现更多死锁
- 如果缺少下一次迭代的输入,则会阻止交付计算所得的输出
- 由于流水线控制上扇出过高导致时序问题
2.2 Free-Running/Flushable Pipeline
即*运行/可刷新的流水线,缩写为FRP。
使用场景:
- 需要更好的时序(从流水线控制到寄存器使能的扇出)。
- 需要更好的性能或避免死锁。
- 只能从数据流区域(dataflow)调用。
优点:
- 时序更好(扇出更少,流水线控制逻辑更简单)。
- 可刷新。
缺点:
- 由于输出上添加的 FIFO,资源增加量中等。
- 需至少一个阻塞 I/O(串流或 ap_hs)。
- 并非所有流水打拍场景和I/O 类型都受支持。
2.3 Flushable Pipeline
可刷新的流水线,FLP, Flushable Pipeline
使用场景:
- 需要更好的性能或避免死锁。
优点:
- 可刷新
缺点:
- 可采用较大的 II
- 由于 II>1 时共享更少,资源利用率更大
3. 设置方法
可以通过 GUI 界面,配置默认的流水线风格:
也可以通过编译指示/指令进行配置:
#pragma HLS pipeline style=stp
#pragma HLS pipeline style=frp
#pragma HLS pipeline style=flp
4. FRP的特殊优势
在硬件设计中,标准流水线(STP和FLP类型)使用特定的逻辑来处理数据。这些流水线会使用阻塞信号来控制数据的流动,就像交通信号灯一样。但是,这些信号有时会导致问题,因为它们需要连接到很多其他部分(高扇出),这在复杂的设计中会导致时序问题,而且这些问题不容易在设计的后期修复。
为了解决这个问题,HLS 引入了一种新的流水线设计,称为*运行的流水线(FRP)。这种设计的好处包括:
- 消除了阻塞信号:它不再需要那些可能导致问题的阻塞信号。
- 可刷新性:如果数据传输无效,它可以创建“气泡”来清除这些数据,保持流水线的流畅。
- 减少了扇出:与以前的设计相比,它减少了需要连接的部分数量。
- 独立于优化:它不依赖于后期的综合或布局优化来解决问题。
- 有利于布局和布线(PnR):它的结构设计有助于缩短连线长度,减少复杂性。
但是,这种设计也有一些代价:
- 增加资源使用:为了处理阻塞,需要更大的FIFO缓冲器。
- 延迟:阻塞输出端口上的多路复用器会增加延迟。
- 可能影响性能:由于提前确认正压触发器,可能会影响整体性能。
最后,一个重要的提示:*运行的流水线(FRP)只能在数据流区域内部使用,不能用于顺序区域或流水打拍区域内的循环。
5. 总结
在Vitis HLS中,流水线设计对于硬件性能至关重要。停滞的流水线(STP)在数据可用时持续执行,但可能导致死锁和时序问题。可刷新的流水线(FLP)则在没有新输入时停止读取,但会继续处理,避免了死锁,但可能需要更大的迭代间隔(II)。*运行的流水线(FRP)提供了一种高效的解决方案,它通过减少扇出和简化控制逻辑来改善时序,同时允许流水线在无效数据传输时自我清理。尽管FRP增加了资源使用并可能引入延迟,但它的结构有利于布局和布线,减少了连线长度和复杂性。重要的是,FRP只适用于数据流区域,不适用于顺序区域或流水打拍区域的循环。这些流水线样式的选择和应用对于优化硬件设计的性能和资源利用率至关重要。