FPGA 专家 33:时间敏感网络——给以太网装上全局时钟和时刻表
本文是
fpga/专家层第 36 篇。网络管线基础见 专家 32,确定性低延迟思路见 专家 35,多板时钟分发见 专家 43。
一、两层基石:先对齐时间,再按表发送

802.1AS/gPTP 对时(硬件时间戳 + 伺服)
│ 全网共享纳秒级时间基
▼
Qbv 门控列表(TDMA 时间表)→ 每端口队列按拍开关 → 确定窗口
+ Qbu 帧抢占(缩短保护带)
+ Qci 入口过滤 + CBS 整形 + 802.1CB 双发选收二、PTP/gPTP 实现要点

- 打戳点:MAC↔PHY 参考面,位置决定精度;PHY 延迟标定。
- 报文组:Sync/Follow_Up、Delay_Req/Resp;透明时钟累加
correctionField驻留时间。 - 伺服:频率调谐(数字调频或 MMCM 微调)+ 相位对齐;失锁进入 holdover。
三、Qbv 调度器在 FPGA 里的形态

全局时钟(ns tick) ──► 门控列表引擎 ──► 8 队列门向量 ──► 发送仲裁 ──► MAC
▲ 周期循环/在线更新 │
保护带:窗口前停发长帧;Qbu 允许抢占分片 ◄┘设计纪律:门切换与帧边界的处理、调度表原子切换、时间基与业务时钟同源。
四、协议族速查
| 标准 | 作用 |
|---|---|
| 802.1AS (gPTP) | 全网时间同步(TSN 剖面 PTP) |
| 802.1Qbv | 时间感知整形,TDMA 门控 |
| 802.1Qbu | 帧抢占 |
| 802.1Qci | 入口流过滤/门控/监管 |
| 802.1Qav (CBS) | 信用整形(平滑流) |
| 802.1CB (FRER) | 帧复制消除,路径冗余 |
五、落地与测试
场景:工业控制替代现场总线、车载骨干、电力差动、广电 ST 2110。测试关注:主从时间偏差与漂移、最坏端到端延迟(不是平均值)、调度表一致性、抢占正确性、断链/失同步故障注入。
六、PTP 时钟伺服的深水区:从时间戳到 disciplined local clock
PTP 的表面是“交换几个时间报文”,本质是在从时钟里重建一个与主时钟对齐、且持续被驯服(disciplined)的本地硬件时钟。这条链路里每一段都可能把纳秒级精度吃光,值得逐层拆开。首先是时间戳打在哪:软件栈里打戳(中断后由操作系统读时间)会经过协议栈调度、中断延迟,抖动可达几十到上百微秒,只能用于普通 PTP;要做 gPTP/IEEE 802.1AS 的纳秒~亚微秒级,时间戳必须在硬件 MAC/PHY 层对 Sync/Delay_Req 报文的特定点(通常是帧起始 SFD 越过 MII 的时刻)打戳,并把该硬件时间戳随描述符回送软件。FPGA 的优势正是可以把打戳点放到最贴近 PHY、完全确定的位置,甚至在同一个时钟域里打,绕过商用网卡时间戳位置不透明、不同驱动行为不一的麻烦。
从四个时间戳到时钟偏差,要理解延迟测量的完整机制。两步消息模式下:主在 t1 发 Sync(t1 在 Follow_Up 里告知),从在 t2 收到;从在 t3 发 Delay_Req,主在 t4 收到并回 Delay_Resp。假设双向链路延迟对称,路径延迟 delay = ((t4−t3) − (t2−t1)) / 2,时钟偏差 offset = (t2−t1) − delay。这里的关键假设是前向与反向延迟对称;一旦不对称(上下行波长不同的光链路、不同 PHY、中间设备处理时间不恒定),算出的偏差会系统性偏移,且 PTP 本身无法发现——这是工程上最隐蔽的精度杀手。缓解方法包括:测量并写入固定的非对称校正、用边界时钟/透明时钟减少未知中间跳、对 PHY 发射/接收固定延迟做标定补偿、选用同一双向介质。
时钟伺服(servo) 是把一次次有噪声的 offset 测量变成平滑时钟调整的控制环。不能一测得偏差就硬调本地时钟(测量含噪声、会让时钟抖),通常用 PI 控制器:根据 offset 的比例项和积分项,输出一个频率调整量(frequency correction,调本地可调时钟的频率字,让它逐渐追上),而不是反复做时间跳变(time step,跳变会破坏单调性、让依赖时间递增的 Qbv/日志/时间戳出错)。FPGA 实现里,本地时钟常用一个带高精度频率调谐字的数字时钟(DDS/累加器)或可调计数器:以高于所需分辨率的速率累加,调谐字提供亚纳秒级频率控制;伺服环可在软核/主机上低频运行(每秒几次到几十次)算 PI 输出,硬件时钟只负责高分辨率计时和打戳,形成“慢环算校正、快环守时间”的分工。伺服要处理的边界问题:主时钟丢失/切换时进入 holdover(用最后频率字自由运行并评估漂移)、时间戳异常值剔除(一个坏点不能让时钟猛跳)、初始大偏差时的收敛策略(先粗调步进、进入小偏差再连续驯服)。
多跳网络与透明时钟决定大规模部署的精度。普通透明交换机转发 PTP 报文时每跳都加自己不确定的排队延迟,误差逐跳累积;透明时钟(TC) 交换机测量 PTP 报文在本设备的驻留时间(residence time)并写进报文的 correctionField,从时钟把它扣掉,等于消除了中间存储转发延迟;边界时钟(BC) 则在每个端口重新运行 PTP、逐级再生时间,隔离级联抖动,但级联多时仍有误差累积。在 FPGA 交换/网桥上实现 TC,需要在报文入口打精确时间戳、出口再打戳、把驻留时间增量地写进转发中的报文 correction 字段——这要求 Qbv 调度与 PTP 处理协同,保证时间报文本身走最高优先级、驻留可测。gPTP(802.1AS)在此之上定义了整网最佳主时钟选择(BMCA)和所有桥接设备必须参与时间同步的约束,把“尽力而为的 PTP”收紧为“全网时间一致”的确定性时基,这正是 Qbv 调度能跨设备对齐的前提。
验证 PTP 系统要测的不是“能不能同步”,而是统计指标和边界行为:锁定后的 offset 分布(均值、P99、最大值,亚微秒目标要用独立的高精度时间间隔分析仪或双端口自环测,不能用被测系统自己的时钟去测自己)、长时间漂移与温度变化下的保持能力、主时钟切换/链路中断/报文丢失时的收敛与 holdover、背景流量打满时时间报文是否仍被优先处理而不产生排队抖动。把 PTP 当作一个带控制环、有明确精度 SLA 的子系统来设计和测试(而不是“跑个 ptp4l 看看 offset 很小”),是 TSN 项目成败的基础——Qbv 再完美,建立在一个抖动的时基上也毫无意义。
七、Qbv 时间感知整形器的硬件实现与门控调度

