高速详解

概览

高速串行是一项日益普及的技术,可减少设备占用空间并提高数据通信速率。本文探讨了高速串行通信链路的基本概念。

内容

高速需求

消费者不断要求在更小的外形尺寸和更低的功耗下实现更好的性能。2000年代初,大数据世界的这些需求引发了从并行到高速串行数字通信总线的巨大转变。这反过来又导致设备的占用空间更小、数据吞吐量更高、功耗要求更低。这些特点使当今消费者使用的许多技术(例如SATA、USB和PCI Express等)成为可能。

图1:2000年代初,市场开始从常用的并行通信标准向串行标准过渡。

优点

并行总线时钟速率的物理限制在1 GHz至2 GHz左右,这是因为单个时钟和数据线引入的偏斜在更高的速率下会导致误码。高速串行总线以单个差分信号形式发送同时包含数据和时钟信息的编码数据,因此可以绕开并行总线的速度限制。如今,数据通道速度为10 Gbps的高速串行链路已司空见惯。此外,多条串行链路可连贯地捆绑在一起,形成具有更高数据吞吐量的通信链路。

通过串行化数据并以更快的速度发送数据,可以减少集成电路(IC)中的引脚数量,从而有助于缩小设备尺寸。此外,由于串行通道可以以更快的时钟速度运行,因此可以实现比并行总线更高的数据吞吐量。

图2: 此图显示了一些常见的总线标准及其通道数量与线路速率的关系。串行标准的线路速率远远高于并行标准,从而可实现更高吞吐量。

劣势

虽然减少引脚数可以简化设计复杂性,但更快的速度要求也带来了额外的设计挑战。设计达到RF频率时,与RF应用一样,也必须考虑相关模拟因素以确保适当的信号完整性。为解决信号完整性问题,可使用高速串行链路实现编码、预加重和均衡等技术。

高速路层

为了使串行连接正常工作,每一端必须同意在特定参数范围内运行。您可以将这些参数抽象为多个功能层。 

图3: 可以在物理和数据链路层之上添加层。这些层因协议和应用而异,通常是最常见的自定义层。

物理层

物理层确保设备之间的电气兼容性,并将同步时钟码提供给数据链路层。

电气接口 

不同的高速串行协议对发送器和接收器的电气接口有不同的要求。这可确保将发射器设备连接至接收器时的电气兼容性。以1 Gbps以上的速度进行通信时,高速串行链路的电信号难以实现此类所需的极快上升和下降时间,也难以最大限度地减少电磁辐射及通过抑制共模噪声来提高抗噪能力。此外,在这些速度下,峰峰值电压很少超过1 V,且使用的电气标准通常是低压差分信号(LVDS)、发射极耦合逻辑(ECL)或电流模式逻辑(CML)。

时钟数据恢复  

高速串行链路物理层的另一个重要特性是时钟和数据恢复(CDR)。CDR是接收设备在不需要实际时钟信号的情况下为输入数据流提供时钟的能力。数据链路层通过编码确保频繁的位跳变来帮助实现它。这样锁相环(PLL)和相位插值器(PI)电路就可以重新创建发送时钟,并使用该时钟以最小的定时误差捕捉传入的数据流。

图4: 由于数据链路层的编码可确保在0和1之间频繁跳变,因此CDR电路可对输入的比特流进行PLL并同步采样编码的数据位。

信号完整性注意事项 

以5 GHz或更高的速率传输有位跳变的数据会给模拟设计带来挑战。由于传输速度处于RF设计的典型频率范围内,因此会出现信号完整性问题。您需要使用高质量的PCB、连接器和线缆才能在这些高数据速率下成功通信。此外,PCB设计人员在设计高速串行链路时应了解传输线理论。他们必须能避免短截线、阻抗不匹配和走线长度不匹配,并使用合适的技术来最大限度地减少信号失真。 

均衡

