本发明涉及100ge解析处理技术领域,尤其涉及一种校验100ge数据包fcs值的方法,主要用于100ge数据包的fcs校验。
背景技术:
在对100ge进行解析处理时,需要完成对从100ge中解析出的数据包进行fcs值的校验,来达到校验当前数据包是否有比特错误,从而决定是否舍弃当前包。由于100ge的速率非常高,单个时钟周期的数据位宽很大,例如,在312.5mhz的时钟频率下数据位宽为512bit,而100ge是基于字节的包协议,即数据包的最小颗粒度为byte,这样在每包的最后一个数据可能会有字节余数,对于512bit的数据位宽,余数可能从0到63,0表示没有余数。为了对100ge的数据包进行实时的fcs值校验,则需要实时的将数据包的fcs值提取出来,并在本地对原始数据包除fcs值外的其余所有字节进行实时计算。通常的处理方法是,在数据包尾处将所有可能的余数字节进行crc的计算,然后在所有crc的计算结果中根据实际的余数信息进行选择。这种实现方式是最直接的,但弊端也是显而易见的,由于对所有可能的余数字节都要进行crc的计算,这将消耗大量的逻辑资源,这在一些逻辑资源紧张的设计中是无法接受的。另外的方法是通过软件的方式实现,即先将数据包进行缓存,然后再以byte为颗粒度进行fcs计算处理,这样的处理方式因为没有字节余数的问题,而且数据位宽只有一个字节,所以处理也是最简单的,但不能满足实时处理的要求。
技术实现要素:
鉴于上述技术存在的问题,本发明提供一种校验100ge数据包fcs值的方法。本发明的目的就是要解决上述技术中存在的消耗逻辑资源多、要求实时处理的问题。
本发明采取的技术方案是:一种校验100ge数据包fcs值的方法,该方法基于fpga的硬件平台上实现,步骤如下:
(1)首先将原始数据包尾的fcs值去掉,以得到不带fcs值的数据包,与此同时将原始数据包的fcs值提取出来以供后续校验使用;
(2)接下来将去掉fcs值的数据包缓存到pkg_fifo,并在包尾处统计字节余数,将统计的字节余数信息缓存到rem_fifo;然后,根据字节余数信息,将数据包从pkg_fifo读取出来进行包头补0处理,补0的字节数与统计的字节余数相等,目的是将数据包处理成在包尾处没有字节余数的整包;之后,对经处理的包头补0的数据整包进行fcs值计算;
(3)最后将(2)中fcs的计算结果与(1)中提取的原始fcs值进行比较,以完成对原始数据包的校验。
本发明所产生的有益效果是:极大的减少了逻辑资源,例如,如果按照背景技术中的方法实现fcs校验,在xilinxvu095的fpga上实现该功能,lut资源消耗超过3万个,而采用本发明提供的方法lut资源仅消耗1千个;此外,本发明提供的方法区别于软件实现的方式,可以对100ge流量的数据包进行实时的fcs校验处理,总之本发明提供的方法在100ge解析处理技术领域有广泛的应用价值。
附图说明
图1为本发明校验100ge数据包fcs值的方法示意图。
具体实施方式
以下结合附图对本发明做进一步说明;
图1为本发明校验100ge数据包fcs值的方法示意图,首先将原始数据包尾的fcs值去掉,以得到不带fcs值的数据包,与此同时将原始数据包的fcs值提取出来以供后续校验使用。接下来将去掉fcs值的数据包缓存到pkg_fifo,并在包尾处统计字节余数,将统计的字节余数信息缓存到rem_fifo;然后,根据字节余数信息,将数据包从pkg_fifo读取出来进行包头补0处理,补0的字节数与统计的字节余数相等,目的是将数据包处理成在包尾处没有字节余数的整包;之后,对经处理的包头补0的数据整包进行fcs值计算。最后将包头补0计算得到的fcs值与提取得到的原始fcs值进行比较,以完成对原始数据包的校验。
从上述校验fcs值的方法可以看出,本发明的主要思想是,通过在去掉fcs值的数据包头补0,来达到经补0处理后的数据包在包尾处没有字节余数,从而在包尾进行crc计算时无需计算各种余数字节的情况,对于512bit的数据位宽来说,只需要完成单个时钟周期512bit的crc并行计算即可。这较通常的将各种余数字节进行crc计算的方法消耗的逻辑资源要小的多,对于512bit的数据位宽,通常的实现方法要考虑64种可能的crc计算结果并进行选择,而本发明提出的方法只需考虑1种crc计算即可。另外,与软件实现方法对比,由于本发明是基于fpga的硬件实现方式,在数据包流过的同时完成了fcs计算,故满足实时处理的要求。通过本发明提供的方法,可很好的解决校验100ge数据包fcs值消耗逻辑资源多、需要实时处理的问题,为100ge解析处理技术提供有益参考。
1.一种校验100ge数据包fcs值的方法,该方法基于fpga的硬件平台上实现,其特征在于,步骤如下:
(1)首先将原始数据包尾的fcs值去掉,以得到不带fcs值的数据包,与此同时将原始数据包的fcs值提取出来以供后续校验使用;
(2)接下来将去掉fcs值的数据包缓存到pkg_fifo,并在包尾处统计字节余数,将统计的字节余数信息缓存到rem_fifo;然后,根据字节余数信息,将数据包从pkg_fifo读取出来进行包头补0处理,补0的字节数与统计的字节余数相等,目的是将数据包处理成在包尾处没有字节余数的整包;之后,对经处理的包头补0的数据整包进行fcs值计算;
(3)最后将(2)中fcs的计算结果与(1)中提取的原始fcs值进行比较,以完成对原始数据包的校验。