在 compute()
作用域内的函数之间使用串流变量即可设计跨 PE 的 PE 串流数据的仲裁网络。compute()
方法的主体用于对 PE 的结构组合进行语义描述。它不同于 C 语言中的过程语义,VSC 允许对 compute()
主体语义进行基于软件仿真的确认。此类网络的使用示例是专为 Etherium(以太坊)散列开发的设计,以太坊散列是加密货币挖矿中常用的热门算法。
图 1. 串流网络
此图显示了该设计的系统架构。它是由 AXI4‑Stream 连接的流水打拍式 PE 网络。其中有 4 个从全局存储器读取的 PE,nodeLookUp-1 to 4
,每个 PE 也会读取 PE prefnv
所生成的输入串流。从这 4 个 PE 生成的 AXI4‑Stream 供 PE postfnv
耗用。
在 fsk_passback
中有一条来自 postfnv
并返回 prefnv
的 AXI4‑Stream 反馈回路。此回路应在流经 AXI4‑Stream 的数据迭代数次之后收敛。针对每次 compute()
调用,整个 PE 系统都将确定性启动执行和停止执行。
此类串流架构通常能够有效利用 FPGA 资源,相比使用 AXI4 M_AXI 接口时如果布线资源较低,那么此架构尤其有效。因此,此类架构可能达成更高的时钟频率和更好的加速器性能。
此 VSC 模型完全是使用 C++ 语言编写的,它通过 compute()
作用域内的函数调用来捕获网络。C++ 模型可在 VSC 内使用软件仿真进行功能确认,无需编译任何硬件。这样即可支持在 Vitis 工具内尽早对原始设计意图进行确认。