均衡是补偿通道的电气行为以增加其频率响应的过程。这可能发生在通信链路的发送端或接收端,以提高链路裕量,但一般而言均衡是指接收端。当高速串行信号通过PCB走线、连接器和线缆进入接收器时,衰减不会对信号的所有频率分量产生同等影响,因而导致信号失真。多千兆位收发器(MGT)上的均衡设置可在信号采样前对信号的不同频率应用增益或衰减,以提高信号和链路裕量。许多MGT具有自动均衡功能,可自动检测并持续将均衡器更新至其理想设置。 

加重

预加重通常是指高速串行链路发送端的均衡。它主要用于克服符号间干扰(ISI)带来的模拟挑战。在高速线速率下,数据位在传输时开始相互影响。例如,如果连续传输了三个1,然后是一个0,则数据线难以快速将0驱动为低电平,因为数据线已建立正偏置。

图5: 当缺少位跳变导致线路产生偏置时,ISI会导致信号劣化,因此第一次到相反位的跳变难以快速发生。

克服ISI的方法有两种。如果知道只有在从低到高或从高到低跳变后的第一位存在问题,则可以仅放大跳变后的第一位。这将产生如图6所示的信号。

图6: 预加重旨在放大信号跳变后的第一位。这有助于克服ISI等问题。 

实现类似波形更常见的一种方法是衰减第一个跳变后的位,而不是放大。高通滤波实现了这一点,因为跳变的位(频率较高)的衰减小于未跳变的位。

数据路层

数据链路层对数据进行处理以提高信号完整性、确保成功通信并将物理位映射到数据。实现这一点的功能包括用于对齐的编码方案和控制字符、时钟校正和通道绑定。 

编码方案

编码的目标是保证成功进行时钟与数据恢复所需的频繁位跳变,并确保数据的DC平衡。为成功实现CDR,编码方案需要确保数据信号具有足够的跳变,以使CDR电路保持对数据流的锁相。如果CDR电路内部的PLL由于缺少跳变而无法保持锁定,则接收器无法保证数据位的时钟同步,会发生误码或链路故障。通过确保传输具有频繁位跳变的符号来实现CDR时,会需要向数据添加开销位。

DC平衡对于保持串行链路正常运行也很重要。如果不调节DC平衡量,信号可能会偏离理想的逻辑高电平和低电平,可能发生误码。通过平衡传输符号中1和0的统计数量,可确保DC平衡。在DC平衡信号中,一定时间内传输的0和1的数量在统计上是相等的。 

8b/10b编码

一种常见的编码方案是8b/10b。对于每8位数据,添加两个额外的数据位用于编码开销。这两个额外数据位提供的位表示(符号)是八个数据位的四倍。8b/10b编码器通过选择具有最多跳变和最佳DC平衡的预定义符号来映射到特定数据字和控制符号,从而缩小了符号选择的范围。它将这些符号存储在用于对数据进行编码和解码的查找表中。

当8位数据字准备好进行编码时,编码器会将数据字分为5位和3位,并对数据字执行单独的5b/6b和3b/4b编码。它将五个最低有效位发送到5b/6b表,将三个最高有效位发送到3b/4b表。

表1: 编码器通过将三个最高有效位发送到一个3b/4b表并将五个最低有效位发送到一个5b/6b表来对8b数据字进行编码。然后,编码器根据极性偏差将它们组合起来,形成一个具有频繁跳变的10b符号提供给CDR电路。

理想情况下,所有符号都包含相同数量的0和1,以保持DC平衡。但对于5b/6b和3b/4b表格中的符号而言,情况并非如此,因此要实施规则来根据所谓“极性偏差”(running disparity)的概念来做出决策。 极性偏差即已发送的1和0之间的累积数量差。由于没有足够具有相同数量1和0的符号来表示8位,因此某些数据字用两个符号来表示:一个符号的0多于1,一个符号的1多于0。例如,3b/4b表中的符号1101也可表示为0010。选择要使用哪种符号时,编码器始终尝试平衡极性偏差。完整8b/10b符号的偏差始终为0、+2或-2。表2为编码器决定使用哪个符号的过程。

表2:极性偏差规则决定了使用哪种代码字来确保DC平衡。 

