当以太网接口的速率提升到100G以上后,用传统FPGA来实现对应的数据处理时,一定会遇到总线效率的问题。本文就分享团队对大位宽高速数据处理时采用的分段总线方法的一些心得,希望大家可以批评指正。
01
分段总线及格式
1.1 分段总线的格式
随着不断提升的以太网带宽对总线吞吐率要求的提升,需要在芯片内部采用更高的主频、更大的总线位宽,但受制程及功耗影响,总线频率不能持续提升,这就需要在总线数据位宽方面加大提升力度。下图为Achronix公司在介绍400G以太网FPGA实现时给出的结论,对于400G以太网的数据处理,意味着数据总线位宽超过1024bit,时钟频率超过724MHz,传统的FPGA在实现时很难做到时序收敛。
主要原因在于更宽的数据总线带来了总线效率的问题,针对变长数据输入的情景,当芯片内部总线位宽变大时,若每个总线字在数据传输过程中不能被有效利用,则可能导致总线效率降低。
例如,在位宽为64bit的总线上传输65字节的数据帧,其在总线上的传输格式如下图所示,第9个总线字仅用来传输1字节,导致总线效率降低,约为90.3%。
若总线位宽再进一步提升至512bit后,如下图所示,总线效率只有50.8%。
可见,在传统总线中,当传输数据量未对齐边界到总线位宽时,总线效率随位宽的拓宽而降低。
【以下内容来源于刘欢博士的论文】
为解决上述总线效率问题,需要引入分段总线格式。非分段总线每个 总线字内仅可以容纳一个数据帧的内容,当总线字不能被充分利用时(如长度为 64 字节的数据总线承载 65 字节的帧),未利用部分使用特定值(如全 0)做填充处理, 在某些帧长下,填充字段所占比例过高,导致总线效率低下。分段总线将数据总线字分为多个总线段,每个总线段可以容纳一个数据帧的内容,换言之,一个总线字由多个总线段组成,此时一个总线字可以承载多个数据帧的内容,从而降低了填充字段的影响。
分段总线在工业界与学术界均获得了关注与研究,在工业界,Xilinx 与 Intel 的 400G 和600G以太网 IP 核、PCIe IP核等的片内总线均采用了简单分段总线格式,以实现更高的总线效率;在学术界,涌现了一种新的分段总线架构:Multi Buses[1],下文分别对两种分段总 线格式进行介绍,并分析其总线效率与实现开销。
(1)Xilinx/Intel 分段总线格式
Xilinx 在其最新一代 Versal ACAP 中采用了 600G 以太网 IP 硬核[316],该 IP 核可以支持一个 400G 以太网端口 2个100G 以太网端口,对于 400G 以太网端口,用户侧采用1024比特数据总线,该数据总线分为 8 段,每段 128 比特;Intel 在其最新一代Agilex FPGA中采用Chiplet技术集成了400G 以太网[2-4],其面向用户侧接口 也采用了 1024 比特数据总线,该总线分为 16 段,每段 64 比特。Xilinx/Intel分段总线格式如图所示。
Xilinx/Intel 分段总线运行频率均为 390MHz 左右,在频率受限的前提下,通过使 用宽总线,可以实现更高的最高吞吐量;通过使用分段总线,可以在一个总线数据字中承载多个数据帧的数据,减小填充的影响,从而提升总线效率,增强对短数据帧的支持。
(2)Multi Buses 分段总线格式
最近,学术界涌现出了一种名为 Multi Buses 的新型分段总线,该总线格式如图所示,数据总线采用了 Word、Region、Block 和 Item 四个度量标准,下图仅为示意图,四种度量标准之间的数量关系可以任意定义。图中 Word 代表了总线字, 其长度与总线宽度相等;Block 与 Xilinx/Intel 分段总线格式中的总线段起到相同的 作用,即单个 Block 内仅可以承载一个数据帧的内容,未使用部分采用特定值填充;Item 即总线传输的最小单位,例如,以太网/PCIe等传输总线,其用户侧数据总线的 最小传输单位为 1 字节;Region 是 Multi Buses 引入的新概念,也是该总线的重要创新点,下面对 Region 的概念与优势进行详细介绍。
数据总线用于传输数据,而处理模块用于处理总线承载的数据,在设计总线格式时,除需要考虑总线的传输效率外,还需要顾及处理模块的实现复杂度。对于 Xilinx/Intel 分段总线,总线段的长度越小,填充字段造成的影响越小,因此可以实现更高的总线效率,但由于数据帧的结束可能发生在任意一个总线段,因此每个总线段都需要预留一个处理模块,换言之,总线效率提高的同时,设计的面积复杂度也线性提高了。
但是,需要注意的是,数据帧在传输时需要满足最小长度要求,例如,以太网帧的最小传输长度为 64 字节,数据帧的最小传输长度可能远大于总线段的长度,而处理模块处理数据时,一般以数据帧为单位。因此,如果可以把各个总线段的处理结果聚合为数据帧的处理结果,然后交由处理模块做进一步处理,如此可以有效减少处理模块的数量,进而减小面积开销。根据该思想,Multi Buses 提出了 Region 的概 念,Region 的大小与传输数据帧的最小长度紧密相关,在一个 Region 中,允许承载两个数据帧的内容,因此在一个 Region 中仅会出现一个数据帧结束,该结束数据帧的后续处理,将交由本 Region 对应的处理模块进行。
举例说明 Region 的概念与设计优势。使用 4096 比特/512 字节数据总线传输以太 网数据帧,当总线段长度为 8 字节时,总线段数量为 64,此时如果不引入 Region 的 概念,则需要 64个处理模块以完成数据帧的处理;以太网数据帧的最小长度为 64 字节,因此一个总线字中最多承载 9个数据帧的数据,并出现 8个数据帧结束,此时 56个处理模块都是空闲的。引入 Region 的概念,并将 Region 大小设置为 64 字节,此 时一个总线数据字可以分为 8个 Region,每个 Region 对应一个处理模块,数据处理模块的数量降低了 87.5%,当传输最短帧时,数据处理模块的利用率可以达到 100%。
(3)分段总线效率与面积开销分析
总线效率