一种链路自适应的数据传输装置及数据传输方法
技术领域
本发明涉及一种链路自适应的数据传输装置、以及采用所述数据传输装置进行数据传输的数据传输方法。
背景技术
随着串行器和解串行器技术的发展,高速串行总线正逐步取代传统的并行总线,成为目前流行的高速接口技术。在很多高速串行通信系统中,为提高数据通信率,往往需要通过多条高速串行链路进行数据传输。
现有的通过多条高速串行链路进行数据传输的方法是:在发送端,高位宽的高速数据按位等速拆分得到多路低位宽的并行数据,然后通过串行器进行编码和并串转换,最后通过发送端口传输到多条高速串行链路的物理介质通道中;在接收端,接收端口接收到串行数据之后,通过解串行器进行串并转换和解码得到多路低位宽的并行数据,数据按位组合模块将多路低位宽的并行数据分别写入到多个FIFO中,通过同时对各个FIFO进行数据读取来消除各条串行链路的数据延时误差,并将多路低位宽的并行数据组合成高位宽的数据,从而实现数据的恢复。
图1示出了现有的通过n(n为大于1的整数)条高速串行链路进行数据传输方法的流程图,并且公布号为CN101692218A的专利“一种数据高速传输方法”、以及公布号为CN102355345A的专利“通过FIFO消除不同发送高速串行链路间误差的方法及系统”均是采用这种方法来实现的。
上述通过多条高速串行链路进行数据传输的方法具有很大的局限性,主要表现在:
第一,发送端的按位拆分方式和接收端的按位组合方式必须严格一致才能保证接收数据的顺序不会发生错误。发送端的按位拆分方式和接收端的组合方式固定之后,物理传输介质的连接方式也必须是固定的,即发送端口(J1到Jn)与接收端口(K1到Kn)的连接方式是唯一的,因而该方法不能支持任意的连接方式,不能做到链路的自适应。以位宽为m*n(m,n均为大于1的整数)的高速数据通过n条高速串行链路进行数据传输为例,如果采用顺序的按位拆分和按位组合方式,即第一条串行通道传输高速数据的第0位到第m-1位,第二条高速串行通道传输高速数据的第m位到第2*m-1位,依次类推,第n条高速串行通道传输高速数据的第(n-1)*m位到第n*m-1位,则物理传输介质的连接方式只能是:发送端口J1连接接收端口K1,发送端口J2连接接收端口K2,依次类推,发送端口Jn连接接收端口Kn。当高速串行链路数量较多,特别是采用光纤和铜电缆等作为物理传输介质时,很容易出现连续顺序错误,造成接收数据的顺序和发送数据流的顺序不一致,从而导致传输错误。
第二,通过FIFO累计数据的延时性能够消除各条串行链路间的误差,但是对FIFO的读操作必须在所有FIFO均有数据的情况下才能进行,如果多条高速串行链路的数据延时过大,很容易出现一个FIFO中数据量很大而其它FIFO中数据量为0的情况,受FIFO存储深度的限制,为了避免某些FIFO中数据的溢出,各条高速串行链路的数据延时不能过大,这就必须根据FIFO存储深度的大小对多条高速串行链路的物理走线长度施加一定的约束,即多条高速串行链路的物理走线长度要做到一定程度上的等长。
发明内容
针对现有技术中存在的上述技术问题,本发明提出了一种链路自适应的数据传输装置,其采用如下技术方案:
一种链路自适应的数据传输装置,包括发送端装置、物理介质通道和接收端装置,
发送端装置,包括模M计数器、缓存器、组帧器、发送链路开关、发送链路控制器和分别连接到发送链路开关上的n条发送链路,发送链路开关与发送链路控制器相连;模M计数器和缓存器分别连接到组帧器上,组帧器还与发送链路开关相连;每条发送链路上包括一个发送端FIFO、一个串行器和一个发送端口,发送端FIFO、串行器和发送端口为串联连接,发送链路开关与所有的发送端FIFO分别连接,发送链路控制器与所有的发送端FIFO分别连接;
接收端装置,包括接收链路开关、接收链路控制器和n条接收链路,接收链路开关和接收链路控制器相连;每条接收链路上包括一个接收端口、一个解串行器、一个解帧器、一个帧头FIFO和一个数据FIFO,接收端口、解串行器和解帧器为串联连接,帧头FIFO和数据FIFO分别连接到解帧器上,接收链路开关与所有的数据FIFO分别连接,接收链路控制器与所有的帧头FIFO以及所有的数据FIFO分别连接;其中,n为大于1的自然数。
上述链路自适应的数据传输装置中,所述串行器采用8B/10B编码、64B/66B编码、或并行扰码。
上述链路自适应的数据传输装置中,所有解串行器的解码方式与串行器的编码方式保持一致。
上述链路自适应的数据传输装置中,发送端口和接收端口采用电路印制板上的焊点或者光电转换模块。
上述链路自适应的数据传输装置中,物理介质通道采用电路印制板上的铜皮线、光纤或铜电缆作为串行物理介质。
本发明的另一个目的在于提出一种采用上述链路自适应的数据传输装置进行数据传输的数据传输方法,该数据传输方法能够自适应各条高速串行链路物理传输介质的连接方式,且完全不限定各条链路的物理传输介质长度,使得高速串行通信系统的实现更加灵活。
为了实现该发明目的,采用如下技术方案:
一种链路自适应的数据传输方法,包括如下步骤:
1)在发送端,待发送的高速数据一路送入缓存器中进行缓存,另一路进入模M计数器;模M计数器的位宽设置为(2*n+w),即M=2(2*n+w),其中w为大于1的自然数,计数器的初始值设置为全0,当来一个数据时,模M计数器加1,当计数值的低w位由全1变为全0时,取计数值的高2*n位作为输出数据送给组帧器;
2)组帧器收到模M计数器的一个输出数据后,从缓存器中读取2w个数据作为一个数据单元,并把输出数据作为帧头和该数据单元组成一帧数据,然后送入发送链路开关;
3)发送链路控制器检测所有发送端FIFO的半满标志信号,如果检测到第i条发送链路上的发送端FIFO没有达到半满状态,并且前i-1个FIFO都达到了半满状态,则向发送链路开关输出数据控制通道选择,使得当前的数据帧送入第i条发送链路上的发送端FIFO中,其中,i为整数,且1≤i≤n;
4)所有的串行器相互独立地从各自对应的发送端FIFO中读取并行数据,并进行并串转换,然后传输到各自对应的发送端口上;
5)发送端口的串行数据通过串行物理介质通道传输到接收端;
6)在接收端,所有的解串行器相互独立地对各自对应的接收端口的串行数据进行串并转换,并将转换后的数据帧送入对应的解帧器中;
7)解帧器对数据帧进行解帧操作,拆分为帧头和长度为2w的数据单元,帧头送入帧头FIFO中,数据单元送入数据FIFO中;
8)接收链路控制器构建一个位宽为2*n、初始值为整数1的计数,接收链路控制器判断所有帧头FIFO的读端口数据,假若在某个时刻,第j条接收链路上的帧头FIFO的输出数据与计数的当前值相等,则同时进行下列操作:使能该帧头FIFO的读使能信号,对该帧头FIFO进行一次读操作;使能该帧头FIFO对应的数据FIFO的读使能信号,从数据FIFO中连续读取一个数据单元,即2w个数据;接收链路控制器向接收链路开关输出信号控制通道选择,将开关的输入端打到第j条接收链路上的数据FIFO的通路上;计数加1,其中,j为整数,且1≤j≤n;
9)重复执行步骤8)的操作,最终得到高速数据。
与现有技术相比,本发明具有如下优点:
1)串行链路的连接方式具有灵活性,无论采用何种物理传输介质,比如电路印制板上的铜皮线、光纤或铜电缆等,多条高速串行链路发送端和接收端之间不再需要采用固定的连接方式,即发送端口与接收端口的连接是任意的,接收端也无需知道具体的连接方式,而是能够自适应各种连接方式,使得接收数据的顺序和发送数据的顺序保持一致,从而保证数据传输的正确无误;2)链路的物理走线长度不再受约束,该数据传输方法不再要求多条串行链路的物理走线在一定程度上等长,即使多条串行链路的物理走线差异很大,也不会造成数据的溢出或丢失等问题。
附图说明
图1为现有技术中通过多条高速串行链路进行数据传输方法的流程图;
图2为本发明中链路自适应的数据传输装置的发送端流程图;
图3为本发明中链路自适应的数据传输装置的接收端流程图。
具体实施方式
本发明中数据传输方法的基本思路为:在发送端,待发送的高速数据按照固定的长度拆分为一个个的数据单元,同时对数据单元进行循环计数,数据单元的计数值作为帧头,与当前的数据单元组成一个数据帧。每个数据帧选择一条合适的高速串行链路进行传输。在接收端,每条高速串行链路通过各自的解串行器完成数据的串并转换后,通过解帧器对数据帧进行解帧操作,并将数据单元写入到对应链路的数据FIFO中,将帧头写入到对应链路的帧头FIFO中。接收逻辑通过定时判断每条高速串行链路的帧头FIFO的值,按照计数值循环递增的顺序选择合适的数据FIFO,并从中读取相应的一个数据单元,从而实现数据的组合。
下面结合附图以及具体实施方式对本发明作进一步详细说明:
结合图2、图3所示,链路自适应的数据传输装置,包括发送端装置、物理介质通道和接收端装置。
发送端装置,包括模M计数器、缓存器、组帧器、发送链路开关、发送链路控制器和分别连接到发送链路开关上的n条发送链路,发送链路开关与发送链路控制器相连;模M计数器和缓存器分别连接到组帧器上,组帧器还与发送链路开关相连;每条发送链路上包括一个发送端FIFO、一个串行器和一个发送端口,发送端FIFO、串行器和发送端口为串联连接,发送链路开关与所有的发送端FIFO分别连接,发送链路控制器与所有的发送端FIFO分别连接。发送端FIFO的编号从206-1、206-2到206-n,串行器的编号从208-1、208-2到208-n、发送端口的编号为J1、J2到Jn,其中FIFO206-i、串行器208-i、端口Ji对应于第i条发送高速串行链路。其中,n为大于1的自然数,i为整数,且1≤i≤n。
模M计数器负责对高位宽的高速数据201进行以M为模的循环计数,计数器的位宽设置为(2*n+w),即M=2(2*n+w)。其中w为大于1的自然数,计数器的初始值设置为全0。当计数值的低w位由全1变为全0时,取计数值的高2*n位作为输出数据202送给组帧器。
缓存器负责高速数据201的缓存,并且按照固定长度2w将其组成一个个的数据单元203送入组帧器。
组帧器把模M计数器的输出数据202和对应的数据单元203组成一个个的数据帧204,输出数据202作为帧头,对应的数据单元203作为帧的有效数据。
发送链路开关负责将数据帧204分发到n个发送端FIFO中,一个数据帧只能分发到一个FIFO中,并且选择哪个FIFO受发送链路控制器的输出信号205控制。
发送链路控制器根据n个发送端FIFO的半满标志信号产生相应的输出信号205,半满标志信号的编号从207-1、207-2到207-n。
发送端FIFO负责各自对应链路中并行数据的缓存,发送端FIFO的存储深度要大于两个数据单元的长度。
串行器负责把并行数据转化为串行数据。串行器可以选择多种编码方式,比如8B/10B编码、64B/66B编码、并行扰码等。
发送端口负责将串行数据传输到高速串行链路的物理介质通道中,发送端口可以是电路印制板上的焊点或者光电转换模块。
物理介质通道是高速数据的载体,与发送端口相对应,可以采用电路印制板上的铜皮线、光纤或铜电缆作为串行物理介质。
接收端装置,包括接收链路开关、接收链路控制器和n条接收链路,接收链路开关和接收链路控制器相连;每条接收链路上包括一个接收端口、一个解串行器、一个解帧器、一个帧头FIFO和一个数据FIFO,接收端口、解串行器和解帧器为串联连接,帧头FIFO和数据FIFO分别连接到解帧器上,接收链路开关与所有的数据FIFO分别连接,接收链路控制器与所有的帧头FIFO以及所有的数据FIFO分别连接;其中,n为大于1的自然数。接收端口的编号为K1、K2到Kn,解串行器的编号从301-1、301-2到301-n,解帧器的编号从302-1、302-2到302-n,帧头FIFO的编号从303-1、303-2到303-n,数据FIFO的编号从304-1、304-2到304-n,其中接收端口Kj、解串行器301-j、解帧器302-j、帧头FIFO303-j、数据FIFO304-j对应于第j条接收链路。其中,n为大于1的自然数,j为整数,且1≤j≤n。
接收端口负责接收串行物理介质的串行数据,接收端口可以是电路印制板上的焊点或者光电转换模块。
解串行器负责把串行数据转化为并行数据。解串行器的解码方式必须与串行器的编码方式保持一致。
解帧器负责把一帧帧的并行数据拆分为帧头和数据单元,并把帧头送入帧头FIFO中,把数据单元送入数据FIFO中。
帧头FIFO负责暂存数据帧的帧头,即该帧数据的数据单元计数值。帧头FIFO采用FWFT(first-wordfall-through)模式,即当FIFO中存在数据时,数据直接出现在读端口并且送入到接收链路控制器中。
数据FIFO负责暂存数据帧的数据单元,其输出数据送入接收链路开关中。
接收链路控制器根据所有帧头FIFO的输出数据305-1、305-2到305-n,控制所有帧头FIFO的读使能信号306-1、306-2到306-n以及所有数据FIFO的读使能信号307-1、307-2307-n,并且产生输出信号308去控制接收链路开关。
接收链路开关负责将所有数据FIFO中的数据组合成高速数据309。在某一段时间内,高速数据309只能选择一个数据FIFO读端口的一个数据单元,并且选择哪一个数据FIFO受接收链路控制器输出信号309的控制。
本发明利用上述链路自适应的数据传输装置进行数据传输的传输方法如下:
1)在发送端,待发送的高速数据201一路送入缓存器中进行缓存,另一路进入模M计数器;模M计数器的位宽设置为(2*n+w),即M=2(2*n+w),其中w为大于1的自然数,计数器的初始值设置为全0,当来一个数据时,模M计数器加1,当计数值的低w位由全1变为全0时,取计数值的高2*n位作为输出数据202送给组帧器;
2)组帧器收到模M计数器的一个输出数据202后,从缓存器中读取2w个数据作为一个数据单元,并把输出数据202作为帧头和该数据单元203组成一帧数据,然后送入发送链路开关;
3)发送链路控制器检测所有发送端FIFO的半满标志信号207-1、207-2到207-n,如果检测到第i条发送链路上的发送端FIFO没有达到半满状态,并且前i-1个FIFO都达到了半满状态,则向发送链路开关输出数据205控制通道选择,使得当前的数据帧送入第i条发送链路上的发送端FIFO206-i中,其中,i为整数,且1≤i≤n;
4)所有的串行器相互独立地从各自对应的发送端FIFO中读取并行数据,并进行并串转换,然后传输到各自对应的发送端口上;
5)发送端口的串行数据通过串行物理介质通道传输到接收端;
6)在接收端,所有的解串行器相互独立地对各自对应的接收端口的串行数据进行串并转换,并将转换后的数据帧送入对应的解帧器中;
7)解帧器对数据帧进行解帧操作,拆分为帧头和长度为2w的数据单元,帧头送入帧头FIFO中,数据单元送入数据FIFO中;
8)接收链路控制器构建一个位宽为2*n、初始值为整数1的计数,接收链路控制器判断所有帧头FIFO的读端口数据305-1、305-2到305-n,假若在某个时刻,第j条接收链路上的帧头FIFO的输出数据305-j与计数的当前值相等,则同时进行下列操作:使能该帧头FIFO303-j的读使能信号306-j,对该帧头FIFO进行一次读操作;使能该帧头FIFO对应的数据FIFO304-j的读使能信号307-j,从数据FIFO中连续读取一个数据单元,即2w个数据;接收链路控制器向接收链路开关输出信号308控制通道选择,将开关的输入端打到第j条接收链路上的数据FIFO的通路上;计数加1,其中,j为整数,且1≤j≤n;
9)重复执行步骤8)的操作,最终得到高速数据。
以上说明仅仅为本发明的较佳实施例,本发明并不限于列举上述实施例,应当说明的是,任何熟悉本领域的技术人员在本说明书的教导下,所做出的所有等同替代、明显变形形式,均落在本说明书的实质范围之内,理应受到本发明的保护。