Qbv(802.1Qbv,时间感知整形器/TAS)是 TSN 保证“确定性流不被背景流量阻塞”的核心机制,其硬件实现和调度表管理是 FPGA 工程师真正要啃的部分。基本思想是:在交换机/网卡的出端口,把流量分成若干流量队列(traffic class),每个队列对应一个传输门(open/closed);一张**门控列表(gate control list, GCL)**按全局时间周期性地规定“在每个时间间隔,哪些队列的门开着”。关键流(如控制帧)被安排在专属时间窗,该窗内它的队列门开、所有可能产生长帧阻塞的其他队列门关,于是关键帧到达后不必等待任何背景长帧,端到端延迟变成“沿路径各跳窗口之和”,可计算、有上界。
实现 Qbv 的第一个工程难点是线速线口下的门控与帧边界问题。以太网帧不能在中间被掐断(除非用帧抢占),如果门刚关闭时一个背景长帧已经开始发送,它会占住链路直到发完,可能冲掉紧接着的关键窗。标准给出的对策是保护带(guard band):在关键窗之前预留一段等于最大帧传输时间的间隔,期间不允许启动非关键帧,代价是损失一些带宽、增大延迟;更先进的是帧抢占(802.1Qbu/配合 802.3br),把帧分成可抢占的“preemptable”与不可抢占的“express”片段,关键 express 帧到来时可暂停(在合法的分片边界打断)背景帧先发,发完再续传,从而把保护带缩到很小。FPGA 实现抢占需要 MAC、CRC(片段校验)、对端重组能力的协同,复杂度明显上升,是否启用要看对保护带开销的容忍度。
调度表(GCL)的生成与管理是软件和硬件的接缝,也是落地最容易出问题的地方。GCL 是一条按时间排列的门控命令序列(每条含各队列门状态和持续时间),周期重复;它必须满足:每个关键流在每个周期有足够窗长发送其帧(含帧间隔、最坏排队)、多流窗口不冲突、整网各设备的窗口按数据流向和逐跳延迟错开(端到端调度,常由 CNC 集中计算或用工具离线生成后下发)。硬件要存 GCL、用本地 PTP 时钟驱动其推进、在精确时刻切换门状态,并支持多表原子切换(配置新调度时不能在表执行一半撕裂,通常双 bank:当前活动表 + 待激活表,在指定的未来时刻 baseTime 整体切换)。还要处理时钟与调度的交互:baseTime 是全局时间,设备必须在 PTP 锁定后才启用调度;本地时间若被伺服步进调整(尤其向后跳),可能与正在执行的 GCL 冲突,因此强调锁定后只做频率微调、避免运行中跳时。
与其他整形/调度机制的配合常被忽略却决定真实行为。Qbv 管“时间窗”,但同一窗内若多个队列门都开,谁先发还要靠严格优先级或 Credit-Based Shaper(Qbv 常与 CBS/802.1Qav 联用做音视频带宽预留)或异步 TAS(ATS);入端口需要流识别/过滤(PSFP,per-stream filtering and policing,802.1Qci)把不属于关键流的帧挡在门外,防止错误配置或恶意流量占用保护窗;还要有帧复制与消除(FRER)、路径冗余配合,保证确定性流不仅按时到达还不丢。设计时要明确“一条关键流”的完整保障链:入口被识别和监管(Qci)→ 沿路径每跳有专属时间窗且不被抢占(Qbv/Qbu)→ 带宽/突发有界(Qav/整形)→ 冗余路径容错(FRER)→ 全网同一时基(AS)。只实现一个 Qbv 门控而不做入口监管和保护带,实验室能演示,真实网络里会被配置错误和背景突发击穿。
验证 Qbv 必须围绕“最坏情况下关键流的端到端延迟上界”,而不是平均延迟。测试方法:背景端口用最大帧(1500/9000 字节)打满线速、在最不利相位注入关键帧(恰好赶在窗口边界、连续多周期、多关键流同时),测量关键流端到端延迟分布,确认有界且抖动在预算内;再叠加 PTP 抖动(时基偏差会直接转化为窗口错位)、调度表切换、拓扑多跳级联。需要能在 FPGA 里观测每个关键帧的入/出口时间戳、门状态历史、保护带/抢占事件,才能证明“没有一次关键帧被背景帧推迟”。把 Qbv 与 PTP 一起作为带 SLA 的确定性子系统做压测和回归,是 TSN 区别于普通以太网交换的核心工作量。
八、TSN 协议族全景与选型:不要把 TSN 当成一个协议

