4. TSN交换机整体架构

TSN(时间敏感网络)交换机的核心价值在于将标准以太网的无序竞争转化为可预期、可调度的确定性传输。在FPGA上实现TSN交换机,并非简单地将软件协议栈移植到硬件,而是需要从硬件架构层面重新划分功能模块,确保每个以太网帧从入端口到出端口的全过程都在纳秒级的时间预算内完成。本章将深入拆解TSN交换机的五大核心子系统——端口与MAC、交换核心、队列管理、调度器以及时间同步模块,并重点阐述它们之间的数据流与控制流关系。理解这一整体架构,是后续进行RTL设计、时序收敛和协议栈实现的前提。

TSN交换机核心数据通路架构(FPGA实现视角) 时间同步模块(802.1AS/) 锁相环/时钟伺服 | 时间戳生成 端口0 PHY/RGMII 10/100/1000M MAC(TX/RX) CRC/填充/全双工 端口1 PHY/RGMII 10/100/1000M MAC(TX/RX) CRC/填充/全双工 帧解析与分类 VLAN/优先级/目的MAC 帧解析与分类 VLAN/优先级/目的MAC 交换核心(Crossbar / Shared Memory) 查找表(L2/L3) | 广播/组播复制 帧切片(Cells)| 无阻塞交换 队列管理(QoS) 每端口8队列 | 802.1Qbv门控列表 整形(CBS/ATS)| 丢弃策略 门控调度器(TAS/802.1Qbv) 时间感知队列选择 | 优先级映射 数据通路 控制/配置 时间同步

上图展示了FPGA内部TSN交换机的高层数据通路。从宏观上看,数据流是单向且流水线化的:数据从端口进入,经过MAC和解析分类后,进入交换核心进行转发决策,随后被送入目的端口的队列管理模块,最终由调度器按照时间门控列表发送出去。与此同时,时间同步模块为所有环节提供统一的时钟基准,确保调度和时戳的准确性。下面我们将逐一剖析每个模块的职责与实现要点。

4.1 端口与MAC:物理世界的入口与出口

核心原理:端口模块是FPGA与外部PHY芯片的接口,通常采用RGMII(Reduced Gigabit Media Independent Interface)或SGMII(Serial Gigabit Media Independent Interface)协议。MAC(Media Access Control)子层负责以太网帧的封装与解封装,包括前导码(Preamble)、帧起始定界符(SFD)、CRC校验、帧间隙(IFG)处理等。在TSN交换机中,MAC层还需要支持IEEE 802.1AS定义的精确时间戳功能,即在帧通过MAC的特定位置时,由硬件逻辑捕获当前时间值并附加到帧描述符中。

判断方法与操作流程:在FPGA设计中,选择MAC实现方式时需考虑以下因素:

  • 软核MAC vs 硬核MAC:Xilinx/Intel FPGA通常集成硬核MAC(如GEM、EMAC),支持线速处理且不占用逻辑资源;软核MAC(如Tri-Mode Ethernet MAC)灵活但消耗LUT和FF资源。对于TSN交换机,建议优先使用硬核MAC,因为其内置的时间戳接口和CRC校验逻辑更为可靠。
  • 时间戳接口:MAC必须提供独立的时戳捕获信号(如rx_ts、tx_ts),精度要求达到纳秒级(通常为8ns或更低)。在RTL设计中,需要将时戳与帧描述符(Frame Descriptor)绑定,随帧一起传递到后续模块。
  • 流控与背压:MAC层需支持IEEE 802.3x流控(Pause帧)和优先级流控(PFC,802.1Qbb),用于防止缓冲区溢出。在FPGA实现中,流控信号需要与队列管理模块联动。
