一种对数据流中字节透明处理的方法

文档序号:7922679阅读:276来源:国知局
专利名称:一种对数据流中字节透明处理的方法
技术领域
本发明涉及一种对数据流中字节处理的方法,尤其是涉及一种对数据流中字节透明处理的方法。
背景技术
高层数据链路控制(HDLC)协议是一种应用于在网络结点间传送数据的协议,广泛应用于传输技术中;而同步数字体系链路接入处理(LAPS)协议是一个新兴的协议,它十分类似于前者,在网际协议和以太网协议在同步数字体系中的应用中,采用同步数字体系链路接入处理(LAPS)协议非常简洁高效。但是也存在下面的一些问题。
在传输中如果把数据净荷封装成高层链路控制(HDLC)协议帧或者同步数字体系链路接入处理(LAPS)协议帧,因为不同的帧之间是通过一个或者多个0X7e间隔的,而接收方向通过判定0X7e来定位不同的帧,为了避免混淆,必须对净荷数据流中帧本身的0X7e做处理,即0X7e>>0X7d5e,其中0X7d为转移字节;同样的原因,对净荷数据流中本身的0X7d也必须做处理,即0X7d>>0X7d5d。这样就要求对上述的两种帧净荷的数据流中0X7d和0X7e做透明处理,即将0X7d转换为0X7d5d、0X7e转换为0X7d5e。在用现场可编程门阵列(FPGA)实现上述处理时,对于16位的内部总线(即一个时钟周期内必须处理2字节的数据),因为净荷字节不可预测而且也没有规律,所以每一个时钟周期内接收到的数据可能有1字节需要做透明处理,也可能2字节都需要做透明处理,也可能都不需要做透明处理,这样实现起来非常烦琐。
例如数据净荷为0X7d55、0X7d7d、0X557d、0X5555、0X7d55的时候,对其进行透明处理转换的具体过程如下在第一拍时钟输入数据为0X7d55,由于对0X7d需要做透明处理,变成0X7d5d,所以本时钟周期就只能输出0X7d5d,相应的0X55就必须滞留下来;接着下一拍输入数据为0X7d7d,这两个字节都需要做透明处理,所以第二拍时钟周期输出0X557d,还要滞留下数据0X5d7d、0X5d,依此类推,对全部净荷做透明处理后的最终数据流将是0X7d5d,0X557d,0X5d7d,0X5d55,0X7d5d,0X5555,0X7d5d,0X55,这样可以看出变化十分复杂。
特别的是,高层数据链路控制(HDLC)协议的实现多数都基于8位内部数据总线,使得现场可编程门阵列(FPGA)的内部时钟频率不可能达到很高,一般主时钟频率不会超过100M,而当同步数字体系(SDH)的带宽大于622M的时候,8位数据总线已经不能满足带宽需要,如同步数字体系(SDH)的带宽为1.25G时内部总线必须为16位。相对于8位内部总线的透明处理,16位内部总线的透明处理更复杂,而新兴的同步数字体系链路接入处理(LAPS)协议多是基于16位内部数据总线的。至于24位、32位甚至更宽的内部数据总线时,其对数据流中字节进行透明处理将会比16位的更加复杂。
因此现有的技术解决上述的问题复杂烦琐,对资源也浪费,会占用很多的逻辑单元。