“TSN”是 IEEE 802.1 下一组相互配合的标准集合,工程上最常见的错误是把它当成单一功能,结果只实现一半却以为有了确定性。按职责把协议族分成几组,选型时按需组合。
时间同步组:IEEE 802.1AS(gPTP)提供全网统一时基,是所有时间相关机制的地基;普通 PTP(1588)可在非 TSN 专用网络用,但 gPTP 对桥接行为和全网参与有更严格约束。
有界延迟/调度组:Qbv(时间感知整形器)用时间窗保证关键流不被阻塞,是硬实时主干;Qbu + 802.3br(帧抢占)减小保护带;Qav/CBS(基于信用的整形)为音视频流提供平滑带宽预留;Qch(循环排队与转发,CQF)让帧在固定的“周期缓冲”里逐跳前进,把端到端延迟变成周期的整数倍,简化数学上的有界性证明;ATS(异步流量整形,Qcr)提供不需要全网时间同步的逐跳整形。选型上:需要最严格确定性、可全网调度→Qbv(+Qbu);想要简单可证明的周期级延迟→CQF;不能依赖全网时间但要流隔离→CBS/ATS。
可靠性与容错组:FRER(帧复制与消除,Qcb)沿不相交路径发两份副本,接收端去重,对单链路/单设备故障透明容错;PSFP(Qci,入口流过滤与监管)在交换机入口按流分类、限速、阻断,防止误配/恶意流量侵入保护窗;还有路径控制/预留相关能力。确定性要求高的工业/车载场景,Qbv 通常要和 FRER、PSFP 一起部署,否则“按时”但不“可靠”仍不达标。
资源管理与配置组:802.1Qcc 定义流预留、集中网络配置(CNC/CUC)模型,由集中控制器计算各设备的 GCL 和路径并下发;802.1Qcp YANG 模型支持设备管理;还有对桥接、安全的配套规定。真实系统必须解决“谁来算全局调度表、怎么可靠下发、配置不一致怎么办”,否则每张设备的 GCL 对不齐,确定性不成立。
选型方法应从需求倒推:先确定必须有界延迟的流(周期、帧长、可接受最大延迟、抖动、可靠性等级)、拓扑规模、是否移动(车载网络要处理动态拓扑)、是否能接受全网时间同步和集中配置;再选最小必要协议集——很多场景并不需要全套 TSN,可能 PTP + 严格优先级 + 限速就够;而真正的运动控制/车载骨干则需要 AS+Qbv/Qch+FRER+Qci+Qcc 的组合。FPGA 实现上要把这些机制设计成共享的时间基、分类器、调度器和计数器框架,而不是一堆互不相干的 IP,否则资源和时序都难以收敛。
九、落地、测试与典型坑
TSN 从“协议能跑”到“敢在产线/车上用”,大部分工作在系统集成、测试和边界场景。把这一层的关键点和高频坑汇总如下。
时基不稳就全盘皆输:PTP 未锁定/失锁后仍启用 Qbv、软件打戳、链路不对称未标定、伺服频繁跳时,导致窗口随机错位。正解:硬件打戳、PHY 延迟和不对称标定、锁定后只做频率驯服、holdover 有策略,并把 PTP 锁定状态作为 Qbv 使能的硬条件。
保护带/抢占处理错误:没留保护带导致背景长帧冲掉关键窗;或保护带过大吃光带宽;声称支持抢占但 MAC 分片/重组/校验不完整。正解:按最大帧和端口速率算保护带,需要高利用率时正确实现 Qbu/802.3br,并用最不利帧相位测试。
调度表不一致/切换撕裂:各设备 GCL 各自为政、baseTime 对不齐、换表时执行到一半。正解:集中(CNC)做端到端调度、双 bank 在指定 baseTime 原子切换、下发后回读校验、不一致时安全降级。
把背景流和关键流混在同一保障链:没有入口流识别和监管(Qci),误配或异常帧占用窗口;只在交换机做 Qbv,网卡/NIC 侧不整形,主机侧排队成为新的不可控延迟。正解:端到端覆盖(终端网卡也要时间感知)、入口 PSFP 监管、关键流全路径分类一致。
只测平均、不测最坏:空载演示延迟很漂亮,满载背景 + 突发 + 多跳 + PTP 抖动 + 换表并发时关键流偶尔超时。正解:以最坏相位、最大背景帧、多流、多跳、故障注入(拔链路触发 FRER)做压测,用硬件时间戳统计端到端延迟上界并持续回归。
忽视网络和设备复位行为:上电顺序、主时钟重选、设备热插入、配置丢失恢复等瞬态没有定义,导致重启后一段时间非确定。正解:定义启动/重同步状态机,未同步期间关键流走安全策略(如保持上一有效调度或安全停车),配置持久化与一致性校验。
测试手段不足:用普通网卡和软件抓包无法测纳秒级抖动。正解:用支持硬件时间戳的测试仪或第二片 FPGA 做流量发生器与分析仪,按时间戳比对每个帧的实际发送时刻与调度窗,记录门状态和抢占事件。
落地建议清单:①先画清需要确定性的流清单(周期/大小/延迟/可靠性);②gPTP 先行,独立验证时基精度与 holdover;③按需求选最小协议集(Qbv/Qch/Qbu/Qav、FRER、Qci、Qcc);④终端与桥接设备两端都要时间感知;⑤集中生成并原子下发 GCL,回读校验;⑥用最坏背景 + 边界相位 + 多跳 + 故障注入测端到端延迟上界;⑦全程硬件时间戳和门状态可观测;⑧把确定性测试自动化进 CI/回归;⑨明确失步/换表/重启时的安全降级行为。把这九条做实,TSN 才从“能演示确定性”变成“可交付、可维护的确定性网络产品”。
十、Qch/CQF 与其他调度模型:为可证明性而设计
除了 Qbv 时间窗,TSN 还提供了多种调度哲学,理解它们的差别,才能为具体延迟目标选对机制。CQF(Cyclic Queuing and Forwarding,802.1Qch) 用“奇偶双缓冲”把复杂的逐跳时间表简化成可证明的周期转发:每个桥维护两个队列,偶数周期收进 A、发 B,奇数周期收进 B、发 A,全网设备在同一时间基准、同一周期长度下交替。于是一个帧的端到端延迟上界就是“经过的跳数 × 周期长度 + 固定常数”,与背景流量无关、与精确的微秒级窗口对齐误差关系较小,数学上极其干净。代价是周期必须按每跳最坏转发时间设定(往往比 Qbv 的精细窗口保守)、带宽利用率有颗粒度损失、要求全网严格同周期。对“需要向认证机构证明延迟上界”的工业控制和轨交场景,这种可证明性比榨取带宽更有价值。
CBS/Qav(基于信用整形) 解决的是另一类问题:音频视频流(AVB)这类持续、可预留带宽的流量。发送方积累信用,信用为正才允许发送,为负则等待,背景流用剩余带宽。它给出的是带宽预留和有界缓冲,不需要全网时间表,但单流延迟上界比 Qbv/CQF 宽松,且对“绝对不能被打断”的硬实时控制帧不够。它常与 Qbv 共存:Qbv 窗内再用 CBS 在多个预留流间分配。
ATS(Qcr,异步流量整形) 不要求全网时间同步:每跳根据流的整形参数重新整形(regulator),逐跳把突发“抹平”,理论上提供有界延迟且避免时间同步的运维负担,适合大规模、动态的网络;代价是每流状态和整形器数量、以及端到端上界相对宽松。它是把“同步网络的严格性”换成“无同步网络的可扩展性”的工程折中。
选型矩阵可以简化为:要求最硬延迟上界且全网可配时间表→Qbv(配 Qbu 减保护带);要求上界可简单证明、周期业务→CQF;持续带宽预留、音视频→CBS/Qav;大规模动态、难以全网授时→ATS;再以 AS 授时、FRER 冗余、Qci 入口监管作为横切能力。很多真实系统是组合:Qbv 保控制流、CBS 保媒体流、普通以太网尽力而为流填满剩余窗——FPGA 实现时把这几类整形器挂在同一个出端口调度框架下,按帧所属流选择整形规则,是避免做成一堆互不协调 IP 的关键。
十一、TSN 在 FPGA 中的实现架构:从分类器到调度器的落地
把协议集变成可综合的数据通路,需要一条结构清晰的流水线。典型出端口路径从**流识别与过滤(Qci PSFP)**开始:帧进入时解析头部(VLAN、流标识、可能含自定义字段),查流表得到流实例(stream gate、带宽策略、优先级映射);流门控有自己的时间门列表(与 Qbv 的端口门控是两层,先流门、再端口门),非法或超额帧在入口被丢弃/阻断并计数。这一层本质是带时间约束的分类器,表项可由控制平面(CNC)下发,匹配结构与 专家 32 的 match-action 一致,只是动作里含门控状态。
帧体进入缓冲与队列管理:按流/类别入队,队列深度要按最坏突发和 CQF/Qbv 的周期算足;时间敏感流的队列应独立、浅、绝不与背景流共享可被耗尽的缓冲(这是防“背景流量挤占关键帧”的物理保证,而不只是调度优先级约定)。CQF 实现为成对队列加全局奇偶切换信号(由本地 TSN 时钟驱动,同一拍完成收/发角色互换),切换时刻与门控基时对齐;切换瞬间的帧边界处理(跨周期帧要么禁止、要么有明确规则)要严格按标准实现并测试。
出端口调度器是核心:它在每个发送时机综合三层信息——Qbv 端口门控列表(当前哪些队列门开)、每队列的 CBS 信用/ATS 整形状态、以及严格优先级——选出下一个发送的帧;保护带/抢占逻辑(Qbu)在这里决定是否启动 express 帧、是否暂停 preemptable 帧并生成合法分片与 CRC。调度器必须是无阻塞的组合/流水决策:门状态切换时间到的那一拍就要有确定选择,不能依赖软件。时间门列表的执行是“当前周期表项 + 硬件时钟比较器”,表项切换(baseTime 换表)用双 bank 原子完成(与表项更新一致性问题同构,见前文)。
控制平面接口:CNC 经管理协议/厂商接口下发门控表、流表、整形参数和 baseTime;硬件提供配置确认、当前生效版本、错误回执(如表项冲突、baseTime 已过)。FPGA 内通常用一个软核或管理模块承载配置状态机,数据通路只读配置快照。时间基接入:PTP/gPTP 恢复的 TSN 时钟是所有门控/切换的时基,时钟未锁定时调度器处于安全态(不放行硬实时流或按静态保守表运行),锁定状态、当前时间、调度事件都进遥测。整条流水线的验证以“关键流在最坏背景下端到端延迟上界”为核心,辅以随机流表/门表的形式检查和长时间 soak(防信用/计数器累积误差)。
十二、落地路线与成熟度判断:TSN 项目的现实建议
TSN 工程容易在两个极端上失败:要么轻视它当成“加个 Qbv IP”,项目后期被配置、一致性和测试淹没;要么被庞大的协议集吓住不敢启动。务实的落地可以分阶段。第一阶段打地基:全网时间同步先独立做成一个经过严格验证的子系统(硬件时间戳、伺服、透明时钟或边界时钟、holdover),用独立仪表把时基精度和失锁行为测透;没有可靠时基,后续所有调度都是空中楼阁。
第二阶段上单流确定性闭环:选一条最关键的控制流,端到端走通“Qci 识别→独立队列→Qbv 窗口→出口整形”,背景用最大帧线速灌包,实测端到端延迟上界和抖动。先不追求全网所有流都接入,也不急着上帧抢占(CQF 或保守保护带先把正确性做稳)。这一阶段的目标是拿到一条可向内部和客户演示、可量化的确定性管道,建立团队对整套机制的直觉和测试能力。
第三阶段扩规模与冗余:多流、多跳、多周期的全局调度表由 CNC 工具生成并校验(人工排表在流数上十之后必然出错),引入 FRER 双发双收和拓扑冗余,验证拔链路/设备倒换时关键流零中断;再评估帧抢占以提高带宽利用率。第四阶段才是运维闭环:配置下发版本化、调度冲突检测、现场时基与延迟遥测、设备替换后的自动再配置。
成熟度与风险判断:采购/选型时要问供应商的不是“支持哪些标准号”,而是每个机制的互操作测试记录(多厂商桥接、CNC 互通)、门控/抢占的实测延迟上界、在最坏背景下的丢包数据、配置规模上限(流数、表项深度)和失步/换表的行为;FPGA 自研则要诚实评估协议一致性测试(TSN 有专门的一致性测试规范)的投入,这部分工作量常超过数据通路本身。最后,TSN 不是所有网络的银弹:若业务其实只需要毫秒级软实时、网络规模小且可控,普通工业以太网加严格优先级加精心设计的 VLAN 划分可能以十分之一成本满足需求;只有当“微秒级、有上界、可证明、多厂商互通”成为硬需求时,TSN 的全套复杂度才值得付出。
总结
TSN = "全网硬件对时(PTP/gPTP)+ 离线时间表驱动的 Qbv 门控",再用 Qbu 抢占、Qci 过滤、CBS 整形和 FRER 冗余补齐实时性、效率与可靠性;FPGA 的核心工作是纳秒时间基、精确打戳和门控调度与 MAC 的严丝合缝。