图 1. 出口
如前图所示,根据所需的是单步操作还是双步操作,时间戳逻辑存在于两处不同位置。单步操作需用户数据报协议 (UDP) 校验和及 FCS 更新,因此使用 FCS 核逻辑。
TS 参考定义如下:
- TS1
- 选中单步操作时的输出时间戳信号。
- TS2
- 选中双步操作时的输出时间戳信号。
- TS2'
- 2 个时间戳纠正到该平面。
对于 TS2,始终应用纠正以使其可供 TS2' 平面作为参考。TS1 可根据 ctl_tx_ptp_latency_adjust[10:0]
信号的值来选择是否应用 TS2' 纠正。
基于速率和时钟模式(普通或透明),ctl_tx_ptp_latency_adjust[10:0]
信号的建议默认值如下:
- 25G 普通时钟 = 370
- 25G 透明时钟 = 449
- 10G 普通时钟 = 925
- 10G 透明时钟 = 1132
在发射端,“Command”字段由客户端随发送的帧(以供发射之用)并行提供给子系统。这表示根据每个帧来确定要执行的 1588 功能(即,无操作、单步操作或双步操作),并且对于单步帧,这还可用于指示是否存在需更新的 UDP 校验和字段。
如果使用 ToD 格式,那么对于单步操作和双步操作,完整捕获的 80 位 ToD 时间戳将使用 端口描述 中定义的附加端口返回给客户端逻辑。
如果使用“Correction Field”(纠正字段)格式,那么对于单步双步操作,完整捕获的 64 位时间戳将使用 端口描述 中定义的附加端口返回给客户端逻辑(根据表中定义,上位数据设置为 0)。
如果使用 ToD 格式,那么对于单步操作,完整捕获的 80 位 ToD 时间戳将插入帧中。如果使用“Correction Field”格式,那么对于单步操作,捕获的 64 位时间戳将与帧中包含的现有“Correction Field”求和,求和所得结果将覆盖到帧中的原“Correction Field”中。针对单步时间戳支持的帧类型包括:
- 原始以太网 (Raw Ethernet)
- UDP/IPv4
- UDP/IPv6对于单步 UDP 帧类型,将根据 IETF RFC 1624 来更新 UDP 校验和。对于所有单步帧,将在完成所有帧修改之后计算“Ethernet Frame Check Sequence (FCS)”(以太网帧校验序列)字段。对于双步发射操作,支持所有“Precision Time Protocol (PTP)”(精确时间协议)帧类型。
逐帧设置时间戳操作
出口时间戳功能的操作模式由 1588 命令端口上的设置判定。命令端口中所含信息用于指示以下任一结果:
- 无操作:该帧并非 PTP 帧,不应执行任何时间戳操作。
- 需执行双步操作并在“Command”字段中提供 1 个标签值(用户序列 ID);对于该帧,应设置时间戳,并且所设时间戳可供客户端逻辑使用,所提供的标签值则可供该帧使用。附加 MAC 发射器端口可提供此功能。
- 需执行单步操作。
- 对于 ToD 定时器和时间戳格式,将在命令端口中提供时间戳偏移;应对该帧设置时间戳,并且此时间戳应按提供的偏移(字节数)插入帧中。
- 对于“Correction Field”格式,将在命令端口中提供“Correction Field”偏移值;应对该帧设置时间戳,捕获的 64 位时间戳应与该帧中包含的现有“Correction Field”求和,求和所得结果将覆盖到帧中的原“Correction Field”中。对于帧修改后的单步操作,还应更新/重新计算帧的循环冗余校验 (CRC) 值。对于 UDP IPv4 格式和 IPv6 PTP 格式的帧,需更新/重新计算该帧的报头中的校验和值。
- 对于单步 UDP 帧类型,将根据 IETF RFC 1624 来更新 UDP 校验和。
- 如果使用“ToD”格式,为了能正确执行此更新功能,计算发送(以供发射)的帧的原校验和值时,针对时间戳数据应使用 0 值。使用“Correction Field”格式时,则不适用此特殊限制。
- 如果使用“Correction Field”格式,则适用另一种限制;1588 PTP 帧报头中的“UDP Checksum”(UDP 校验和)字段与“Correction Field”之差为固定间隔(以字节为单位),以支持 1588 PTP 帧定义。此要求用于最大限度缩短通过 MAC 的时延,因为校验和与纠正字段必须完全包含在 MAC 流水线内才能正确更新校验和。此特殊限制不适用于“ToD”格式,因为计算所得原时间戳数据为 0 值;因此,校验和与时间戳位置可分别位于同一帧中的不同位置。