发明内容
本发明的目的是提供一种方法使得进行透明处理的方法变的简单易行,只需要较少的资源就能实现透明处理。同时,要求该方法的速度快,在一般的现场可编程门阵列(FPGA)上可以达到100M的时钟频率,并且该方法的扩展性要好,可以方便的移植应用于24位、32位甚至更宽的内部总线。
本发明的目的是这样实现的一种对数据流中字节透明处理的方法,包括以下步骤,a)利用输入预处理模块遍历输入的8Xn位帧数据,并按高低字节分别对0X7d和0X7e做标识;b)将n个由标识位和被标识字节组成的数据分别写入n个连接在上述的输入预处理模块之后的先入先出器件(FIFO)缓存;c)设定一与上述的缓存先入先出器件(FIFO)连接的先入先出器件(FIFO)作读控制,控制当前数据的下一拍读法;d)对从上述的用于缓存的n个先入先出器件(FIFO)读出的数据进行透明处理,其实现是利用预先设定的3Xn个寄存器管道构成的透明转换模块,并且与上述的用于缓存的n个先入先出器件(FIFO)以及上述的读控制先入先出器件(FIFO)连接。
并且,上述的对0X7d和0X7e作标识还包括以下步骤高低字节分开处理,在最高位加上一位标识位,标识和相应的字节组成9bit数据,直接将输入数据的低4位放入转换后数据的低4位。
上述的输入预处理模块还用于检测上述的用于缓存的n个先入先出器件(FIFO)的空满状态,并且当上述的n个先入先出器件(FIFO)几乎满时使读使能无效。
上述步骤c)还包括以下步骤上述的读控制先入先出器件(FIFO)与上述的n个缓存先入先出器件(FIFO)之间还连接有一逻辑模块,将上述的读控制先入先出器件(FIFO)的读出控制信息转化为对上述的n个缓存先入先出器件(FIFO)的读控制。
上述的步骤c)还包括以下步骤设定上述的读控制先入先出器件(FIFO)的值为111…111(共lgn/lg2的取整数位)时标识当前数据的下一拍读n个字节的数据,值依次减少时标识当前数据的下一拍读依次减少个字节的数据。
上述的步骤c)还包括以下步骤当前读取1字节数据时,则下一拍对上述的缓存先入先出器件(FIFO)的读取顺序调换。
上述的步骤d)还包括以下步骤当上述的透明转换模块寄存器管道读入小于n的任意字节数据时,上述的管道移动该字节的数据并也只输出该字节的数据。
同时,上述的用于缓存的n个先入先出器件(FIFO)的深度大于于或等于16位。
上述的透明转化模块的寄存器管道长度大于或等于6。
上述的读控制先入先出器件(FIFO)的位宽是lgn/lg2取整数。
上述的读控制先入先出器件(FIFO)的深度是8Xn,并且大于或等于上述的寄存器管道的长度。
如此,即实现了对数据流中字节进行透明处理的一种简单易行的方法,而且只需要较少的资源就能实现透明处理的目的。同时,这种方法的速度很快,在一般的现场可编程门阵列(FPGA)上可以轻松的达到100M的时钟频率,并且其扩展性好,可以方便的移植应用于24位、32位甚至更宽的内部总线时的透明处理。
下面结合附图详细描述本发明的较佳实施例,通过对本发明较佳实施例的描述,可以更清楚的看出和理解本发明的优点所在。


