改进的数字信号数据及前向差错控制编码技术的制作方法

文档序号:7534809阅读:613来源:国知局
专利名称:改进的数字信号数据及前向差错控制编码技术的制作方法
技术领域
本发明涉及数字通信系统,更准确地说,本发明涉及有助于精确接收传输数字信号的改进的编码技术。
通常对通过诸如同轴电缆或光纤链路的通信信道发送的数字通信信号加以编码,以便即使由于通信信道中的噪声而在传输期间出现可能的信号差错时,也能在终点进行精确的接收。根据应用要求,可采用用于改进代码特征的数据编码或采用防止差错的编码。
数据编码需将信息或数据信号的位流转换或变换成“代码字”,这种代码字具有限制的最大串长度、限制的累加的直流偏移等典型特征,及有助于接收的其它信号特征。具体地讲,数据编码由将N位的数据字(或N位字块)变换为M位代码字(或M位字块)的过程组成,其中M大于N。编码方案所用的“开销”为M-N,它可用一个百分比100×(M-N)/N%来表达。编码方案的效率为N/M。为了把数据的位模式变换为在通信路径出现噪声时可更可靠地接收的位模式,编码方案在发送数据之前,将额外的“开销”位加到数据上。编码后的信号可能、例如具有限制定的串长度、限定的累加直流偏移或两者兼有。
将N位数据字变换为M位代码字的编码方案常称为Nb/Mb编码方案。例如,8b/10b编码方案将8位数据字变换为10位代码字。这种方案具有2位或25%的开销,并具有80%的效率。
有些编码方案可对两种类型的代码字进行编码,即对数据字和命令字编码。这样做是由于这样一种事实而产生的,即可将Nb/Mb编码方案当做2N种可能数据字的集合与2M可能代码字中只使用其中2N不同代码字的子集之间一对一的映象。这剩余的2M-2N代码字不再被使用。然而,在有些编码中,2M-2N个代码字中的一小部分具有和表示数据的2N个代码字同样的合乎要求的传输特征(例如,串长度和累计直流偏移)。这一小部分可用来表示另一类称作命令字的代码字。对编码方案而言,最好是允许对大量的具有和编码数据字同样合乎要求的传输特性的命令字进行编码。
对数据代码字的最大串长度的限制,例如在目的地译码期间执行时钟恢复中是很有用的。最大串长度就是具有相同数值即逻辑0或逻辑1的相邻位的最大个数。限制最大串长度,用以减小具有同样数值的位串长度,这对于在目的地完成精确的时钟恢复是十分重要的,因为时钟恢复电路根据逻辑1和0数据值之间的瞬变来检测基本的数据时钟频率。如果经过很多位间隔而无数据瞬变,那么时钟恢复电路通常就会失去同步。所以,选择具有低的最大串长度的编码方案是合乎需要的。
累计直流偏移也可称为累计的直流不平衡性或数字和偏差,常表示为位序列得到平衡所需改变其值的位的个数。例如,如果有一位必须为逻辑1来使该序列平衡,但该位的值为逻辑0,那么累计直流偏移为一个位。另一种表述是,对每一逻辑0的位加权-1,对每个逻辑1的位加权+1,然后对串行流中所有位的权求和,将所得到的单一的数作为累计直流偏移。这样来表述的话,上例序列中额外的2个逻辑0的位,可求出累计直流偏移为-2。将其累计直流偏移为0的位序列称为“平衡的”,而将其累计直流偏移为1或更多的位的位序列称为“不平衡”的。
发送到目的地的位流由逻辑0和逻辑1数值的序列组成。目的地的接收器电路通常接收两种诸如极性相反电压的两种逻辑值,而且,接收器电路的信号电压具有和位流累计直流偏移成比例的接近直流(即,低频)的电压分量。由于接收器电路只适用于限定的直流电压的摆动而不能过载,因此,为避免接收器过载,最好采用限定编码数据的累计直流偏移的代码。
此外,最好采用一种可实现周期性直流平衡的编码方案,所述周期性直流平衡定义为在每一个K位组的结尾处累计直流偏移恰好为0,其中K为固定的位的个数。(例如,K可以是编码字或字块的长度M的一或二倍)。如编码方案具有周期性直流平衡性,则其位流便已将频谱分量限定在和1/K成比例的预定频率之下,这种编码方案允许接收器电路采用高通滤波器阻止低于该频率的所有频谱分量从而提高接收器的信噪比。
已经提出了许多种数据编码并已不同程度地用于商品化的数字通信系统中。例如,已知的曼彻斯特(Manchester)代码实现容易,其最大串长度为2,并以2位为周期直流平衡。然而,这种代码的100%的编码开销通常认为有些过分。另一种已知的代码,Sperry 4b/5b代码,其最大串长度为4,只不过25%的编码开销,但其累计直流偏移随时间无限制增长。
另有一种已知代码是IBM 8b/10b代码,在发表于“IBM J.Res.Develop.”Vol.27,No.5,1983年9月号上题为“直流平衡的、分区字块的8b-10b传输代码”的论文中描述该代码。IBM 8b/10b代码可分解为3b/4b和5b/6b子编码。该代码的最大串长度为5,用硬件实现相当容易,也具有25%的编码开销,并将位流内的累计直流偏移限制为±3,而对任何10位代码字的结束处将累计直流偏移限制为+/-1。但是,对许多应用而言,IBM 8b/10b代码所允许的命令代码字太少,而且,其最大串长度为5也过大。此外,其受界定并且未能周期性平衡的累计直流偏移在接收器滤波时会带来困难。
如上所述,可有选择地利用编码来提供用于发送信号的差错检测和差错纠正机构。差错纠正编码通常用其起始字母“ECC”来表示。使用ECC对接收到的通信信号中的差错进行检测和纠正的通用途径是前向差错控制,以其首字母组合通称为“FEC”。在前向差错控制中,每一发送的字,字块或帧包含附加信息位(有时称为“ECC”、“冗余”,“保护”或“校验”符号),使用这些符号,接收器能检测出差错,以及,在某些FEC方案中,可找到差错位置,即检测或定位所接收信号位流中存在的差错。如果识别出出借位的位置,便可简单地将识别出的出错位取反应来完成校正,例如,将逻辑1改为逻辑0,或者相反。用这种方式,可获得发送信号的准确的复制而无需重新传输。
使用FEC代码产生冗余符号进行差错保护编码的最佳形式是不仅为线性码而且是系统码。在线性码中,任何两个编码值的任意和会产生另一编码值。在系统码中,每个代码字包括与未编码数据相同的一部分。所以,产生的FEC代码是由未编码数据与由FEC码产生的冗余符号的结合所形成的。
这种FEC码的一个实例是汉明(Hamming)距离(即任何两有效代码字块不同位的最少个数)为4的Hsiao代码。使用该发明距离,这种FEC代码可纠正发送位序列中的单一错误而检测出双位错误。这种代码需8个FEC冗余位来保护数据输入中总数为64至127的位,7个冗余位可保护32到65位,6位可保护16-31位,5位可保护8至15位。
现有FEC编码方案通常只考虑差错检测/纠正的问题而不打算改进如前面讨论的数据的传输特性(例如,串长度和累计直流偏移)。因而,存在对可同时提供差错检测或纠正以及改进的串长度和累计直流偏移特性的改进的编码方案的需要。
按照本发明的一个方面,对输入值进行数字编码以改进信号特性(例如,限定的最大串长度和限定的累计直流偏移)从而形成“数据代码字”,然后,对若干数据代码字(总起来称为字块)进行差错保护编码,最好使用常规的线性和系统的前向差错控制(“FEC”)代码,以产生FEC代码块。最好是,通过产生若干校验位来形成FEC代码块,或者FEC代码位和该块中数据代码字个数相等,然后将一个FEC位及其二进制补码与每个数据代码字并置,使得一个FEC位及其补码插在每个连续代码字之间。
本发明的一个优点是,允许在差错检测/纠正的同时,对串长度和累计直流偏移加以限定。由于每个FEC位和它的被码成对出现,该FEC位不会引入其自身的任何累计直流偏移,使得产生的FEC代码块具有与数据代码字同样受限定的累计直流偏移。最好是,使用一种由本发明另一方面所定义的数据编码方案,该编码方案可在每个代码字的结尾处达到0或1位的累计直流偏移,因此,按照本发明的FEC编码块也具有0或不大于1位的累计直流偏移。
而且,将FEC位以及它的补码置于各连续代码字之间通过防止具有相同值的任何连续位串延展超过一代码字的末尾处而进入下一代码字的开始处,有助于实现位流的串长度的限定。例如,如果预定将一种编码方案用来防止代码字内出现多于3个连续位的串,那么对一个代码字来说仍有可能结束于3个逻辑1的位而下一代码字始于3个逻辑1的位,便产生了6个连续的逻辑1的位的组合串。本发明通过在两代码字之间插入一对互补的位来克服这个问题,产生的串长度仅为4而不是6。
按照本发明的另一方面,如果串包括代码字的第一位或最后一位,则限定串长度为3,以及将一个代码字内的串长度限定为4位,那么本发明可更为有利地和10位或20位的数据编码方案结合使用。当本发明的FEC编码方案与本发明的10位代码或本发明的20位代码相结合,所产生的FEC编码字块代码其最大串长度为4,最大累计直流偏移为1位。
例如,在一个最佳实施例中,可用8个10位数据代码字(由8b/10b数据编码器形成)、8个FEC位以及与该FEC位互补的8位形成96位的FEC代码块。可使用诸如前面提到的Hsiao FEC方案的常规FEC算法,从80个数据位(8个10位数据字)导出8个FEC位。将这些FEC位排列在每对数据代码字之间,而将FEC互补对(即,1位的FEC符号和它的1位补码)置于最后的数据代码字之后。该8个FEC位可保护整个的96位的块。这样,使用该编码方案,涉及差错保护编码的开销为25%,(和8b/10b数据编码开销相同)。96位块编码方案的另一优点在于它适用于多个8位或16位数据代码字并与现有的面向8位的硬件及程序兼容。
在另一最佳实施例中,将每一个16位输入数据值编码为20位数据代码字对,该20位数据代码字对由9位代码字和11位代码字构成。最佳的16b/20b编码方案将串长度限定为4而在每个20位代码字对的结尾处达到直流平衡。(最佳硬件实施包含预编码器和总起来执行16b/20b编码的各个8b/9b和10b/11b子编码器)然后,从4个20位代码字对组成的80位块产生一个8位FEC。将一个FEC位及其二进制补码(作为前缀或后缀)并置到每个9位和11位数据代码字上,而形成96位FEC块。
在执行用于产生前面所述FEC版本中的9-、10-或11位数据代码字时,最好由存贮在存储器中的查找表中选出3/4/3最大串长度代码字或用逻辑装置来产生。对包括代码字的第一位(“开始串长度”)或代码字的最后一位(“结束串长度”)的每个位串或位序列来说,这些代码字的串长度不大于3,而对每个中间序列(即,不包括第一和最末位的串)来说,这些代码字的串长度不大于4。
通过选择这样的3/4/3代码字,并将FEC互补码对并列地置于数据代码字之间,可将内部代码字串长度,当然是内部代码字最大串长度限定为4。限制内部代码字的理由在于,结束串长度3加上后面的单一的FEC位(如果是相同逻辑值,就作为该代码字的结束位),产生一个由4个值相近的位构成的最长串,对长度为3的起始串以及在先的反置的FEC位可作同样处理。如果FEC互补对没有内插在数据代码字之间,那么,内部代码字串长度为3+3=6。这样,通过使用内插FEC对,可得到数字信号位流的较短的最大串长度。
而且,可通过对数据代码字的适当选择和并置使串流的累计直流偏移最小。例如,在8b/10b编码时,将每个输入值编码为具有累计直流偏移为0(即,平衡代码字)或为1(即不平衡代码字)的数据代码字。然后,当将另一输入值编码为下一不平衡代码字时,选择其不平衡性来补偿前一不平衡代码字的不平衡。换言之,选择数据代码字而取得平衡,即,在可能的范围内,选择数据代码字使之和具有相反累计直流偏移的关联代码字相配对。因此,每当含有偶数个不平衡数据代码字便可使该FEC代码块平衡,而每当含有奇数个不平衡数据代码字,便可有1位的可能最小的累计直流偏移。所以,任何代码字结尾处的累计直流偏移不大于1位。
类似地,在上述的16b/20b编码方案中,来自编码器的成对的9位和11位的段具有彼此抵消的相反的累计直流偏移。因此,含有多对这类段的FEC块得到直流平衡。
按照本发明的另一方面,接收器在译码之间使用互补的FEC位对来得到FEC代码块的适当的帧指示。成帧电路检查接收到的信号中的各位并通过检测FEC补码对和数据代码字中的差错并滑动帧边界直至差错最少来识别块边界。然后,对FEC代码块进行译码,首先对整个FEC代码块执行FEC译码来恢复FEC位、它们的补码以及数据代码字,然后纠正错误数据代码字中检测出的差错,最后执行数据译码来恢复基本信息。
很显然,上述用于产生具有限定的累计直流偏移的数据代码字的技术可用于不用错误保护编码的应用场合中。例如,可将2/4/2代码结合本技术使用,以得到数字信号位流的最大串长度为4及限定的累计直流偏移。另一选择是,可将伪互补对置于代码对之间。
本发明包含各种上面提及的新编码技术,以及另一些将在下文提出的实施例中举例说明的技术,而本发明的范围内所附权利要求指出。
为更全面理解本发明的实质和目的,应结合附图,参阅以下说明性实施例的详细描述,附图中

