一种以太网数据和E1数据的转换与级联的FPGA实现方法
技术领域
本发明涉及一种以太网数据和E1数据的转换与级联的FPGA实现方法,具体是用HDLC协议进行以太网数据和E1数据之间的转换,并且利用E1的不同时隙完成多台设备的级联功能。
背景技术
以太网是目前应用最广泛的局域网络传输方式,它采用基带传输,通过双绞线和传输设备,实现10M/100M的网络传输,技术相当成熟。以太网以其成本低、网管简单、易于升级等优点作为宽带介入设备的首选方案,但是它具有传输距离有限的缺点。
当前社会上SDH环以及由SDH、PDH提供的大量E1电路星罗棋布。对此,比较现实的方案就是利用这些已有的资源来传输以太网数据。目前应用比较广泛的是以太网桥方案,即通过E1线路点对点透明传输以太网数据。但是点对点的透传具有很大的局限性,一台主机只能远程操控一台设备。
发明内容
针对背景技术存在的问题,本发明提供一种利用HDLC协议彼此转换以太网和E1数据的FPGA的实现方法,其在FPGA上用HDLC协议进行以太网数据和E1数据的转换外,还利用E1帧格式中的32个时隙,通过E1的可变时隙达到多台设备的级联功能;本发明通过E1的级联,可以达到用一台主机来远距离控制多台设备的目的。
为解决上述技术问题,本发明采用如下技术方案:
一种以太网数据和E1数据的转换与级联的FPGA实现方法,在FPGA内分为4个模块:包括以太网接收模块、E1发送模块、E1接收模块和以太网发送模块;E1芯片包括两个端口,分别为上行端口、下行端口;连接在一起的以太网接收模块和E1发送模块为上行链路,连接在一起的E1接收模块和以太网发送模块为下行链路,以太网接收模块、以太网发送模块均与以太网芯片连接,E1发送模块、E1接收模块均与E1芯片中的上行端口、下行端口连接;
步骤1、以太网接收模块将以太网数据进行HDLC协议的转换:
处理以太网芯片发送出来的4位数据,去掉以太网数据的8字节帧头和4字节FCS校验位,对其余的4位数据进行并串转换;
步骤2、E1发送模块将经过HDLC协议转换过的帧进行E1的组帧,然后输出给E1芯片中的上行端口和下行端口,E1芯片接收到上行端口和下行端口发送的数据后,将两路E1帧结构的数据进行E1成帧处理,再分别从两路E1端口输出;
步骤3、E1接收模块对E1芯片发送过来的两路数据后进行E1帧头的帧同步检测,去掉E1帧头,得到两路HDLC帧,两路HDLC帧合路后发送给以太网发送模块;
步骤4、以太网发送模块将HDLC帧解帧,然后重新组成以太网帧,发送给以太网芯片。
所述步骤1实现过程如下,
用CRC16的协议计算出2个字节的校验位添加在每帧数据的最后,然后对得到的比特流数据进行发现连续的5个bit1在后面添加一个bit0操作,最后在帧头和帧尾都添加上01111110的字节,将有效数据和帧头区分开。
所述步骤4实现过程如下,
首先通过检测01111110帧头找到HDLC帧的帧头和帧尾,去掉01111110,然后进行5个连续bit1去掉后面的bit0操作,然后进行CRC16的校验,校验通过后去掉16个CRC校验bit,然后对所得的数据进行CRC32的计算得到32bit的FCS校验位,之后进行串并转换,并添加8个字节的以太网帧头。
所述步骤2中组帧的实现过程为:
将已转换为HDLC帧的数据写入FIFO,从FIFO读出数据的同时进行计数,每计数到248时,在此248bit的数据前加上8bit的E1帧头,同时对数据进行CRC4的计算;最初子复帧的帧头中存放CRC4的地方数据为0;然后每从FIFO读出一整个子复帧时,将得到的4bit的CRC校验码保留,存放在下一个子复帧帧头CRC4的存放处。
所述步骤3中去掉E1帧头的实现过程为:
对数据进行移位判定,当发现第一个疑似E1帧头数据时,此时对数据进行计数,计数256次之后,如果不是E1帧头,就重新进行帧头判定;如果还是E1帧头,连续3次计数256次后,发现都是E1帧头,那么就认为此时帧同步,再将剩余的248bit的有效数据提取出。
下面对各个模块分别说明:
(1)以太网接收模块:处理以太网芯片发送出来的4位数据,去掉以太网数据的8字节帧头和4字节FCS校验位,然后对剩下的4位数据进行并串转换,用CRC16的协议计算出2个字节的校验位添加在每帧数据的最后,然后对得到的比特流数据进行发现连续的5个bit1在后面添加一个bit0操作,最后在帧头和帧尾都添加上01111110的字节,由于有效数据中经过5个1添0后,不可能出现01111110的帧头,这样就可以将有效数据和帧头区分开来。以上的步骤即是将以太网数据进行HDLC协议的转换过程。
(2)E1发送模块:将经过HDLC协议转换过的帧进行E1的组帧,然后输出给E1芯片。此时要完成E1的级联功能,所以FPGA会连接E1芯片的2个端口,一个做为上行,一个做为下行。下行E1端口会做为级联另一台设备的端口。所以此时E1组帧后FPGA将数据同时送给两个E1端口。
(3)E1接收模块:此模块是E1发送模块的逆过程。对E1芯片发送过来的数据进行E1帧头的帧同步检测,去掉E1帧头。得到HDLC帧。如果使用E1的级联功能,此时得到的两路E1数据,经过上述相同的步骤后在此模块将两路信号合路,级联的设备不会占用相同的E1时隙,所以不会出现有效数据重叠的现象。
(4)以太网发送模块:以太网接收模块的逆过程,即将HDLC帧解帧,然后重新组成以太网帧。首先通过检测01111110帧头找到HDLC帧的帧头和帧尾,去掉01111110,然后进行5个连续bit1去掉后面的bit0操作,然后进行CRC16的校验,校验通过后去掉16个CRC校验bit。然后对所得的数据进行CRC32的计算得到32bit的FCS校验位。之后进行串并转换,并添加8个字节的以太网帧头。发送给以太网芯片。
附图说明
图1为本发明中以太网帧结构示意图。
图2为HDLC协议转换后的HDLC帧结构。
图3为本发明中PCM31的E1帧结构。
图4为本发明中以太网和E1转换实现框图。
图5为本发明中以太网和E1转换后E1的级联实现框图。
图6为本发明中以太网接收模块流程图。
图7为本发明中E1发送模块流程图。
图8为本发明中E1接收模块流程图。
图9为本发明中以太网发送模块流程图。
图3中,X表示存放CRC4的校验码;Y表示存放复帧定位信号MFAS;A表示帧失步指示;F0~F7表示第一子复帧;F8~F15表示第二子复帧;TS0表示帧头;TS1~TS31表示有效数据。
具体实施方式
下面结合附图对本发明作进一步说明。
图1和图2说明了以太网帧结构和HDLC帧结构,以太网帧结构实际上有很多种类型,但是在此只用到了帧头和FCS,所以虽然帧类型很多,但不会对本设计造成影响。从图1两组帧结构对比可以清楚的知道两者间的转换关系。
图3是E1的帧结构,E1帧结构分有PCM30、PCM31。本发明只涉及到PCM31的E1帧结构。符合G.704标准的E1帧结构如下所示,每基本帧由32个路时隙(ts0~ts31)组成。每个路时隙由8bit码组成,基本帧帧频为8K,而每16基本帧(F0~F15)构成一个复帧,故每个复帧共由4096比特组成。在一个基本帧结构中共有32个时隙,用TSi(i=0,1,2,…,31)表示。而基本帧帧频为8K,因此一个E1基本帧组成了一个速率为2.048Mbps的数据比特流。其中每个基本帧的ts1~ts31分别用来传31个64kbit/s数字信息的数据时隙,而ts0用来传各种辅助信号,具体如下。
在一个复帧中,基本帧可以分为两类:奇帧和偶帧。奇帧和偶帧的区分是通过ts0的第2bit来区分的,奇帧的bit2为‘1’。偶帧ts0时隙的bit2~bit8是用来传基本帧对准信号FAS的。G.704协议规定帧对准信号FAS为“0011011”。每个复帧又划分为两个子复帧,分别为F0~F7(记为第1子复帧)和F8~F15(记为第2子复帧)。因此,整个复帧又可以看成由两个CRC-4子复帧校验快构成,前8个基本帧(第1子复帧)为第一校验块,根据协议要求的方式对其进行CRC-4校验,校验结果共4bit放在偶帧(F0,F2,F4,F6)ts0的bit1,同理对后一校验块(第2子复帧)校验的结果放在偶帧(F8,F10,F12,F14)ts0的bit1。同时奇帧的第3bitA为对告bit,A为‘1’时表示有告警,当收到lof或者los时,则将A置为‘1’,不用时置0。奇帧ts0的第1bit传复帧定位信号MFAS,协议规定MFAS为“001011”。可以看到复帧定位信号为6bit,而一个CRC复帧中有8个奇帧,所以协议规定奇帧(F1,F3,F5,F7,F9,F11)ts0的第1bit用来传上述的复帧定位信号“001011”,而奇帧(F13,F15)ts0的第1bit用来传误块指示比特E0和E1,当其为‘0’时表示有误块。还有奇帧的第4至第8bit为备用bit,不用时应置为‘1’。
图4表示了本发明的实现框图,本发明是在FPGA上实现以太网和E1的转换。FPGA内4个模块分别代表了FPGA和以太网芯片的收发接口以及E1芯片的收发接口。其中E1的接口要用到两个是为了完成E1的级联功能。
E1的级联功能如图5,主机通过主控设备将以太网信号转换成E1信号发送到设备1的上行端口,此时设备1从上行E1口收到E1信号后将此数据同时通过下行E1端口传到设备2,以此类推,相当于主控设备的数据同时传到了设备1、2、3。此时设备1、2、3会设置分别使用不同的E1时隙,并且3台设备使用的时隙不能重叠。这样3台设备会从传过来的E1数据中相对应的时隙提取有效数据。反过来的方向,此时视设备3为最末端,设备3的数据通过上行E1口发送到设备2,设备2会将设备3传过来的数据和自己的数据通过选择的E1时隙进行合路,通过上行E1口传到设备1,设备1将设备2传过来的数据和自己的数据进行合路传输给主控设备。此时主控设备只要将E1时隙设置为与其中任以设备相同,就可以提取到相对应设备的数据。即主机同一时间可以联通其中一台设备,只要更改主控设备的E1时隙,就可以连接想要连接的设备。同理,此发明主控设备最多可连接31台设备(每台设备占用一个E1时隙)。
下面详细描述FPGA内部功能实现的流程。
图6为以太网接收模块的流程,将输入的以太网数据去掉8字节的帧头和4字节的FCS校验位,然后进行并串转换。此时以太网输入数据的随路时钟以MII接口为例是25M,数据为4位。转换为串行如果数率不变应该用100M的时钟,本设计考虑到实际运用可兼容100M以下任意时钟,因为数据最后转换为E1只有2.048M,所以时钟速率总是要下降的。所以此时这里用FIFO来做时钟域的转换,并且这个FIFO是一个快写慢读的FIFO,所以这里对FIFO的写会有控制,每写完一帧以太网数据,会判断FIFO剩余的容量是否能完全存入下一帧(按以太网最大帧1518字节算),如果不能下一帧将会丢掉,不写入FIFO。之后对得到的bit流数据做CRC16的计算,得到16bit校验位添加到帧末尾,再对其进行每出现连续5个bit1之后添加bit0的操作,此时我们同样要将数据传入FIFO,因为5个1添0的操作实际上会造成帧长度的增加,所以此FIFO仍旧是一个快写慢读的FIFO,用来整合数据的时钟域。最后添加01111110的帧头和帧尾。
图7为E1发送模块的流程,将得到HDLC帧通过FIFO将数据达到2.048M的E1时钟上,此FIFO同样是快写慢读。然后对数据进行E1成帧。即每248个bit之前添加8bit的帧头,帧头按上述E1帧格式要求定义。然后将数据发送给E1芯片。
图8为E1接收模块的流程,E1接收模块会接收到两路E1数据,上行端口接收到的数据后,同时将数据传到E1下行端口输出,给到下一级设备,保证级联功能完成。同时将此数据和下行端口接收到的E1数据进行E1帧头同步检测,最初检测到E1帧头后,256bit后应该还是E1帧头,所以连续3次检测到帧头后,就视为同步了。将E1帧头去掉,数据进入FIFO,将数据打到工作时钟CLK上,此FIFO是一个慢写快读的FIFO,所以对FIFO的读操作要做控制,避免FIFO读空出现;去掉E1帧头后,得到两路HDLC帧,两路HDLC帧合路后发送给以太网发送模块。
图9为以太网发送模块的流程,对E1接收模块输出的数据进行01111110的帧头帧尾检测,找到HDLC帧的帧头帧尾。去掉01111110的帧头帧尾后,检测出现5个连续bit1就去掉后面的bit0,然后对这每帧数据做CRC16的检测,检测无误表示传输过来的数据没有误码,去掉16bit的校验位,再对其做CRC32的校验,添加到帧尾作为FCS。然后做串并转换,并将数据打到25M的以太网工作时钟上,此时时钟域的转换也要用到慢写快读的FIFO。最后添加8字节的以太网帧头输出到以太网芯片即可。