实战场景:在某工业控制项目中,要求交换机支持1588v2时间同步。我们选用Xilinx RGMII IP核,并启用其“Timestamp”选项。在RTL代码中,当rx_axis_tvalid拉高且rx_axis_tlast为高时,从MAC的时戳总线读取64bit时间值,存入帧描述符的保留字段。该时戳随后被时间同步模块用于计算驻留时间(Residence Time),这是实现透明时钟(TC)的关键数据。
常见误区:初学者常忽略MAC层的帧间隙(IFG)调整。TSN调度要求帧在精确时间点发送,但MAC会自动插入至少96bit的IFG。若调度器未考虑IFG长度,会导致实际发送时刻偏移。解决方法是:在调度器的门控列表中预留IFG时间槽,或在MAC配置中允许缩短IFG(需谨慎,可能影响兼容性)。

4.2 交换核心:无阻塞的帧转发引擎

核心原理:交换核心负责根据帧的目的MAC地址(或VLAN、IP信息)查找转发表,确定输出端口,并将帧从输入端口搬运到输出端口。在FPGA中,常见的交换核心架构有两种:共享内存架构(Shared Memory)和Crossbar架构。共享内存架构将帧数据存储在中央RAM中,通过读写指针控制出入;Crossbar架构则通过交叉开关矩阵实现任意输入到任意输出的直通连接。对于TSN交换机,由于需要支持多队列和调度,共享内存架构更为常见,因为它便于集中管理队列深度和实现组播复制。

关键设计参数:

参数 推荐值/范围 说明
查找表深度 4K-32K条目 支持L2 MAC表,可选L3路由表
帧切片大小 64B-128B 切片越小,阻塞概率越低,但开销增大
组播复制方式 指针复制 vs 数据复制 指针复制节省带宽,但需维护引用计数
背压机制 基于信用(Credit)或水位线 防止输出队列溢出

操作流程:在FPGA中实现交换核心的推荐步骤为:

  1. 将输入帧解析为固定长度的描述符(包含源端口、目的MAC、VLAN ID、优先级等),数据部分写入共享缓冲池。
  2. 查找引擎(通常使用哈希表或TCAM)并行查询转发表,得到目的端口掩码(Bitmap)。
  3. 根据目的端口掩码,将描述符复制到对应输出端口的队列管理模块。若为广播帧,则复制到所有端口。
  4. 输出端口从共享缓冲池中按序读取数据,恢复原始帧格式。
经验提醒:在FPGA上实现查找表时,建议使用Xilinx的SmartCORE或Intel的ALTMEMPHY,并采用双端口RAM以支持同时读写。对于需要线速转发的场景,务必使用流水线设计,将查找延迟控制在1-2个时钟周期内,否则会降低吞吐量。

4.3 队列管理与调度器:确定性的核心

核心原理:队列管理模块为每个输出端口维护多个优先级队列(通常为8个,对应802.1p优先级)。TSN的关键在于调度器如何从这些队列中选择帧发送。IEEE 802.1Qbv(时间感知整形器,TAS)定义了门控列表(Gate Control List,GCL),每个队列对应一个门(Gate),门在特定时间打开或关闭,从而在时间上隔离不同优先级的流量。例如,周期性的控制帧(如运动控制指令)可以在一个时间窗口内独占带宽,而普通数据帧在另一个窗口发送。

调度器实现要点:

  • 门控列表存储:GCL存储在FPGA的Block RAM中,每个条目包含门状态(开/关)和持续时间。调度器按顺序执行条目,循环往复。
  • 队列选择逻辑:在门打开的队列中,通常采用严格优先级(SP)或加权轮询(WRR)选择具体帧。对于TSN,推荐使用SP,确保高优先级帧优先发送。
  • 时间同步接口:调度器必须与时间同步模块紧密耦合。当本地时间到达GCL中定义的窗口起始时刻时,调度器立即切换门状态。因此,时间同步模块输出的纳秒级时间信号(如ptp_time)需要直接连接到调度器的比较器。
