3 可扩展性与逻辑资源消耗
3.1 概述
Xillybus 在设计时充分考虑了可扩展性。虽然将定制 IP 核配置为仅包含单个流是完全合理的,但扩展到大量流对 Xillybus 核所消耗的逻辑 资源影响相对较小。
为了测量逻辑资源消耗,我们对 Xillybus IP 核(基准版本,Revision A)进行了连续构建,逐步增加流的数量。在所有测试 中,从 FPGA 到主机的流数量与相反方向相同。流的数量从 2 个(每个方向一个)到 64 个(每个方向 32 个)不等。
本节概述了 IP 核本身在三种 FPGA 系列上的逻辑资源消耗情况,数据来自相应工具的告。这些 FPGA(来自 AMD)已相当 过时,但在更新的 FPGA 上(无论是 AMD 还是 Altera)也能得到类似的结果。
关于 Revision B、XL 和 XXL 等版本 IP 核的类似分析,请参见第 4 节。
XillyUSB 不在上述任何分析范围之内。
3.2 块 RAM
Xillybus 核使用的块 RAM 数量在零到几个之间(64 个流时使用 3 个块 RAM)。Xillybus 核内部没有为每个流配备独立的缓冲区,而是依 赖于连接到其上的 FIFO 来收集数据。在内部,该核拥有一个由所有流共享的单一内存池。
随着流数量的增加,块 RAM 用于存储 DMA 缓冲区的地址。
额外的块 RAM 则分配给从主机到 FPGA 的流所用的 DMA 加速功能,具体细节见核的 README 文件。
3.3 逻辑结构资源
以下图表显示了当流数量从 2 个增加到 64 个时,LUT(查找表)和寄存器(触发器)的消耗情况。图中每个点代表综合报 告中的实际使用量。从这些图表可以明显看出,逻辑资源消耗呈近似线性增长。无论 FPGA 架构如何,每个流平均增加约 110 个 LUT 和 82 个寄存器。
FPGA 上实际消耗的 slices 数量取决于逻辑元件的打包方式。在 Spartan-6 或 Virtex-6 系列中,每个 slice 最多可包含 8 个 LUT 和 8 个寄 存器。因此,一种非常乐观的估计是假设寄存器被完美打包,那么每个流仅增加 110/8 = 14 个 slice 的资源消耗。另一方面,以一半的效率进 行打包也是无需太多努力即可实现的。因此,每个流所消耗的 slice 数量可以估计在 14 到 28 个之间。
需要注意的是,当 FPGA 并非接近满载时,负责实现的工具不会费心去高效地打包逻辑到 slice 中,因此 slice 数量的增长可 能会显著更陡。这种情况下,工具会浪费资源,因为资源充裕。
本次基准测试设定的负载比例是上行流和下行流均为 50%。实际应用中的 IP 核通常会偏重其中一个方向,但以下结果有助 于了解预期情况。
图表如下。斜率可能看起来很陡,但请注意,流的数量从一个最小的 IP 核(2 个流)一直增加到相当重的配置(64 个 流)。
结论是:在 IP 核中分配额外的流是合理的,即使对于最琐碎的任务也是如此,因为它们对 slice 数量的贡献相当低。