图1是同步数字体系链路接入处理(LAPS)协议帧的帧结构图;图2是高层数据链路控制(HDLC)协议帧的帧结构图;图3是对整个封装好的帧进行透明处理的示意框图;图4是本发明的方法的步骤图。
具体实施例方式
如图1,0X7e是同步数字体系链路接入处理(LAPS)帧的定位标识字段,不同的帧之间通过一个或者多个0X7e间隔,而接收方向通过判定0X7e来定位不同的帧。0X04、0X03为固定插字段,0Xfe01标识数据净荷为媒体访问控制(MAC)帧,帧校验字段(FCS)是对地址、控制、协议标识(SAPI)及数据净荷作循环冗余校验(CRC32)计算的结果。
如图2,高层数据链路控制(HDLC)协议帧的帧结构图,其很类似于同步数字体系链路接入处理(LAPS)帧的帧结构图,这里不再赘述。
如图3,本图以16位内部总线为例,当读使能有效时,前端16位的输入数据首先进入输入预处理模块,由该模块遍历封装好的同步数字体系链路进入处理(LAPS)协议帧,或者高层数据链路控制(HDLC)协议帧,然后将16位数据分别按高低字节做0X7d或者0X7e标识,标识位和相应的高或者低字节一起组成9位的数据,然后写入下面的先入先出器件(FIFO)1或者2缓存。在这里,对0X7d和0X7e做相同的标识,不会引起混淆,因为0X7d>>0X7d5d,0X7e>>0X7d5e,可以看到转换后数据的低4位和转换前源数据的低4位相同,因此在转换的时候可以直接将源数据的低4位放入转换后数据的低4位,这样不仅使问题简化,而且也节约资源。
同时,输入预处理模块还对下面的用于缓存的16位以上深度的先入先出器件(FIFO)1和2进行检测,检测其空满状态,当检测到先入先出器件(FIFO)1或者2处于几乎满时,该模块还使前端读使能无效,停止读取前端数据,以避免先入先出器件(FIFO)1或者2中的数据溢出。
采用一个1位宽8位深的先入先出器件(FIFO)做读控制,与缓存先入先出器件(FIFO)1和2连接,读控制部分根据先入先出器件(FIFO)1和2的输出数据来确定当前数据的下一拍怎样读,也许是下一个时钟周期读一个先入先出器件(FIFO),也许读两个,也许不需要读。读控制先入先出器件(FIFO)的初始值为全1,读顺序初始化可以设定为先入先出器件(FIFO)1先。当读控制先入先出器件(FIFO)的值为1时标识下一拍读两个字节,为0时标识下一拍读一个字节。读控制部分还包括一逻辑模块,连接在读控制先入先出器件(FIFO)与先入先出器件(FIFO)1和2之间,如本图所示。读控制先入先出器件(FIFO)内部事先设置数组参数,用于根据从先入先出器件(FIFO)1和2中读出的数据查出下一拍的值为1或者为0,再通过逻辑模块控制对先入先出器件(FIFO)1和2的具体读法。具体控制可以不同,举一例如下比如当前读出数据的值为0X7d7d,那么下两拍下面的透明转换模块只能处理一个字节的数据,即0X7d>>0X7d5d,所以接下来的两拍只能从先入先出器件(FIFO)1或者2中读取一个数据,此时读控制先入先出器件(FIFO)中根据事先内置的数组写入两个0来控制;又比如当前读出数据为0X5555,那么下一拍是从先入先出器件(FIFO)1和2中读取两个字节,此时读控制先入先出器件(FIFO)中写入一个1。依此类推,读控制部分就可以通过逻辑模块控制读取缓存先入先出器件(FIFO)1和2中一个、两个或者不读。另外默认的初始读取顺序是先入先出器件(FIFO)1先于2,但是当出现读取单字节的时候,对先入先出器件(FIFO)1和2的读取顺序调换,如此,读控制部分就可以控制读取先入先出器件(FIFO)1和2的具体读法。
透明转换模块与缓存先入先出器件(FIFO)1和2以及读控制部分分别连接,由6个9位的寄存器管道构成,在此我们不妨将其分别命名为byte0~byte5,其中管道入口为byte0和byte1,出口为byte4和byte5。对于先入先出器件(FIFO)1和2,如果当前读控制部分只使能其中一个的读信号,那么管道只移动一个字节,也只输出一个字节,即FIFO1>>byte0>>byte1>>byte2>>byte3>>byte4>>byte5>>out,或者FIFO2>>byteO>>byte1>>byte2>>byte3>>byte4>>byte5>>out;而如果读控制部分使能两个的读信号,那么管道移动2个字节也输出2个字节,即FIFO1>>byte1>>byte3>>byte5>>out,FIFO2>>byte0>>byte2>>byte4>>out,或者FIFO2>>byte1>>byte3>>byte5>>out,FIFO1>>byte0>>byte2>>byte4>>out。
因为如果透明转换模块管道中6个寄存器里全为0X7d时,读控制先入先出器件(FIFO)就必须保存6个0,以指示后六拍时钟周期都只能从先入先出器件(FIFO)1或者2中读取一个字节,所以读控制先入先出器件(FIFO)的深度取决于透明转换模块的寄存器管道长度,即其深度必须大于或者等于寄存器管道的长度。16位内部数据总线下,我们设置其为1位宽8位深。又因为从先入先出器件(FIFO)1或者2读出数据到根据读出数据改变控制信号,至少需要3个时钟周期的时间,所以这里的寄存器管道的长度要大于6。
如图4,还是以16位内部数据总线为例,本发明的方法首先是步骤s102,16位输入数据进入输入预处理模块,接着是步骤s104,输入预处理模块遍历输入的帧数据,并按高低字节分别对0X7d和0X7e做相同标识,其后是步骤s106和步骤108,将两个由标识位和被标识字节组成的9字位数据分别写入先入先出器件(FIFO)1和2缓存,同时进行步骤s110和步骤s112,先入先出器件(FIFO)1和2分别给出空满信号给输入预处理模块,以决定是否停止前端读使能,从而避免先入先出器件(FIFO)1和2的溢出。其后是步骤s118和步骤s120,读控制先入先出器件(FIFO)读取缓存先入先出器件(FIFO)1和2的输出数据,然后是步骤s122,逻辑模块判断读控制先入先出器件(FIFO)的值。
如果值为1,则是步骤s124,控制透明转换模块从先入先出器件(FIFO)1和2中读取2字节数据;如果值为0,则是步骤s 126,调换下一拍对先入先出器件(FIFO)1和2的读取顺序,并接着进行步骤s128,控制透明转换模块从先入先出器件(FIFO)1和2中只读取1字节的数据。
在上段步骤的同时,透明转换模块根据读控制部分的控制执行步骤s114和s116,分别或者同时从先入先出器件(FIFO)1和2读取数据,最后是步骤s130,透明转换模块对读入的数据进行透明转换后再予以输出。
这样就简单易行的对数据流中字节进行透明处理,而且非常节约资源,只需150个逻辑单元;同时速度也快,经实验验证,可以在一般的现场可编程门阵列(FPGA)上轻松的达到100M的时钟频率。并且本发明的方法还有很强的扩展性,对于24位、32位甚至更宽的内部数据总线,只需要改变图3中先入先出器件(FIFO)1和2的数量,并相应的对输入数据按一个字节一段加上标识后分别缓存进各先入先出器件(FIFO)中;同时加大读控制先入先出器件(FIFO)的深度和宽度,以及增加透明转化模块的寄存器的数量就可以了。其他包括读控制部分对读取数据的控制方法等都基本类同。
这里需要指出的是本领域的普通技术人员可以在本发明的基础上,作出各种适当的变形或者替换,但所有这些变形或者替换,都应当属于本发明的保护范围。
权利要求
1.一种对数据流中字节透明处理的方法,其特征是包括以下步骤,a)利用输入预处理模块遍历输入的8Xn位帧数据,并按高低字节分别对0X7d和0X7e做标识;b)将n个由标识位和被标识字节组成的数据分别写入n个连接在所述的输入预处理模块之后的先入先出器件(FIFO)缓存;c)设定一与所述的缓存先入先出器件(FIFO)连接的先入先出器件(FIFO)作读控制,控制当前数据的下一拍读法;d)对从所述的用于缓存的n个先入先出器件(FIFO)读出的数据进行透明处理,其实现是利用预先设定的3Xn个寄存器管道构成的透明转换模块,并且与所述的用于缓存的n个先入先出器件(FIFO)以及所述的读控制先入先出器件(FIFO)连接。
2.根据权利要求1所述的方法,其特征是所述的对0X7d和0X7e作标识包括以下步骤高低字节分开处理,在最高位加上一位标识位,标识和相应的字节组成9bit数据,直接将输入数据的低4位放入转换后数据的低4位。
3.根据权利要求1所述的方法,其特征是所述的输入预处理模块还用于检测所述的用于缓存的n个先入先出器件(FIFO)的空满状态,并且当所述的n个先入先出器件(FIFO)几乎满时使读使能无效。
4.根据权利要求1所述的方法,其中步骤c)还包括以下步骤所述的读控制先入先出器件(FIFO)与所述的n个缓存先入先出器件(FIFO)之间还连接有一逻辑模块,将所述的读控制先入先出器件(FIFO)的读出控制信息转化为对所述的n个缓存先入先出器件(FIFO)的读控制。
5.根据权利要求1所述的方法,其中步骤c)还包括以下步骤设定所述的读控制先入先出器件(FIFO)的值为111…111(共lgn/lg2的取整数位)时标识当前数据的下一拍读n个字节的数据,值依次减少时标识当前数据的下一拍读依次减少个字节的数据。
6.根据权利要求1所述的方法,其中步骤c)还包括以下步骤当前读取1字节数据时,则下一拍对所述的缓存先入先出器件(FIFO)的读取顺序调换。
7.根据权利要求1所述的方法,其中步骤d)还包括以下步骤当所述的透明转换模块寄存器管道读入小于n的任意字节数据时,所述的管道移动该字节的数据并也只输出该字节的数据。
8.根据权利要求1所述的方法,其特征是所述的用于缓存的n个先入先出器件(FIFO)的深度大于或等于16位。
9.根据权利要求1所述的方法,其特征是所述的透明转化模块的寄存器管道长度大于或等于6。
10.根据权利要求1所述的方法,其特征是所述的读控制先入先出器件(FIFO)的位宽是1gn/lg2取整数。
11.根据权利要求1或10或11所述的方法,其特征是所述的读控制先入先出器件(FIFO)的深度是8Xn,并且大于或等于所述的寄存器管道的长度。
全文摘要
本发明公开了一种对数据流中字节透明处理的方法。通过设置输入预处理模块遍历输入的帧数据,并按不同高低字节对0X7d和0X7e做标识,并将各字节和其标识位组成的9位数据分别写入n个先入先出器件(FIFO),并设置另一较小先入先出器件(FIFO)做读控制,用于控制当前数据的下一拍读法,而透明转换模块由3Xn个9位寄存器管道构成。本发明的方法可以简单易行的实现对数据流中字节的透明处理,非常节约资源,速度也很快。本发明的方法可以适用于16、24、32甚至更宽的内部数据总线。
文档编号H04L12/28GK1472942SQ0213445
公开日2004年2月4日 申请日期2002年7月29日 优先权日2002年7月29日
发明者黄科, 黄 科 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1