例如,假设要对数据字10010001进行编码。三个最高有效位(100)将发送到3b/4b表,五个最低有效位(10001)将发送到5b/6b表。如果这是线路上发送的第一个字,则编码器假定偏差为-1;因此,本示例假设极性偏差是-1。5b/6b部分无法选择,而3b/4b部分可决定偏差是+2还是-2。由于极性偏差是-1,因此选择偏差为+2 (1101)的3b/4b代码。组合3b/4b和5b/6b代码后,总编码符号为1101100011。发送该符号后,运行偏差为+1 = -1 + 2。 

64b/66b编码

64b/66b编码使用与8b/10b编码不同的方法,可以完成类似的任务。它不使用代码表,而是使用加扰(scrambling)。加扰需要一个可以大概率提供多个较为均匀的0和1的硬件电路。加扰可以让编码数据显示为随机且具有频繁的跳变,但仍可在接收端进行解扰。

图7:加扰电路使输出数据显示为随机且实现DC平衡,但仍可在接收器上对数据进行解扰。加扰是使用查找表编码数据之外的另一种方法。

66位中的前两位视为前导码,它们提供剩余64位的信息。与8b/10b相比,64b/66b的主要优势在于减少了开销。64b/66b的开销略高于3%,而8b/10b的开销为20%。64b/66b编码的一个缺点是它不像8b/10b编码那样对DC平衡有限制。尽管公认加扰电路在随机化上十分擅长且DC不平衡的情况在统计上不显著,但64b/66b编码并不像8b/10b那样有限制。

表3:64b/66b符号的前两位视为前导码。前导码向解码器提供前导码之后的64位的信息。表3中前导码的含义适用于10千兆位以太网。

64b/67b

某些电子设备会随着时间而对直流偏移过于敏感。64b/66b编码方案可能会发生这种情况。由于直流偏移没有限制,此方案可能对设计人员没有吸引力。在这些情况下,工程师不得不接受8b/10b方案的更高开销(20%)。因此64b/67b方案增加了一位额外的开销,可将极性偏差限制在±96。

发送器监视极性偏差并计算新的加扰码字偏差。如果新码字会降低偏差数,则传输该符号。如果新码字会增加偏差数,编码器将翻转64个加扰位(无需翻转偏差为零的前导码)。附加位称为反转位,用于通知解码器是否需要反转数据。这可以让对直流偏移敏感的芯片电子设备也受益于表现为一定直流偏移限制的低开销编码方案。

128b/130b

PCI Express 1.0和2.0均使用8b/10b,而PCI Express 3.0和4.0则跃升至128b/130b,以通过可达到的线速率实现更高的数据吞吐量。您可以将128b/130b方案视为有效载荷加倍但仍只有两个前导码位的64b/66b。表4为PCI Express的规格。

表4:下表显示了四代PCI Express的规格。PCI Express 3.0和4.0过渡到128b/130b来提高数据吞吐量,同时将线速率保持在更易于管理的水平。

控制符号(K字符) 

控制符号(指8b/10b编码时也称为k字符)是高速串行链路的一个重要功能。它们是可与数据区分开来的符号,以便接收器可将它们用于不同的控制职责,例如解码前的字节边界对齐、时钟校正技术以及用于实现多通道数据一致性的通道绑定。

逗号检测

为使解码正确进行,接收器需要知道编码数据的正确字边界。接收器扫描输入数据中的控制字符(在8b/10b方案中用于对齐时也称为逗号)。控制字符定义了编码数据的边界。接收器识别出对齐字符后,便有了编码数据的字边界概念,因此可将编码数据发送至解码逻辑。

时钟校正字符

只要发送时钟未锁定至与接收时钟相同的源,就需要进行时钟校正。即使这些时钟处于相同的标称频率上,它们也会因为极少的时钟频率不准而缓慢漂移。先进先出存储器缓冲区(FIFO),有时也称为弹性缓冲区,允许接收器考虑发送器和接收器之间的微小时钟差异并进行时钟校正。

图8:解码器和接收器上层之间的RX弹性缓冲区用于实现时钟校正。它对数据进行缓冲以防止由于未锁定时钟的相互漂移导致的误差,并使两个未共享参考时钟的设备之间可以通信。

