发明内容
为了解决现有技术中的问题,本发明提供了提出了一种高速以太网纳秒级精度1588一步法时间戳的实现方法,采用锚点跨时钟采样加上数据位置推算的方式计算出包的精确时间戳;具有超高精度、资源占用小、低延时、无复杂握手流程、与PCS耦合性低以及适用多通道等良好特性。
为实现上述目的,本发明采用如下的技术方案。
在本发明实施例中,提出了一种高速以太网纳秒级精度1588一步法时间戳的实现方法,该方法包括如下步骤:
S1 MAC在以太网成流模块按照锚点周期产生伪锚点,将其传递给下游的PCS,并记录每个块与伪锚点的位置关系;
S2下游的PCS模块按照锚点周期产生真实锚点,比较其与伪锚点的位置关系并反馈给MAC的位置推算模块;
S3下游的PCS模块通过锚点跨时钟采样得到精确的锚点时间,并反馈给时间戳计算模块;
S4位置推算模块推算出时间戳报文与锚点的间隔数BK_NUM,并将其发送给时间戳计算模块;
S5时戳计算模块通过BIT_NUM计算出时间戳包到锚点的时间,并结合锚点时间,从而得到报文需要的时间戳TS;
S6时间戳计算模块得到时间戳TS后,需要将时间戳TS写到报文的相应位置,并重新计算校验和;
S7后置CRC进行报文的CRC计算。
进一步的,所述的锚点是指以太网协议中的对齐码或者按照固定间隔产生的虚拟对齐码。
进一步的,所述BIT_NUM为时间戳计算模块通过BK_NUM,根据以太网的速率和模式计算出时间戳报文与锚点在物理层上间隔的比特数。
进一步的,所述的锚点跨时钟采样是指在锚点位置到达极度接近线侧(一般为serdes并行口)时采样当前时间。
进一步的,所述时间戳TS等于锚点时间+BIT_NUM*每一比特在物理层传递的时间。
进一步的,所述的位置推算模块根据时间戳报文头与伪锚点间隔的block(块)数量,得到的报文头与伪锚点的关系,结合锚点与伪锚点间的位置关系,推算出时间戳报文与锚点的间隔数BK_NUM。
进一步的,所述将时间戳TS写到报文的相应位置并重新计算校验和功能由时间戳预处理及报文修改两个模块配合完成。
进一步的,所述时间戳预处理是指将识别是否是需要打时间戳的报文、时间戳类型、报文修改位置、提取出原始的校验和信息处理后放入前导码中的处理。
进一步的,包到达报文修改模块后已经组帧成流,提取由时间戳预处理生成的前导码中的信息判断是否是需要修改的时间戳报文并将计算出的时间戳写入包中。
进一步的,所述的后置CRC是将CRC计算后置到时间戳处理逻辑和以太网成流之后,此时的CRC计算不用区分是否为时间戳包。
本发明的有益效果在于,针对现有的通信系统中存在的问题,提供一种高速以太网纳秒级精度1588一步法时间戳的实现方法,具有超高精度、资源占用小、低延时、无复杂握手流程、与PCS耦合性低以及适用多通道等良好特性。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。以下实施用例仅用于更加清楚地说明本发明的系统方法及技术方案,而不能以此来限制本申请的保护范围。
根据本发明的实施方式,提出了一种高速以太网纳秒级精度1588一步法时间戳的实现方法,通过锚点跨时钟采样加上数据位置推算的方式计算出包的精确时间戳;具有超高精度、资源占用小、低延时、无复杂握手流程、与PCS耦合性低以及适用多通道的等良好特性。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
图1是一种高速以太网纳秒级精度1588一步法时间戳的实现方法的处理流程示意图。如图1所示,该方法包括如下步骤:
S1 MAC在以太网成流模块按照锚点周期产生伪锚点,将其传递给下游的PCS,并记录每个块与伪锚点的位置关系;
S2下游的PCS模块按照锚点周期产生真实锚点,比较其与伪锚点的位置关系并反馈给MAC的位置推算模块;
所述的锚点是指以太网协议中的对齐码或者按照固定间隔产生的虚拟对齐码。
具体实施时,将锚点与伪锚点间的block数反馈给MAC的位置推算模块。
S3下游的PCS模块通过锚点跨时钟采样得到精确的锚点时间,并反馈给时间戳计算模块;
所述的锚点跨时钟采样是指在锚点位置到达极度接近线侧(一般为serdes并行口)时采样当前时间。
S4位置推算模块推算出时间戳报文与锚点的间隔数BK_NUM,并将其发送给时间戳计算模块;
所述的位置推算模块根据时间戳报文头与伪锚点间隔的block数量,得到报文头与伪锚点的关系,结合锚点与伪锚点的位置关系,推算出时间戳报文与锚点的间隔数BK_NUM。
S5时戳计算模块通过BIT_NUM计算出时间戳包到锚点的时间,并结合锚点时间,从而得到报文需要的时间戳TS;
所述BIT_NUM为时间戳计算模块通过BK_NUM,根据以太网的具体速率和模式计算出时间戳报文与锚点在物理层上间隔的比特数。
所述时间戳TS等于锚点时间+BIT_NUM*每一比特在物理层传递的时间。
S6时间戳计算模块得到时间戳TS后,需要将时间戳TS写到报文的相应位置,并重新计算校验和;
所述将时间戳TS写到报文的相应位置并重新计算校验和功能由时间戳预处理及报文修改两个模块配合完成。
所述时间戳预处理是指将识别是否是需要打时间戳的报文、时间戳类型、报文修改位置、提取出原始的校验和信息处理后放入前导码中的处理。
包到达报文修改模块后已经组帧成流,提取由时间戳预处理生成的前导码中的信息判断是否是需要修改的时间戳报文并将计算出的时间戳写入包中。
所述时间戳预处理是指将时间戳类型、报文修改位置、校验和(checksum)信息等处理后放入前导码中的处理。
S7后置CRC进行报文的CRC计算。
所述的后置CRC是将CRC计算后置到时间戳处理逻辑和以太网成流之后,此时的CRC计算不用区分是否为时间戳包。
需要说明的是,尽管在上述实施例及附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
为了对上述一种高速以太网纳秒级精度1588一步法时间戳的实现方法进行更为清楚的解释,下面结合一个具体的实施例来进行说明,然而值得注意的是该实施例仅是为了更好地说明本发明,并不构成对本发明不当的限定。
实施例一:
一种高速以太网纳秒级精度1588一步法时间戳的实现方法,具体实施步骤如下:
步骤1,MAC在以太网成流模块按照锚点周期产生伪锚点,将其传递给下游PCS,并记录每个块与伪锚点的位置关系;
图2为本实施例的实现结构示意图,各模块关系如图所示。图中的时戳计算即为时间戳计算模块。
时间戳报文的时间可以通过锚点时间加上时间戳报文头与锚点的时间间隔获得。
锚点时间由锚点跨时钟采样模块获取。
时间戳报文头与锚点的时间间隔需要通过时间戳报文头与锚点在MAC处的块间隔(BlockNum)计算,其中所谓的块就是以太网802.3协议中nGMII接口64bit块,锚点与时间戳报文头位置如图3所示。
在MAC处并不能直接获得锚点位置,需要PCS(Physical Coding Sublayer,物理编码子层)模块反馈配合,即在MAC先产生一个伪锚点,并随数据传递给PCS,PCS再将锚点与伪锚点的相对位置反馈给MAC。
在MAC处需要得到锚点与报文头间的关系,但锚点是在下游PCS处才能产生,所以采取的方法时在MAC处按照锚点周期产生伪锚点,然后获取报文头与伪锚点的位置关系;在PCS处比对锚点与伪锚点间的关系,把其反馈给MAC。这样MAC就可以通过报文头与伪锚点的关系,以及伪锚点与锚点间的关系就可以得到报文头与锚点间的关系了。
伪锚点和锚点是同周期的(同周期指间隔BLOCK数目相同),对于特定模式。
步骤2,锚点反馈;
下游的PCS模块按照锚点周期产生真实锚点,比较其与伪锚点的位置关系,并反馈给MAC的位置推算模块。
PCS需要将伪锚点的位置与伪锚点前面的真实锚点间间隔的block(块)数反馈给MAC的位置推算模块,如图4所示。由于真实的锚点是连续多个,实施中取第一个锚点的位置来计算锚点与伪锚点间的间隔。
锚点位置关系采用单向的PCS(单向PCS不需要进行双向甚至三次握手)产生,并反馈给MAC的方式,取代以往由MAC产生锚点的设计。该设计不破坏PCS设计结构并解决了MAC和PCS强耦合的问题的同时还避免了将时间戳处理逻辑下放到PCS的复杂设计。
步骤3,锚点产生跨时钟采样——获取精确的锚点时间。
下游的PCS模块在靠近物理层处的跨时钟采样模块得到精确的锚点时间,并反馈给时戳计算模块。
所谓锚点跨时钟采样就是要在锚点到达物理层(PCS出口)的时候获取当前的本地时间。其中,本地时间是指芯片内部的本地时值,其格需要式满足IEEE 1588要求,其如何产生和校准不在本发明描述范围内。为了产生精准的锚点时间和向MAC反馈锚点位置,需要在PCS处实施以下方案:
为了实现方便,锚点一般选取以太网协议中对齐码,其周期为固定值,这样可以复用对齐码的产生逻辑,但为了方便serdes并口处的跨时钟采样模块精确的定位到锚点,需要随路增加1比特的锚点标记。
在PCS出口处(serdes并行数据口)监测锚点标记,并采样当前标记出现的时间。
由于高速以太网的物理层是多lane结构,对齐码都是连续多个,但在协议层面上每个对齐码是可以同时到达物理层的。为了简化设计提高稳定性,实施中强制确保所有serdes口间以及每个serdes间的多条lane是严格对齐的。
serdes是英文SERializer(串行器)/DESerializer(解串器)的简称。它是一种主流的时分多路复用(TDM)、点对点(P2P)的串行通信技术。
步骤4,位置推算;
位置推算模块按照时间戳报文头与伪锚点间间隔的block数量,得到报文头与伪锚点的关系。再根据步骤2中得到真实锚点与伪锚点间的关系即真实锚点和伪锚点间隔的block数量,便可推算出时间戳报文与锚点的间隔数block数量,记为BK_NUM,并把间隔数BK_NUM送给时间戳计算模块。
步骤5,时间戳计算;
时间戳计算模块通过BK_NUM可以根据以太网的具体速率和模式(802.3协议中的速率和编码模式)计算出时间戳报文与锚点在物理层上间隔的比特数(具体算法参见IEEE802.3),记为BIT_NUM,因为每一比特在物理层传递的时间是相等的,所以时间戳计算模块可以通过BIT_NUM计算出时间戳包到锚点的时间,从而得到时间戳包将达到物理层的时间,记为TS。可以简单描述为:
TS=锚点时间+BIT_NUM*每一比特在物理层传递的时间。
步骤6,时间戳计算模块得到时间戳TS后,需要将时间戳TS写到报文的相应位置,并重新计算校验和;
时间戳计算模块得到时间戳TS后,需要将其写到报文的相应位置,并需更改CHECKSUM。这些功能通过时间戳预处理和报文修改两个模块配合完成,如下:
包进入MAC层之后,由时间戳预处理模块需要提取出时间戳报文需要修改的位置、CHECKSUM所在位置、时间戳报文的类型、以及将报文要修改的部分反向去除后的CHECKSUM值,这些数据大小共占用5个字节。由于以太网帧的前导码以及起始码的8个字节中有效数据可以压缩到3字节,因此可以将这需处理模块提取的5个字节的信息写到以太网包的前导码中(后在报文修改模块还原成标准的前导码),这样可以节省大量的数据流水位宽。时间戳预处理模块处理之后的前导码随着包向下游传递,如图2所示。
包到达报文修改模块后已经组帧成流,提取前导中的信息判断是否是需要修改的时间戳报文并将计算出的时间戳写入包中。如果需要重新计算CHECKSUM,则采取增量计算的方法,因为预处理中已将报文修改部分的CHECKSUM反向剔除,因此增量计算不再需要原始字段的值。
步骤7,后置CRC计算。
对包进行修改后需要重新计算CRC(Cyclic Redundancy Check,循环冗余校验),但CRC无法增量计算。因此将CRC计算后移到以太网帧成流后,为了方便CRC并行计算,需要成流后保持图5的格式。
本发明的有益效果在于,针对现有的通信系统中存在的问题,提供一种高速以太网纳秒级精度1588一步法时间戳的实现方法,通过锚点跨时钟采样加上数据位置推算的方式计算出包的精确时间戳;具有超高精度、资源占用小、低延时、无复杂握手流程、与PCS耦合性低以及适用多通道的等良好特性。
1、采用锚点跨时钟采样+数据位置推算的方式计算出包的精确时间戳;采用双边沿跨时钟采样结构采样本地时间,在1GHz频率下可实现亚ns级的跨时钟采样精度;
2、锚点位置采用单向的PCS产生,并反馈给MAC的方式,取代以往由MAC产生锚点的设计。该设计不破坏PCS设计结构并解决了MAC和PCS强耦合的问题的同时还避免了将时间戳处理逻辑下放到PCS的复杂设计。
3、采用时间戳报文预处理技术,降低了时间戳处理模块的复杂度,并减少了随数据路径携带的信息量,降低了逻辑资源的消耗。
4、后置CRC计算技术,将CRC计算后置到时间戳处理逻辑和以太网成流逻辑的后面,避免了二次CRC计算。
本发明申请人结合说明书附图对本发明的实施用例做了详细的说明与描述,以上实施用例仅为本发明的优选实施方案,详尽的说明只是为了帮助读者更好地理解本发明精神,而并非对本发明保护范围的限制,相反,任何基于本发明的发明精神所作的任何改进或修饰都应当落在本发明的保护范围之内。