发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种高速数据流的快速定帧方法及系统,实现快速定帧。
为达到以上目的,本发明采取的技术方案是:一种高速数据流的快速定帧方法,包括以下步骤:
本发明提供一种高速数据流的快速定帧方法,包括以下步骤:
进行FAS的并行搜索,找出FAS在数据流中的位置;
FAS锁定成功后,将数据流划分成多个数据段,逐次进行数据段的移位,经过多次移位将FAS移到数据流的最高位或最低位。
在上述技术方案的基础上,进行FAS的并行搜索,找出FAS在数据流中的位置,具体包括以下步骤:
定义一个FAS位置指示寄存器slip,位宽为N,用于指示FAS的起始位置;
定义一个移位寄存器shift,位宽为2N,用于存入连续两拍有效数据;
在shift中所有比特位中并行搜索FAS,当在shift中某个比特位作为起始位置搜索到FAS时,将slip中对应的比特位置1;
从slip中置1的比特位开始进行时钟周期计数,当计数到第X个时钟周期时,若搜索到FAS,则FAS锁定成功。
在上述技术方案的基础上,所述方法还包括以下步骤:在shift的所有比特位中并行搜索FAS之前,设数据流位宽为N、完整的数据帧长度为M比特,若M除以N的结果为小数,则进行数据流位宽变换,使变换后的数据流位宽N’能被M整除,M、N’均为正整数。
在上述技术方案的基础上,FAS锁定成功后,将数据流划分成多个数据段,逐次进行数据段的移位,经过多次移位将FAS移到数据流的最高位或最低位,具体包括以下步骤:
S201、将数据流划分成k段,对应的将shift中的两拍数据流分成2k段;找出FAS位置在shift的数据段中的一段,将shift中从FAS位置所在的段开始的k+1段数据移至下级移位寄存器中;
S202、将下级移位寄存器的数据分成若干段,找出FAS位置在数据段中的一段,将下级移位寄存器中从FAS位置所在的段开始的数据移至下一个下级移位寄存器中;
重复步骤S202,直至FAS在最高位或最低位,得到最终移位结果。
在上述技术方案的基础上,将下级移位寄存器的数据分成若干段时,每次数据分段不大于4段。
本发明还提供一种高速数据流的快速定帧系统,包括:
FAS搜索模块,其用于:进行FAS的并行搜索,找出FAS在数据流中的位置;
移位模块,其用于:FAS锁定成功后,将数据流划分成多个数据段,逐次进行数据段的移位,经过多次移位将FAS移到数据流的最高位或最低位。
在上述技术方案的基础上,所述FAS搜索模块具体用于:
定义一个FAS位置指示寄存器slip,位宽为N,用于指示FAS的起始位置;
定义一个移位寄存器shift,位宽为2N,用于存入连续两拍有效数据;
在shift中所有比特位中并行搜索FAS,当在shift中某个比特位作为起始位置搜索到FAS时,将slip中对应的比特位置1;
从slip中置1的比特位开始进行时钟周期计数,当计数到第X个时钟周期时,若搜索到FAS,则FAS锁定成功。
在上述技术方案的基础上,所述FAS搜索模块还用于:在shift的所有比特位中并行搜索FAS之前,设数据流位宽为N、完整的数据帧长度为M比特,若M除以N的结果为小数,则进行数据流位宽变换,使变换后的数据流位宽N’能被M整除,M、N’均为正整数。
在上述技术方案的基础上,所述移位模块具体用于:
将数据流划分成k段,对应的将shift中的两拍数据流分成2k段;找出FAS位置在shift的数据段中的一段,将shift中从FAS位置所在的段开始的k+1段数据移至下级移位寄存器中;
将下级移位寄存器的数据分成若干段,找出FAS位置在数据段中的一段,将下级移位寄存器中从FAS位置所在的段开始的数据移至下一个下级移位寄存器中;
重复对下级移位寄存器进行移位,直至FAS在最高位或最低位,得到最终移位结果。
在上述技术方案的基础上,所述移位模块将下级移位寄存器的数据分成若干段时,每次数据分段不大于4段。
与现有技术相比,本发明的优点在于:
本发明先进行FAS的并行搜索,找出FAS在数据流中的位置;再进行数据流的移位,将FAS移到数据流的最低位,即完成了定帧过程。相比传统的定帧方法,本发明可应用于高速高位宽的数据流中,仅需几个时钟周期即可完成定帧,实现快速定帧的效果,且具有良好的时序收敛效果。
具体实施方式
以下结合附图对本发明的实施例作进一步详细说明。
本发明实施例提供一种高速数据流的快速定帧方法,包括以下步骤:
进行FAS的并行搜索,找出FAS在数据流中的位置;
FAS锁定成功后,将数据流划分成多个数据段,逐次进行数据段的移位,经过多次移位将FAS移到数据流的最高位或最低位。
参见图1所示,高速数据流的快速定帧方法具体涉及以下步骤:
位宽变换,保证变换位宽后的数据流中的FAS在固定间隔、固定位置出现;
数据寄存,实现寄存连续两个有效时钟周期的数据;
FAS位置指示通过并行搜索的方法得到;
FAS锁定过程是连续判断两个帧周期FAS是否在相同的FAS指示位置出现;
FAS锁定成功后,通过数据分段,多次移位,逐次逼近的方法输出预定帧结构的数据流。
以下结合具体实施例详细阐述高速数据流的快速定帧方法的具体实现过程。
一、FAS并行搜索。
参见图2所示,首先根据需要进行位宽变换,目的是保证位宽变换后的数据流中FAS在固定间隔,固定位置出现。假设一个完整的帧包含M比特,变换前的数据流位宽为A比特,如果M/A=X1,X1为正整数,则不需要进行位宽变换。如果M/A的结果为小数,则需要进行位宽变换。位宽变换采用领域内的通用方法即可。
位宽变换后一拍有效数据位宽为B比特(注意B>A),那么M/B=X2,注意M、B、X2取值均为正整数。X2表示FAS每间隔X2个时钟周期出现一次,且出现在某一拍数据的0~(B-1)任意一个比特为起始的固定位置(假设一拍数据最低位从比特0起始)。
不同的应用场景,M和N值有所区别,其它处理过程完全一致。比如一个完整的100GFlexO帧包含比特数M=5440x128bit,一拍的有效数据为N=320bit,X=M/N=2176。对于25GE一个FEC(前向纠错)码字为5280bit,每间隔1024出现一个Code Word Marker(FEC码字标识,简称为CWM),则M=5280x 1024=5406720bit,一拍的有效数据为N=80bit,X=M/N=67584。
不失一般性,将固定间隔X,固定位置出现FAS的数据流位宽记为N比特(若M/A为正整数,则X=X1,N=A;若M/A为小数,则X=X2,N=B)。
作为优选的实施方式,在shift的所有比特位中并行搜索FAS之前,设数据流位宽为N、完整的数据帧长度为M比特,若M除以N的结果为小数,则进行数据流位宽变换,使变换后的数据流位宽N’能被M整除,M、N’均为正整数。
下面过程介绍如何查找FAS的起始位置。
定义一个FAS位置指示寄存器slip,位宽为N,用于指示FAS的起始位置。当slip寄存器某个比特位置1,表示FAS以该比特位作为起始位置。
定义一个移位寄存器shift,位宽为2N,shift每个有效时钟周期移入一拍数据,即shift可以存入连续两拍有效数据。shift寄存器完整包含了一拍有效数据里FAS从最低的起始位置到最高的起始位置的全部比特,避免了判断FAS时数据被截断的情况。
为了快速定帧,采用并行判断的方法,在移位寄存器shift的0~(N-1)个比特中同时搜索FAS,当在shift某个比特为起始位置搜索到FAS时,FAS位置指示寄存器slip相应的比特位置1,比如N=80,slip=80‘b0000_0000_0010,表示在shift第1个比特起始位置搜索到FAS。
若某个有效时钟周期slip多个比特置1,则认为slip从低比特到高比特第1个置1的比特位有效,其余比特位置1无效。
设置一个计数器counter,目的是对两个FAS的时钟周期间隔进行计数,当FAS在固定位置出现,且间隔X个时钟周期,认为FAS搜索成功。当某个有效时钟周期里slip某个比特置1,则counter开始计数,当计数到X时,在slip置1的位置搜索到FAS时,说明间隔X个时钟周期,在相同位置搜索到FAS,FAS锁定成功。
二、FAS锁定成功后,需要对N比特数据流进行移位操作,输出FAS在最低比特的预定总线格式的数据流。
现有技术方法是在一个时钟周期里完成移位操作,对于N比特高位宽(N≥320)数据流,FAS出现的位置有N种可能,采用现有技术会造成布局拥塞,逻辑级数大,带来时序问题。
参见图3所示,本发明实施例采用多次移位、逐次逼近的方法。
1、先将数据流中FAS可能的N个位置划分成k段(尽可能均匀划分,k的可能取值为1,2,3,...,N),分别记为N0、N1、...、Nk-1;相应的,每段的长度分别记为t0、t1、...、tk-1(t0表示N0的长度,t1表示N1的长度,依次类推。注意t0、t1、...、tk-1尽可能相等,且t0+t1+...+tk-1=N)那么FAS位置必然落在这k段之中的其中一段,将该段记为Ni,该段的长度记为ti(i=0表示FAS的位置在N0段,N0段长度为t0;i=1表示FAS的位置在N1段,N1段长度为t1,依次类推。i的可能取值为0,1,2,...,k-1);
对应的,将连续两个有效周期的数据即shift寄存器分成2k段,分别记为D0、D1、...、Dk-1,Dk、Dk+1、...、D2k-1。D0、Dk与N0分段长度一致,D1、Dk+1与N1分段长度一致,依次类推。
将Di、Di+1、...、Di+k-1移入至一个寄存器shift_1里面,shift_1的寄存器宽度为ti+N(i=0表示FAS在shift寄存器的D0段,D0段长度为t0;i=1表示FAS在shift寄存器的D1段,D1段长度为t1,依次类推。Di表示FAS在shift寄存器的Di段,Di段的长度为ti),那么FAS位置必然落在Di数据段中的ti个可能位置。
2、将寄存器shift_1的Di分成l段(尽可能均匀划分,l的可能取值为1,2,3,...,ti),分别记为E0、E1、...、El-1,每段的长度分别记为s0、s1、...、sl-1(s0表示E0的长度,s1表示E1的长度,sj表示Ej的长度,依次类推。注意s0、s1、...、sl-1尽可能相等,且s0+s1+...+sl-1=ti)。
那么FAS位置必然落在这l段之中的其中一段,将该段记为Ej,该段的长度记为sj(j=0表示FAS在E0段,长度为s0,j=1表示FAS在E1段,长度为s1,依次类推,j的可能取值为0,1,2,...,l-1);将Ej、Ej+1、...、El-1、Di+1、...、Di+k-1移入至一个寄存器shift_2里面,shift_2寄存器宽度为sj+N。
3、重复第2步,可以得到FAS在数据流最低比特的最终移位结果。
最终重复的次数取决于数据位宽和时钟频率,每次数据分段不大于4段,时序收敛效果较好。如在325MHz频率下,重复次数C的经验公式为4C≥N,N为数据位宽,C为满足不等式的最小正整数。
相比传统的定帧方法,本发明可以应用于高速高位宽的数据流中,在几个时钟周期(≤10)内快速完成定帧,且具有良好的时序收敛效果。
参考图2所示,说明本发明实施例的FAS并行搜索过程。通过并行搜索,可以在一个时钟周期内搜索到FAS,缩小了定帧时间,达到快速定帧的效果。
如图2所示,数据寄存器shift存入连续两个有效时钟周期的数据,假设数据流位宽为N比特,FAS字段位宽为W比特,定义一个FAS位置指示寄存器slip,当shift中某一比特为起始(设起始为第i比特,i=0,1,...,N-1),连续W个比特为FAS值,即shift的第i到i+W-1个比特等于FAS,那么slip[i]=1,即slip的第i个比特置1。
对于100G FlexO帧,数据位宽为N=320,AM=0x5952646D,AM位宽W=32,shift寄存器位宽为640,slip寄存器的位宽为320。搜索过程如下:同时取出shift[31:0](表示0比特起始的32位数据)、shift[32:1](表示1比特起始的32位数据)、...、shift[350:319](表示319比特起始的32位数据)分别与AM比较,若相等则slip中相应的起始比特置1,否则置0。
对于25GE一个FEC码字,数据位宽为N=80,CWM=0xC16821,CWM位宽为W=24,shift寄存器的位宽为160,slip寄存器位宽为80。搜索过程如下:同时取出shift[23:0](表示0比特起始的24位数据)、shift[24:1](表示1比特起始的24位数据)、...、shift[102:79](表示79比特起始的24位数据)分别与CWM比较,若相等则slip中相应的起始比特置1,否则置0。
参考图3所示,说明本发明实施例的FAS锁定过程。
如图3所示,当FAS位置指示寄存器slip某一个比特置1时,帧周期计数器开始counter计数,当计数到一个完整的帧周期X时,判断相同的比特位是否置1,若是,说明间隔一个帧周期,在相同位置搜索到FAS,FAS锁定成功。
对于100G FlexO帧,帧间隔时钟周期X=2176,当slip全部比特为0时,说明没有找到AM,等待slip不全为0;当slip某一个比特置1时,counter开始计数,当计数到2176时,slip相同位置的比特位又被置1,说明间隔2176个时钟周期,相同位置出现了AM,AM锁定成功。
对于25GE一个FEC(前向纠错)码字,CWM间隔时钟周期X=67584,当slip全部比特为0时,说明没有找到CWM,等待slip不全为0;当slip某一个比特置1时,counter开始计数,当计数到66时,slip相同位置的比特位又被置1,说明间隔67584个时钟周期,相同位置出现了CWM,CWM锁定成功。
参考图4所示,说明80比特位宽下FAS多次移位、逐次逼近的实现。
1、假设数据流位宽为80比特,FAS位置则有80种可能,假设FAS位置指示寄存器指示FAS出现在比特39的位置。先将一拍数据流分成4段,每段20比特,那么FAS位置必然落在这4段中的第2段;相应的,移位寄存器shift由于包含两拍数据,可以分为8段,记为D0、D1、D2、...、D7。分段目的是将FAS数据存在范围从80个可能位置缩小到20个可能位置,减少移位判断条件,有利于时序收敛。
2、根据FAS位置指示,将移位寄存器shift的第D1、D2、...、D5共5段数据移入寄存器shift_1中,即shift_1等于shift的第20到第119比特,那么FAS位置落在shift_1的最低20比特中,此步骤目的是获取FAS位置为起始的完整一拍数据,保证最终移位数据的完整性;
3、在移位寄存器shift_1中FAS位置有20种可能,将shift_1的低20比特又分为4段,每段占5个比特,分别用为E0、E1、E2、E3表示。将shift_1的第E3、D2、D3、D4、D5段移入寄存器shift_2中,即shift_2等于shift_1的第15到第99比特;FAS位置落在shift_2的低5比特中,此步骤目的是将FAS可能位置进一步缩小,从20个可能位置缩小到5个可能位置,减少移位判断条件,有利于时序收敛;
4、FAS位置只有5种可能,位于shift_2寄存器的比特0~比特4中。通过对5个可能位置判断,将shift_2的第4到83比特移入shift_3寄存器中,shift_3即为FAS在最低位的最终数据,完成了定帧操作。
参考图5所示,说明160比特位宽下FAS多次移位、逐次逼近的实现。
假设数据流位宽为160比特,FAS位置则有160种可能,假设FAS位置指示寄存器指示FAS出现在比特97的位置。先将一拍数据流分成4段,每段40比特,那么FAS位置必然落在这4段中的第3段;相应的,移位寄存器shift由于包含两拍数据,可以分为8段,记为D0、D1、D2、...、D7。分段目的是将FAS数据存在范围从160个可能位置缩小到40个可能位置,减少移位判断条件,有利于时序收敛。
2、根据FAS位置指示,将移位寄存器shift的第D3、D4、...、D7共5段数据移入寄存器shift_1中,即shift_1等于shift的第80到第279比特,那么FAS位置落在shift_1的最低40比特中,此步骤目的是获取FAS位置为起始的完整一拍数据,保证最终移位数据的完整性;
3、在移位寄存器shift_1中FAS位置有40种可能,将shift_1的低40比特又分为4段,每段占10个比特,分别用为E0、E1、E2、E3表示。将shift_1的第E1、E2、E3、D4、D5、D6、D7段移入寄存器shift_2中,即shift_2等于shift_1的第10到第179比特;FAS位置落在shift_2的低10比特中,此步骤目的是将FAS可能位置进一步缩小,从40个可能位置缩小到10个可能位置,减少移位判断条件,有利于时序收敛;
4、在移位寄存器shift_2中FAS位置有10种可能,将shift_2的低10比特又分为3段,第1段长度为3比特,用F0表示;第2段长度为3比特,用F1表示;第3段长度为4比特,用F2表示。将shift_2的第F2、E2、E3、D4、D5、D6、D7段移入寄存器shift_3中,即shift_3等于shift_2的第6到第169比特;FAS位置落在shift_3的低4比特中,此步骤目的是将FAS可能位置进一步缩小,从10个可能位置缩小到4个可能位置,减少移位判断条件,有利于时序收敛;
5、FAS位置只有4种可能,位于shift_3寄存器的比特0~比特3中。通过对4个可能位置判断,将shift_3的第1到160比特移入shift_4寄存器中,shift_4即为FAS在最低位的最终数据,完成了定帧操作。
参考图6所示,说明320比特位宽下FAS多次移位、逐次逼近的实现。
假设数据流位宽为320比特,FAS位置则有320种可能,假设FAS位置指示寄存器指示FAS出现在比特319的位置。先将一拍数据流分成4段,每段80比特,那么FAS位置必然落在这4段中的第4段;相应的,移位寄存器shift由于包含两拍数据,可以分为8段,记为D0、D1、D2、...、D7。分段目的是将FAS数据存在范围从320个可能位置缩小到80个可能位置,减少移位判断条件,有利于时序收敛。
2、根据FAS位置指示,将移位寄存器shift的第D3、D4、...、D7共5段数据移入寄存器shift_1中,即shift_1等于shift的第240到第639比特,那么FAS位置落在shift_1的最低80比特中,此步骤目的是获取FAS位置为起始的完整一拍数据,保证最终移位数据的完整性;
3、在移位寄存器shift_1中FAS位置有80种可能,将shift_1的低80比特又分为4段,每段占20个比特,分别用为E0、E1、E2、E3表示。将shift_1的第E3、D4、D5、D6、D7段移入寄存器shift_2中,即shift_2等于shift_1的第60到第399比特;FAS位置落在shift_2的低20比特中,此步骤目的是将FAS可能位置进一步缩小,从80个可能位置缩小到20个可能位置,减少移位判断条件,有利于时序收敛;
4、在移位寄存器shift_2中FAS位置有20种可能,将shift_2的低20比特又分为4段,每段占5个比特,分别用为F0、F1、F2、F3表示。将shift_2的第F3、D4、D5、D6、D7段移入寄存器shift_3中,即shift_3等于shift_2的第15到第339比特;FAS位置落在shift_3的低5比特中,此步骤目的是将FAS可能位置进一步缩小,从20个可能位置缩小到5个可能位置,减少移位判断条件,有利于时序收敛;
5、FAS位置只有5种可能,位于shift_3寄存器的比特0~比特4中。通过对5个可能位置判断,将shift_3的第4到324比特移入shift_4寄存器中,shift_4即为FAS在最低位的最终数据,完成了定帧操作。
基于同一发明构思,本发明实施例还提供一种高速数据流的快速定帧系统,包括:
FAS搜索模块,其用于:进行FAS的并行搜索,找出FAS在数据流中的位置;
移位模块,其用于:FAS锁定成功后,进行数据流的移位,将FAS移到数据流的最高位或最低位。
作为优选的实施方式,所述FAS搜索模块具体用于:
定义一个FAS位置指示寄存器slip,位宽为N,用于指示FAS的起始位置;
定义一个移位寄存器shift,位宽为2N,用于存入连续两拍有效数据;
在shift中所有比特位中并行搜索FAS,当在shift中某个比特位作为起始位置搜索到FAS时,将slip中对应的比特位置1;
从slip中置1的比特位开始进行时钟周期计数,当计数到第X个时钟周期时,若搜索到FAS,则FAS锁定成功。
作为优选的实施方式,所述FAS搜索模块还用于:在shift的所有比特位中并行搜索FAS之前,进行位宽变换,使该数据流位宽为N,固定间隔为X,且N、X均为正整数。
作为优选的实施方式,所述移位模块具体用于:
将数据流划分成k段,对应的将shift中的两拍数据流分成2k段;找出FAS位置在shift的数据段中的一段,将shift中从FAS位置所在的段开始的k+1段数据移至下级移位寄存器中;
将下级移位寄存器的数据分成若干段,找出FAS位置在数据段中的一段,将下级移位寄存器中从FAS位置所在的段开始的数据移至下一个下级移位寄存器中;
重复对下级移位寄存器进行移位,直至FAS在最低位,得到最终移位结果。
优选的,所述移位模块将下级移位寄存器的数据分成若干段时,每次数据分段不大于4段。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。