案例拆解:假设一个TSN交换机需要同时传输周期性的实时控制帧(周期1ms,长度128B)和尽力而为的视频流。我们配置GCL如下:在每1ms周期的前50μs,打开队列7(控制帧)的门,关闭其他队列;在剩余950μs,打开队列0-3(视频流)的门。在FPGA实现中,我们使用一个计数器跟踪当前时间,并与GCL条目中的绝对时间比较。当计数器值等于窗口起始时间时,触发门状态更新。实测结果表明,控制帧的端到端延迟抖动小于1μs,满足工业控制要求。
常见误区:调度器的门控切换需要时间,通常为1-2个时钟周期。若在切换瞬间有帧正在发送,必须等待当前帧发送完毕才能关闭门,否则会产生残帧。因此,GCL设计时需考虑“保护带”(Guard Band),即在窗口结束前预留一段空闲时间,确保帧能完整发送。保护带长度应大于最大帧长(1518B)的传输时间(约12.2μs@1Gbps)。

4.4 时间同步模块:所有确定性的基石

核心原理:时间同步模块实现IEEE 802.1AS()协议,使交换机与网络中的其他节点共享同一时间基准。该模块通常包含:

  • 时间戳单元:在MAC层捕获帧的精确进出时间,用于计算链路延迟和驻留时间。
  • 时钟伺服(Clock Servo):通过软件(如CPU)或硬件逻辑调整本地时钟的频率和相位,使其与主时钟(Grandmaster)同步。在FPGA中,通常使用DPLL(数字锁相环)或PI控制器实现。
  • 时间寄存器:维护一个64bit的纳秒计数器,作为全交换机的统一时间源。

操作流程:在FPGA中实现时间同步模块的推荐步骤为:

  1. 在MAC层捕获Sync帧的到达时间戳(t1)和Follow_Up帧中的精确发送时间(t2),计算链路延迟。
  2. 当Sync帧经过交换机转发时,记录其进入时间(t_in)和离开时间(t_out),计算驻留时间(t_out - t_in)。
  3. 在转发Sync帧时,将驻留时间累加到修正字段(Correction Field)中,实现透明时钟功能。
  4. 时钟伺服根据计算出的偏移量调整本地计数器。在FPGA中,可通过动态配置DDS(直接数字频率合成器)或调整累加器的步长来实现。
经验提醒:时间同步模块的精度直接影响调度器的准确性。建议使用FPGA内部的专用时钟资源(如MMCM/PLL)生成高稳定度的本地时钟,并定期通过报文校准。在硬件布局时,应确保时间同步模块的时钟走线远离高速数据线,避免串扰导致抖动。

4.5 数据流与控制流的协同设计

在FPGA中,数据流(Data Plane)和控制流(Control Plane)必须分离。数据流处理每个帧的实时转发,要求低延迟和高吞吐;控制流则负责配置转发表、GCL、队列参数等,通常由嵌入式CPU(如MicroBlaze)或外部CPU通过PCIe/AXI-Lite接口完成。在RTL设计中,建议采用AXI4-Stream接口连接各数据通路模块,而控制寄存器则通过AXI4-Lite接口访问。

关键协同点:

协同场景 数据流动作 控制流动作 接口信号
动态更新GCL 调度器按旧GCL运行 CPU写入新GCL到RAM gcl_wr_en, gcl_wr_data
MAC表学习 交换核心上报未知源MAC CPU学习并写入转发表 learn_req, learn_ack
时间同步校准 时间戳单元上报偏移 CPU计算并调整时钟步长 ts_offset, clk_adj

总结复盘:在FPGA上实现TSN交换机,核心难点不在于单个模块的设计,而在于模块间的时序配合与资源权衡。例如,共享内存的大小决定了可缓存帧的数量,直接影响丢包率;调度器的门控精度取决于时间同步模块的抖动。建议在项目初期使用Xilinx/Intel的TSN IP核(如Xilinx TSN Endpoint)进行原型验证,再逐步替换为自研逻辑,以降低风险。此外,务必在RTL仿真阶段加入门控切换、时间戳捕获等边界场景的测试用例,避免在板级调试时才发现时序问题。