一种基于令牌的时间戳生成***及方法
技术领域
本发明涉及以太网通信技术领域,具体涉及一种基于令牌的时间戳生成***及方法。
背景技术
目前网络设备对时间同步性能的要求越来越高,以1588v2协议为代表的时间同步方案在诸多场景中都得到了广泛应用,产生时间戳的精确度直接决定了设备的时间同步性能。现在通用的做法是将PTP数据包添加时戳的功能放在硬件层面做,并且尽可能放在距离串行解串接口(SerDes)较近的位置,从而减小PTP数据包中的“时间戳参考点”在穿过串行解串接口中的“参考平面”和“时间戳记录点”时经过的总延时,提高时戳精确度。虽然可以靠近,但也不能无限接近,因此必然存在补偿延时的问题,而如何有效计算并且补偿这段延时,成为提高时间戳精度的关键。
图1所示的是一种网络设备(Dev001)处理时间戳的基本结构,它由数据串行解串模块(SerDes)、物理层编码模块(Pcs)和时间戳处理模块(Tpu)等基本单元组成,具体又可以划分为发送(Tx,由时间戳处理模块发送至串行解串模块)和接收(Rx,时间戳处理模块接收串行解串模块发送的数据)两条路径:其中,T1和T2分别代表PTP报文中“时间戳参考点”(Timestamp Point)输入输出SerDes引脚(也即“参考平面”Reference Plane)的真实时间;“时间戳参考点”可以是PTP数据包中的SOP(数据包首字节的首个比特),也可以是SOF(前导码之后的首个比特),还可以是其他的参考位置;T1’和T2’分别代表Rx和Tx方向上“时间戳参考点”通过时间戳处理模块时被本地高精度时钟(Chronometer)记录的精确时间;Rx_Latency和Tx_Latency分别代表“时间戳参考点”输入、输出至时间戳处理模块经过的延时;Rx_Timestamp和Tx_Timestamp分别代表Rx方向和Tx方向最终生成的时间戳,有如下关系:
Tx方向:Tx_Timestamp=T2’+Tx_Latency≈T2
Rx方向:Rx_Timestamp=T1’-Rx_Latency≈T1
“时间戳参考点”输入、输出至时间戳处理模块经过的延时主要包括三种情形:
1)路径延时
图2所示的是综合Tx方向和Rx方向之后的一种串行解串模块和时间戳处理模块之间的路径延时计算结构,其中Latency对应于图1中的Rx_Latency和Tx_Latency,它实际包括固定延时和可变延时两部分。例如,FIFO缓存结构带来的延时波动和Gearbox(变速箱)等带来的延时波动,它们都属于可变延时部分。FIFO(First Input First Output)一种先进先出的数据缓存器,先进入的数据先从FIFO缓存器中读出,与RAM相比没有外部读写地址线,使用比较简单,但只能顺序写入数据,顺序的读出数据,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。
2)时间戳参考点位置延时
图3所示的是一种会带来可变延时的典型复用结构,M个物理层编码模块的通道复用到N个串行解串模块的通道,M和N的值可能相等也可能不等,具体复用关系跟串行解串模块工作模式有关。由于“时间戳参考点”在串行解串模块的通道中的位置是不确定的,所以会带来可变的复用延时。
因此,亟需一种能够精确补偿由串行接串模块与时间戳处理模块之间的数据传输路径的延时,生成“时间戳参考点”输入、输出串行接串模块的高精度时间戳的技术方案。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种基于令牌的时间戳生成***及方法,能够精确补偿由串行接串模块与时间戳处理模块之间的数据传输路径的延时,提高时间戳精度。
为达到以上目的,本发明采取的技术方案是:一种基于令牌的时间戳生成***,该***包括串行解串模块、物理层编码模块和时间戳处理模块,串行解串模块与时间戳处理模块通过物理层编码模块来通信:
所述串行解串模块用于:将已发送和已接收的比特流数目以第一令牌的形式实时反馈至时间戳处理模块;
所述时间戳处理模块用于:以第二令牌的形式实时反馈时间戳处理模块已发送和已接收的比特流数目,根据第一令牌和第二令牌之差计算出串行解串模块与时间戳处理模块之间的延时的比特流数目;根据延时的比特流数目和串行解串模块的接口速率计算出串行解串模块与时间戳处理模块之间的数据传输路径的延时。
在上述技术方案的基础上,根据第一令牌和第二令牌之差计算出串行解串模块与时间戳处理模块之间的延时的比特流数目的具体过程包括:
创建一个令牌桶;
时间戳处理模块向串行解串模块发送数据时,时间戳处理模块向所述令牌桶中填充第二令牌,从所述令牌桶中取出第一令牌;
时间戳处理模块接收串行解串模块发送的数据时,时间戳处理模块向所述令牌桶中填充第一令牌,并从所述令牌桶中取出第二令牌;
所述第一令牌和第二令牌之差即为串行解串模块与时间戳处理模块之间的延时的比特流数目。
在上述技术方案的基础上,所述时间戳处理模块还包括平滑滤波子模块,其用于控制每次向所述令牌桶中填充的令牌数量均匀;控制每次由所述令牌桶中取出的令牌数量均匀。
在上述技术方案的基础上,所述时间戳处理模块检测到PTP报文中的时间戳参考点时,还根据串行解串模块的接口速率、检测出的时间戳参考点的位置,计算出时间戳参考点的偏移量。
在上述技术方案的基础上,所述串行解串模块与时间戳处理模块之间的数据传输路径的延时的计算公式为:
Tx方向:Tx_Latency=(Level+Offset)/Speed;
Rx方向:Rx_Latency=(Level-Offset)/Speed;
其中,Tx方向为时间戳处理模块向串行解串模块发送数据的方向,Rx方向为时间戳处理模块接收串行解串模块发送数据的方向;Latency为串行解串模块与时间戳处理模块之间的延时,Level为所述第一令牌和第二令牌之差,Speed为串行解串模块的工作速率,Offset为时间戳参考点的偏移量。
本发明还公开了一种基于令牌的时间戳生成方法,包括以下步骤:
串行解串模块将已发送和已接收的比特流数目以第一令牌的形式实时反馈至时间戳处理模块;
时间戳处理模块以第二令牌的形式实时反馈时间戳处理模块已发送和已接收的比特流数目,根据第一令牌和第二令牌之差计算出串行解串模块与时间戳处理模块之间的延时的比特流数目;
时间戳处理模块根据延时的比特流数目和串行解串模块的接口速率计算出串行解串模块与时间戳处理模块之间的数据传输路径的延时。
在上述技术方案的基础上,根据第一令牌和第二令牌之差计算出串行解串模块与时间戳处理模块之间的延时的比特流数目的具体过程包括:
创建一个令牌桶;
时间戳处理模块向串行解串模块发送数据时,时间戳处理模块向所述令牌桶中填充第二令牌,从所述令牌桶中取出第一令牌;
时间戳处理模块接收串行解串模块发送的数据时,时间戳处理模块向所述令牌桶中填充第一令牌,并从所述令牌桶中取出第二令牌;
所述第一令牌和第二令牌之差即为串行解串模块与时间戳处理模块之间的延时的比特流数目。
在上述技术方案的基础上,所述时间戳处理模块每次向所述令牌桶中填充的令牌数量均匀;每次由所述令牌桶中取出的令牌数量均匀。
在上述技术方案的基础上,所述时间戳处理模块检测到PTP报文中的时间戳参考点时,还根据串行解串模块的接口速率、检测出的时间戳参考点的位置,计算出时间戳参考点的偏移量。
在上述技术方案的基础上,所述串行解串模块与时间戳处理模块之间的数据传输路径的延时的计算公式为:
Tx方向:Tx_Latency=(Level+Offset)/Speed;
Rx方向:Rx_Latency=(Level-Offset)/Speed;
其中,Tx方向为时间戳处理模块向串行解串模块发送数据的方向,Rx方向为时间戳处理模块接收串行解串模块发送数据的方向;Latency为串行解串模块与时间戳处理模块之间的延时,Level为所述第一令牌和第二令牌之差,Speed为串行解串模块的工作速率,Offset为时间戳参考点的偏移量。
与现有技术相比,本发明的优点在于:
本发明中的串行解串模块将发送和接收的串行比特流数据量以第一令牌的形式实时反馈至时间戳处理模块,时间戳处理模块以第二令牌的形式实时反馈时间戳处理模块已发送和已接收的比特流数目,根据第一令牌和第二令牌之差计算出串行解串模块与时间戳处理模块之间的延时的比特流数目;根据延时的比特流数目和串行解串模块的接口速率计算出串行解串模块与时间戳处理模块之间的数据传输路径的延时。本方案精确补偿由串行接串模块与时间戳处理模块之间的数据传输路径的延时,以提高时间戳精度。
本发明根据串行解串模块的接口速率、检测出的时间戳参考点的位置,计算时间戳参考点的偏移量,有效克服由于“时间戳参考点”在串行解串模块中的位置不确定带来可变的复用延时。
附图说明
图1为背景技术中网络设备(Dev001)处理时间戳的基本结构示意图;
图2为背景技术中时间戳延时计算结构模型;
图3为背景技术中通道复用结构模型;
图4为本发明实施例中时间戳处理***的结构示意图;
图5为本发明实施例中令牌桶填充和抽取原理示意图;
图6为本发明实施例中时间戳检测、补偿和产生的典型结构;
图7为本发明实施例中时间戳参考点a条件下的偏移量计算方法;
图8为本发明实施例中时间戳参考点b条件下的偏移量计算方法;
图9为本发明实施例中时间戳参考点c条件下的偏移量计算方法;
图10为本发明实施例中平滑滤波子模块的原理示意图;
图11为本发明实施例中时间戳处理方法的流程示意图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
实施例1:基于令牌的时间戳生成***
参见图4所示,本发明实施例公开了一种基于令牌的时间戳生成***,该***包括串行解串模块(SerDes)、物理层编码模块(Pcs)和时间戳处理模块(Tpu),串行解串模块与时间戳处理模块通过物理层编码模块来通信:
所述串行解串模块用于:将已发送和已接收的比特流数目以第一令牌的形式实时反馈至时间戳处理模块;
所述时间戳处理模块用于:以第二令牌的形式实时反馈时间戳处理模块已发送和已接收的比特流数目,根据第一令牌和第二令牌之差计算出串行解串模块与时间戳处理模块之间的延时的比特流数目;根据延时的比特流数目和串行解串模块的接口速率计算出串行解串模块与时间戳处理模块之间的数据传输路径的延时。
检测到PTP报文中的时间戳参考点时,通过本地高精度时钟(Chronometer)记录此时的时间,作为该时间戳参考点对应数据输入输出串行解串模块时的基础时间戳,使用该延时补偿基础时间戳,生成时间戳参考点对应数据输入输出串行解串模块时的最终时间戳。
参见图5所示,根据第一令牌和第二令牌之差计算出串行解串模块与时间戳处理模块之间的延时的比特流数目的具体过程包括:
创建一个令牌桶;
时间戳处理模块向串行解串模块发送数据时,时间戳处理模块向所述令牌桶中填充第二令牌Tokens2,从所述令牌桶中取出第一令牌Tokens1;
时间戳处理模块接收串行解串模块发送的数据时,时间戳处理模块向所述令牌桶中填充第一令牌Tokens1,并从所述令牌桶中取出第二令牌Tokens2;
所述第一令牌和第二令牌之差即为串行解串模块与时间戳处理模块之间的延时的比特流数目。
根据延时的比特流数目和串行解串模块的接口速率计算出串行解串模块与时间戳处理模块之间的数据传输路径的延时的计算公式为:
Latency=Level/Speed;
其中,Latency为串行解串模块与时间戳处理模块之间的延时,Level为所述第一令牌和第二令牌之差,Speed为串行解串模块的工作速率。
串行解串模块的工作速率决定了每个令牌代表的时间,比如:1Gbps速率下,1bit令牌就代表1ns时间;10Gbps速率下,1bit令牌就代表0.1ns。因此,在知道串行解串模块工作速率的条件下,第一令牌和第二令牌之差就可以转换为具体的延时时间。
实施例2:考虑时间戳参考点的偏移量
在实施例1的基础上,考虑时间戳参考点的偏移量,基于令牌的时间戳生成***中的时间戳处理模块检测到PTP报文中的时间戳参考点时,还根据串行解串模块的接口速率、检测出的时间戳参考点的位置,计算出时间戳参考点的偏移量。
图6所示的是本发明中基于令牌的时间戳生成***中的时间戳处理模块的一种实现结构:其中,Timestamp Point Detect是“时间戳参考点”检测单元,用于检测时间戳处理模块的接口的Brick块中是否含有“时间戳参考点”。这里的“时间戳参考点”可以是PTP数据包中的SOP(数据包首字节的首个比特),也可以是SOF(前导码之后的首个比特),还可以是其他的参考位置;假设选择SOF作为“时间戳参考点”,那么该子单元在检测到SOF之后,就会根据工作模式计算出偏移量Offset。图6中的Mode是一个寄存器,它保存了通道复用规则等信息,偏移量Offset由偏移算法结合配置信息由偏移量计算单元计算得到。图6中的延时补偿子单元Compensation)用于计算和补偿最终的延时估计值,图6中Term是一个寄存器,它保存了串行解串模块的工作速率(Speed)等信息。
图7所示时间戳参考点的偏移量的计算方法。图中Bricks代表物理层编码模块(Pcs)和时间戳处理模块(Tpu)之间的数据总线接口,假设包含了p个Brick块,每个Brick块数据位宽为w,bx表示时戳参考点所在的位置;
图7中的PcsLane共有L个,L的具体大小和协议相关,比如:
100G Ethernet要求使用20个PcsLane,
40G Ethernet要求使用4个PcsLane,
10G Ethernet要求使用1个PcsLane,
L和p的关系,可以总结如下三种:
a条件:L=n*p,(n≥1,L≠1),参见图7所示;
b条件:p=n*L,(n≥1,L=1),参见图8所示;
c条件:p=n*L,(n≥1,L≠1),参见图9所示;
图7适用于a条件,这里的坐标系划分了A/B/C/D四个区域,Offset偏移计算如下:
Offset=A-C=(A+D)-(C+D)=x*L–w*i;
当L=p时,C=0,D=0,此时Offset=A=x*L,也就是图7中的特殊情况。
图7的区域解释:
A:表示确定在bx之前输出,但是尚未添加到令牌桶中的总的数据量;
C:表示已经在令牌桶中,但由于比bx后输出,需要从中扣除的数据量;
图8适用于b条件,这里的坐标系也划分了A/B/C/D四个区域,bx表示时戳参考点所在的bit位置,Offset计算如下:
Offset=x+C+D=x+w*i
由于L=1,所以bx之前的所有数据都应该添加到令牌桶中,作为链路延时的一部分。
图8的区域解释:
A:和条件a中的区域A含义不同,因为这里的A中只有一部分数据确定在bx之前输出,假设时戳参考点bx处于Bricks[i]的位置,那么Bricks[i]中就只有bx之前的x个bit数据是需要统计的;
C+D:表示确定在bx之前输出,但是尚未添加到令牌桶中的总的数据量;
图9适用于c条件,这里的坐标系划分了A/B/C/D/E/F六个区域,bx仍然表示时戳参考点所在的bit位置,由于p是L的整数倍,所以能够把p切分成多个L块;Offset计算如下:
Offset=A+C+D,
其中A的计算可以参考图7;
C+D=w*i;
所以Offset=x*L+w*i;
图9的区域解释:
A:表示确定在bx之前输出,但是尚未添加到令牌桶中的总的数据量;
C+D:表示确定在bx之前输出,但是尚未添加到令牌桶的数据量;
B、E、F:表示确定在bx之后输出的数据,不能统计到令牌桶中。
考虑时间戳参考点的偏移量的情况下,串行解串模块与时间戳处理模块之间的数据传输路径的延时的计算公式为:
Tx方向:Tx_Latency=(Level+Offset)/Speed;
Rx方向:Rx_Latency=(Level-Offset)/Speed;
其中,Tx方向为时间戳处理模块向串行解串模块发送数据的方向,Rx方向为时间戳处理模块接收串行解串模块发送数据的方向;Latency为串行解串模块与时间戳处理模块之间的延时,Level为所述第一令牌和第二令牌之差,Speed为串行解串模块的工作速率,Offset为时间戳参考点的偏移量。
实施例3:考虑平滑滤波
在实施例1的基础上,考虑平滑滤波,基于令牌的时间戳生成***中的时间戳处理模块还包括平滑滤波子模块(图4中Smooth),其用于控制每次向所述令牌桶中填充的令牌数量均匀;控制每次由所述令牌桶中取出的令牌数量均匀。
具体方法如下:
参见图10所示,采用算术平均的思想;Window是平滑滤波窗口长度,为了方便计算,长度L通常是2的整数次幂,比如32;ACC是累加器,保存了窗口内L个节点值的统计和,New和Old分别是第一级和最后一级节点;TokenIn是输出,TokenOut是输出,TokenOut就是L个节点的均值:
TokenOut=[Acc+(New–Old)]/L
为了减少计算复杂度以及移位造成的精度损失,输出结果可以暂时不除以L,只在最终令牌桶统计的时候把倍乘关系L考虑进去,即:
TokenOut=[Acc+(New–Old)]。
实施例4:基于令牌的时间戳生成方法
参见图11所示,本发明实施例公开了一种基于令牌的时间戳生成方法,其用于串行解串模块与时间戳处理模块通过物理层编码模块通信时,生成PTP报文中的时间戳参考点对应数据输入输出串行解串模块时的时间戳,该方法包括以下步骤:
串行解串模块将已发送和已接收的比特流数目以第一令牌的形式实时反馈至时间戳处理模块;
时间戳处理模块以第二令牌的形式实时反馈时间戳处理模块已发送和已接收的比特流数目,根据第一令牌和第二令牌之差计算出串行解串模块与时间戳处理模块之间的延时的比特流数目;
时间戳处理模块根据延时的比特流数目和串行解串模块的接口速率计算出串行解串模块与时间戳处理模块之间的数据传输路径的延时。
检测到PTP报文中的时间戳参考点时,通过本地高精度时钟(Chronometer)记录此时的时间,作为该时间戳参考点对应数据输入输出串行解串模块时的基础时间戳,使用该延时补偿基础时间戳,生成时间戳参考点对应数据输入输出串行解串模块时的最终时间戳。
参见图5所示,根据第一令牌和第二令牌之差计算出串行解串模块与时间戳处理模块之间的延时的比特流数目的具体过程包括:
创建一个令牌桶;
时间戳处理模块向串行解串模块发送数据时,时间戳处理模块向所述令牌桶中填充第二令牌Tokens2,从所述令牌桶中取出第一令牌Tokens1;
时间戳处理模块接收串行解串模块发送的数据时,时间戳处理模块向所述令牌桶中填充第一令牌Tokens1,并从所述令牌桶中取出第二令牌Tokens2;
所述第一令牌和第二令牌之差即为串行解串模块与时间戳处理模块之间的延时的比特流数目。
根据延时的比特流数目和串行解串模块的接口速率计算出串行解串模块与时间戳处理模块之间的数据传输路径的延时的计算公式为:
Latency=Level/Speed;
其中,Latency为串行解串模块与时间戳处理模块之间的延时,Level为所述第一令牌和第二令牌之差,Speed为串行解串模块的工作速率。
实施例5:考虑时间戳参考点的偏移量
在实施例4的基础上,考虑时间戳参考点的偏移量,基于令牌的时间戳生成方法中,时间戳处理模块检测到PTP报文中的时间戳参考点时,还根据串行解串模块的接口速率、检测出的时间戳参考点的位置,计算出时间戳参考点的偏移量。
图7所示时间戳参考点的偏移量的计算方法。图中Bricks代表Bricks代表物理层编码模块(Pcs)和时间戳处理模块(Tpu)之间的数据总线接口,假设包含了p个Brick块,每个Brick块数据位宽为w,bx表示时戳参考点所在的位置;
图7中的PcsLane共有L个,L的具体大小和协议相关,比如:
100G Ethernet要求使用20个PcsLane,
40G Ethernet要求使用4个PcsLane,
10G Ethernet要求使用1个PcsLane,
L和p的关系,可以总结如下:
a>L=n*p,(n≥1,L≠1),参见图7所示;
b>p=n*L,(n≥1,L=1),参见图8所示;
c>p=n*L,(n≥1,L≠1),参见图9所示;
图7适用于a条件,这里的坐标系划分了A/B/C/D四个区域,Offset偏移计算如下:
Offset=A-C=(A+D)-(C+D)=x*L–w*i;
当L=p时,C=0,D=0,此时Offset=A=x*L,也就是图7中的特殊情况。
图7的区域解释:
A:表示确定在bx之前输出,但是尚未添加到令牌桶中的总的数据量;
C:表示已经在令牌桶中,但由于比bx后输出,需要从中扣除的数据量;
图8适用于b条件,这里的坐标系也划分了A/B/C/D四个区域,bx表示时戳参考点所在的bit位置,Offset计算如下:
Offset=x+C+D=x+w*i
由于L=1,所以bx之前的所有数据都应该添加到令牌桶中,作为链路延时的一部分。
图8的区域解释:
A:和条件a中的区域A含义不同,因为这里的A中只有一部分数据确定在bx之前输出,假设时戳参考点bx处于Bricks[i]的位置,那么Bricks[i]中就只有bx之前的x个bit数据是需要统计的;
C+D:表示确定在bx之前输出,但是尚未添加到令牌桶中的总的数据量;
图9适用于c条件,这里的坐标系划分了A/B/C/D/E/F六个区域,bx仍然表示时戳参考点所在的bit位置,由于p是L的整数倍,所以能够把p切分成多个L块;Offset计算如下:
Offset=A+C+D,
其中A的计算可以参考图7;
C+D=w*i;
所以Offset=x*L+w*i;
图9的区域解释:
A:表示确定在bx之前输出,但是尚未添加到令牌桶中的总的数据量;
C+D:表示确定在bx之前输出,但是尚未添加到令牌桶的数据量;
B、E、F:表示确定在bx之后输出,不能统计到令牌桶中的数据量。
考虑时间戳参考点的偏移量的情况下,串行解串模块与时间戳处理模块之间的数据传输路径的延时的计算公式为:
Tx方向:Tx_Latency=(Level+Offset)/Speed;
Rx方向:Rx_Latency=(Level-Offset)/Speed;
其中,Tx方向为时间戳处理模块向串行解串模块发送数据的方向,Rx方向为时间戳处理模块接收串行解串模块发送数据的方向;Latency为串行解串模块与时间戳处理模块之间的延时,Level为所述第一令牌和第二令牌之差,Speed为串行解串模块的工作速率,Offset为时间戳参考点的偏移量。
实施例6:考虑平滑滤波
在实施例5的基础上,考虑平滑滤波,基于令牌的时间戳生成方法中,时间戳处理模块每次向所述令牌桶中填充的令牌数量均匀;每次由所述令牌桶中取出的令牌数量均匀。
具体方法如下:
参见图10所示,采用算术平均的思想;Window是平滑滤波窗口长度,为了方便计算,长度L通常是2的整数次幂,比如32;ACC是累加器,保存了窗口内L个节点值的统计和,New和Old分别是第一级和最后一级节点;TokenIn是输入,TokenOut是输出,TokenOut就是L个节点的均值:
TokenOut=[Acc+(New–Old)]/L
为了减少计算复杂度以及移位造成的精度损失,输出结果可以暂时不除以L,只在最终令牌桶统计的时候把倍乘关系L考虑进去,即:
TokenOut=[Acc+(New–Old)]。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。