时间戳逻辑的性能经过测试,如先前引用的图例所示。在 RX 侧,抖动测试电路会在帧起始进入测试电路的同时记录系统定时器。稍后,此时间戳将被 RX PCS 捕获,并最终在系统侧 AXI4-Stream 接口 (rx_ptp_tstamp_out[79:0]) 上输出。这 2 次时间捕获之差的变化量 dt 即定义为时间戳逻辑的“抖动”性能。对于 tx_ptp_tstamp_out[79:0],TX 测试与此类似。
理论上,40G/50G 子系统时间戳逻辑能判定的跨 SOP 捕获平面的时间应在 80 位系统定时器输入的粒度范围内。因此,如果系统定时器的时间段为 1 nsec,那么时间戳的精度将在 1 nsec 抖动范围内。1 nsec 同时也是 IEEE 1588 定义的 80 位字段的最低有效位的粒度。
实际上,还有其它因素会限制真实系统中可实现的精度。
时钟域
实际上,系统定时器输入的精度应与 SerDes 时钟粒度相同。因此,系统定时器输入的时钟域交汇也应一并纳入考量。例如,如果 SerDes 时钟频率为 390 MHz,那么系统定时器实际粒度为 2.56 ns,这也是捕获时间戳的时钟的粒度。因此,可预计存在额外的 2.56 ns 变化。
收发器
在数据路径中添加 SerDes 并不会影响 40G/50G 子系统的抖动性能,但可能导致不对称。
在 1588 时钟应用中,RX + TX SerDes 时延会成为回路延迟的一部分,因此由 1588 协议来执行测量。为了最大程度提升从时钟的精度,最好将回路不对称纳入考量(RX 与 TX SerDes 时延之差)。赛灵思 可以为您的器件专用的各种 SerDes 设置提供收发器时延。如果要将非对称纳入您的 PTP 系统考量范围,则需要联系数据路径中其它收发器的供应商以了解其特性。
UltraScale™
和
UltraScale+™
收发器能够报告 RX 时延。RX 收发器变化主要源于其内部弹性缓冲器的填充级别。请参阅收发器指南以获取更多详细信息。
前向纠错
在时间戳捕获的线路侧会发生前向纠错(对应第 74 条和第 91 条)。因此,添加 FEC 将不会影响 40G/50G 子系统中的时间戳捕获的精度。与前述 SerDes 情况相似,FEC 的额外时延总量 (RX + TX) 也将由 1588 协议来进行测量。
(请注意,SOP 在发射的 FEC 帧中保持不可见状态,直至由 RX FEC 功能将其解码后才可见。)
为了最大程度提升 1588 从时钟的精度,最好明确 RX 和 TX 方向中 FEC 时延的非对称性。请联系赛灵思以了解特定 FEC 的 RX 和 TX 时延及其配置。如果 PTP 系统并非赛灵思 FEC 实现,那么您可能还需要从该系统中的链路合作伙伴供应商处获取此信息。
接收偏差纠正
在多通道系统(如 40G 和 50G)中,对应于 SOP 的包可能发生在任何通道内。此外,通道彼此间可能存在相对偏差。40G/50G 子系统能够通过报告 SOP 通道及其偏差,将 SOP 帧的到达通道纳入考量范围。可通过硬件或软件来执行纠正。建议步骤如下。
考虑以下 40G 和 50G 案例。对于这两者,过程是相同的,但 PMD 通道数量分别为 4 和 2。
图 1. 40G 填充级别纠正示例
Page-1
Sheet.1
Sheet.2
Sheet.3
Sheet.4
Sheet.5
Sheet.6
RX_LANE_ALIGNER_FILL_0 RX_LANE_ALIGNER_FILL_1 RX_LANE_ALIGNER...
RX_LANE_ALIGNER_FILL_0RX _LANE_ALIGNER_FILL_1RX _LANE_ALIGNER_FILL_2RX _LANE_ALIGNER_FILL_3
Sheet.7
Sheet.8
Sheet.9
Sheet.10
Sheet.11
Sheet.12
PMD0 PMD1 PMD2 PMD3
PMD0PMD 1PMD 2PMD 3
Sheet.13
PMD lanes
PMD lanes
Sheet.14
buffers
buffers
Sheet.15
RX_PTP_TSTAMP_OUT
RX_PTP_TSTAMP_OUT
Sheet.16
X16343-012417
Sheet.17
Sheet.18
Sheet.19
X16343-080621
图 2. 50G 填充级别纠正示例
Page-1
Sheet.1
Sheet.2
Sheet.3
Sheet.4
Sheet.5
RX_LANE_ALIGNER_FILL_0 RX_LANE_ALIGNER_FILL_1 RX_LANE_ALIGNER...
RX_LANE_ALIGNER_FILL_0RX _LANE_ALIGNER_FILL_1RX _LANE_ALIGNER_FILL_2RX _LANE_ALIGNER_FILL_3
Sheet.6
Sheet.7
Sheet.8
Sheet.9
Sheet.10
Sheet.11
PMD0 PMD1
PMD0PMD 1
Sheet.12
PMD lanes
PMD lanes
Sheet.13
buffers
buffers
Sheet.14
RX_PTP_TSTAMP_OUT
RX_PTP_TSTAMP_OUT
Bracket.284
Bracket.16
Sheet.17
Sheet.18
X16344-030916
Sheet.19
Sheet.20
Sheet.21
X16344-080621
图 3. 40G 偏差纠正示例
Page-1
Sheet.3
Sheet.4
STAT_RX_VL_NUMBER_0[1:0] = 3 STAT_RX_VL_NUMBER_1[1:0] = 0 STA...
STAT_RX_VL_NUMBER_0[1:0] = 3STAT _RX_VL_NUMBER_1[1:0] = 0STAT _RX_VL_NUMBER_2[1:0] = 1STAT _RX_VL_NUMBER_3[1:0] = 2
Sheet.5
Sheet.6
PMD0 PMD1 PMD2 PMD3
PMD0PMD 1PMD 2PMD 3
Sheet.7
PMD lanes
PMD lanes
Sheet.8
This example tells you to look at lane aligner fill 2 for SoP...
This example tells you to look at lane aligner fill 2 for SoP fill level
Sheet.9
Sheet.10
Sheet.11
Sheet.12
The PCS lane mapping is essentially random
The PCS lane mapping is essentially random
Sheet.13
Example: RX_PTP_PCSLANE_OUT = 2
Example: RX_PTP_PCSLANE_OUT = 2
Sheet.14
X16345-030916
Sheet.15
Sheet.16
Sheet.17
X16345-080621
图 4. 50G 偏差纠正示例
Page-1
Sheet.1
Sheet.2
STAT_RX_VL_NUMBER_0[1:0] = 2 STAT_RX_VL_NUMBER_1[1:0] = 3 STA...
STAT_RX_VL_NUMBER_0[1:0] = 2STAT _RX_VL_NUMBER_1[1:0] = 3STAT _RX_VL_NUMBER_2[1:0] = 1STAT _RX_VL_NUMBER_3[1:0] = 0
Sheet.3
Sheet.4
PMD lanes
PMD lanes
Sheet.5
This example tells you to look at lane aligner fill 1 for SoP...
This example tells you to look at lane aligner fill 1 for SoP fill level
Sheet.6
Sheet.7
Sheet.8
Sheet.9
the PCS lane mapping is essentially random
the PCS lane mapping is essentially random
Sheet.10
Example: RX_PTP_PCSLANE_OUT = 1
Example: RX_PTP_PCSLANE_OUT = 1
Sheet.11
PMD0 PMD1
PMD0PMD 1
Bracket.284
Bracket.16
Sheet.14
X16346-030916
Sheet.15
Sheet.16
Sheet.17
X16346-080621
图 5. 时间戳偏差纠正逻辑
Page-1
Sheet.1
ctl_rx_systemtimerin[79:0]
ctl_rx_systemtimerin[79:0]
Sheet.2
Xilinx PCS and MAC
Xilinx PCS and MAC
Sheet.3
Sheet.4
Sheet.5
Sheet.6
Xilinx SerDes Inputs
Xilinx SerDes Inputs
Sheet.7
AXI4-Stream packet data
AXI4-Stream packet data
Sheet.8
Customer Supplied Skew Correction Logic (hardware or software)
Customer Supplied Skew Correction Logic ( hardware or software )
Sheet.9
Sheet.10
rx_ptp_tstamp_out[79:0]
rx_ptp_tstamp_out[79:0]
Sheet.11
Sheet.12
rx_lane_aligner_fill_[3:0] stat_rx_vl_number_[3:0][1:0]
rx_lane_aligner_fill_[3:0]stat _rx_vl_number_[3:0][1:0]
Sheet.13
Sheet.14
Sheet.15
Skew Corrected Timestamp
Skew Corrected Timestamp
Sheet.16
AXI4-Stream packet data
AXI4-Stream packet data
Sheet.17
X16347-030916
Sheet.18
Sheet.19
Sheet.20
X16347-080621
第一步是计算对齐缓冲器填充级别的平均时间,因为这些信号的粒度为 1 个 SerDes 时钟周期。虽然偏差在一段时间(例如,几分钟或几小时)内保持相对不变,但由于采样量化,对齐缓冲器级别的 SerDes 时钟周期存在短期浮动。因此,通过计算每个填充级别的平均时间可以获得更高精度(例如,亚纳秒级)的实际偏差。
假定已按上述方式准确判定填充级别,可使用以下公式来执行偏差纠正:
correction = ((RX_LANE_ALIGNER_FILL_n) - (RX_LANE_ALIGNER_FILL_0)) * SerDes clock period
corrected timestamp = RX_PTP_TSTAMP_OUT + correction
其中:
corrected timestamp 即完成偏差纠正后的时间戳,必须与对应包数据保持同步
RX_PTP_TSTAMP_OUT 是捕获的时间戳。
RX_LANE_ALIGNER_FILL_0 是在其中采集时间戳的通道的对齐缓冲器填充级别,通常此通道为通道 0(请与赛灵思技术销售支持人员确认以了解更新信息)。
RX_LANE_ALIGNER_FILL_n 是包含 SOF 的通道的对齐缓冲器填充级别。
所有计算的单位需保持一致。由于填充级别是以时钟周期为单位来提供的,可能需将其转换为纳秒或与计算过程一致的任何单位。
如需了解其它信息,请参阅 IEEE 1588-2008 标准《IEEE Standard for a Precision Clock Synchronization Protocol for Networked Measurement and Control Systems》(standards.ieee.org/findstds/standard/1588-2008.html)