时钟校正逻辑确保弹性缓冲区不会下溢或上溢。如果发送时钟的运行速度略快于从弹性缓冲区读取数据的接收时钟,在没有使用时钟校正技术的情况下,可能会发生上溢。如果发送时钟的运行速度略慢于接收器上的读取逻辑,未进行时钟校正则可能发生下溢。

一个控制字符被选择作为时钟校正字符。发送器周期性地与实际数据交错发送时钟校正字符,时钟校正字符的频率取决于应用和硬件设计的时钟校正需求。如果接收器上的时钟校正逻辑检测到接收器上的弹性缓冲区即将下溢,则接收器校正逻辑可插入额外的时钟校正字符,以确保缓冲区不会发生下溢。如时钟校正逻辑检测到弹性缓冲区已满并即将上溢,则逻辑可丢弃缓冲区中的时钟校正序列,为数据腾出更多空间。

通道绑定

如果线速率和编码方案无法在一个串行通道上提供所需的数据吞吐量,则可以使用多个通道。例如,HDMI标准使用三个串行数据通道来实现其整体数据带宽。跨多个通道发送数据时,传播延迟会导致数据在不同的时间到达接收器的每个接收通道。根据应用的不同,您可能需要在接收器上对齐所有通道上的数据,这一过程称为通道绑定。接收器每个接收通道中用于时钟校正的弹性缓冲区也用于通道绑定。

要实现通道绑定,必须选择一个特殊的控制字符并保留它用于通道绑定。串行链路具有一个主通道,其余通道被视为从通道。主通道和所有从通道同时从发送器发送通道绑定字符。当主接收器在弹性缓冲区的某个位置看到通道绑定序列时,主接收器指示所有从接收器查找其绑定序列,并按照通道绑定序列位置的偏移量调整所有弹性缓冲区的读指针。由于每个数据通道都有自己的弹性缓冲区偏移量,因此接收器可以从每个弹性缓冲区的不同位置读取数据,从而读取到对齐的数据。

图9:通道绑定更改每个接收通道上弹性缓冲区的读指针,从而让接收器可跨多个数据通道读取同步数据。

空闲字符

控制字符的另一个重要用例是空闲字符。为了使时钟和数据恢复保持锁相,发送器必须连续发送比特位。当没有数据要发送时,就必须发送一个空闲字符。它是由协议规定的另一个控制字符,接收器知道该字符不是真实数据。

附加上层

附加上层位于数据链路层之上,可帮助您根据特定需求定制通信。某些协议对上层功能具有特定的标准,其他协议则对此没有要求。常见的通信自定义包括错误检查/纠正、基于数据包通信的标头信息,甚至是链路状态信息。

数据链路层和物理层之上的层是针对特定应用需求定制的最常用的层。常见的上层自定义示例包括通过循环冗余校验(CRC)和前向纠错(FEC)进行的错误检测和纠正。出于对数据传输效率的权衡,您可以使用检测或纠错方案。CRC执行规则来检测传输中的误码,但不能纠错。您可以自定义应用程序来重新请求数据。FEC则相反,它在传输数据中包含额外的纠错信息,可让接收器从一定误码范围内恢复。对于有噪声的通道或通信速率太高时由于信号完整性常造成误码的情况,它十分有用。包含FEC这种设计决策是用牺牲数据速率效率来放松对信号完整性的要求。 

结论

要在高速串行链路上成功进行通信,必须克服多个通信层的许多挑战。了解每一层的不同概念有助于实现和测试不同的层。要使任何一层正常工作,它下面的层必须正常运行。通过在定义物理和数据链路层的众多规格中进行选择,您不必自己确定底层细节。使用标准物理和数据链路层的另一个好处是互联网协议(IP)可以为您实现所有这些底层细节。Xilinx Aurora协议就是一个很好的例子,它是一个免费的IP,实现了用于点对点串行通信的轻量级数据链路层协议。它可以帮助您抽象时钟校正、通道绑定、空闲字符、编码/解码等小细节,从而让您可以专注于上面面向应用的层。

高速串行链路具有更小的尺寸、功耗以及更高的性能等优势,正在迅速普及。通信行业在不断改进高速串行技术,以实现更快的线速并支持大数据世界。