PE 的串流网络 - 2022.1 简体中文

Vitis 统一软件平台文档 应用加速开发 (UG1393)

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 简体中文

compute() 作用域内的函数之间使用串流变量即可设计跨 PE 的 PE 串流数据的仲裁网络。compute() 方法的主体用于对 PE 的结构组合进行语义描述。它不同于 C 语言中的过程语义,VSC 允许对 compute() 主体语义进行基于软件仿真的确认。此类网络的使用示例是专为 Etherium(以太坊)散列开发的设计,以太坊散列是加密货币挖矿中常用的热门算法。在 GitHub 上的 Ethash 示例中提供了此设计的 VSC 代码。

图 1. 串流网络

此图显示了该设计的系统架构。它是由 AXI4-Stream 连接的流水打拍式 PE 网络。其中有 4 个从全局存储器读取的 PE,nodeLookUp-1 to 4,每个 PE 也会读取 PE prefnv 所生成的输入串流。从这 4 个 PE 生成的 AXI4-Stream 供 PE postfnv 耗用。

请注意,在 fsk_passback 中有一条来自 postfnv 并返回 prefnvAXI4-Stream 反馈回路。此回路应在流经 AXI4-Stream 的数据迭代数次之后收敛。针对每次 compute() 调用,整个 PE 系统都将确定性启动执行和停止执行。

此类串流架构通常能够有效利用 FPGA 资源,相比使用 AXI4 M_AXI 接口时如果布线资源较低,那么此架构尤其有效。因此,此类架构可能达成更高的时钟频率和更好的加速器性能。

此 VSC 模型完全是使用 C++ 语言编写的,它通过 compute() 作用域内的函数调用来捕获网络。C++ 模型可在 VSC 内使用软件仿真进行功能确认,无需编译任何硬件。这样即可支持在 Vitis 工具内尽早对原始设计意图进行确认。

提示: 另有一种效率略低的系统组合方法,即创建多个加速器(不同于来自 VPP_ACC 的衍生类),这些加速器在应用层组成一条流水线,如 多加速器流水线组合 中所述。