AI 引擎以 1 GHz 或更高频率(因器件而异)运行,并且每个周期最多可写入两条含 32 位数据的串流。相比之下,PL 内核可按 500 MHz(AI 引擎频率的一半)运行,同时耗用更大的位宽。速率匹配需要考量从生产者到使用者的吞吐量平衡,用于确保任一进程都不会造成总体性能相关的瓶颈。以下等式显示了每个通道的速率匹配:
每个周期的 AI 引擎频率 × AI 引擎数据 = 每个周期的 PL 频率 × PL 数据
下表显示了由频率为 1 GHz 的 AI 引擎为 -1L 速度等级的器件写入每个周期的 32 位通道的 PL 速率匹配示例。如该表所示,PL IP 必须以一半的频率耗用两倍的数据,或者以四分之一的频率耗用四倍的数据。
AI 引擎 | PL | ||
---|---|---|---|
频率 | 每个周期的数据 | 频率 | 每个周期的数据 |
1 GHz | 32 位 | 500 MHz | 64 位 |
250 MHz | 128 位 |
由于 Vitis 编译器 (v++
) 明确需要匹配频率并调整数据路径宽度,因此该工具会自动抽取 PL 内核的端口宽度、抽取时钟规范的频率,并引入放大器/缩小器来临时存储 AI 引擎与 PL 区域之间交换的数据,以便管理速率匹配。
为避免死锁,重要的是确保在 AI 引擎与 PL 之间如有多条通道执行读取或写入,那么将在所有通道上并发达成每个周期的数据率。例如,如果一条通道需 32 位,另一条通道需 64 位,那么 AI 引擎代码必须确保这两条通道都充分写入,以免通道上出现反压或数据匮乏。此外,为避免死锁,在 AI 引擎中写入/读取和在 PL 代码中读取/写入都必须遵循相同的时间顺序。
PL 的 graph 函数定义中使用的接口数量定义了 AXI4-Stream 接口的数量。每个实参都会导致创建独立的串流。