2. TSN核心协议基础

TSN(时间敏感网络)并非单一协议,而是一组由IEEE 802.1工作组定义的、用于在标准以太网上实现确定性通信的协议簇。对于FPGA开发者而言,理解这些协议的内在机制与协同关系,是设计一个完整TSN端点系统的前提。本章将围绕五大核心协议——802.1AS(时间同步)、Qbv(时间感知调度)、Qav(信用整形)、Qbu(帧抢占)以及Qci(流过滤与管制)——展开深度解析,并重点阐述Qbv与Qbu在FPGA硬件流水线中的协同工作机制。

TSN端点系统核心协议协同架构 IEEE 802.1AS 时间同步 主时钟→从时钟 Sync / Follow_Up / PDelay 时间基准 FPGA TSN 调度引擎 802.1Qbv 门控列表 GCL 802.1Qav 信用值整形 8个优先级队列(Queue 0-7) 802.1Qbu 帧抢占 快速帧 / 可抢占帧 mPacket 重组 门控开启 802.1Qci 流过滤与管制 流门控 / 流计量 流整形 / 流过滤 MAC 发送端口(支持抢占) 100BASE-T1 / 1000BASE-T PHY 接收路径(帧解析与时间戳) 接收时间戳 802.1AS 从时钟 图例: 时间同步/数据路径 抢占控制 流过滤配置 注:Qbv门控决定发送窗口,Qbu在门控开启时允许高优先级帧抢占低优先级帧的发送间隙。

上图展示了TSN端点系统中各协议模块的协同关系。时间同步(802.1AS)为整个系统提供统一的时间基准,Qbv根据该时间基准调度各优先级队列的发送窗口,Qav在队列内部进行信用整形以避免突发流量,Qbu则允许高优先级帧在低优先级帧发送过程中插入,而Qci在接收端对流量进行过滤和管制。FPGA实现时,这些模块通常以硬件流水线形式串联,确保纳秒级精度。

2.1 IEEE 802.1AS:精确时间同步协议()

核心原理

802.1AS(广义精确时间协议,)是TSN的时间基石。它基于IEEE 1588v2,但针对桥接网络进行了优化。其核心机制包括:最佳主时钟算法(BMCA)选择网络中的最优时钟作为主时钟;Sync报文携带主时钟的发送时间戳;Follow_Up报文精确记录Sync的实际发送时刻;PDelay机制测量相邻节点间的链路延迟。FPGA实现时,时间戳单元必须在MAC层的PCS(物理编码子层)处打戳,以消除协议栈和软件延迟。

FPGA实现要点:时间戳精度取决于打戳位置。在RGMII接口处打戳,精度约为8ns(因为RGMII时钟为125MHz);在SGMII的PCS层打戳,精度可提升至1ns以内。设计时需在硬件中维护一个64位纳秒计数器,并支持频率补偿(通过累加器调整时钟频率)。

判断方法与操作流程

  1. 确定主从关系:通过BMCA算法比较时钟优先级、时钟等级、时钟精度等参数。
  2. 测量链路延迟:发送PDelay_Req,接收PDelay_Resp和PDelay_Resp_Follow_Up,计算往返时间并除以2。
  3. 计算时钟偏移:根据Sync和Follow_Up报文中的时间戳,计算主从时钟偏差。
  4. 调整本地时钟:通过PI控制器(比例积分)调整本地时钟频率,实现平滑同步。
参数典型值FPGA实现说明
Sync发送周期125ms(默认)可配置,工业场景常用8ms-32ms
PDelay测量周期1s(默认)用于补偿链路延迟变化
时钟精度±100ns以内需在PCS层打戳,并做硬件频率补偿
邻居速率比1.000000用于补偿主从时钟频率差

案例拆解:工业伺服驱动器的多轴同步

在某6轴伺服驱动系统中,要求各轴位置采样时刻偏差不超过±200ns。初始设计使用软件打戳,实测同步精度为±1.2μs,无法满足要求。分析发现,软件中断响应时间抖动是主要误差源。改进方案:在FPGA的以太网MAC层增加硬件时间戳单元,将打戳点从软件中断移至RGMII接收引脚。同时,将PDelay测量周期从1s缩短至100ms,以应对温度漂移引起的链路延迟变化。改进后,实测同步精度稳定在±80ns以内。

常见误区:部分开发者认为只要实现了802.1AS就能保证所有TSN协议正常工作。实际上,Qbv的调度表必须基于同步后的时间基准执行,若同步精度不足,门控切换时刻将产生偏移,导致调度错乱。建议在FPGA中为Qbv门控逻辑单独设置一个时间捕获寄存器,用于验证同步质量。

2.2 IEEE 802.1Qbv:时间感知调度器