图1是包含按照本发明的第一实施例包含16b/20b数据编码器和FEC编码器的编码电路的框图;
图2为按照本发明第二实施例的单一的、直接的8b/10b数据编码器的框图;
图3是按照本发明另一实施例的直接的8b/10b数据编码器的方框图;
图4是按照本发明第三实施例的对基于多个8进制数代码字进行并行编码的电路框图;
图5为按照本发明的第四实施例、使用8b/9b和10b/11b子编码器的面向16位字的16b/20b编码电路的方框图;
图6是按照本发明的第五实施例、使用8b/9b和10b/11b子编码器的、用于8进制代码字的16b/20b编码电路;
图7是使用图6编码电路的通信系统的方框图;
图8是图7的成帧和数据恢复电路的方框图。
1.数据和FEC编码电路图1示出了用于将2个32位DATA(数据)信号进行数据和FEC编码为96位FEC代码块的电路图。每个DATA信号包含2个16位段DATA0、DATA1,每个段表示例如数据或命令信息,并与2个2位的CMD(命令)信号CMD0、CMD1之一相关联。每个CMD信号具有一个数值,该数值可用于识别该相关段是否包含命令信息即是命令信号,或包含数据信息,即,是数据信号。
将每个段DATA0、DATA1和其相关联的CMD信号一起,加到16b/20b数据编码器14a、16b。该数据编码器14a、14b将段DATA0、DATA1转换为相应的20位的数据代码字,然后存储在相应寄存器16a、16b中。然后,将存储在寄存器16a、16b中的两个20位数据代码字供给1∶2多路信号分离器18,将所述的20位数据代码字与在前或在后由数据编码器14a、14b所产生的2个其它的20位的数据代码字相并置。
然后将4个20位的数据代码字作为一个80位的块加到寄存器20。最好是,该80位的块中各数据代码自身是直流平衡的。如果该80位块包含未能直流平衡的数据代码字,那么,其数据代码字在可能范围内,补偿不平衡性,使得整个的80位字块具有最小的累计直流偏移或达到直流平衡。下面描述其实现技术。
然后将80位的数据代码字加到FEC符号发生器22和寄存器24。该FEC符号发生器22根据该数据代码字产生一8位的FEC符号,即用于前向差错控制的ECC符号。将这些FEC位即加到8位反相器26又直接加到寄存器24。反相器26对FEC符号的位值取反,从而产生反相的或互补的FEC位,并将FEC符号及其补码送到寄存器24。
寄存器24以交错方式并置数据代码字、FEC位和取反的FEC位。具体地说,8个20位数据代码字的每一个后接8个FEC位以及它的互补位中的一个。换言之,互补的FEC对散布在编码数据的FEC代码块内。这不但有效地限制了内部代码字的串长度,而且直流平衡了互补的FEC对,并因此没有改变80位块的累计直流偏移。
对96位FEC代码块加到6∶1多路转换器26以产生16位的DATA-OUTPUT(数据输出)并存储在寄存器28中,准备进行16位串行传输。
尽管编码电路10用2个并行的16b/20b数据编码器14a、14b来处理16位的DATA输入,然而,也可通过适当地修改电路10而用4个并行的8b/10b编码器来取代2个并行的16b/20b数据编码器,这些对本领域技术人员是显然的。16b/20b和8b/10b编码的各种实施例在下面详细描述。
各个数据编码器14a、14b的最佳实施例使用预编码和8b/9b及10b/11b子编码。这便产生9位和11位的数据代码字。20B子块结构的9b/11b划区有利于编码和译码,并允许限定最大串长度和累计直流偏移。通过适当选择数据代码字,可将每个9位和每个11位段中的直流平衡限定为逻辑1或逻辑0值,而这便达到了奇数长度段可能的最小的不平衡性。对具有相反不平衡性的9位和11位的段,可使得组合成的20位序列是平衡的。不仅如此,如下所说明,使用和3/4/3最大串长度标准相符的9位和11位数据代码的子集,可将最大串长度限制为4。
使用这种类型的数据编码,最好在产生FEC代码块时,将单个FEC及反相的FEC位成对地置于9位与11位段之间,以减小最大串长度。
这样该FEC代码块包含总数为16的FEC位和呈4个20位子块形式的80位的编码数据。每个子块是直流平衡的。模块平衡的16B/20B子块编码简化了总片设计,并允许使用8/5,16/14,32/30以及64/62的数据/命令位长度的字。
换言之,代码块是由4个结构相似、每个24位的子块构成。每个24位子块包含20位的编码数据,该20位编码数据可进一步细分为9位和11位的段。在各段之间的是一位FEC和它的补码。在11位段的结尾处有一附加FEC位及其补码位。由于每个24位子块包含2个FEC位并有4个子块,那么整个块就含有8个FEC位。因此,块结构如下所示块=[24位子块]+[24位子块][24位子块]子块=[9位编码数据][FEC位][取反的FEC位]+[11位编码数据][FEC位][取反的FEC位](上面符号“+”,表示并置,即,该页上两相邻行上所表示数据实际为一连续的位流)FEC符号发生器22最好使用可行单错可检双错的发明距离为4的Hsiao块编码过程。为了和现有的多路转换器和多路信号分离器及其它公用接口相兼容,代码长度应为8的倍数。使用8位的前向差错控制符号,有可能保护含有64到127位的块(包括FEC位)。数据代码字长度为80位,(即,4个编码的20位字或8个10位字)由于减小了FEC开销而且增大了链路效率而具有优越性。
这样,本发明提供为例如光纤传输介质所用的前向差错纠正能力和良好的信号特性(例如,短的最大串长度和最小的累计直流不平衡性或周期平衡性)。可归因于数据编码器部分的25%开销和可归因于FEC编码部分的25%开销是采用实现时简单而又可行的块编码过程完成的。
2.串长度介绍可用包含位流的各自编码字的最大串长度特性来确定该位流的最大信号串长度。可用起始串长度、中间最大串长度和结束串长度来分析编码字的串长度特性。一种代码,限制其起始串长度不大于i,中间串长度不大于j,结尾串长度不大于k,可称之为i/j/k最大串长度编码,其中,“i”、“j”和“K”为整数。例如,2/5/3/代码的连续序列可产生其最大串长度为i+k=j=2+3=5的串行流。同样,3/4/3代码字的连续序列将产生最大串长度为i+k=6(因为对3/4/3代码字,j<i+k)的串行流。但是,如选择一组位来划分3/4/3代码字序列,使其起始和结束串长度为“C”(C为正整数),便可得出该位流的最大串长度为“C+i”、“j”或“K+C”中的最大数,对3/4/3代码字来说,为C+i=k+C。其中,3/4/3代码字为成对的互补的位所划分(例如“1”/“0”或“0”/“1”FEC位),C=1,而产生位流的最大串长度为1+i=k+1=4。
符合给定的起始/中间/结束串长度标准的代码个数可通过列出所要求位数的所有代码字并删去不符合串长度标准的代码字来计算。这个过程可由计算机处理器快速完成,以下是计算机产生的符合各种串长度标准的代码个数的表,以作进一步参考。
表1代码字特征表代码字长度 代码字中 串长度标准 满足串长度“1”位的个数 的代码字个数9 4或5 2/4/2 899 4或5 3/4/3 1139 4或5 2/5/3 1029 4或5 3/6/3 11610 5 2/4/2 18010 5 3/4/3 22810 4或6 2/4/2 12410 4或6 3/4/3 16511 5或6 2/4/2 303
11 5或6 3/4/3 39111 5或6 2/5/3 35911 5或6 3/6/3 4123.用FEC互补对分隔符的8b/10b数据编码如上所述,用8b/10b编码可有利于实现数据编码。按照本发明,一种新的、使用互补FEC位对来对10b代码字的各结束处的串长度加以限制的、直接的8b/10b编码方法允许产生28个数据代码和27个命令代码。该代码最大串长度为4,代码字内最大累计直流偏移为0或1位,每个代码字结束处的最大累计直流偏移为1位。
使用这种8b/10b代码,不可能始终如一地具有周期性代码平衡(即在每个代码字结束处的平衡);满足3/4/3串长度标准的只有228个平衡的10位代码字,这些代码字不足于将独立的10位的平衡代码字分配给256个可能的8位未编码数据字中的每一个。能够做到的最好结果是将每个代码字结束处的累计直流偏移限定为单个的“1”或“0”位。根据本发明,这可能通过将尽可能多(多达228)的8位数据字映射到平衡的10位代码上、以及将剩余8位数据字中的每一个映射到彼此按位互补并具有仅1位不平衡的两个可选10位代码字中的一个上来实现。只要对8位数据字编码,将之映射到不平衡的10位的代码字中的一个,该编码器便从两候选代码字中选出一个,使数据字恢复累计平衡。
换言之,如果该累计不平衡性包含过多的“1”,则选择下一不平衡代码字具有相反符号的不平衡性,即过多的“0”。这可通过选择第二个不平衡代码字其不平衡性和第一个的相反来完成。通过这样对不平衡代码字的选择来补偿前面最近的不平衡代码字的不平衡,在任何代码字块结束处(以及在完整报文结束处的)的净累计直流偏移将不大于单个的“1”或“0”位。所以,尽管位流不能保证周期性平衡,但仍可将累计直流偏移限制在精确定义的极限之内。
能够计算出满足前述串长度和累计直流偏移标准的合用代码字的个数。平衡的10位字的总数为10项中每次取5项的组合数,即10!/(5!*5!)=252。所以,用平衡的10位代码字来表示28=256个数据值是不可能的。而且,如图2的表所示,只有228个平衡的3/4/3代码,而且3/4/3代码是最佳的,因为这些代码可利用互补FEC位对来产生最大串长度为4的位流。然而,也可图2所示,还存在一些附加的具有单个“1”位(即6个“1”和4个“0”)的不平衡性的代码字,其中的165个满足3/4/3标准。同样,存在有同样个数的有过多“0”位的代码。所以,可用平衡代码字表示228个输入值,而附加个数的输入值(多达165)可用不平衡程度最小的两个代码字中的任一个来表示,代码字中的每一个为另一代码字的逐位的补码。用这种方法,总共有228+165=393个3/4/3代码可以使用。这393个10位代码中,需要其中的256个来编码8位数据字,而剩余的137个10位代码字可用于对多达137个不同命令字(即,编码128个可能的7位命令字已绰绰有余)进行编码。这样,用该编码方案,一个10位代码字可表示一个8位数据字或一个7位命令字。用互补FEC来分隔3/4/3代码,保证了最大串长度为4。
4.单一的直接的8b/10b数据编码器的说明性实施例图2描绘了单一个的直接的8b/10b数据编码器40。该编码器40包括不平衡检测器42、T型触发器电路44和存储器46。编码器40在8位输入字中区分其相应10位代码字是平衡的和其相应10位代码字是不平衡的。对已经映射到不平衡代码字的互补对的其相应10位代码字为不平衡的输入值,该编码器选择一个考虑前面串流历史的不平衡代码字,并产生一个表现最小不平衡性的代码流。这样,无论何时,代码字的逻辑1多于逻辑0时,由编码器40选择的下一个不平衡的代码字将具有相反不平衡性,即逻辑0多于逻辑1。
不平衡检测器42测试该代码是否平衡,也就是,识别一个代码字是否不平衡。当一代码字为不平衡时,不平衡检测器42就产生一个其值为逻辑1的UNBALANCE(不平衡)信号。当该代码字是平衡的时,则UNBALANCE信号值为逻辑0。
不平衡检测器42有一个“与”门50,输入信号的三个最高位(MSB)作为独立的输入A5-A7送至所述“与”门。(因下面所述原因,在不平衡检测器42中没有使用指定为A0-A6的最低位(LSB))。“与”门50的输出作为第一输入和其它指出输入信号是否包含命令信息的CMD信号一起加到“或”门52上。“或”门52的输出是UNBALANCE”信号。
不平衡检测器42的操作可参考以下表2给出的相应真值表来理解。
表2图2的不平衡检测器的真值表输入 输出CMD A7 A6 A5 UNBAL0 0 0 0 00 0 0 1 00 0 1 0 00 0 1 1 00 1 0 0 00 1 1 0 00 1 1 1 1
1 X X X 1但为理解该表,作如下考虑从表1可见有228个其最大串长度为3/4/5的10b平衡代码字(即,具有5个逻辑1的10b代码字)以及存在不平衡数为1(即,具有4或6个逻辑1的代码字)及3/4/3最大串长度的165个10b代码字。将代码字的这些个数变换为二进制数,便有228(dec)=11100100(bin)165(dec)=10100101(bin)可对上述的数下舍入处理得到224(dec)=11100000(bin)平衡代码字,和160(dec)=10100000(bin)不平衡代码字,可满足所述的3/4/3最大串长度的标准。这样小于224(111000002)的输入数据信号值可用平衡代码字表示,而224到255的输入数据值可用不平衡代码字表示,256到383之间(总数128)的输入命令可用不平衡代码字表示。用此方案,识别不平衡代码字的标准是3个最高位(A5,A6,A7)为1。
现在,借助已给出的基本信息,就很容易理解图3A的表格。在该表中,“1”指出逻辑1,“0”指出逻辑0,而“X”或指出逻辑1或逻辑0。通过只使用数据输入信号及命令信号的三个最高位,简化了不平衡检测器电路42。
此由可见,当“与”门50的三条输入线A7-A5不全为“1”时,其输出为逻辑0,指出输入信号值低于224并相当于平衡代码字。当“与”门50的输入线都断定为“1”,该“与”门50的输出为逻辑1,指出输入信号值等于或大于224并相当于不平衡字。当“与”门50的输出为逻辑1或断定有CMD信号即CMD信号值为逻辑1,那么“或”门52产生其值为逻辑1的UNBALANCE信号,无论哪一种情形,都指出一个不平衡代码字,另一方面,当输入信号任一位均为逻辑0,“或”门52产生其值为逻辑0的UNBLANCE信号,指出输入信号值小于224以及未断定有CMD信号。这种情形相当于不平衡字。
T型触发器电路44用来保存UNBALANCE信号的当前状态直到产生下一不平衡代码字,该电路使用“异或”门44a和诸如D型触发器或寄存器44b的存储器件来存储上一个UNBALANCE信号。每当待发送的下一代码字不平衡时,该触发器就使其状态反转。将T型触发器电路44的输出加到存储器46上以便选择下一不平衡代码的适当的代码平衡。
存储器46最好由只读存储器(“ROM”)或可编程逻辑阵列(“PLA”)来实现,并最好借助于使用存储的代码字查找表来实现10b/10b编码。该查找表对每一个10位输入提供一个10位代码字。该10位输入是由T型触发器电路44的单一位的UNBALANCE输出、以及命令信号CMD和数据位A7-A0组成,CMD及A7-A0在(延迟器件47中,例如一个寄存器体)延迟后加到存储器46上以按照和电路44相应输出相同的时钟周期到达。存储器46执行上面概述的代码字指定方案,对由2个互补不平衡代码字所表示的那些数据输入,根据T型触发器电路44的UNBALANCE输出在两个代码字之间进行选择,以便补偿在先编码数据的前面的不平衡性。完成此过程所需的代码字指定使用来自T型触发器电路44的输出以便根据上一输入的不平衡确定该代码字的不平衡。
图3绘出了可供选择的编码器。总的来说编码器ROM 46C和图3B的ROM46相同,不同处在于,每个单元附加包含第11位,即UNBALANCE信号,以指出10位以外的位是否构成一平衡的代码字。将这个位加到和图3A的电路44相同的T型触发器电路47上,以产生译码器ROM 46C的类似输入。
以下的表3说明存储在编码器ROM 46C中的查找表。
表3图3编码器的转换查找表平衡 CMD 数据 不平衡 3/4/3 代码字输入 输出A 0 0 0-223 0 平衡数据型代码字B 0 0 224-255 1 含有过剩的“1”的未平衡数据型代码字C 0 1 0-127 1 含有过剩的“1”的未平衡含令型代码字D 0 1 128-255 1 同上“C”的命令型代码字0-127E 1 0 0-223 1 同上“A”的平衡数据型代码字F 1 0 224-255 0 上述“B”的未平衡数据型代码字的补码,但含有过剩的“0”G 1 1 0-127 0 上述“C”的未平衡命令型代码字的补码,但含有过剩的“0”H 1 1 128-255 0 同上“G”的命令型代码字的补码该表的前三列表示ROM 46C的输入,(即,ROM地址),第四列表示输出的第11位或不平衡信号,而第五列表示10位代码字输出。
查找表将UNBALANCE信号供给T型触发器电路44a,然后加到存储器46a上,如结合图2所述。
5.多重八位位组数据编码电路图4示出一种以并行方式对多重(例如4)八位位组字进行并行块编码的组合编码器60。该电路60包括4个并行不平衡检测器62a-62d,4个10b/10b分量编码器66a-66d,每一个通常如图3A所示,此外,电路60还包含存储器74。
在对4个8位位组字并行处理时,为使不平衡最小,会出现在非成块编码中所没有碰到的困难。具体地说,在组合编码器60中,每个分量编码器66a-66d的各个10位输入字或包含数据或包含命令信息,可指出该输出代码字是否不平衡,如上结合图3A所述,但使块不平衡最小的正确选择取决于所有分量编码器的性能,并且分量编码器相互关联并且必定依赖于外部提供的信息(各分量编码器自身电路之外)从而使产生的串流的不平衡为最小。
提供外部信息的一种方法是,串行地从一个分量编码器到另一个编码器,以及从最后的分量编码器返回到第一个编码器地供给一个前向馈送信号,以作用于后继代码字的选择使累计直流偏移最小。然而,由于从编码器到编码器脉动所需时间通常太长以致不能在单个时钟周期内完成,所以在有些应用中不能使用这种方法。
一种更快而且最佳的方法如图4所示,该方法需要使用选择不平衡信号发生器,该发生器包含4个不平衡检测器62a-62d,一个只读存储器74、和一个锁存器76。检测器62a-62d将它们各自UNBALANCE信号U1-U4作为地址信号送给存储器74,该存储器也接收作为其地址输入的一部分的PRIOR BALANCE(前平衡)信号。存储器74可以是单个的5输入/5输出ROM或PLA。存储器74存储一个SELECT UNBALANCE查找表。该查找表的输出作为对4条信号线S1-S4的SELECT UNBALANCE信号,提供给组合编码器66a-66d。该SELECT UNBALANCE信号指出由4个组合编码器66a-66d中的每一个所要选择的该代码字的合适的直流不平衡状态。将存储器74的一个NEXT BALANCE(下一个平衡)输出位供给其输出为PRIOR BALANCE信号的锁存器76,所述NEXT BALANCE信号指出用于产生下一个SELECT UNBALANCE信号的不平衡。锁存器76保持NEXT BALANCE信号,并在时钟周期内将其送给存储器74,在所述时间周期内,下一组的四个信号UNBALANCE信号U1-U4由不平衡检测器42a-42d所提供。这样,该NEXT BALANCE信号为一反馈信号,该信号循环以产生前面的不平衡的历史。
电路输入线路上的锁存器78用作缓冲器接收CMD和A7-A0输入并以同样时钟周期送到不平衡检测器62a-62d和编码器66a-66d。锁存器76、78最好以同样时刻启动时钟。
存储在存储器74中的该SELECT UNBALANCE表如表4所示。
表4图4存储器的查找表PRIOR U1 U2 U3 U4 NEXT S1 S2 S3 S4BALANCE BALANCE0/1 0 0 0 0 0/1 X X X X0/1 0 0 0 1 1/0 X X X 1/00/1 0 0 1 0 1/0 X X 1/0 X0/1 0 0 1 1 0/1 X X 1/0 0/10/1 0 1 0 0 1/0 X 1/0 X X0/1 0 1 0 1 0/1 X 1/0 X 0/10/1 0 1 1 0 0/1 X 1/0 0/1 X0/1 0 1 1 1 1/0 X 1/0 0/1 1/00/1 1 0 0 0 1/0 1/0 X X X0/1 1 0 0 1 0/1 1/0 X X 0/1
0/1 1 0 1 0 0/1 1/0 X 0/1 X0/1 1 0 1 1 1/0 1/0 X 0/1 1/00/1 1 1 0 0 0/1 1/0 0/1 X X0/1 1 1 0 1 1/0 1/0 0/1 X 1/00/1 1 1 1 0 1/0 1/0 0/1 1/0 X0/1 1 1 1 1 0/1 1/0 0/1 1/0 0/1其中,PRIOR BALANCE为“0”指出前面的累计直流偏移为-1(即,6个“0”和4个“1”),而PRIOR BALANCE为“1”,则指出前面的累计直流偏移为+1,(即,6个“1”和4个“0”)。
同样地,NEXT BALANCE为“1”指出下一个累计直流偏移为+1(即,6个“1”和4个“0”),而NEXT BALANCE为“0”则指出下一不平衡代码字的累计直流偏移为-1(即,6个“0”和4个“1”)。
根据指出哪一个代码字不平衡的输入信号,BALANCE-TO-SELECT(选择平衡)表格选择为编码器66a-66d所使用的不平衡状态。SELECT UNBALANCE表中输入列(U1-U4)中的一列中的“0”指出所选代码字是平衡的,而“1”指出所选代码字是不平衡的。如果所选代码字的“0”多于“1”,那么SELECT UNBALANCE表格的输出、即SELECT UNBALANCE信号为“0”,如所选代码字的“1”多于“0”,则输出为“1”。该SELECT UNBALANCE表对平衡输入示出SELECT UNBALANCE信号值“X”(为“1”或为“0”),在这种情形下,编码器16a-16b最好输出和不平衡选择线无关的代码字。
每当PRIOR BALANCE信号的值为“1”,该查找表的所有输出位S1-S4在PRIOR BALANCE信号值为“0”时是它们的值的二进制补码。如图4A所示,为节省纸页上空间,将SELECT UNBALANCE表对半分,互补入口的两个值如图中所示由斜杠予以划分。左值用于PRIOR BALANCE=“0”而右值用于PRIOR BALANCE=“1”。(实现此目的的可选方法是在存储器74输出端使用一组并行“异或”门,将查找表的输出信号S1-S4中的每一个作为第一输入送到各“异或”门中不同的一个门上,而来自锁存器76的PRIOR BALANCE信号则作为公用的第二输入加到每一个“异或”门上。
6.使用8b/9b和10b/11b子编码的16b/20b编码8b/10b代码需使用一些不平衡代码字。尽管输入字长也加倍达到16位。然而,通过把代码字尺寸放大一倍到20位,可得到所有代码字为平衡的代码。
为此,20位块的10位必须有同样逻辑值。所以,存在长度为20位的C(20/10)=20!/10!*10!=184,756种各不相同的平衡代码字。因此,对216=65536个输入值,可用现成的平衡的20位代码字的全体来表示。(另一方面,16b/19b代码产生若干不平衡代码字,而16b/18b代码形成的任何类型的代码字都很少)。16b/20b数据编码过程也提供这样的优点,即,和8b/10b代码一样,使用输入值为8的倍数,所以可与8位位组的硬件和程序兼容。
为了用通过现有技术做在CMOS芯片上的ROM或PLA来执行16b/20b编码,16b/20b编码过程最好划分尺寸近似相等的2个或多个编码过程以使芯片面积减为最小。
将16b/20b编码划分为2个8b/10b编码,结果只有C(10/5)=252个平衡代码字,即不足以表示每个8位输入值所要求的28=256个输入值。另一方面,如果用不平衡的10位代码字来扩大可用码集,当然可得到足够的代码字,但当然引进了直流不平衡。
然而,如将16b/20b编码划分为两个不相等的部分8b/9b和10b/11b子编码,那么就有足够可用的平衡的20位组合代码字。而无论9位还是11位的代码字都不能平衡,奇数长度代码字不能平衡,只能将9位和11位代码字限制为不平衡最小以及有相反的不平衡,使得在将代码字并置时,结果的块是平衡的。
在9位代码中,总共有C(9/4)=126个带一个过剩“1”位的代码字和126个带一个过剩“0”位的代码字。252个这样的代码字可分开使用,即在该方案中,用一个9位代码字及其补码来表示不同的输入值,它们不能用作表示同一输入值的可选方法。在11位代码中,总共有C(11/5)=462个带有单个过剩“1”位的代码字以及同样个数的带有单个过剩“0”位的代码字。然而,和9位代码字不同,必须将互补的11位代码字用作同一输入的交替表示;当使用有效的252个9b代码字中的一个时,11位的代码字的不平衡必须和该9位代码字的不平衡互补,以产生完全的20位块的全局平衡。所以有252×462=116,424个代码字,表示216个数值已绰绰有余。
然而,使用所有的116,424个代码字对编码位流最大串长度的限制很松。例如,使用000011111和11111000000在并置形成20位字块时,会产生最大串长度为10。然而,使用前向差错纠正代码位允许对最大串长度加以限制,即使用96位字块,每个字块由8位FEC位和8个互补FEC位来保护,而互补的FEC位对置于4个9b和11b子段的每一个之间。在这种情形下,使用上述字的最大串长度为7。
如从图2中的表格可见到的,带有单个过剩“0”位的总共有391个11位代码字和113个9位代码字,符合3/4/3最大串长度标准。还有113个带有单个过剩“0”位的9位代码字。如果将互补FEC对用于该受限代码字集的每个9位和11位代码字之间,那么可达到最大串长度为4。共有391×2×113=88366个这样的表示数据的4位串长的、平衡的20位代码字,表示216=65536个输入值已绰绰有余,因此,有22830个代码字可用作其它用途。
在这22830个额外代码字中,例如可将214=16,384个用作表示命令信息的代码字,即“命令代码字”。最好是以这样方法来标识命令代码字,即通过设置一“命令线路”,该命令线路为输入或输出线路,该命令线路可和16条数据输入或输出线路分开。换言之,设置命令线路将代码字识别为表示命令的信息,而另16条线路说明特定的命令。然而,因为代码字码集不允许有216个命令值,所以在命令线路有效时,两最高位是无意义的。在这种情况下,保留214=16,368个值用来表示命令代码。尽管如此,还剩6446(>4096=212)代码字用以表示额外的数据类型或种类,它们可称为“空闲”代码字。16b/20b代码字最好不但能表示216个数据字和214个命令字,而且可表示第三类的212个空闲字。
空闲字可用于各种目的。例如,可将这些空闲字发送过链路用于初始化,或者,当链路输入端无有效数据时,发送空闲字以维持所要求的最大串流特性(空闲链路)。212个可用的12位代码字(在该实施例中用作空闲字)也可增强16b/20b代码表示8位位组数据和命令的能力,如下所述。
虽有88,366个最大串长度为4的平衡的20位数据代码字,用8b/9b和10b/11b编码器来实现这样的代码而不超出有效的一致的代码字码集并不是直接了当的。具体地说,如果编码器输入线路简单地就是带有16位输入的线路,那么对输入值便没有限制。因此,到8b/9b编码器的可能输入字的个数(28=256)会超出和9位代码字一致的个数(226),到10b/11b编码器的可能输入字的个数(210=1024)会超过符合11位代码字对的个数(391)。这橛便需要逻辑转换。
尽管可用“与”门或“或”门的“随机逻辑电路”来实现,但最佳实现为ROM或PLA查找表。在数据编码过程中执行必要转换的ROM或PLA称为“预编码器”逻辑,简单地称为“预编码器”。
预编码器最好产生若干预编码器代码字,当将这些预编码器代码字作为输入加到8b/9b和10b/11b编码器时,不会超出8b/9b和10b/11b编码器的代码集的限制,并且还允许使用该编码器码集的大部分。另外,通过预编码器的数据线路的条数最好是总共16条输入数据线中的一小部分。否则,当增加命令线路和空闲线路时,线路总数会使预编码器ROM或PLA芯片面积过大。相反,使由预编码器转换的线路数最少会导致可发送到9b和11b编码器的数值的数量方面的损失。
如上所指出,共有226个9位数值和391个11位数值用以提供最大串长度为4的20位平衡代码。用二进制表示这些数据可得出226(dec)=11100010(bin)391(dec)=110000111(bin)显而易见的是,如果不把等于或大于11100000=112的数值发送到8b/9b编码器,也不把等于或大于110000000=384的数值送到10b/11b编码器,那么该输入无论对哪一个提供代码字的编码器的容量都不会“溢出”。实际上,8b/9b编码器没有输入就必须将所有三个最高位置位,而当10b/11b编码器没有输入时,就应将2个最高位置位。
7.使用8b/6b和10b/11b子编码器的面向16位字的16b/20b编码器图5示出了一种组合的面向16位字的16b/20b的编码器80。编码器80包括预编码器82,8b/9b分量编码器84和10b/11b分量编码器86。从概念性的目的起见,该图也绘出了反相器88。编码器80的输入由16位数据D15-D0(D15为最高位)、命令线路输入CMD和空闲线路输入IDLE(空闲)组成。数据输入线路D11-D5,绕过预编码器82并直接耦合到10b/11b编码器86的输入A7-A1。数据线路D4-D1也绕过预编码器82并耦合到8b/9b编码器84的输入B4-B1。输入线D0与8b/9b编码器84的B0输入端相连接并判定该编码器输出的不平衡。包括有反相器88以指出该编码器输出的不平衡和8b/9b编码器输出的不平衡相反,当然,尽管由于可将10b/11b编码器86的查找表设置成直接实现此功能,所以该反相器并非取得此结果所必需的。
如果D0线未置位,编码器84提供具有单个过剩“0”的输出,而编码器86提供具有单个过剩“1”的输出。当D0线置位时,两个编码器的输出为D0线未置位时输出的补码。编码器84、86的查找表响应D0线上的信号,以产生所要求的代码字。另一方案是,当然,可通过使用“异或”电路的线性阵列来产生互补数据。
分别存储在编码器84和86中的9位和11位代码字最好从由计算机产生的其累计直流偏移为1位,其最大串长度3/4/3的代码字表中选出。如前面在题为“串长度介绍”的第2节中所述,该表可由编程产生,即,计算机将排序列出每一个可能的9位和11位代码字并对每一字加以测试以找出满足1位累计直流偏移标准和3/4/3最大串长度标准的那些代码字。将满足上述两标准的9位和11位字作为代码字的值分别存储在编码器ROM84和86中。
由预编码器82执行的转换可用以下的表5加以表示。
表5图5预编码器的转换查找表输入线路 输出线路C2 C1 D15 D14 D13 D12 A9 A8 B7 B6 B5DATA 0 0 0 0 0 0 0 0 0 0 0DATA 0 0 0 0 0 1 0 0 0 0 1DATA 0 0 0 0 1 0 0 0 0 1 0DATA 0 0 0 0 1 1 0 0 0 1 1
DATA 0 0 0 1 0 0 0 0 1 0 0DATA 0 0 0 1 0 1 0 0 1 0 1DATA 0 0 0 1 1 0 0 0 1 1 0DATA 0 0 0 1 1 1 0 1 0 0 0DATA 0 0 1 0 0 0 0 1 0 0 1DATA 0 0 1 0 0 1 0 1 0 1 0DATA 0 0 1 0 1 0 0 1 0 1 1DATA 0 0 1 0 1 1 0 1 1 0 0DATA 0 0 1 1 0 0 0 1 1 0 1DATA 0 0 1 1 0 1 0 1 1 1 0DATA 0 0 1 1 1 0 1 0 0 0 0DATA 0 0 1 1 1 1 1 0 0 0 1DATA 0 1 X X 0 0 1 0 0 1 0DATA 0 1 X X 0 1 1 0 0 1 1DATA 0 1 X X 1 0 1 0 1 0 0DATA 0 1 X X 1 1 1 0 1 0 1DATA 1 0 X X X X 1 0 1 1 0从该表的右边可见,A9和A8永不会同时为“1”,以及B8、B7和B6三个不会都同时为“1”。所以,避免了使用会超出一致代码码集的8b/9b和10b/11b编码器的输入值。注意到,将D14和D15的值给作“X”用于命令和空闲,此外,将D12和D13给作X用于空闲,ROM和PLA输出是相同的,而不管指出状态中这些线路的数值。也请注意到,由于有的线路绕过预编码器82,总共有216个数据、214个命令和212个空闲字可进行编码。
8.8位位组数据的16b/20b编码器在以上描述的16b/20b中,编码器80的输入或包含数据或包含命令信息而不是包含两者的16位字。16b/20b编码也可适用于基于8位位组的输入值,即2个8位字。每个8位输入字可表示8位数据或5位命令信息。这样,16位输入值可以是数据-数据序列(即,每个8位位组包括数据),命令-命令序列(即,每个8位位组包括命令信息),数据-命令序列(即第一个8位位组包含数据而第二个8位位数包含命令信息),或命令-数据序列(即第一个8位位数包含命令信息,而第二个包含数据)。
除16条数据线之外,还有两条附加的一起指出另16条线路内容(即是否为数据-数据、命令-数据等)的命令线路。在数据-数据序列中,所有16条线均带有数据,这样就有2个可能的输入字,每一个可能的输入字指定一个独立码。
该系统规定只有32(=25)个不同的可能的命令字,包含数据-命令序列中一命令的8位位组的3个最高位被期望为0,而使用数据8位位组的所有8位。所以,对数据-命令序列必须将25×28=213个不同的可能的输入字指定为代码字,而将另外的213个指定为命令一数据序列,总共有214个代码字用于数据-命令和命令-数据序列。对允许的命令-命令序列需要另外的25×25=210个代码字。
在图5的编码电路中,不增加用于将两个8位位组输入字变换为16位的输入字的逻辑,而有另一更简单方法,即提供合适的预编码器转换查找表来完成所要求的任务。
图6示出使用这种方法对两个8位位组输入值编码的这种方法的16b/20b编码电路90。在图6中,分别用数据线A1-A8和B0-B7来表示2个8位输入。一个1位命令/数据线路A-CMD指出8位输入字A1-A8表示命令字或数据字。另一个1位线路B-CMD指出输入字B0-B7表示命令字或数据字。预编码器92接受命令信号A-CMD、B-CMD和输入值,例如,数据或命令信息A8-A6、B7-B5。来自预编码器92的输出A9′-A6′加到10b/11b编码器94,该编码器94还接收输入值A5-A1。10b/11b编码器94和图5的编码器86是相同的。将预编码器92的其它输出B7′-B5′提供给8b/9b编码器96,该编码器也接收信号B4-B1和BALANCE信号B0。8b/9b编码器96和图5的编码器84相同。由反相器98将BALANCE命令B0反相并作为另一输入A0加到编码器94上。
以下表6示出由预编码器92实现的真值表。
表6图6的预编码器的转换查找表CA CB A8 A7 A6 B7 B6 B5 A9' A8' B7' B6' B5' A7' A6'数据 0 0 D D D D D D D D D D D D DB-CMD 0 1 0 0 0 X X X 1 0 0 1 0 0 0B-CMD 0 1 0 0 1 X X X 1 0 0 1 0 0 1B-CMD 0 1 0 1 0 X X X 1 0 0 1 0 1 0B-CMD 0 1 0 1 1 X X X 1 0 0 1 0 1 1B-CMD 0 1 1 0 0 X X X 1 0 0 1 1 0 0B-CMD 0 1 1 0 1 X X X 1 0 0 1 1 1 0B-CMD 0 1 1 1 1 X X X 1 0 0 1 1 1 1A-CMD 1 0 X X X 0 0 0 1 0 1 0 0 0 0A-CMD 1 0 X X X 0 0 1 1 0 1 0 0 0 1
A-CMD 1 0 X X X 0 1 0 1 0 1 0 0 1 0A-CMD 1 0 X X X 0 1 1 1 0 1 0 0 1 1A-CMD 1 0 X X X 1 0 0 1 0 1 0 1 0 0A-CMD 1 0 X X X 1 0 1 1 0 1 0 1 0 1A-CMD 1 0 X X X 1 1 0 1 0 1 0 1 1 0A-CMD 1 0 X X X 1 1 1 1 0 1 0 1 1 1AB-CMDS 1 1 X X X X X X 1 0 1 1 0 0 0IDLE 1 1 X X 0 X X 1 1 0 1 1 0 0 1IDLE 1 1 X X 1 X X 0 1 0 1 1 0 1 0IDLE 1 1 X X 1 X X 1 1 0 1 1 0 1 1在该表中,第一列组表示输入线路(例如,ROM地址线路),第二列组(上标带撇号的)表示输出线路(例如,存储在ROM中的值)。为缩短表6中真值表的打印规模,在该图中,用单一行来表示真值表的前64行。在该表中,“X”指出其值不影响输出的信号。“D”指出相应的入口可为“0”或“1”。和“X”不同,输入侧的“D”指出这些输入信号的不同的的值会产生由D表示的输出信号的不同的值。
当CA=CB=0时,输入字A1-A8和B0-B7表示数据字而不是命令字。在这种情形下,预编码器92执行6个预编码器数据输入(A8-A6,B7-B5)和7个预编码器数据输出(B7′-B5′,A9′-A6′)之间的一对一的映射。可使用任何一对一的映射,只要该映射不违反对防止8b/9b编码器和10b/11b编码器的溢出所必须的两个限制。这两个限制是,三条线路B7′-B5′中至少一条必须设定为取值逻辑0,以及两条线路A8′和A9′中至少一条必须设定为取值逻辑0。在表6中,以10b/11b编码器输入A9-A0和8b/9b编码器输入B7-B0来表示两个8位位组的输入数据。外部数据加到8条A1-A8及B0-B7线路上。B0-B4输入绕过预编码器而直接进入8b/8b编码器。B0确定8b/9b编码器输出的不平衡状态,将B0反相并送到10b/11b编码器的A0输入端以使其输出平衡性与8b/9b编码器输出的平衡性相补偿。A1-A5线路也绕过预编码器而直接进入10b/11b编码器。输入线路A6-A8和B5-B7进入命令线A-CMD和B-CMD进入预编码器(8条输入线)而预编码器有7条输出线路A9′-A6′、B7′-B5′。
9.前向差错纠正编码使用的前向差错纠正码的类型可以是,例如,单错纠正、双错纠正,具体地说,诸如由Hsiao改进的汉明距离为4的代码(参考由Shu Lin & Daniel J.Costello,Jr.所著的书“差错控制编码”,PRENTICE-HALL 1983年出版,第498到第502页)。这种代码是线性的,是因为任何两个编码数值之和导出另一编码数值。这些代码也可以是系统的,即,编码的数据部分并非从未编码数据变化得到。所以,大体上来说,将FEC位加到数据代码字上使得FEC位和数据代码字的组合提供距离4编码。可通过将1×B的矩阵数据字与B×P的FEC矩阵相乘而得到1×P的FEC符号矩阵的方法来产生FEC各位,其中“B”表示块中数据代码字总位数,而“P”表示FEC的位数。该块总位数为L=B+P。
在目前条件下,可用8个FEC位保护一个80位的块(即4个20位的数据代码字)。因此,B=80而P=8。要产生FEC矩阵的80行,要使用8位的矢量序列,每个矢量包含奇数个“1”位,该奇数至少为3。因为带有3个“1”位的只有8!/3!5!=56个矢量序列,而且有80位要保护,所以也必须使用包含5个“1”值的互补型的8位矢量序列。由于还存在56个补码序列,导出总数为112(还存在另一组含7个“1”值的8个矢量序列,这些矢量序列无须使用)并且只有80位有待保护,所以从112个矢量中选出哪80个来使用是任意的。使矢量中“1”位数最少可使编码和译码所需激活门的数目减为最小。
产生FEC位的最佳方法是使用循环无关代码序列(即,不是通过旋转序列元素来相互变换的序列。从含3个“1”位的序列的角度来看,以下7个循环无关的变化是很容易枚举的






将上述这些序列经过全部8种可能的循环变化而进行的旋转,可产生总数为56的FEC代码。另外,包含5个“1”的互补序列可通过将在3个“1”情况下得到的代码中的所有位反相的方法来产生。
10.说明性的通信系统图7示出按照本发明的通信系统100。系统100是点到点光纤数据链路。系统100中所说明的元件可以采用例如执行数据编码、译码和成帧的两个CMOS芯片来实现。
系统100包括发送器部分100a和接收器部分100b。在发送器部分100a中,输入数据作为一个32位并行流为编码器102所接收,并进行编码以及加上前向差错纠正位,以便按以上所述方式形成ECC代码字。编码器102最好如图1所示那样实现。在编码器102中,该数据多路传输到多达16位的并行字,然后送至16∶1多路转换器(“MUX”)104,该多路转换器104后接激光发送器106,该串行化数据是驱动链路或信道108的激光送器106的输入。
在接收器部分100b中,通过链路108所接收到的光信号由光接收器/变换器110变换为电信号并加以放大,然后送到时钟恢复模块112。由该模块112恢复时钟和重定时数据并加到常规1∶16多路信号分离器114。该多路信号分离器114将16位的电信号序列加到成帧和数据恢复电路120。成帧和数据恢复电路120执行进一步的多路信号分离、成帧以确定96位FEC代码块边界,以及差错纠正和数据译码以获得恢复的数据流。该恢复的数据流是32位并行流形式的,包括32位的DATA和2位的CMD,类似上述供给发送器部分100a的源数据的形式。
在编码和译码期间,由各微处理器122、124通过编码器102和译码器120中的寄存器存取控制和状态信息。
11.FEC代码块的成帧和数据译码当接收器110b初始接收通信信号时,到来的位流缺少任何标识FEC代码块起始和结束的边界。因此,成帧和译码电路120必须标识这些边界,即,对FEC代码块划分为帧,以便能够执行差错校正和数据译码。这通常是在接收器100b启动期间,接收实际数据之前进行的。
图8给出了成帧和译码电路120。来自1∶16多路信号分离器114的16位序列一次一个地加到寄存器200上。然后,寄存器200将其内容,即16位序列加到产生96位输出的1∶6多路信号分离器202上。将该96位序列供给寄存器204。寄存器204将其96位内容提供给成帧电路205,该成帧电路包括出错发生器206、FEC校验208和差错计数器210。该成帧电路205对每个96位序列当作FEC代码块那样进行处理并计算该块中所含差错个数,其中所含错误是由占据FEC符号的位位置的该序列的位指出的。
具体地说,如果该序列装配正确,就把包含数据代码字的96位序列中的80位和可以是FEC位的8位加到出错发生器206。该出错发生器206检测这88位中的差错,并产生一个8位的ERROR(差错)信号,该ERROR信号在未检测出差错时含全“0”,而当出错发生器206检测出单位差错时,含奇数个“1”,而当出错发生器206检测出双位差错时,含偶数个“1”。这样的出错发生器很容易做成单个集成电路芯片形式的现成零件。
在出错发生器206接收到96位序列的88位块的同时,寄存器204将来自同一96位序列、对应的8个FEC位和它们的8位补码的16位送到FEC校验208。该FEC校验208对接收到的位进行比较,检验每一个FEC位是否与其补码并置。如不存在互补对,该FEC校验208断言有FEC-ERROR(FEC差错)。
差错计数电路210接收来自出错发生器206的8位ERROR信号和来自FEC校验208的FEC-ERROR信号。对每个由出错发生器206指出的差错,即对每个单位错或双位错,该差错计数电路210递增计数器。如果对任何的90位块,出错发生器206和FEC校验208均未检测出差错,将该计数器复位为0。
如果该计数器达到预选阈值,例如8个差错,那么差错计数电路210将一个BIT SLIP信号送到1∶16多路信号分离器114的SLIP或SKIP输入端。该信号使多路信号分离器114跳过输入的串行数据流的一位,如上所述,以便改变提供给寄存器204的96位序列帧对齐的一位。(具有这种“滑流”(“Slip”)或“跳过”(“Skip”)功能的多路信号分离器很容易找到现成的商品)然后由成帧电路205再次检查该新的96位序列。
该过程继续到发现预定个数的96位序列(例如,10个)无差错。此时,适当地启动接收器100b,接着可进行差错校正和数据译码。
常规Hsiao差错纠正电路212可校正新构造帧96位FEC代码块的数据代码字中任何检测出的差错,并将数据代码字提供给寄存器218,该寄存器将所述数据代码字供给2∶1多路转换器220。该多路转换器220提供第一对的数据代码字,即将前40位的数据代码字提供给数据译码器222。该数据译码器222对所接收的数据代码字进行译码,以恢复包含其中的数据和命令信息。该数据译码器222的输出以32位的DATA-OUT和2位的CMD-OUT值存储在寄存器224中。然后由2∶1多路转换器220提供剩余的2个数据代码字,即将最后的40位供给译码器222,由该译码器再次产生一个32位的DATA-OUT信号和一个2位的CMD-OUT信号。
现在描述译码器222的说明性实施例。该译码器对例如由编码器形成的数据代码字进行译码。该数据译码器222有两个同样的、并行的译码分支,每一个用于译码一个代码字。在每一个分支内,将接收到数据代码字的20位送到11b/10b和9b/8b译码器。这样,将来自9b/8b译码器的三个最高位和来自11b/10b译码器的2个最高位送到后译码器,该后译码器执行和图5预编码器42相反的操作,也就是,如该图5A所示从右到左地进行对图5A中的表(包含在预译码器及预编码器42中)的查找。该译码电路的输出就是可再现图5编码电路40的输入的全部18条线路信号。
然而,在译码电路和编码电路40之间至少有一点差别,在译码电路的输出端没有对应于命令和空闲线路置位的有效字。在译码电路的输出端,最好将命令和空闲线路上“1”的出现用来指出无效代码的接收。
使用系统100,对编码的串行数据流的性质进行优化以便通过光纤链路108进行传输。按照本发明的各个方面,维持短的最大串长度有助于时钟恢复和使低频能量减为最小,而直流平衡允许通过使用高增益的交流耦合的接收器进行可靠的代码复原。最大串长度最好为4,即,在无错时,没有4个以上相继的逻辑1或逻辑0出现在串行数据流中。最好将累计直流偏移限制为每个代码字内+4,而在每个24位子块结束处限定为0。对这些数值而言,系统100的链路108的总效率为2/3。
12.其它数据编码技术上文所描述的编码技术都使用两次编码,即先是数据编码,最好用3/4/3代码,然后是包含多个(例如4个)数据代码字的块(例如,96位块)的FEC编码。通过将FEC各位散布在数据代码字之间,使通信信号的最后位流达到最大串长度为4。
还可将许多差错保护编码的新技术有效地用于不同用结合本发明说明性实施例所描述的数据编码方法中。例如互补位的散布或96位FEC块的使用可为上面提及的IBM 8b/10b代码所使用。而且,本文中所述的差错保护编码技术可用于甚至不采用数据编码的场合,即只希望对未编码位序列进行保护编码的场合。
另一方面,在只需数据编码的应用场合也可得到本发明的许多优点。然而,尽管代码的选择取决于应用的要求,但为保持较短的串长度,最好使用2/4/2代码,1/4/3代码或3/4/1代码来代替上述3/4/3代码。尽管使用不同的代码,图3、4和5中所示的编码器电路也适用于将输入值数据编码为带限定累计直流偏移的代码字。
例如,图3的不平衡检测器电路42的不平衡标准可按所用代码而适当改变。例如,对2/4/2的10位代码字,该标准可改为从0至123的输入值表示成不平衡数据代码字,从124至255的输入值表示为平衡的数据代码字,而在256至303之间的取值可表示平衡的命令代码字(总共48个命令代码字)。换言之,对2/4/2代码,表示数据的不平衡代码字的标准是小于124的任何输入值,用二进制表示的话,就是其5个最高位都不为逻辑1的数据的任何输入值。
前面的描述一直局限于本发明具体实施例。然而,显而易见的是可对本发明作各种改进和变型,并可获得本发明的部分或全部的优点。因此,所附的权利要求书的目的在于覆盖所有这些的改进和变型,而这些改进和变型包括在本发明的范围和实质精神之内。本说明书规定为以说明性而非限制性地进行编写的。
权利要求
1.一种编码器,包含有用于将多个数字信号位序列中的每一个编码成多个第一代码字的序列编码装置,每个第一代码字具有最大串长度低于预选限制以及累计直流偏移低于预选限制的特征,以及和所述序列编码装置相耦合用于从中接收第一代码字并由该第一代码字产生多个差错保护符号的保护编码装置。
2.根据权利要求1所述的编码器,其特征在于每个第一代码字是直流平衡的。
3.根据权利要求1所述的编码器,其特征在于还包括,和所述序列编码装置和所述保护编码装置相耦合、用于形成包含多个第一代码字和多个差错保护符号的块的装置。
4.根据权利要求3所述的编码器,其特征在于,块形成装置将至少一个差错保护符号置于块中的第一代码字之间。
5.根据权利要求4所述的编码器,其特征在于,还包括与所保护编码装置相耦合、用于构造差错保护符号的二进制补码的装置。
6.根据权利要求5所述的编码器,其特征在于所述块形成装置与所述补码形成装置相耦合并用于从中接收补码、形成多个互补对,并将至少一个互补对置于该块内所述多个第一代码字的第一和第二个之间,每个互补对包括一个差错保护符号和它的补码。
7.根据权利要求6所述的编码器,其特征在于,每个块包括96位。
8.根据权利要求7所述的编码器,其特征在于,每个块包括4个20位第一代码字,8位的差错保护符号,以及8位的所述差错保护符号的补码。
9.根据权利要求8所述的编码器,其特征在于,每个第一代码字具有3/4/3最大串长度,而所述块最大串长度为4。
10.根据权利要求9所述的编码器,其特征在于,每个序列包括16位,而所述序列编码装置将每个序列编码为一个20位的第一代码字。
11.根据权利要求10所述的编码器,其特征在于,所述序列编码装置将每个16位序列编码为10位的第二代码字和10位的第三代码字,它们共同构成该序列的第一代码字。
12.根据权利要求10所述的编码器,其特征在于,所述块形成装置由4个第二代码字和4个第三代码字来形成每个块,并将一互补对置于各个第二和第三代码字之间以及该块一个端部处。
13.根据权利要求10所述的编码器,其特征在于,所述序列编码装置将每个16位序列编码成9位的第二代码字和11位的第三代码字,这两个代码共同构成该序列的第一代码字。
14.根据权利要求13所述的编码器,其特征在于,所述块形成装置由4个第二代码字和4个第三代码字来形成各个块,并将一互补对置于各个第二和第三代码字之间以及该块一个端部处。
15.一种编码器,包含有用于将多个数字信号位序列中的一个编码成多个第一代码字的序列编码装置,每个第一代码字具有最大串长度低于预选限制和累计直流偏移低于预选限制值的特征,和所述序列编码装置相耦合、用于从中接收第一代码字并由该第一代码字产生多个差错保护符号的保护编码装置,以及和所述保护编码装置相耦合、用于形成差错保护符号的二进制补码的装置。
16.根据权利要求15所述的编码器,其特征在于还包含与所述序列编码装置、所述保护编码装置和所述补码形成装置耦合的、用于形成包括次多个第一代码字、由该次多个第一代码字及其补码产生的差错保护符号的块的装置。
17.根据权利要求16所述的编码器,其特征在于,所述块形成装置将至少一个差错保护符号置于块中第一代码字之间。
18.根据权利要求17所述的编码器,其特征在于,所述块形成装置形成多个互补对,并将至少一个互补对置于块内多个第一代码字的第一和第二个之间,每个互补对包括一个差错保护符号和它的补码。
19.根据权利要求18所述的编码器,其特征在于,所述块形成装置将互补对中的一个置于每2个第一代码字之间。
20.根据权利要求19所述的编码器,其特征在于,序列编码装置将每个序列编码成共同构成第一代码字的第二和第三代码字,而所述块形成装置将互补对中的一个置于每个第二和第三代码字之间。
21.一种编码器,包含有用于接收多个数字信号位序列并从该位序列产生多个差错保护符号的保护编码装置,以及和所述保护编码装置相耦合、用于形成差错保护符号的二进制补码的装置。
22.根据权利要求21所述的编码器,其特征在于还包括与所述保护编码装置和所述补码形成装置相耦合、用于形成包含次多个位序列,和由该次多个位序列及其补码产生的差错保护符号的块的装置。
23.根据权利要求22所述的编码器,其特征在于,所述块形成装置将至少一个差错保护符号置于块中位序列之间。
24.根据权利要求23所述的编码器,其特征在于,所述块形成装置形成多个互补对,并将至少一个互补对置于块内位序列的第一和第二个之间,每个互补对包括一个差错保护符号和它的补码。
25.根据权利要求24所述的编码器,其特征在于,所述块形成装置将互补对中的一个置于每2个位序列之间。
26.一种对数字信号编码的编码器,其特征在于包含用于将信号分离成多个块并将每个块编码成数据代码字的数据编码装置,和所述数据编码装置耦合的、用于从中接收多个数据代码字、将多个数据代码字中的每一个并置为第二块、并对每个第二块产生多个保护符号,对每个保护符号产生其补码的保护编码装置,以及用于将至少一个保护符号及其补码置于形成该块的数据代码字之间以便形成保护代码字的装置。
27.一种用于接收表示输入位序列的组合编码器输入信号的组合编码器,所述组合编码器输入信号中的每一个包含多个包括多个分量编码器输入位的位和多个预编码器输入位,所述多个预编码器输入位包括至少一个公共预编码器输入位,所述组合编码器包含预编码器,该预编码器对组合编码器输入信号进行响应,1)按照预编码器代码,根据其每个序列的预编码器输入位确定多个预编码器输出字,每个预编码器输出字包含至少一个预编码器输出位,按照预编码器代码,多个预编码器输出字至少在一个公共预编码器输出位上是相关的,2)产生代表各个预编码器输出字的预编码器输出信号,以及和每个预编码器输出信号关联的分量编码器,每个分量编码器对其关联预编码器输出信号和至少一个分量编码器输入位作出反应,1)按照分量编码器代码,根据至少一个分量编码器输入位和由相关联预编码器输出信号所表示的预编码器输出字确定代码字,2)产生代表所确定的代码字的分量编码器的输出信号。
28.一种组合编码器,其特征在于包含多个用于接收各自不平衡信号和表示各自编码器输入字的各自编码器输入信号的编码器,以便1)按照一种代码,根据所接收到的信号确定各自代码字,使具有相反不平衡性的代码字的互补对和至少某些输入字相关联,每个编码器按照其各自不平衡信号的值在互补对代码字之间进行选择,2)产生代表各自所确定代码字的各自编码器输出信号,不平衡信号发生器,用于监视组合编码器输入信号以始终监视编码器输出信号累计的不平衡性并识别其输出信号不平衡的编码器,以便根据累计不平衡和其输出不平衡的编码器的识别来确定每个编码器不平衡符号以使累计不平衡最小,以便产生这样确定的表示不平衡符号的各个不平衡信号并加到编码器。
全文摘要
将多个数字信号位序列编码或具有改进的信号特征即限定的最大串长度和限定的累计直流偏移的数据代码字的编码器。然后,该编码器用前向差错控制(“FEC”)代码对数据代码字进行编码,以便由多个数据代码字构成FEC代码块。最好是通过产生其个数和块中数据代码字相等的校验或FEC位来构造FEC代码块,然后将-FEC位及其补码与每个数据代码字并置以使一个FEC位及其补参与插在每个相继代码字之间。此外,可将互补FEC对用于接收器以便在译码前获得适当成帧的FEC代码块。
文档编号H03M7/14GK1049580SQ90104810
公开日1991年2月27日 申请日期1990年7月17日 优先权日1989年7月17日
发明者唐纳德·H·麦克马汉, 阿伦·J·柯比, 布鲁斯·A·斯科菲尔德, 肯特·斯普林杰 申请人:数字设备公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1