4、TSN交换机整体架构:端口、MAC、交换核心、队列管理、调度器、时间同步模块的划分与数据流
TSN(时间敏感网络)交换机的核心价值在于将标准以太网的无序竞争转化为可预期、可调度的确定性传输。在FPGA上实现TSN交换机,并非简单地将软件协议栈移植到硬件,而是需要从硬件架构层面重新划分功能模块,确保每个以太网帧从入端口到出端口的全过程都在纳秒级的时间预算内完成。本章将深入拆解TSN交换机的五大核心子系统——端口与MAC、交换核心、队列管理、调度器以及时间同步模块,并重点阐述它们之间的数据流与控制流关系。理解这一整体架构,是后续进行RTL设计、时序收敛和协议栈实现的前提。
上图展示了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实现中,流控信号需要与队列管理模块联动。
4.2 交换核心:无阻塞的帧转发引擎
核心原理:交换核心负责根据帧的目的MAC地址(或VLAN、IP信息)查找转发表,确定输出端口,并将帧从输入端口搬运到输出端口。在FPGA中,常见的交换核心架构有两种:共享内存架构(Shared Memory)和Crossbar架构。共享内存架构将帧数据存储在中央RAM中,通过读写指针控制出入;Crossbar架构则通过交叉开关矩阵实现任意输入到任意输出的直通连接。对于TSN交换机,由于需要支持多队列和调度,共享内存架构更为常见,因为它便于集中管理队列深度和实现组播复制。
关键设计参数:
| 参数 | 推荐值/范围 | 说明 |
|---|---|---|
| 查找表深度 | 4K-32K条目 | 支持L2 MAC表,可选L3路由表 |
| 帧切片大小 | 64B-128B | 切片越小,阻塞概率越低,但开销增大 |
| 组播复制方式 | 指针复制 vs 数据复制 | 指针复制节省带宽,但需维护引用计数 |
| 背压机制 | 基于信用(Credit)或水位线 | 防止输出队列溢出 |
操作流程:在FPGA中实现交换核心的推荐步骤为:
- 将输入帧解析为固定长度的描述符(包含源端口、目的MAC、VLAN ID、优先级等),数据部分写入共享缓冲池。
- 查找引擎(通常使用哈希表或TCAM)并行查询转发表,得到目的端口掩码(Bitmap)。
- 根据目的端口掩码,将描述符复制到对应输出端口的队列管理模块。若为广播帧,则复制到所有端口。
- 输出端口从共享缓冲池中按序读取数据,恢复原始帧格式。
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)需要直接连接到调度器的比较器。
4.4 时间同步模块:所有确定性的基石
核心原理:时间同步模块实现IEEE 802.1AS(gPTP)协议,使交换机与网络中的其他节点共享同一时间基准。该模块通常包含:
- 时间戳单元:在MAC层捕获帧的精确进出时间,用于计算链路延迟和驻留时间。
- 时钟伺服(Clock Servo):通过软件(如CPU)或硬件逻辑调整本地时钟的频率和相位,使其与主时钟(Grandmaster)同步。在FPGA中,通常使用DPLL(数字锁相环)或PI控制器实现。
- 时间寄存器:维护一个64bit的纳秒计数器,作为全交换机的统一时间源。
操作流程:在FPGA中实现时间同步模块的推荐步骤为:
- 在MAC层捕获Sync帧的到达时间戳(t1)和Follow_Up帧中的精确发送时间(t2),计算链路延迟。
- 当Sync帧经过交换机转发时,记录其进入时间(t_in)和离开时间(t_out),计算驻留时间(t_out - t_in)。
- 在转发Sync帧时,将驻留时间累加到修正字段(Correction Field)中,实现透明时钟功能。
- 时钟伺服根据计算出的偏移量调整本地计数器。在FPGA中,可通过动态配置DDS(直接数字频率合成器)或调整累加器的步长来实现。
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仿真阶段加入门控切换、时间戳捕获等边界场景的测试用例,避免在板级调试时才发现时序问题。