核心原理

Qbv通过在每个端口维护一个门控列表(GCL),控制8个优先级队列的发送窗口。GCL由一系列门控事件组成,每个事件包含一个时间间隔和该间隔内各队列门的状态(开/关)。当某个队列的门打开时,该队列中的帧可以发送;门关闭时,即使队列中有帧也必须等待。门控列表以周期方式循环执行,周期长度通常与工业控制周期(如1ms、125μs)对齐。

FPGA实现架构

// 门控列表存储结构(FPGA内部实现)
typedef struct {
    uint32_t time_interval;  // 时间间隔(纳秒)
    uint8_t  gate_state[8];  // 8个队列的门状态,bit0-7对应Queue0-7
} GCL_Entry;

// 典型GCL配置(1ms周期,保护时间100ns)
GCL_Entry gcl[4] = {
    {500000, 0b00000001},  // 0-500μs: 仅Queue0(最高优先级)打开
    {100,    0b11111111},  // 500-500.1μs: 保护带,所有门关闭
    {399900, 0b11111110},  // 500.1-900μs: Queue1-7打开
    {100,    0b11111111}   // 900-900.1μs: 保护带
};

关键设计参数

  • 循环周期:必须与上层应用的控制周期匹配,通常为125μs(音频)、1ms(工业控制)或10ms(楼宇自动化)。
  • 保护带(Guard Band):在门控切换前预留的静默时间,用于确保链路上没有正在传输的帧。保护带长度应大于最大帧传输时间(如1518字节帧在1Gbps下约12.2μs)。
  • 门控偏移:各队列门打开时刻的偏移量,用于错开不同优先级流量的发送时间。
工程经验:在FPGA中实现Qbv时,建议将GCL存储在Block RAM中,并使用双缓冲机制。当软件更新GCL时,硬件在下一个循环周期边界原子切换,避免出现半新半旧的配置状态。

2.3 IEEE 802.1Qav:基于信用的整形器

核心原理

Qav(信用整形)用于限制每个队列的发送速率,防止低优先级流量饿死高优先级流量,同时避免突发流量对网络造成冲击。其核心是信用值(Credit)机制:每个队列维护一个信用计数器,当队列中有帧等待且信用值≥0时,允许发送;发送过程中信用值以发送速率递减;当队列空闲或信用值<0时,信用值以恢复速率递增。信用值的增减速率由idleSlope(发送速率)和sendSlope(恢复速率)参数决定。

参数计算与配置

参数公式/说明示例(100Mbps端口)
idleSlope队列预留带宽(bps)30Mbps
sendSlopeidleSlope - 端口速率30 - 100 = -70Mbps
hiCreditmaxFrameSize × idleSlope / 端口速率1518×8×30/100 ≈ 3643 bits
loCreditmaxFrameSize × sendSlope / 端口速率1518×8×(-70)/100 ≈ -8501 bits

FPGA实现注意事项

信用整形器需要精确的纳秒级定时器来更新信用值。在FPGA中,通常使用一个累加器,每个时钟周期根据当前状态增加或减少信用值。为避免信用值溢出,需使用饱和运算。此外,Qav与Qbv的交互需要特别注意:当Qbv的门关闭时,Qav的信用值应暂停更新,否则会导致信用值累积,门打开时产生突发。

2.4 IEEE 802.1Qbu:帧抢占

核心原理

Qbu允许高优先级帧(快速帧)打断低优先级帧(可抢占帧)的传输。发送端在MAC层将可抢占帧分割为多个mPacket(最小64字节),每个mPacket之间留有间隙。当高优先级帧需要发送时,发送端在当前mPacket结束后插入快速帧,待快速帧发送完毕后再继续发送剩余的mPacket。接收端负责将mPacket重组为完整帧。

关键机制

  • 帧验证:可抢占帧必须通过CRC校验,且长度大于64字节才能被抢占。
  • mPacket格式:每个mPacket包含SMD(起始标记)和CRC,用于接收端识别和重组。
  • 抢占点:仅在mPacket边界允许抢占,最小mPacket长度为64字节(不含前导码)。
FPGA实现难点:帧抢占需要在MAC发送状态机中增加抢占控制逻辑。当检测到高优先级帧请求时,当前mPacket发送完毕后,发送端必须插入最小帧间隙(IFG),然后发送快速帧。接收端需要维护一个重组缓冲区,根据SMD标记识别mPacket的起始和结束。

2.5 IEEE 802.1Qci:流过滤与管制

核心原理

Qci(Per-Stream Filtering and Policing)在接收端对每个流进行独立的过滤和管制,防止故障节点或恶意流量影响整个网络。其功能包括:流门控(基于时间的允许/拒绝)、流计量(基于令牌桶的速率限制)、流整形(对超限流量进行排队)以及流过滤(丢弃非法帧)。

