PE 函数的每个自变量都必须连接到顶层 compute()
函数的实参或者连接到静态声明的串流。vpp::stream
继承自 Vitis HLS
hls::stream
,如Vitis HLS 用户指南 (UG1399) 的“HLS 串流库”部分中所述。
vpp::stream
对象可提供多项附加功能特性:
-
vpp::stream
构造函数会提取附加实参post_check
,其默认值为 true。每次 compute 调用结束时,大部分串流变量均应为空,但其他变量可能指定为跨多个compute()
调用延续数据。在软件仿真中,默认会在每次compute()
调用末尾检查vpp::stream
是否为空,如果不为空,则将断言有效。可选post_check
实参允许您关闭此断言。 -
DEPTH
参数允许用户指定在硬件内实现的 FIFO 深度,并且在软件和硬件仿真期间也会使用此指定深度。提示:DEPTH
默认值设为 1024,通常在硬件编译中,这属于过度利用资源。建议您为compute()
作用域内使用的串流指定深度以节省资源。您可采用较小的深度值 2 来运行软件仿真,以测试功能并帮助确定所需的深度。 -
vpp::stream
变量可向下传递至 PE 函数,其类型可为hls::stream
。 -
vpp::stream
变量必须声明为static
,以确保 Vitis 软件仿真中正确完成功能确认。在硬件中,并不会隐式清空串流/FIFO,其内容将跨不同运行轮次延续。其行为与static
变量相同。
以下章节描述了在 compute()
主体作用域内使用基本 C++ 编码组合流水打拍式 PE 系统的常用样式。流水线内的 PE 可使用 AXI4‑Stream 直接连接或 AXI4 (M_AXI) 全局存储器访问来跨 PE 移动数据。