发明内容
有鉴于此,本发明提供一种HDLC数据处理的方法和***,能提高HDLC数据处理的效率。
为实现上述目的,本发明提供如下技术方案:一种HDLC数据处理的方法,包括:
读取接收的当前八比特数据,统计该当前八比特数据的连一数其中,所述当前八比特数据的连一数包括:所述当前八比特数据从低到高的连一数;
参考当前八比特数据所属的通道,提取预先保存的该通道中前一八比特数据及其状态信息,所述状态信息包括前一八比特数据的从高到低连一数和前一八比特数据的状态标识信息;
依据当前八比特数据、当前八比特数据从低到高的连一数和前一八比特数据从高到低的连一数,进行帧标识检测,并根据检测结果标示出状态标识信息;
根据前一八比特数据的状态标识信息和当前八比特数据的状态标识信息,进行五连一检测,以完成去插零操作;
将去插零操作后得到的净荷数据进行合包,以还原成原数据包。
优选的,所述前一八比特数据的标识信息包括:前一八比特数据的尾包指示信息、和\或数据状态信息。
优选的,所述依据当前八比特数据、当前八比特数据的连一数和前一八比特数据的从高到低的连一数,进行帧标识检测,并根据检测结果给出状态标识信息,包括:
依据当前八比特数据、当前八比特数据的从低到高连一数和前一八比特数据的从高到低的连一数,检测当前八比特数据,以及当前八比特数据和前一八比特数据组成的数据流中的连一数,如果检测到六连一,则检测到帧头或帧尾,为该帧头或帧尾标示出相应的尾包信号;
如果检测到七个或七个以上的连一数,则检测到帧终止,并为该帧终止标示出相应的尾包信号和帧终止信号;
如果没有检测到六个或六个以上的连一,则确定当前八比特数据为普通数据,并为当前数据标示出数据信号。
优选的,所述根据前一八比特数据的状态标识信息和当前八比特数据的状态标识信息,进行五连一检测,包括:
依据前一八比特数据的尾包信号、帧终止信号或数据信号,以及当前数据的尾包信号、帧终止信号或数据信号,判断当前数据和前一数据是否属于同一数据包,如果是,则对当前八比特数据和前一八比特数据组成的数据流、以及当前八比特数据进行五连一检测;如果否,则仅对当前八比特数据进行五连一检测。
优选的,所述统计该当前八比特数据的连一数,还包括:统计当前八比特数据从高到低的连一数;
所述将去插零操作后得到的净荷数据进行合包,以还原成原数据包之前还包括:
将当前八比特数据的从高到低的连一数、当前八比特数据的状态标识信息保存到中间处理状态,以便当处理下一八比特数据时,读取该中间处理状态的信息,进行帧标识检测和去插零操作。
对应本发明的方法,本发明还提供了一种HDLC数据处理的***,其特征在于,包括:
统计单元,用于读取接收的当前八比特数据,统计该当前八比特数据的连一数,其中,所述当前八比特数据的连一数包括:所述当前八比特数据从低到高的连一数;
信息提取单元,用于参考当前八比特数据所属的通道,提取预先保存的该通道中前一八比特数据及其状态信息,所述状态信息包括前一八比特数据的从高到低连一数和前一八比特数据的状态标识信息;
帧标识检测单元,用于依据当前八比特数据、当前八比特数据从低到高的连一数和前一八比特数据从高到低的连一数,进行帧标识检测,并根据检测结果标示出状态标识信息;
五连一检测单元,用于根据前一八比特数据的状态标识信息和当前八比特数据的状态标识信息,进行五连一检测,以完成去插零操作;
合包单元,用于将去插零操作后得到的净荷数据进行合包,以还原成原数据包。
优选的,所述前一八比特数据的标识信息包括:前一八比特数据的尾包指示信息、和\或数据状态信息。
优选的,所述帧标识检测单元具体包括:用于依据当前八比特数据、当前八比特数据的从低到高连一数和前一八比特数据的从高到低的连一数,检测当前八比特数据,以及当前八比特数据和前一八比特数据组成的数据流中的连一数,如果检测到六连一,则检测到帧头或帧尾,为该帧头或帧尾标示出相应的尾包信号;
如果检测到七个或七个以上的连一数,则检测到帧终止,并为该帧终止标示出相应的尾包信号和帧终止信号;
如果没有检测到六个或六个以上的连一,则确定当前八比特数据为普通数据,并为当前数据标示出数据信号。
优选的,所述五连一检测单元包括:五连一检测子单元,用于依据前一八比特数据的尾包信号、帧终止信号或数据信号,以及当前数据的尾包信号、帧终止信号或数据信号,判断当前数据和前一数据是否属于同一数据包,如果是,则对当前八比特数据和前一八比特数据组成的数据流、以及当前八比特数据进行五连一检测;如果否,则仅对当前八比特数据进行五连一检测。
优选的,所述统计单元还包括:第二统计单元,用于统计当前数据从高到低的连一数;
所述***还包括:中间状态保存单元,用于将当前八比特数据的从高到低的连一数、当前八比特数据的状态标识信息保存到中间处理状态,以便当处理下一八比特数据时,读取该中间处理状态的信息,进行帧标识检测和去插零操作。
经由上述的技术方案可知,与现有技术相比,本发明公开提供了一种HDLC数据处理的方法和***,该方法不需要对通道内的数据进行串并转换,直接统计读取到的某一通道八比特数据的连一数,并提取该通道中上一八比特数据的从高到低连一数和状态标识信息,依据当前八比特数据、当前八比特数据的连一数和前一八比特数据的连一数,进行帧标识检测,并给出状态标识信息,然后利用当前八比特数据的状态标识信息和前一八比特数据的状态标识信息进行相应的五连一检测,以便完成去插零操作,并进行后续的合包操作。由于本发明不需要对通道内的并行8比特数据进行并串转换,直接统计读取的八比特数据具有的连一数,然后对该八比特数据整体进行帧标识检测和五连一检测,因此每个处理周期内可以处理八比特的数据量,处理的数据量增加,提高了数据处理的效率。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,为本发明实施例一种HDLC数据处理的方法的步骤流程图,该方法包括:
步骤S101:读取接收的当前八比特数据,统计该当前八比特数据的连一数;
基于HDLC的数据接收端在数据处理的前端接收多个端口的数据,经过现场可编程逻辑门阵列(FPGA,Field Programmable Logic_Gate Array)芯片仲裁处理后成为一路信号。也就是说,接收端通过多个端口接收数据,然后通过FPGA仲裁处理后成为一路,再按顺序处理每个端口的数据。
一般接收端接收的数据会保存在先进先出存储器(fifo,first in first out)中,再从fifo中读取数据进行处理。
现有技术中采用逐个比特的进行连一数检测,造成帧标识检测和五连一检测过程中工作带宽较小,即,一个处理周期内只能处理一个比特的数据,处理效率较低。为了克服现有技术中的缺陷,本发明直接统计该当前八比特数据的连一数,以便后续对该当前八比特数据进行帧标识检测和五连一检测(目的是进行去插零操作)时无需逐个比特的检测。也就是说,接收到某个通道中的数据为八比特,则只需统计该数据中这八比特数据中的连一数,以便后续对这八比特数据一次完成帧标识检测和去插零操作。
其中,数据都是以“0”、“1”的形式发送和接收的。F帧为“01111110”代表一帧的开始和结束,在数据的发送中,为了确保F标志字段是独一无二的,发送方在发送信息时采用“0”比特***技术,即发送方在发送除标志字符外的所有信息时,只要遇到连续的5个“1”,就自动***一个“0”。因此接收当需要判断数据流中的连一数,以判断当前八比特数据和前一八比特数据相接处,以及当前八比特数据本身的连一数。
为了能判断当前八比特数据和前一八比特数据相接处连续为一的比特数据,统计当前八比特数据的连一数包括:统计当前八比特数据从低到高的连一数,即该八比特数据从低位到高位的连一数。例如当前八比特数据为从高位到低位依次为“1110 0101”,则该数据从低到高的连一数为3。
为了能为后续接收到的下一八比特数据的检测提供依据,统计当前八比特数据的连一数还应包括:统计当前八比特数据从高到低的连一数。仍以上面的数据“1110 0101”为例,该数据从高到低的连一数为1。
步骤S102:根据当前八比特数据所属的通道,提取预先保存的该通道中前一八比特数据及其状态信息,所述状态信息包括前一数据的从高到低连一数和前一八比特数据的状态标识信息;
其中fifo中的数据是由很多数据组合在一起的,里面包括要处理的数据和它对应的通道号等信息。由于每个端口包含多个通道,各个通道之间是通过通道号来区分的,根据当前接收到的八比特数据的通道号,可以知道当前八比特数据所属的通道,然后依据该通道号找到预先保存的该通道中前一八比特数据和前一八比特数据相关状态信息。该前一八比特数据可以保存在中间处理状态中,是前一八比特数据进行去插零操作前的相关信息。其中前一八比特数据的状态信息包括:前一八比特数据从高到低的连一数和前一八比特数据的状态标识信息。
其中,状态标识信息是用于表明某八比特数据为帧头、帧尾、帧终止或仅仅为普通的八比特数据的信息。状态标识信息可以包括:尾包信号、帧终止信号、和/或数据信号。例如,当某八比特数据流中存在6个连1的比特数据,则表明检测到帧头或帧尾,则需要标示出尾包信号(last_packet_sign);当某八比特数据流中存在7个或7个以上连1的比特数据,则检测到帧终止,则标示出尾包信号(last_packet_sign)和帧终止信号(status_reg=1)。如果某八比特数据流既不是帧头(帧尾)又不是帧终止,则该八比特数据流为普通数据字段,标示出数据信号。也就是说,根据前一八比特数据的标识信息可以判断出前一八比特数据为帧头(帧尾)、帧终止或普通数据字段。
步骤S103:依据当前八比特数据、当前八比特数据的连一数和前一八比特数据从高到低的连一数,进行帧标识检测,并根据检测结果标出状态标识信息;
其中,帧标识检测为检测多个比特数据组成的数据流中连续为一的比特数目,根据该连续为一的比特数目,判断数据流中是否存在帧头、帧尾或帧终止。
具体的检测过程为:检测当前八比特数据本身的连一数,并依据当前八比特数据的从低到高连一数和前一八比特数据的从高到低的连一数,确定当前八比特数据和前一八比特数据组成的数据流中的连一数,判断所述数据流中和当前八比特数据中是否存在六连一,如果是,则检测到帧头或帧尾,为该帧头或帧尾标示出相应的尾包信号;如果否,则判断是否检测到七个或七个以上的连一数,如果是,则检测到帧终止,并为该帧终止标示出相应的尾包信号和帧终止信号;如果否,则确定当前八比特数据为普通数据,并为当前数据标示出数据信号。
也就是说,进行帧标识检测时,需要检测当前八比特数据,以及当前八比特数据和前一八比特数据组成的数据流中的连一数,判断当前八比特数据是否为帧头、帧尾或帧终止,并判断当前八比特数据和前一八比特数据组成的数据流中是否存在帧头、帧尾或帧终止。其中需要对当前八比特数据和前一8比特数据组成的数据流进行帧标识检测的原因为:由于基于HDLC协议发送数据时,为了确保F标志字段是独一无二的,发送信息时采用“0”比特***技术,即发送方在发送除标志字符外的所有信息时,只要遇到连续的5个“1”,就自动***一个“0”,这样接收到的八比特数据可能不会是一个完整帧头、帧尾或帧终止,因此需要检测当前接收的八比特数据和前一八比特数据组成的数据流中是否存在帧头、帧尾或帧终止。
例如,当前接收的八比特数据从高位到低位依次为“1110 0010”,前一八比特数据从高位到低位依次为“0110 0111”,则当前八比特数据中从低到高的连一数位为3,前一八比特数据从高到低的连一数为3,则可知道当前8比特数据和前一八比特数据组成的数据流中存在6连1,则检测到帧头或帧尾。并为该帧头或帧尾标示出尾包信号。
又如,当前八比特数据为“0111 1110”,前一八比特数据为“0110 0111”,当前数据从低到高的连一数位0,前一八比特数据从高到低的连一数为3,当前八比特数据存在6连1,当前八比特数据位帧头或帧尾。
步骤S104:依据前一八比特数据的标识信息和当前八比特数据的状态标识信息,进行五连一检测,以完成去插零操作;
由于基于HDLC协议的数据发送方会在除帧标识以外的五连一数据后插零,因此数据接收方应检测接收的数据中的五连一数据,并将五连一后的零去除,来恢复原来的数据。
其中,分析前一八比特数据和当前八比特数据标示的状态标识信息,是为了判断当前八比特数据和前一八比特数据是否属于同一数据包,如果是,则检测当前八比特数据和前一八比特数据相接处是否存在五连一,以及当前八比特数据的五连一;如果否,则仅检测当前八比特数据中是否存在五连一。
判断是否需要对当前八比特数据和前一八比特数据相接处进行五连一检测,可以为,根据前一八比特数据中的尾包信号或数据状态信息,以及当前八比特数据的尾包信号或数据状态信息,判断当前数据和前一数据是否为同一数据包,如果是,则检测当前数据和前一数据相连处的五连一数。其中,当前八比特数据和前一八比特数据相接处,是指前一八比特数据从高位到低位与当前八比特数据的高位的数据流接连处。如,当前八比特数据从高位到低位为“1101 1110”,前一八比特数据从高位到低位为“0110 0111”则二者相接处有五个连一的比特数据。
例如,如果当前八比特数据为数据数据状态,则当前八数据和前一八比特数据为同一个数据包,需要检测当前八比特数据和前一八比特数据相接处的五连一;如果当前八比特数据的尾包信号和前一数据的尾包信号都为零,则当前八数据和前一八比特数据为同一个数据包,需要检测当前八比特数据和前一八比特数据相接处的五连一;如前一八比特数据的尾包信号为1,当前一八比特数据的尾包信号为0或1,则当前八数据和前一八比特数据不属于同一个数据包,则只需检测当前八比特数据的五连一。当然还可以通过其他方法判断当前八比特数据和前一八比特数据是否为同一数据包,在此不一一列举。
步骤S105:将去插零操作后得到的净荷数据进行合包,并以包为单位进行校验,以还原成原数据。
接收方对接收到的数据进行帧标识检测、以及去插零后,得到的数据为净荷数据,由于进行去插零后的净荷数据可能不足8比特数据,因此需要等到基于该通道的数据,组合为8比特的数据模块后,在进行后续的基于该通道内的数据进行合包操作。
其中在步骤S105将去插零操作后得到的净荷数据进行合包,以还原成原数据包之前还包括:将当前八比特数据的从高到低连一数、当前八比特数据的状态标识信息保存到中间处理状态,以便当处理下一八比特数据时,读取该中间处理状态的信息,进行帧标识检测和去插零操作。
在对数据合包后还需要以包为单位校验FCS(frame check sequence帧校验序列字段)。HDLC采用16位循环冗余校验码CRC-16(Cyclic RedundancyCode),其生成多项式为CCITT多项式X^16+X^12+X^5+1,标志位和按透明规则***的所有“0”不在校验的范围内。
中间处理状态中保存着相对于需要进行帧标识检测的八比特数据之前的八比特数据的信息,如,前一八比特数据的从高到低的连一数,前一八比特数据的状态信息。当然还可以根据需要保存前一八比特数据的其他信息。
另外,当当前八比特数据的相关信息还未保存到中间处理状态时,读取到该通道的下一八比特数据时,需要将新读取到的八比特数据寄存,以便完成所述当前八比特数据的相关信息的保存后在进行处理下一八比特数据。
为能清楚的描述本发明的处理HDLC数据的步骤,参见图2,为本发明另一实施例一种HDLC数据处理的方法的步骤流程图,该方法包括:
步骤S201:读取接收到的当前八比特数据,统计该当前八比特数据的从高到低的和从低到高的连续为一的比特数;
步骤S202:根据当前八比特数据的通道号,判断当前八比特数据所属的通道,提取中间处理状态中预先保存的该通道中前一八比特数据及其状态信息,所述状态信息包括前一数据的从高到低连一数和前一八比特数据的状态标识信息;
步骤S203:依据当前八比特数据、当前八比特数据的从高到低的连一数和前一八比特数据从高到低的连一数,进行帧标识检测,并根据检测结果标出状态标识信息;
步骤S204:依据前一八比特数据的标识信息和当前八比特数据的状态标识信息,判断当前八比特数据和前一八比特数据是否为同一包的数据,如果是,则对前一八比特数据和当前八比特数据相接处,以及当前八比特数据进行五连一检测;如果否则仅对当前八比特数据进行五连一检测;
步骤S205:将当前八比特数据从高到低的连一数,以及当前八比特数据的状态标识信息存入中间处理状态中,以便进行下一八比特数据处理时提取;
步骤S206:对进行五连一检测后的当前八比特数据进行去插零操作;
步骤S207:将去插零操作后得到的净荷数据进行合包,以还原成原数据包。
对应本发明的方法,本发明还提供了一种HDLC数据处理的***,参见图3为本发明实施例的一种HDLC数据处理的***的结构框图,该***包括:
统计单元301,用于读取接收的当前八比特数据,统计该当前八比特数据的连一数;
信息提取单元302,用于参考当前八比特数据所属的通道,提取预先保存的该通道中前一八比特数据及其状态信息,所述状态信息包括前一八比特数据的从高到低连一数和前一八比特数据的状态标识信息;
帧标识检测单元303,用于依据当前八比特数据、当前八比特数据的连一数和前一八比特数据从高到低的连一数,进行帧标识检测,并根据检测结果标示出状态标识信息;
五连一检测单元304,用于根据前一八比特数据的标识信息和当前八比特数据的状态标识信息,进行五连一检测,以完成去插零操作;
合包单元305,用于将去插零操作后得到的净荷数据进行合包,以还原成原数据包。
其中,信息提取单元302提取的所述前一八比特数据的标识信息包括:前一八比特数据的尾包指示信息、和\或数据状态信息。
为了能判断当前八比特数据和前一八比特数据相接处连续为一的比特数据,所述统计单元包括:
第一统计单元,用于统计当前八比特数据从低到高的连一数。
对应第一统计单元,所述帧标识检测单元具体包括:
用于依据当前八比特数据、当前八比特数据的从低到高连一数和前一八比特数据的从高到低的连一数,检测当前八比特数据,以及当前八比特数据和前一八比特数据组成的数据流中的连一数,如果检测到六连一,则检测到帧头或帧尾,为该帧头或帧尾标示出相应的尾包信号;
如果检测到七个或七个以上的连一数,则检测到帧终止,并为该帧终止标示出相应的尾包信号和帧终止信号;
如果没有检测到六个或六个以上的连一,则确定当前八比特数据为普通数据,并为当前数据标示出数据信号。
进一步的,所述五连一检测单元包括:五连一检测子单元,用于依据前一八比特数据的尾包信号、帧终止信号或数据信号,以及当前数据的尾包信号、帧终止信号或数据信号,判断当前数据和前一数据是否属于同一数据包,如果是,则对当前八比特数据和前一八比特数据组成的数据流、以及当前八比特数据进行五连一检测;如果否,则仅对当前八比特数据进行五连一检测。
为了能为后续接收到的下一八比特数据的检测提供依据,所述统计单元还包括:
第二统计单元,用于统计当前八比特数据从高到低的连一数;
同时,本发明的***还包括:中间状态保存单元,用于将当前八比特数据的从高到低的连一数、当前八比特数据的状态标识信息保存到中间处理状态,以便当处理下一八比特数据时,读取该中间处理状态的信息,进行帧标识检测和去插零操作。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。