FPGA实现架构

// Qci流实例配置(FPGA寄存器映射)
typedef struct {
    uint32_t stream_handle;      // 流标识(基于VLAN+优先级+目的MAC)
    uint8_t  gate_state;         // 门状态:0=关闭,1=打开
    uint32_t gate_time;          // 门打开的时间窗口(纳秒)
    uint32_t committed_rate;     // 承诺信息速率(CIR)
    uint32_t committed_burst;    // 承诺突发尺寸(CBS)
    uint32_t excess_rate;        // 超出信息速率(EIR)
    uint32_t excess_burst;       // 超出突发尺寸(EBS)
} Qci_Stream;

令牌桶算法实现

每个流维护两个令牌桶:C桶(承诺)和E桶(超出)。C桶以CIR速率填充令牌,E桶以EIR速率填充。帧到达时,先检查C桶是否有足够令牌,若有则通过并消耗令牌;否则检查E桶,若有则标记为黄色帧(可丢弃)并通过;否则丢弃。FPGA中,令牌桶通常使用递减计数器实现,每个时钟周期根据速率参数增加令牌。

2.6 802.1Qbv与802.1Qbu的协同机制

协同工作原理

Qbv和Qbu的协同是TSN实现低延迟的关键。Qbv负责在宏观时间尺度上规划各队列的发送窗口,而Qbu在微观尺度上利用帧间隙插入高优先级帧。具体协同策略如下:

  1. 时间窗口划分:Qbv将循环周期划分为多个时间片,每个时间片分配给特定优先级队列。
  2. 抢占使能窗口:在Qbv的低优先级队列发送窗口内,允许Qbu抢占。此时,高优先级队列的门可以打开,但仅允许发送快速帧。
  3. 保护带优化:传统Qbv需要设置较长的保护带(最大帧传输时间),而Qbu可以将保护带缩短至一个mPacket的传输时间(约6.4μs @1Gbps),显著提高带宽利用率。
场景无Qbu(仅Qbv)有Qbu(Qbv+Qbu协同)
保护带长度12.2μs(1518B帧)0.6μs(64B mPacket)
带宽利用率约85%约98%
高优先级延迟等待当前帧发送完毕最多等待64B mPacket发送完毕
FPGA复杂度低中(需增加抢占状态机)

案例拆解:汽车雷达与摄像头数据混合传输

在某自动驾驶域控制器中,需要同时传输雷达点云数据(周期1ms,每周期约800字节)和摄像头视频流(持续突发,平均带宽400Mbps)。雷达数据为最高优先级,要求端到端延迟不超过100μs。初始方案仅使用Qbv,将雷达数据安排在每1ms周期的前50μs发送,但视频流的大帧(1518字节)会阻塞雷达数据,导致延迟超标。

改进方案:启用Qbu抢占。将视频流标记为可抢占帧,雷达数据标记为快速帧。在Qbv的调度表中,为雷达数据分配一个50μs的窗口,但该窗口内允许抢占视频帧。实际运行中,当雷达数据到达时,视频帧最多被分割为64字节的mPacket,雷达数据在6.4μs内即可发送完毕。实测雷达数据最大延迟为45μs,满足要求。同时,视频流的带宽利用率从85%提升至96%。

风险提示:Qbu抢占会增加接收端的重组复杂度。如果mPacket丢失(如链路错误),接收端必须丢弃整个帧,导致数据丢失。建议在FPGA中实现mPacket超时机制,超过一定时间未收到后续mPacket则主动丢弃,避免缓冲区阻塞。

常见误区与总结

  • 误区1:认为Qbv可以完全替代Qav。实际上,Qbv控制的是“何时发送”,Qav控制的是“发送多快”。对于非时间关键流量,仍需Qav限制速率。
  • 误区2:忽略Qbv保护带的影响。保护带设置过短会导致门控切换时链路上仍有帧在传输,造成调度错乱。
  • 误区3:在FPGA中实现Qbu时,未考虑mPacket的CRC计算。每个mPacket都需要独立的CRC,这会增加FPGA逻辑资源消耗。
  • 误区4:Qci的流表项数量设置不足。在大型网络中,流表项可能达到数千条,需合理规划FPGA的存储资源。

本章详细解析了TSN五大核心协议的原理与FPGA实现要点。在实际项目中,这些协议并非孤立工作,而是通过时间同步、门控调度、信用整形、帧抢占和流过滤的紧密配合,共同实现确定性通信。FPGA开发者需要从系统角度理解各协议的交互关系,并在硬件架构中预留足够的灵活性和可配置性,以应对不同应用场景的需求。