Eos中的高速交织和解交织方法与设备的制作方法

文档序号:7944184阅读:212来源:国知局

专利名称::Eos中的高速交织和解交织方法与设备的制作方法
技术领域
:本发明通常涉及同步数字体系上的以太网(EOS,EthernetoverSynchronousDigitalHierarchy),更具体地涉及EOS中的交织和解交织。
背景技术
:E0S是SDH上的以太网的缩写,并且意指通过SDH传输以太网的数据。其中,传输的一侧是以太网端口,而另一侧是光网络。10GSDH(VC-4-64c)具有64个虚容器VC4。VC4可以仅由1个VC4组成,或者由诸如3个虚容器VC3或63个虚容器VC12等的其他更小的单元组成。在以下说明中,仅用VC4来说明本发明。然而,本发明可应用于所有情形。根据VC4在SDH中的位置来对VC4进行编号,即VC4#0、VC4#1、.......VC4#62和VC4#63。在本说明书中,所有编号都从零开始。SDH帧由9行组成,对于每行,每个VC4具有260个字节的净荷(payload)。所有成员以单字节交织的方式组成了SDH帧,也就是说第0个字节属于VC4#0,第1个字节属于VC4#1,第63个字节属于VC4#63,第64个字节属于VC4#0,等等。VCG是虚级联组(virtualconcatenationgroup)的缩写,在物理上,虚级联组可被视为对应于以太网端口。通常在设计中有多个VCG。在以下说明中,仅以64个VCG为例来说明本发明。然而,本发明可推广到所有情形。VC4类型的VCG至多有64个成员(即64个VC4)。对于每个VCG,其成员可通过其SDH编号来标识。在VCG内部,这些成员也是以单字节交织的方式排列。例如,VCG2是VC4类型的,其依次具有两个成员VC4#2和VC4#4。那么在VCG2数据块中,第0个字节属于VC4#2,第1个字节属于VC4#4,第2个字节属于VC4#2,......等等。所有VCG的所有成员的总带宽不超过10G。表1是上述说明的总结。<table>tableseeoriginaldocumentpage4</column></row><table>表1:VCG类型、成员和成员的编号本发明的10GE0S设计中的时钟为155.52MHz,并且内部数据总线宽度为8个字节。每个时钟应处理8字节数据,以便实现lOGbps的吞吐量。从以太网到SDH的方向被称为上行,其中来自64个VCG的所有成员的数据将被字节交织成SDH帧。然后通过光网络发送出这些数据。从SDH到以太网的方向被称为下行,其中来自光网络的数据被解交织来恢复每个VCG。然后,通过相对应的以太网端口来发送出被恢复的VCG数据。对于下行,VCG通过两阶段的解交织来恢复。参考图1,虚线箭头代表下行①对SDH数据运行第一阶段解交织,以将每个VCG的每个成员相互分开并且将其存储到外部存储器中。②从外部存储器中依次读取VCG的每个成员,运行第二阶段解交织来恢复该VCG。中间数据被存储到内部存储器中。③从内部存储器读取解交织后的数据,执行必需的处理,然后向相对应的以太网端口发送出这些数据。第一阶段解交织用于成员对准。假设VCG有5个成员依次为VC4#3、VC4#7、VC4#11、VC4#33和VC4#50。简言之,这些成员可以在不同的时间到达EOS芯片。在这些成员都到来之前,随后的处理不可进行,因此早到的成员必须暂时被保存,以等待后到的成员。这被称为对准。对于容纳至少64ms的到达时间差值的要求,需要256M比特的存储器。因为片上内部存储器容量较小,所以这里使用外部存储器。第一阶段解交织已被良好地解决。在第二阶段解交织中,由其所有成员恢复VCG。假设VCG具有5个成员依次为VC4#3、VC4#7、VC4#1UVC4#33和VC4#50。下列表2示出其在外部存储器的排列,并且表3示出被恢复的VCG数据块。第二阶段解交织的任务是将来自表2的这些数据重新排列成表3,以得到被恢复的VCG数据块。对于每个表格单元,B代表字节,而随后的数字代表字节编号。跟随VC4的数字代表VC4编号。例如,<table>tableseeoriginaldocumentpage5</column></row><table>代表第3个VC4的字节0。表2外部存储器中的VCG成员排列以及每个时钟从外部存储器读取8个字节数据<table>tableseeoriginaldocumentpage6</column></row><table><table>tableseeoriginaldocumentpage7</column></row><table><table>tableseeoriginaldocumentpage7</column></row><table><table>tableseeoriginaldocumentpage8</column></row><table>表3是使用内部存储器来实现的。是使用外部存储器还是使用内部存储器取决于要存储的数据大小。解交织和交织需要存储少量的数据,因此内部存储器就足够了。每个时钟从外部存储器读出8个字节数据。并且其重新排列需要在一个时钟内完成,以实现IOGbps的吞吐量。然而,存储器的读写操作是有固定规则的。例如以数据宽度为4字节的双口RAM为例,该双口RAM有两个端口,一个端口用于写操作,一个端口用于读操作。因此可以同时进行读操作和写操作。然而,对于每个端口,每个时钟有至多一个写操作或读操作,并且写和读的数据大小不可超过存储器数据宽度,该存储器数据宽度在这里为4个字节。并且此夕卜,对于每一次读操作和写操作,这些被读或被写的数据必须位于地址4K到4K+3之间,其中K是自然数。以时钟0处的VC#3的8个字节为例。在外部存储器中,这些字节位于从8K到8K+7的连续地址处。假设k=0,那么地址是0、1、2、3、4、5、6和7。因此可以在一个时钟中读出这些字节。然而,在被恢复的VCG数据中,其地址并不相邻。由表3可知,这些地址是0、5、10、15、20、25、30和35。通常,这些地址是M、M+N、M+2N、M+3N、M+4N、M+5N、M+6N以及M+7N。这些地址取决于两个因素分别表示为N和M的VCG成员数和成员序列号。在此,N是5,而M是0。如果使用单个存储器,则为了能在一个时钟周期写入这8个字节,其数据线必须有36字节的宽度。实际上,不存在具有如此大的数据宽度的存储器。此外,N是可变的,其最大值是64。因此,需要考虑的是如何仅在一个时钟周期将8个字节分布到不连续的位置,并且同时使得存储器资源消耗和设计复杂性都达到最小。对于上行,来自VCG的数据被字节交织成SDH帧并且向SDH网络发送出。参考图1,粗实线箭头代表上行①由于数据量大,VCG的以太网数据首先被存储到外部存储器中。②依次从外部存储器取每个VCG的数据,运行交织,并将中间数据存储到内部存储器中。③在交织了所有VCG之后,从内部存储器读取交织后的数据,执行必需的处理,然后向SDH发送出这些数据。假设VCG具有六个成员,依次为VC4#3、VC4#7、VC4#11、VC4#33、VC4#50和VC4#57。那么这六个成员在VCG数据块中的排列如下列表4所示。SDH帧由9行组成。对于每行,每个VC4具有260个字节的净荷。表5旨在说明SDH帧,并且仅示出净荷字节0作为例子。上行交织应将VCG的数据根据其位置而置于SDH帧中。在交织了所有VCG之后,生成整个SDH帧。表4具有6个成员的VCG的数据排列,每个时钟从外部存储器中读取8个字节的数据<table>tableseeoriginaldocumentpage9</column></row><table>表5:示出SDH帧<table>tableseeoriginaldocumentpage9</column></row><table><table>tableseeoriginaldocumentpage10</column></row><table>表5是使用内部存储器来实现的。每个时钟从外部存储器读出8个字节的数据。这8个字节的交织需要在一个时钟中完成,以实现IOGbps的吞吐量。以时钟0处的8个字节为例,这8个字节是VC4#3、VC4#7、VC4#11、VC4#33、VC4#50、VC4#57的字节0和VC4#3、VC4#7的字节1。与下行类似的是,在外部存储器中,这些字节位于从8K到8K+7的连续地址处。假设k=0,那么这些地址是0、1、2、3、4、5、6和7,因此可以在一个时钟读出这些数据。然而,在SDH帧中,其地址并不相邻。根据表5可知,这些地址是3、7、11、33、50、57、67和71。通常,地址是M+64*B,其中M表示成员顺序,而B表示字节顺序。例如,对于VC4#7的字节1,M是7,而B是1,因此其地址为71。因此,对于上行,面临与下行相同的问题,也即如何在一个时钟周期将8个字节分布到不连续的位置,并且同时使得存储器资源消耗和设计复杂性都达到最小。为了解决上述问题,可使用数据宽度为64*8个字节的存储器。但是这种方案的效率非常低。因为没有单个存储器具有如此大的数据带宽,所以需要使用多个存储器来构造这样的存储器。此外,还可将现场可编程门阵列FPGA的内部逻辑的速度增加到1.25G,以将内部数据总线宽度降低为一个字节。但是这种方案利用现有技术是不可行的。
发明内容本发明的核心是如何将8个字节分布到8个存储块中。本发明从矩阵(列地址和行地址)的角度来设计交织和解交织并且解决了地址冲突。在本发明的一个实施例中,提供一种在通过同步数字体系传输以太网数据中使用的高速交织方法。该高速交织方法包括依次从外部存储器读取等待被交织的来自以太网的虚级联组数据;对所读取的每个虚级联组数据执行成员汇聚操作,并且将经成员汇聚的虚级联组数据存储到成员汇聚存储器中;对来自成员汇聚存储器的虚级联组数据执行交织,并且将经交织的虚级联组数据存储到交织存储器中;在所有虚级联组数据被交织之后,形成同步数字体系帧,以供发送给同步数字体系。在本发明的另一实施例中,提供一种在通过同步数字体系传输以太网的数据中使用的高速解交织方法。该高速解交织方法包括对同步数字体系帧执行第一阶段解交织,以将每个虚级联组的每个成员相互分开并且将分开的成员存储到外部存储器中;依次从外部存储器中读取虚级联组的每个成员,执行第二阶段解交织来恢复虚级联组,并且将被恢复的虚级联组数据存储到解交织存储器中,以供发送给以太网端口。在本发明中,每个字节的地址被划分成列地址和行地址。低3位是列地址,其它高位是行地址。列地址确定该字节被写到哪个存储器列中,而行地址确定该字节被写到所选的存储器列中的哪个位置中。当虚级联组成员数为奇数时,字节的列地址不重叠。当虚级联组成员数是偶数时,字节的列地址发生重叠。根据虚级联组数据的成员来汇聚虚级联组数据,并且在字节列地址重叠的情况下,通过修订字节的列地址或字节索引来使得属于同一成员的8个字节被排列在同一行。字节的列地址或字节索引的修订是根据地址重叠次数将列地址右移或者将字节索引左移。第一阶段解交织用于成员对准。在列地址重叠的情况下,第二阶段解交织通过修订字节的列地址或字节索引来使得仅仅一个字节对应于一个存储器列。在本发明的另一实施例中,还提供一种在通过同步数字体系传输以太网的数据中使用的高速交织设备。该高速交织设备包括成员汇聚存储器,用于存储根据成员被汇聚的虚级联组数据;以及交织存储器,该交织存储器连接在成员汇聚存储器的下游并被用于存储对从成员汇聚存储器中读出的虚级联组数据进行过交织的虚级联组数据。成员汇聚存储器和交织存储器都由8个存储器列组成,对于每个存储器列,有一个写端口和一个读端口。在本发明的又一实施例中,提供一种在通过同步数字体系传输以太网的数据中使用的高速解交织设备。该高速解交织设备包括解交织存储器,用于存储被恢复的虚级联组数据。该解交织存储器由8个存储器列组成,对于每个存储器列,有一个写端口和一个读端口。本发明的解决方案采用8个分开的存储器列和列地址冲突的解决方案一起将存储器消耗减到最小。在该解决方案中,写地址和读地址的生成非常规律,使得该设计更容易被实现。通过参考以下结合附图的详细描述可以理解本发明,其中相同的附图标记标识相同的要素,并且其中图1示出说明现有技术的问题的数据流;图2示出解交织存储矩阵;图3示出成员汇聚和交织存储矩阵;图4示出C012_Byte_IndeX在解交织存储器列的写侧的生成;图5示出Col2_Byte在解交织存储器列的写侧的生成;图6示出Byte2_R0W_Addr在解交织存储器列的写侧的生成;图7示出Co12_Row_Addr在解交织存储器列的写侧的生成;图8示出Byte2_Col_Addr在解交织存储器列的读侧的生成;图9示出Byte2在解交织存储器列的读侧的生成;以及图10示出根据本发明的实施方案的硬件框图和数据流。具体实施例方式如果使用单个存储器,则其数据宽度应非常大,这并不实用。用Mem_Num表示存储块数目,那么所讨论的是将8个字节分布到Mem_Num个存储块中。如果Mem_Num<8,则这意味着有至少两个字节要被分布到一个存储块。以下行解交织为例,8个字节的地址是M、M+N、M+2N、M+3N、M+4N、M+5N、M+6N和M+7N,其中N表示VCG成员数,而M表示成员序列号。这8个字节之间的最小距离是N。当N为64时,这意味着数据端口宽度应为64个字节宽。这也不实用。如果Mem_Num>=8,则一个字节分布到一个存储块,地址问题可以解决。最好是Mem_Num=8,因为这意味着需要较少的存储器。下行图2示出位于图1所示的下行路径中的②与③之间的解交织文本框。解交织存储器由8列分开的存储器组成。对于每列,有一个写端口和一个读端口。端口宽度是一个字节。行分别由8个存储器列中的8个位置组成。对于要被解交织的8个字节中的每个字节,其在被恢复的VCG数据块中的地址被划分成列地址和行地址。低3位是列地址,其它高位是行地址。列地址确定这个字节被写到哪个存储器列中,而行地址确定这个字节被写到所选的存储器列中的哪个位置中。用数学表达式来表达,这是模8运算。整数部分是行地址,剩余部分是列地址。这些列地址是皿%8、(M+N)%8、(M+2N)%8、(M+3N)%8、(M+4N)%8、(M+5N)%8、(M+6N)%8禾口(M+7N)%8。这样,8个字节被分布到8个存储器列中。由于模8运算的特性,会出现以下两种情况N为偶数以及N为奇数(M是公共部分,因此只有N决定该运算的结果。为了更好地说明这一点,上述列地址可简化为0%8,N%8,2N%8,3N%8,4N%8,5N%8,6N%8和7N%8)。当N是奇数时,所生成的列地址并不相互重叠,也就是说只有一个字节对应于一个存储器列。因此,8个字节可以一个时钟就被直接写到8个存储器列中。以N=5为例,参照表2和表3,假设列从左到右被编号为0到7。那么对于时钟0,VC#3的8个字节分别被分布到列0、5、2、7、4、1、6和3。当N是偶数时,某些所生成的列地址发生重叠,也就是说不止一个字节对应于一个存储器列。因此,这些字节不能在一个时钟被写入。对于这种情况,列地址将被修订来使得仅仅一个字节对应于一个存储器列,因为其位置已被修改,所以当数据被读出时,必须执行字节重排序来使得8个字节数据以正确的次序输出。列地址修订和字节重排序将在下文详细说明。这样对于任何情况,一个时钟就可以完成8字节读或写,从而保证了所要求的吞吐量。在读期间,列地址确定该字节将从哪个存储器列被读取,而行地址确定该字节将从这个存储器列中的哪个位置被读取。列地址修订和字节重排序当N为奇数时,8个列地址并不重叠。当N为偶数时,这些地址重叠。然而,该重叠是有规律的。总共有四种情况,如下表6所示。出于简化的目的,二进制N的低3位被表示为N[2:0],其实际上是N%8。表6当N是偶数时,8个列地址重叠<table>tableseeoriginaldocumentpage13</column></row><table>在表6中,a、b、c和d表示列地址。当N[2:0]为“000”时,列地址重叠7次,也就是说,字节0到字节7的列地址是相同的。当N[2:0]为“010”和“110”时,列地址重叠1次,也就是说,字节4到字节7的列地址分别与字节0到字节3的列地址相同。当N[2:0]为“100”时,列地址重叠3次,也就是说字节6和字节7的列地址、字节4和字节5的列地址、字节2和字节3的列地址以及字节0和字节1的列地址分别相同。在表6中,用斜体字表示修订。对于第1次重叠,修订列地址等于原始列地址加上1,对于第二次重叠,修订列地址等于原始列地址加上2,重复这种模式。例如,当N[2:0]为“100”时,列地址重叠3次。字节2和字节3是第1次重叠,列地址被修订为原始列地址加上1,也就是a+Ι和b+Ι。字节4和字节5是第2次重叠,列地址被修订为原始列地址加上2,也就是a+2和b+2。字节6和字节7是第3次重叠,列地址被修订为原始列地址加上3,也就是a+3和b+3。仅有8个存储器列,因此上述相加操作的结果也需要模8运算。为了书写简洁,这个模8运算在表6中被隐藏。针对所有字节执行这种修订。一行由8个字节组成,由于行地址保持不变,因此这意味着列地址重新分配仅发生在一行的8个字节之间,并且将不会有多个字节被写到一个位置。原始列地址加1意味着将该列地址从真正的位置向右移位一列。原始列地址加2意味着将该列地址从真正的位置向右移位两列,以此类推。在修订之后,对于被恢复的VCG数据块当N[2:0]为“000”时,从第0行到第N/8-1行的所有字节保持真正的位置。从第N/8行到第2*Ν/8-1行,所有字节向右移位一列,...。从第7*N/8行到第N-I行,所有字节向右移位七列。总共有7次移位,其对应于列地址中的7次修订。当N[2:0]为“010”和“110”时,从第0行到第N/2-1行的所有字节保持真正的位置。从第N/2行到第N-I行,所有字节向右移位一列。总共有1次移位,其对应于列地址中的1次修订。当N[2:0]为“100”时,从第0行到第N/4-1行的所有字节保持真正的位置。从第N/4行到第2*Ν/4-1行,所有字节向右移位一列。从第2*N/4行到第3*N/4_1行,所有字节向右移位两列。从第3*N/4行到第N-I行,所有字节向右移位三列。总共有3次移位,其对应于列地址中的3次修订。由上述说明可知,为了得到正确的次序只需向左移位。这是字节重排序。列地址修订和字节重排序的实例以N取6为例。VCG具有6个成员。简单起见,假设这6个成员依次为A、B、C、D、E和F,如表7所示。成员之后的数字表示字节编号。例如AO代表成员A的字节0。表8是具有真正位置的被恢复的VCG数据块。然而,在不进行列地址修订的情况下,对于每个成员,其字节0、字节1、字节2以及字节3分别位于与字节4、字节5、字节6以及字节7相同的列。例如,AO位于第0行第0列,A4位于第3行第0列。其列地址重叠,因此不能一个时钟就将整个8个字节写入。表9表示具有修订过的位置的被恢复的VCG数据块。在解决了地址冲突之后,一个时钟就可写入整个8个字节。由该表可知从第0行到第2行,所有字节在其真正的位置;从第3行到第5行,所有字节从其真正的位置向右移位一列,参见上节所述。当读出这些字节时,只需将这些字节向左移位一列,就可以得到正确的次序。表7=VCG具有6个成员,等待解交织的成员数据<table>tableseeoriginaldocumentpage14</column></row><table>表8=VCG具有6个成员,在不进行列地址修订的情况下,两个字节将对应于一列,因此不能一个时钟周期就将8个字节写入<image>imageseeoriginaldocumentpage14</image><table>tableseeoriginaldocumentpage15</column></row><table>表9=VCG具有6个成员,通过列地址修订,解决重叠问题,现在可一个时钟周期就将8个字节写入<table>tableseeoriginaldocumentpage16</column></row><table>上行在下行,被恢复的VCG数据块中的字节地址被划分为行地址和列地址,并且以这种方式来实现解交织。现在要解决的问题在于这种方法可不可以被用于上行,也就是将SDH帧中的字节地址也划分为行地址和列地址,从而实现交织。这不能直接完成。IOGSDH由64个VC4组成,同时根据不同的带宽要求,VCG可以由上限为64的任何数目的VC4组成,并且这些VC4可以为任何顺序。例如,假设VCG具有五个成员,即VC4#3、VC4#7、VC4#11、VC4#33和VC4#50。这些成员可以为VC4#3、VC4#7、VC4#1UVC4#33和VC4#50的顺序,或者为VC4#7、VC4#3、VC4#11、VC4#33和VC4#50的顺序,或者为VC4#11、VC4#7、VC4#33、VC4#3和VC4#50的顺序,等等。存在太多种情况,以至于不能像下行那样有规律。这是不能直接完成的原因。上行交织由两步组成成员汇聚和交织。来自VCG的数据首先进行成员汇聚操作,被写到成员汇聚存储器中。然后,成员汇聚存储器中的汇聚后的数据被读出,进行交织操作,被写到交织存储器中。成员汇聚的结果是属于同一个成员的8个字节排列在同一行。这是第二阶段解交织的逆过程。在成员汇聚之后,令人^C异的是交织成为成员数N等于64的解交织。因此可以使用下行解交织中的方法。图3示出位于在图1中的上行路径中的②与③之间的交织文本块。与下行相同,成员汇聚存储器和交织存储器都由8个存储器列组成。对于每列,有一个写端口和一个读端口。端口宽度是一个字节。在写期间,列地址确定这个字节被写到哪个存储器列中,而行地址确定这个字节被写到这个存储器列中的哪个位置中。在读期间,列地址确定这个字节将从哪个存储器列被读取,而行地址确定这个字节将从这个存储器列中的哪个位置被读取。VCG成员汇聚假设VCG成员数为N。对于第一8个字节的字节0到字节7(参见表4中时钟0的情况),这些字节的行和列地址对被表示为(R0,CO)、(Rl,Cl)、(R2,C2)、(R3,C3)、(R4,C4)、(R5,C5)、(R6,C6)、(R7,C7),其中R表示行,而C表示列。行地址和列地址如下来产生RO=O;CO=O;Rl=R0+1;Cl=C0+1=1;R2=R0+2=R1+1;C2=C0+2=C1+1=2;R3=R0+3=R2+1;C3=C0+3=C2+1=3;R4=R0+4=R3+1;C4=C0+4=C3+1=4;R5=R0+5=R4+1;C5=C0+5=C4+1=5;R6=R0+6=R5+1;C6=C0+6=C5+1=6;R7=R0+7=R6+1;C7=C0+7=C6+1=7;对于随后的8个字节(参见表4中的时钟2、时钟3的情况),这些地址对分别通过当前的8个字节的地址对加上8得到。行地址将是模N,而列地址将是模8。模运算被隐藏在上述加法之中。这导致8个字节数据以类似于如表12中的“Z”形的方式被写到8个汇聚存储器列中。以第二8个字节为例,这8个字节的地址对分别是第一8个字节的地址对加上8((R0+8)%N,(C0+8)%8),((R1+8)%N,(C1+8)%8),((R2+8)%N,(C2+8)%8),((R3+8)%N,(C3+8)%8),((R4+8)%N,(C4+8)%8),((R5+8)%N,(C5+8)%8),((R6+8)%N,(C6+8)%8)以及((R7+8)%N,(C7+8)%8)。因为列地址是模8,所以该列地址保持不变。地址对将被减为((RO+8)%N,CO),((Rl+8)%N,Cl),((R2+8)%N,C2),((R3+8)%N,C3),((R4+8)%N,C4),((R5+8)%N,C5),((R6+8)%N,C6)以及((R7+8)%N,C7)。从另一个角度来看,地址对可被认为仅是(R0,C0)与字节编号的相加。例如,对于VCG数据块中的第6字节,地址对是(R0+6,C0+6),而第17字节的地址对是(RO+17,C0+17),其中出于简化而将模运算隐藏。列地址是0、1、2、3、4、5、6、7并且保持不变。因此,可一个时钟就将VCG数据的8个字节写入。对于行地址,参见表4,其中N是6。每隔N的字节属于相同的成员。行地址是模N,因此属于同一成员的8个字节在成员汇聚之后将被排列在一行。此外,当字节返回其行时,已执行了N次加1。因此第M个成员的8个列地址分别为M%8,(M+N)%8,(M+2*N)%8,(M+3*N)%8,(M+4*N)%8,(M+5*N)%8,(M+6*N)%8禾口(M+7*N)%8。这意味着成员的8个字节并不是以字节0到字节7的顺序在该行中排列。因此需要执行字节重排序来在读期间得到正确的次序。由于模8,如在下行中那样,当N是奇数时,这8个列地址并没有重叠;当N是偶数时,这8个列地址重叠。这意味着随后的数据将覆盖前一个数据。此处需要注意的是是成员的8个字节的列地址重叠导致数据覆盖;而不是VCG数据块的8个字节的列地址重叠导致数据覆盖,如前所述,VCG数据块的8个字节的列地址是0、1、2、3、4、5、6、7并且保持不变。采用列地址修订来避免数据覆盖。列地址修订和字节重排序在下面详细描述。列地址修订和字节重排序成员的8个字节的列地址重叠并且修订情况如表12所示,这与下行相同。表10当N是偶数时,成员的8个字节的列地址重叠,从而导致数据覆盖<table>tableseeoriginaldocumentpage18</column></row><table>¥06数据块的8字节的列地址以0、1、2、3、4、5、6和7开始。当N为奇数时,这些列地址将保持不变。当N为偶数时,成员的8个字节的列地址需要按上表10被修订,这是通过按如下方式修订VCG数据块的8字节的列地址来实现的当N[2:0]为“000”时,来自VCG数据块的在时钟0与时钟Ν/8-1之间的所有8个字节的列地址保持0、1、2、3、4、5、6和7;在时钟Ν/8与时钟2*Ν/8_1之间的被修订为原始列地址加1,即改变为1、2、3、4、5、6、7和0..;在时钟7*Ν/8与时钟N-I之间的被修订为原始列地址加7,即改变为7、0、1、2、3、4、5和6。总共有7次列地址修订,其与表10中的成员7次列地址修订相对应。当Ν[2:0]为“010”和“110”时,来自VCG数据块的在时钟0与时钟Ν/2-1之间的所有8个字节的列地址保持0、1、2、3、4、5、6和7;在时钟Ν/4与时钟N-I之间的被修订为原始列地址加1,即改变为1、2、3、4、5、6、7和0。总共有1次列地址修订,其与表10中的成员的1次列地址修订相对应。当Ν[2:0]为“100”时,来自VCG数据块的在时钟0与时钟Ν/4-1之间的所有8个字节的列地址保持0、1、2、3、4、5、6和7;在时钟Ν/4与时钟2*Ν/4_1之间的被修订为原始列地址加1,即改变为1、2、3、4、5、6、7和O;在时钟2*N/4与时钟3*N/4_1之间的被修订为原始列地址加2,即改变为2、3、4、5、6、7、0和1;在时钟3*N/4与时钟N-I之间的被修订为原始列地址加3,即改变为3、4、5、6、7、0、1和2。总共有3次列地址修订,其与表10中的成员3次列地址修订相对应。在成员汇聚期间,当N为奇数时,第M个成员的字节0到字节7被分别分布到第11%8列、第(M+N)%8列、第(M+2*N)%8列、第(M+3*N)%8列、第(M+4*N)%8列、第(M+5*N)%8列、第(M+6*N)%8列和第(M+7*N)%8列。当N是偶数时,该分布如表10中所示的那样被修订。因此,在读期间,只需也这样生成列地址,就可以得到按正确次序输出的8个字节。这就是字节重排序的方法。列地址修订和字节重排序的实例以N取6为例。VCG具有6个成员。出于简化,假设这6个成员依次为A、B、C、D、E和F,如表11中所示。如表12所示,VCG数据以“Z”形被写到成员汇聚存储器中,列地址并没有被修订。有以下列冲突字节0至字节3分别被字节4至字节7覆盖。例如,AO至A3分别被A4至A7覆盖。如表13所示,列地址被修订,这次没有数据覆盖出现。在汇聚之后,属于相同成员的8个字节在同一行出现。然而,这些字节并不是以字节0至字节7的次序排列。第M个成员的字节0至字节7分别被分布到第8列、第(M+N)%8列、第(M+2*N)%8列、第(M+3*N)%8列、第(M+1)%8列、第(M+N+1)%8列、第(M+2*N+1)%8列和第(M+3*N+1)%8列。表11:VCG具有6个成员,等待成员汇聚的VCG数据<table>tableseeoriginaldocumentpage20</column></row><table>表12没有修订列地址,每个时钟将8个字节写到8个存储器列中,有数据覆盖<table>tableseeoriginaldocumentpage21</column></row><table><table>tableseeoriginaldocumentpage22</column></row><table>表14当读取时,8个字节被重排序,使得8个字节以字节0至字节7的次序来排列<table>tableseeoriginaldocumentpage22</column></row><table>如表14所示,在读期间,列地址被生成为M%8、(M+N)%8、(M+2*N)%8、(M+3*N)%8、(M+l)%8、(M+N+l)%8、(M+2*N+1)%8禾口(M+3*N+1)%8,从而以字节0到字节7的次序取出数据。交织在成员汇聚之后,交织可被视为具有64个成员的第二阶段解交织的特定情况。它们的差别是在解交织中,来自64个成员的数据被集中一次处理(因为这64个成员属于同一个VCG,并且解交织每次处理一个VCG的数据);而在交织中,64个成员(VC4)被分布到多个VCG中,并且每次处理来自一个VCG的数据(因此是每次处理数个VC4,而不是处理64个VC4)。综上所述,从矩阵的角度来设计交织和解交织,生成行地址和列地址。行列地址对与地址冲突的解决方案合在一起解决了如何将8个字节在一个时钟周期分布到它们的不连续的位置中,从而保证IOGbps的吞吐量。因为根据本发明的包括模运算、地址修订和字节重排序的交织和解交织方法非常规律,所以较容易实施该交织和解交织方法。对于具有64个成员的VCG,解交织存储器应足够大,以工作在乒乓模式下。成员数最大值为64。因此对于每个存储器列,应有2*64=128个字节,也就是有至少128行。假设VCG成员数为N,则解交织每次处理N*8个字节数据,用于恢复。参阅表7、8和9,其中N是6,在处理之后恢复6*8个字节。假设行地址从0开始,那么这些数据将占用第0行到第N-I行。随后,如果要进行解交织,则解交织将处理其它N*8个字节,并且使用第N行到第2N-1行作为存储空间。同时,被恢复的N*8个字节将被读出,用于进一步处理。这个过程被重复,直至整个VCG数据被恢复,然后进行到下一VCG。当行达到128时,这个过程移至第O行。如果N是64,则仅有两个空间块用于切换,也就是工作在乒乓模式下。尽管解交织每次处理N*8个字节数据用于恢复,但是并不意味着在没有N*8个字节的情况下,该解交织不能工作。例如,假设每个成员仅有6个字节,并且因此总共有N*6个字节,用解交织8个字节中的低6个字节来输入成员数据,而不考虑两个最高有效字节。则在解交织之后,这N*6个字节被排列在第0行到第N-3行。第N-2行和第N-I行则装满不考虑的数据。从另一个角度来看,该解交织可以在一个时钟分发8个字节,因此用一个时钟来分发6个字节更是没有问题的,只不过没有将其容量用到最大值。将数据写到解交织存储器中第一个N*8个字节数据块中的第M个成员8个字节的地址是Μ、M+N、M+2N、M+3N、M+4N、M+5N、M+6N禾ΠΜ+7Ν。参阅表2和表3在时钟0,这些地址是0、Ν、2Ν、3Ν、4Ν、5Ν、6Ν和7Ν;在时钟1,这些地址是1、Ν+1、2Ν+1、3Ν+1、4Ν+1、5Ν+1、6Ν+1和7Ν+1,一般而言,每过一个时钟它们都加1。这意味着,地址以初始值开始,以后可以通过递归来生成。这些地址的低3位是列地址,而其它高位是行地址。从要被解交织的8个字节看来,每个字节将选择8个存储器列之一来写。当N是奇数时,列地址的初始值为0、Ν%8,2Ν%8,3Ν%8,4Ν%8,5Ν%8,6Ν%8,7Ν%8。当N是偶数时,根据表6,将基于0、Ν%8,2Ν%8,3Ν%8,4Ν%8,5Ν%8,6Ν%8、7Ν%8来修订列地址的初始值。存在以下四种情况当Ν[2:0]是“000”时,列地址的初始值为0、1、2、3、4、5、6和7;当Ν[2:0]是“010”时,列地址的初始值为0、2、4、6、1、3、5和7;当Ν[2:0]是“100”时,列地址的初始值为0、4、1、5、2、6、3和7;以及当Ν[2:0]是“110”时,列地址的初始值为0、6、4、2、1、7、5和3。每过一个时钟,列地址将加1。从8个存储器列来看,每个存储器列将选择8个字节之一作为其输入数据。如果从存储器列来看,则更容易实施。这里,字节索引被定义来选择字节,该字节索引是列地址的配对物。对于每个存储器列都有字节索引。可以从列地址推导出字节索引。当N是奇数时,令人惊异的是字节索引的初始值与列地址相同,即为0、Ν%8,2Ν%8,3Ν%8,4Ν%8、5Ν%8、6Ν%8和7Ν%8。当N是偶数时,有以下四种情况当Ν[2:0]是“000”时,字节索引的初始值为0、1、2、3、4、5、6和7;当Ν[2:0]是“010”时,字节索引的初始值为0、4、1、5、2、6、3和7;当Ν[2:0]是“100”时,字节索引的初始值为0、2、4、6、1、3、5和7;以及当Ν[2:0]是“110”时,字节索引的初始值为0、4、3、7、2、6、1和5。这些字节索引每过一个时钟将减1。字节索引减1对应于列地址加1(列地址右移,因此字节索引应左移)。因为所有存储器列的实施过程都是类似的,所以下面仅用第2存储器列来说明实施过程。首先产生字节索引。然后该字节索引被用来选择8个字节之一作为其输入字节,并且选择8个行地址之一作为其行地址。Col2_Byte_Index、Col2_Byte和Co12_Row_Addr分别是第2列的字节索引、输入数据(当读取时则为输出数据)以及行地址。Byte2_R0W_Addr和Byte2_Col_Addr分别是字节2的行地址和列地址。图4示出第2列的字节索引生成。N[2:0]选择初始值。初始化控制确定Col2_Byte_Index以初始值开始并且将随后每过一个时钟减1。图5描绘了Col2_Byte生成。该Col2_Byte通过Col2_Byte_Index从要被解交织的8个字节中被选择。图6描绘了Byte2_Row_Addr生成。地址初始值为2*N,随后每个时钟加1。Byte2_Row_Addr由地址的从第4位开始的高有效位组成。图7描绘了Col2_Row_Addr生成。该Co12_Row_Addr通过Col2_Byte_Index从要被解交织的字节的8个行地址中被选择。从解交织存储器读数据行地址从0开始,每行加1。字节0至字节7的列地址初始值为0至7。当N是奇数时,字节0至字节7的列地址保持初始值不变。当N是偶数时,字节0至字节7的列地址有以下四种情况当N[2:0]是“000”时,从第0行到第N/8-1行,字节0至字节7的列地址保持初始值;从第N/8行到第2*Ν/8-1行,字节0至字节7的列地址每个都加1;从第2*N/8行到第3*Ν/8-1行,字节0至字节7的列地址每个都再加1..’从第7*N/8行到第N-I行,字节0至字节7的列地址每个都再加1。当N[2:0]是“010”和“110”时,从第0行到第N/2-1行,字节0至字节7的列地址保持初始值;从第N/2行到第N-I行,字节0至字节7的列地址每个都加1。当N[2:0]是“100”时,从第0行到第N/4-1行,字节0至字节7的列地址保持初始值;从第N/4行到第2*Ν/4-1行,字节0至字节7的列地址每个都加1;从第2*N/4行到第3*Ν/4-1行,字节0至字节7的列地址每个都再加1’从第3*N/4行到第N-I行,字节0至字节7的列地址每个都再加1。当被恢复的数据块被读出后,上述列地址过程将重新启动。图8描绘出字节2的Byte2_Col_Addr生成。初始值为2,初始化控制Byte2_Col_Addr以初始值开始,并且N[2:0]与行数一起确定该Byte2_Col_Addr是否加1。图9描绘出字节2在读取侧的生成。该字节2通过Byte2_Col_Addr从8个解交织存储器列字节中被选择。上行与针对下行所述的情况相同,差别仅如下将数据写入成员汇聚存储器中地址以初始值开始,以后将通过递归来生成。第0存储器列到第7存储器列的字节索引初始值是0、1、2、3、4、5、6和7。当N是奇数时,这些存储器列的字节索引保持初始值不变。当N是偶数时,有以下四种情况当N[2:0]是“000”时,从第0行到第N/8-1行,这些存储器列的字节索引保持初始值;从第N/8行到第2*Ν/8-1行,这些存储器列的字节索引每个都减1;从第2*N/8行到第3*Ν/8-1行,这些存储器列的字节索引每个都再减1..;从第7*N/8行到第N-I行,这些存储器列的字节索引每个都再减1。当N[2:0]是“010”和“110”时,从第0行到第Ν/2-1行,这些存储器列的字节索引保持初始值;从第Ν/2行到第N-I行,这些存储器列的字节索引每个都减1。当Ν[2:0]是“100”时,从第0行到第Ν/4-1行,这些存储器列的字节索引保持初始值;从第Ν/4行到第2*Ν/4-1行,这些存储器列的字节索引每个都减1;从第2*Ν/4行到第3*Ν/4-1行,这些存储器列的字节索引每个都再减1;从第3*N/4行到第N-I行,这些存储器列的字节索引每个都再减1。行地址是模N。由于随后的行地址是前一行地址加8,所以可被简化如下字节0到字节7的行地址初始值的所有情况被列表如下当N是1时,字节0到字节7的行地址初始值是0、0、0、0、0、0、0、0;当N是2时,字节0到字节7的行地址初始值是0、1、0、1、0、1、0、1;当N是3时,字节0到字节7的行地址初始值是0、1、2、0、1、2、0、1;当N是4时,字节0到字节7的行地址初始值是0、1、2、3、0、1、2、3;当N是5时,字节0到字节7的行地址初始值是0、1、2、3、4、0、1、2;当N是6时,字节0到字节7的行地址初始值是0、1、2、3、4、5、0、1;当N是7时,字节0到字节7的行地址初始值是0、1、2、3、4、5、6、0;当N大于7时,字节0到字节7的行地址初始值是0、1、2、3、4、5、6、7;随后的行地址是当N是1时,随后的行地址保持0、0、0、0、0、0、0、0;当N是2时,随后的行地址保持0、1、0、1、0、1、0、1;当N大于2时,随后的行地址分别是(R0+8_2*N)、(R0+8-N)和(R0+8)中的第一非负数,(Rl+8-2*N)、(R1+8-N)和(R1+8)中的第一非负数,···,(R6+8_2*N)、(R6+8-N)和(R6+8)中的第一非负数,(R7+8-2*N)、(R7+8-N)和(R7+8)中的第一非负数,其中R#是当前的行地址,#为从0到7。从成员汇聚存储器中读数据行地址以0开始,每行加1。当N是奇数时,初始列地址为0,N%8,2N%8,3N%8,4N%8,5N%8,6N%8,7N%8。当N是偶数时,有以下四种情况如果N[2:0]是“000”,则初始列地址为0、1、2、3、4、5、6、7;如果N[2:0]是“010”,则初始列地址为0、2、4、6、1、3、5、7;如果N[2:0]是“100”,则初始列地址为0、4、1、5、2、6、3、7;如果N[2:0]是“110”,则初始列地址为0、6、4、2、1、7、5、3。每过一行,每个列地址都将加1。在读出被汇聚的数据块之后,上述过程将重新启动。将数据写到交织存储器中此处不能使用初始值和递归。直接由成员序列号计算地址。第0列至第7列的字节索引分别是(8-M[2:0]+0)%8、(8-Μ[2:0]+1)%8、(8_M[2:0]+2)%8、(8_M[2:0]+3)%8、(8-M[2:0]+4)%8、(8-M[2:0]+5)%8、(8_M[2:0]+6)%8和(8_M[2:0]+7)%8,其中M是64个VC4中的成员序列号。从交织存储器中读数据行地址以0开始,每行加1,直至所有数据被读出。字节0到字节7的初始列地址是0、1、2、3、4、5、6和7。每过8行,列地址每个都加1,直至所有数据被读出。图10示出根据本发明的实施方案的硬件框图和数据流。其中虚线代表下行数据流①对SDH数据运行第一阶段解交织,以将每个VCG的每个成员相互分开并且将其存储到外部存储器中。②从外部存储器中依次读取VCG的每个成员,运行第二阶段解交织来恢复该VCG。数据被存储到解交织存储器中。③从解交织存储器读取解交织后的数据,在必需的处理之后,向相对应的以太网端口发送出这些数据。粗实线代表上行数据流①64个VCG的以太网数据被存储到外部存储器中,从而等待被交织。②从外部存储器中依次取每个VCG的数据,运行成员汇聚操作并将数据存储到成员汇聚存储器中。③运行交织并将数据存储到交织存储器中。④从交织存储器中读取交织后的数据,然后在进一步必需的处理之后,发送到SDH。本发明是在芯片内部实施的算法。不能直接根据产品特征或外部接口特性来判断是否使用本发明方法。然而,可以在某种程度间接判断。带宽是频率与数据宽度的乘积。如果时钟频率近似155MHz,则可能使用相同的方法。如果时钟频率大于155MHz的两倍,则不能使用该方法。EOS芯片设计者将得益于本发明的使用。芯片尺寸可被减小很多并且可在多个强有力的和灵活的特征方面进行设计。诸如SDH支路单元可以以任何顺序被自由映射到VCG成员。而且使用本发明,可以容易扩展到20G或更大容量。以上公开的特定实施例仅仅是说明性的,因为可以以对于受益于这里的教导的本领域普通技术人员来说明显不同但等效的方式修改和实践本发明。此外,无任何限制意图用于这里所示的结构或设计的细节,除了如在以下权利要求书中所描述的限制以外。因此,明显的是可以改变或修改以上公开的特定实施例,并且所有这些变型被认为在本发明的范围和精神之内。相应地,这里寻求的保护如在以下权利要求书中所阐述的那样。权利要求一种在通过同步数字体系传输以太网数据中使用的高速交织方法,其包括以下步骤依次从外部存储器读取等待被交织的来自以太网的虚级联组数据,对所读取的每个虚级联组数据执行成员汇聚操作,并且将经成员汇聚的虚级联组数据存储到成员汇聚存储器中,对来自成员汇聚存储器的虚级联组数据执行交织,并且将经交织的虚级联组数据存储到交织存储器中,在所有虚级联组数据被交织之后,形成同步数字体系帧,以供发送给同步数字体系。2.根据权利要求1所述的高速交织方法,其中,同步数字体系帧中的每个字节的地址被划分成列地址和行地址,低3位是列地址,其它高位是行地址,列地址确定该字节被写到哪个存储器列中,而行地址确定该字节被写到所选的存储器列中的哪个位置中,当虚级联组成员数为奇数时,字节的列地址不重叠,当虚级联组成员数是偶数时,字节的列地址发生重叠。3.根据权利要求2所述的高速交织方法,其中,根据虚级联组数据的成员来汇聚虚级联组数据,并且在字节列地址重叠的情况下,通过修订字节的列地址或字节索引来使得属于同一成员的8个字节被排列在同一行。4.根据权利要求3所述的高速交织方法,其中,字节的列地址或字节索引的修订是根据地址重叠次数将列地址右移或者将字节索引左移。5.一种在通过同步数字体系传输以太网的数据中使用的高速交织设备,其包括成员汇聚存储器,用于存储根据成员被汇聚的虚级联组数据,以及交织存储器,该交织存储器连接在成员汇聚存储器的下游并被用于存储对从成员汇聚存储器中读出的虚级联组数据进行过交织的虚级联组数据,其中,成员汇聚存储器和交织存储器都由8个存储器列组成,对于每个存储器列,有一个写端口和一个读端口。6.一种在通过同步数字体系传输以太网的数据中使用的高速解交织方法,其包括以下步骤对同步数字体系帧执行第一阶段解交织,以将每个虚级联组的每个成员相互分开并且将分开的成员存储到外部存储器中,依次从外部存储器中读取虚级联组的每个成员,执行第二阶段解交织来恢复虚级联组,并且将被恢复的虚级联组数据存储到解交织存储器中,以供发送给以太网端口。7.根据权利要求6所述的高速解交织方法,其中,要被解交织的8个字节中的每个字节的地址被划分成列地址和行地址,低3位是列地址,其它高位是行地址,列地址确定该字节被写到哪个存储器列中,而行地址确定该字节被写到所选的存储器列中的哪个位置中,当虚级联组成员数为奇数时,字节的列地址不重叠,当虚级联组成员数是偶数时,字节的列地址发生重叠。8.根据权利要求6或7所述的高速解交织方法,其中,第一阶段解交织用于成员对准。9.根据权利要求6或7所述的高速解交织方法,其中,在列地址重叠的情况下,第二阶段解交织通过修订字节的列地址或字节索引来使得仅仅一个字节对应于一个存储器列。10.一种在通过同步数字体系传输以太网的数据中使用的高速解交织设备,其包括解交织存储器,用于存储被恢复的虚级联组数据,该解交织存储器由8个存储器列组成,对于每个存储器列,有一个写端口和一个读端口。全文摘要本发明涉及EOS中的高速交织和解交织方法与设备。该高速交织方法包括依次从外部存储器读取等待被交织的来自以太网的VCG数据;对所读取的每个VCG数据执行成员汇聚操作并且将其存储到成员汇聚存储器中;对来自成员汇聚存储器的VCG数据执行交织并且将其存储到交织存储器中;在所有VCG数据被交织之后,形成同步数字体系帧,以供发送给同步数字体系。高速解交织方法包括对同步数字体系帧执行第一阶段解交织,以将每个VCG的每个成员相互分开并且将分开的成员存储到外部存储器中;依次从外部存储器中读取VCG的每个成员,执行第二阶段解交织来恢复VCG,并且将被恢复的VCG数据存储到解交织存储器中,以供发送给以太网端口。文档编号H04J3/16GK101800615SQ200910003840公开日2010年8月11日申请日期2009年2月6日优先权日2009年2月6日发明者Y·Z·冯申请人:诺基亚西门子通信公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1