概述
在高速状态下,并行口的几根数据线之间存在串扰,而并行口需要信号同时发送同时接收,任何一根数据线的延迟都会引起问题。而串行只有一根数据线,不存在信号线之间的串扰,而且串行还可以采用低压差分信号,可以大大提高它的抗干扰性,所以可以实现更高的传输速率,尽管并行可以一次传多个数据位,但是时钟远远低于串行,所以目前串行传输是高速传输的首选。
从另外的角度来看,并行传输还有很多方式如系统同步(共同时钟)方式及源同步时钟方式等。先来看系统同步先天的内在问题
首先,并行信号由于需要多位传输路径,这在早期是可以接受的。但是摩尔定律的现象使得与几十年前相比可生产的芯片中硅电路的数量大幅增加,而芯片封装技术的pin密度并没有像硅密度一样以相同的速度在增加,因此I/O pin的封装实际上比硅电路还贵,这就意味着对于大多数芯片来说pin管脚越来越多变得不可接受。
第二个内在问题就是时序的需求。由上图可知数据由芯片#1同步启动并被芯片#2使用相同的时钟同步捕获,芯片#2输入端的数据必须满足相对于芯片的时钟输入的建立和保持时间。详细的系统同步时序模型如下图所示。这些建立和保持时间必须用足够的余量来计算,以允许时钟分配路径延迟到两个芯片的差异,并通过芯片到启动和捕捉触发器。延迟可能会因芯片工艺,电压和温度(PVT)条件而异,并且必须增加余量以应对最坏的情况。对于较高的时钟频率,可能需要在芯片中使用锁相环(PLL)来调整时钟相位,以补偿芯片内的时钟分配延迟,并适应变化的工艺,电压和温度条件。 如果时钟频率足够高,则不可能建立一个可以通过这种共同时钟总线来可靠地传输数据的系统。
我们都知道源同步方式的典型代表是DDRx信号,下面就来介绍源同步方式是怎样改善系统同步的先天不足的。
源同步要解决的第一个问题是减少在芯片之间传输数据所需的I/O引脚数量。这通过将芯片#1的输出处的n位数据复用到k位互连(k <n),然后将芯片#2的输入上的互连的k位解复用到n位内部数据路径上来实现,如下图所示。所得到的系统只需要每个芯片上的k个I/O引脚,而不需要先前的n个引脚。
当然,虽然引脚数量要求已经通过k:n的比率降低,但是参考时钟的所需频率已经增加了这个比率的倒数。由于噪声,电磁干扰(EMI)和功耗问题,系统设计人员通常不喜欢在系统内分配高速参考时钟。通常,分配较低频率的时钟,并且使用芯片中的PLL将该参考时钟乘以可用频率,但所产生的时钟相位的变化以及数据传输的频率越高,往往会加剧并行数据总线的时序问题。
源同步的第二个法宝就是在两个芯片之间的数据通路中增加了一个高速时钟,如下图所示。假设该时钟源提供的时钟频率略低于在芯片互连上对数据进行触发的时钟频率,每个芯片都使用PLL来产生这个频率倍数的时钟,所得到的时钟用于启动和捕获相应芯片中的数据。芯片#1中用于从该芯片启动数据的PLL的输出时钟也是该芯片的输出,芯片#2使用该时钟来捕获数据,这种方法称为时钟转发。
时钟转发的优点是用于在芯片#1上启动数据的高速时钟可用于芯片#2作为捕获数据的参考。这样之前通过时钟分配网络驱动两个芯片的延迟的变化在时序分析中就不需要考虑了,只有时钟路径和数据位之间的延迟变化是相关的。 虽然制程,电压和温度导致的这些路径之间的变化在一定程度上相互影响,但接口的时序分析需要的余量较少,因此建立和保持时间更容易满足。
我们还是来看看典型的例子吧,图中所示的时钟可以是单数据速率(SDR)或双倍数据速率(DDR)的时钟,如下图所示。SDR就是接收芯片在SDR时钟的每个上升沿(或每个下降沿)捕获数据; 而DDR则是接收芯片捕获DDR时钟的每个边沿(上升沿和下降沿)的数据。
无论时钟是SDR还是DDR时钟,接收芯片都使用该时钟直接捕获数据。 该芯片还使用参考时钟以相同的频率生成内部系统时钟,这些时钟是中间同步的。 虽然频率相同(鉴于它们共享共同的频率参考),但是时钟之间的相位关系是未知的,并且可能由于PVT变化而变化。 因此,接收芯片通常将接收到的数据从接口时钟域重新定时到内部芯片时钟的时钟域。 FIFO用于执行此重定时功能, 期望最小化由接口时钟计时的触发器的数量,以便最小化时钟分配网络中的延迟,否则时钟问题将会加剧。
高速串行信号相对于并行信号最主要的就是通信方式的改进,这种通信方式又叫自同步方式,也即两块芯片之间通信,其中发送芯片产生的数据流同时包括数据和时钟信息,如下图所示。
要实现上图所示的通信,在芯片内部还有更加详细的一些要求及模块来操作,具体实现可以参考下图所示模块框图。
这些最主要的模块包括串行器(也有叫串化器)、时钟数据恢复(CDR)、解串器以及均衡器等。这样的设备与源同步接口不同,因为接收机设备包含时钟和数据恢复(CDR)电路,其基于信号的跳变沿来动态地确定数据信号的最佳采样点。 换句话说,从数据中直接提取时钟信息,而不是依赖于单独的时钟。本篇我们主要来简单介绍前面三种必要的模块,均衡器会在后续的内容中介绍。
串行器要实现的功能就是并串转换,简单来说就是将原本并行的数据转换成串行的数据。目前有两种主要的并串转换方式——可装载移位寄存器和回转选择器。
解串器的功能正好和串行器的功能及步骤相反,那就是将串行的信号又重新转换成并行信号,又叫串并转换,
时钟数据恢复(CDR)顾名思义就是将数据流里面的数据和时钟在接收端恢复出来,说起来感觉很简单的样子,但实际上如下图所示时钟恢复过程无法产生一个共用时钟或者同数据一起发送的时钟。作为替代,由锁相环(PLL)合成出一个与输入串行信号的时钟频率一致的时钟,也即PLL能根据参考时钟和输入信号来产生锁定于输入信号的新时钟,所以PLL对于Serdes的接收也是至关重要的。
这就是我们的串行信号,呈现出来的确实是比较简单,无非就是几对差分线路,但内部的操作却非常复杂。虽然简化了PCB设计,但对芯片的设计挑战巨大,因为有更多的模块集成在芯片内部了
并行信号之于串行信号,唯一的区别就是多比特同传,因而产生了:更多的布线/连接线的空间需求;在高波特率下可能的一致性要求:驱动器,信道的时域/频域一致性;密集信号线间的串扰隔离需求。 但是,并行信号本质上就是串行信号的聚合,串行信号物理层能采用的技术,比如差分,加重/均衡/链路训练,CDR等等,都可以在并行信号中采用;此时需要额外考虑的是如何完成信号间一致性的信息收集与恢复和数据的拆分聚合。 为低成本,低延迟设计的单端、随路时钟的并行信号对为高吞吐,简化互联设计的高速差分信号,自然存在串扰,EMI,布线空间,等长/SKEW等等问题。
1,高速串口不需要传时钟来同步数据流,没有时钟周期性的沿变,频谱不会集中,所以噪声干扰少。通过数据流的沿变可以直接用PLL恢复出时钟,再用恢复的时钟采集数据流。不传时钟可以降低功耗,减少噪声。 2,所有高速串口都采用差分总线传输,外界噪声同时加载到并行传输的两条差分线上,相减之后可以抵消,对外部噪声的抵抗能力强。 3,没有时钟skew问题,因为它根本就没有同步时钟,不存在时钟和数据流的对齐问题。只需要保证差分信号线是对齐的就行,因为差分信号线的值总是相反,相关性强,易控制。 4,线少,干扰少。串行传输一般就4根数据线,分成Rx两根差分线和Tx两根差分线,差分线总是往相反方向跳,可以抵消各自的跳变噪声,这种噪声可以被Rx的负极性以相反的跳变直接抵消掉,总的噪声为0,根绝了内部噪声。 另外,串行采用差分信号,CDR,信道均一化等技术使得信号质量得到保障。串口的特性和应用场景,决定了它更加适合采用一些可以提高单根信道速率的设计方法,这些方法用在并口上并不合适。 综上,串口传输的各种优势使得其内外噪声皆免疫,又没有信号对齐之忧,可以以极高的速率传输。这种速率,并行传输是根本做不到的,更不要说串行传输还能节省大量引脚。
您了解的均衡器的种类与功能有哪些?
相信大家通过阅读之前高速串行简史的文章也对串行信号有比较深刻的认知了。为什么要用到串行信号,客观原因是从我们对数据传输的需求,因此迫使我们在速率上不断向摩尔定律靠拢。基于之前所述的串行信号的种种优势,因此在速率不断提高的情况下,我们就会认为串行信号是最好的选择。但是真到了速率不断攀升的时候,我们用同一个串行链路去承载它们时,就会发现没有想象中那么容易。
那再往10G,25G,56G走呢,岂不是就玩不转啦?
在我们的串行链路中,损耗可以算是眼睛张不开的最大元凶,从理想的插损曲线来判断的话,我们一般会记住几个常用的数值:
0dB=1,-3dB=0.7,-6dB=0.5,-12dB=0.25,-20dB=0.1。。。然后速率越高,dB值肯定越大啦,那么眼高自然就慢慢没了……
当然,我们也会想出很多方法来应对,比如板材是影响损耗的重要因素,我们从原始普通的FR4板材到中等损耗板级,再到低损耗板材,再到超低损耗板材,那在同样的走线长度,自然损耗就小了,或者换句话说在同样的损耗情况下,我们可以走得更长了;然后铜箔粗糙度也会影响损耗,因此我们把铜箔的工艺研究得非常深入,也制造出了各种的铜箔类型;
然而无论是对板材还是对铜箔的优化,付出的是更高的成本,更新板材和铜箔也需要经历时间的等待。我们习惯性把一个链路分成三个部分,分别为发送芯片,传输通道和接收芯片。我们上述对板材,铜箔的优化其实都是对传输通道进行的优化,那我们能不能在芯片本身做点文章呢?
答案当然是可以的。均衡技术就是针对芯片端的其中一种技术。实际上均衡技术种类有很多,从结构上分类,分为线性和非线性均衡,或者说是模拟和数字的区别;按作用来分类则可分为频域均衡和时域均衡,前者是校正频率特性,而后者是直接校正畸变的波形;按调节方法还可以分为固定均衡和可变均衡,而可变均衡分为手动均衡和自适应均衡。按抽样时间间隔的不同来分类,又可以分为码元间隔均衡和分数间隔均衡等等。
在那么多的分类之中,的确在我们的PCB链路上常用的一般就三种:CTLE(Continuous Time Linear Equalization)连续时间线性均衡,FFE(Feed Forward Equalization)前向反馈均衡和DFE(Decision Feedback Equalization)决策反馈均衡。前面两种是线性的均衡器,而且后面的DFE是非线性的。
均衡的终极作用就是把我们接收端的眼图给睁开,的确从PCB相关的仿真或者测试中也验证了这个是一项非常有用的技术,在芯片里面去做这样的技术,与从板材铜箔这些的优化相比,也是成本较低的方案。
为了把信号传输更远距离,通常在发送端和接收端使用预加重或去加重的均衡技术,通过提升信号的高频部分能量,以补偿传输通道对高频的衰减。均衡器有:1.CTLE连续时间性均衡器,特点是功耗低,实现简单,不会增大抖动。2.FFE前端反馈式均衡器,由延时电路、乘法器、加法器组成的模拟均衡器。3.DFE判决反馈均衡器,特点不会放大噪声和串扰,易于实现,广泛应用高速收发芯片中。
为什么损耗全频段都变差的情况下,居然能够使眼图张开呢,隐藏着什么秘密???
基于上文那个张开和闭合的眼图,我们来对比下它们接收端的波形:
可以看到,眼图之所以闭合,主要是由于在蓝色圈圈处的地方出了问题,通过观察,我们发现了最容易出问题的地方就是在低频信号向高频信号电平转换的地方,即连续的0或1之后转换成单独的1或0 的地方
通过该通道的损耗情况能够发现,由于连续0或连续1对应的频率是比较低的,因此对应的幅度衰减也比较小,单独的1或0 的转换则代表高频的情况,幅度衰减则比较大,因此连续0或连续1在经历高幅度后突然要转换成相反电平的高频数据,这个高频数据幅度衰减很大,就会跟不上节奏,不能拉回到一个属于它电平的正确位置。
我们对这种码型带来的恶劣影响的情况称为ISI,码间干扰,这是又一种重要影响信号质量的因素,不同于阻抗不匹配,反射或者串扰这些影响,即使把传输线优化得很好,阻抗反射串扰这些都考虑得很完善,但是只要通道的衰减达到一定的幅度,都有可能出现码间干扰
另外,上篇文章眼图之所以能张开,是因为我们人为的把低频的衰减变大了,这样的话,连续0或连续1的幅度就没那么高,这样转向的时候单独1或0的这一位数据就能拉得更上一点。加入CTLE均衡就是这个效果,在上文的接收端频率响应中,虽然加入CTLE后整体的损耗都变差了,但是把低频分量衰减更多。这样的话高频和低频损耗的差距却明显变小了,这样面对这种码间干扰时就很有帮助。当然缓解这种码间干扰还有其他一些方法,这里就先继续卖关子了
前面文章说过,在高速链路中导致接收端眼图闭合的原因,很大部分并不是由于高频的损耗太大了,而是由于高低频的损耗差异过大,导致码间干扰严重,因此不能张开眼睛。针对这种情况,前面有讲过可以通过CTLE和FFE(包括DFE)均衡进行解决,原理无非就是衰减低频幅度或者抬高高频幅度,从而达到在接收端高低频均衡的效果。同时我们在前文还埋了个伏笔:
现在就把这个关子拿出来讲讲,也就是今天要说的编码方式。说到针对于NRZ数据的编码方式,本人听过的有4B/5B,8B/10B,64B/66B,64/67B,128B/130B,128B/132B编码(可能各位还有其他吧),不同的编码方式针对于不同的信号协议,当然效率也是不一样的。什么叫效率?在数据包传送的术语叫开销,意思就是除了实际需要的数据之外的一些数据bit,例如冗余校验等。那大家看上面的编码的数值比就知道了,例如8B/10B,要把8bit的实际数据扩展为10B,那开销就是20%,效率就只有80%了,更通俗来说就是增加了20%的非实际数据的传输 。所以一个好的编码方式,除了看它本身的算法优化情况外,还要注重效率高不高。
本人将用两期的篇章主要介绍下8B/10B和64/66B编码方式,其他的主要都是由他们扩展开来的。那介绍完前面总体的情况后,进入本期的主题,8B/10B编码。
首先,为什么要编码?原来的码型有什么不好的地方吗?其中最主要的原因用下面这个图来进行解释:
大家看明白了吧,由于我们的串行链路中会有交流耦合电容,我们知道理想电容的阻抗公式是Zc=1/2πf*C,因此信号频率越高,阻抗越低,反之频率越低,阻抗越高。因此上面的情况,当码型是高频的时候,基本上可以不损耗的传输过去,但是当码型为连续“0”或者“1”的情况时,电容的损耗就很大,导致幅度不断降低,带来的严重后果是无法识别到底是“1”还是“0”。因此编码就是为了尽量把低频的码型优化成较高频的码型,从而保证低损耗的传输过去。
上面解释了原因,下面就介绍下这种8B/10B的编码方式的算法。
对于一些常见的编码方式而言,即使在我们不知道它们有什么好处的情况下,也很容易想到它的缺点,那就是需要增加额外的数据bit。因此我们看到很多像PCIE1,明明传输了2.5Gbps的数据,但是实际上有用的数据只有2G;PCIE2也一样,5Gbps的数据由于的只有4G。对于8B/10B编码而言,这是一笔不小的损失。人们还是要用这种编码,也正说明了它的好处显然会大于它的坏处。很多网友也回答得非常精准,我再稍微汇总下大家的答案哈。
首先,使用8B/10B编码的根本目的是为了直流平衡,所谓直流平衡,在上文中也图文并茂的解释过了。但是说到保证直流平衡又是为了什么呢?我们可以对上文的prbs7码型(10Gbps)进行有和没有8B/10B编码的频谱进行分析,如下所示:
可以看到,进行8B/10B编码后,信号在低频段的能量明显少了,补充到了高频能量中去了。其实,这就相对于一个高通滤波器,根本作用和之前说的加重均衡时一样的,就是使经过传输通道后保持平坦的频域曲线,这样能有效缓解ISI码间干扰,使接收眼图扩大。所以说,使眼图变好的方式有很多,但是万变也不离其中,原理都是殊途同归的。
另外,通过8B/10B后,连续0或1的数量减少了,对于时钟恢复电路(CDR)也是有帮助的。它使CDR能够有更多的边沿变换,对于CDR的PLL来说,更能把握到数据的内嵌时钟,对正确采样数据和减小抖动有很大的益处。
其他的作用还包括:
增加一些校验的码型,起到数据对齐和控制命令的作用,增加纠错的能力;
编码后起到加密的作用;
编码有一定的规律的码型,对解码来说也有帮助。
上文说完了8B/10B之后,我们再来说说貌似更复杂的64B/66B编码。很多人可能在想,8B/10B编码主要作用的优化直流平衡,从8bit中插2个bit进去,这样的话最终效果能够使长0或者长1的位数不超过5位,达到很好的效果。那64B/66B编码方式呢?在从64个bit中仅加入2个bit,能够很好的解决长0长1的问题吗?作用似乎只是杯水车薪,2个bit相对于64个bit太少了。但是这种64B/66B的编码方式流行至今,肯定是有它自己的优势所在,其实它和8B/10B编码还是有原理上和算法上的区别的。
当然,如果仅靠这2个bit来实现8B/10B的作用显然不太现实。其实上,这两个bit只是起一个同步头的作用,主要用于接收端的数据对齐和接收数据位流的同步。这两个bit有“10”和“01”两种同步表征方式,“01”表征后面的64个bit都是数据bit,“10”表示后面的64bit是数据和控制信息的混合,其他的“00”或者“11”都表征为错误信息。数据bit用“D”表示,每个数据码是8bit;控制bit用“Z”表示,每个数据码是7bit。其中在“10”这种数据控制信息混合的情况下,后8个bit划分为表征类型域,其后的56bit才是真正的控制信息或数据控制两者的混合。另外“S”表示包开始传送,“T”表示包传送结束,值得注意的是“S”只能在第0和第4字节出现。“T”可以出现在任何的字节。
那按照上面说的,新加的2个bit只是作为同步,那后面的数据可以如何优化呢?这里有一项区别于8B/10B编码的技术——扰码。
所谓扰码,就是一种将数据重新排列或者进行编码以使其最优化的方法。怎么才能最优化呢?就是使数据bit的“0”和“1”最大程度的达到随机分布,进一步减轻了抖动的码间串扰,提高了数据传输的可靠性。从本质上说,扰码就是为了达到这个目的而在传输数据进入信道传输之前,对其进行的比特层的随机化处理过程。它的方法就是使用上面prbs码型所说到的多项式,关于多项式的选择通常是基于扰码的特性,包括生成数据的随机度,以及打乱连0和连1的能力。从prbs多项式的角度说,其实就是重新生成伪随机码型的过程。64B/66B的扰码使用的多项式是1+X39+X58。按照前期说的prbs生成器,得到该扰码器的框图如下所示:
就是前几期prbs说的第39和第58位的异或运算,然后通过移位寄存器输出的码型结果。当然,前面说了,64B/66B编码的这种扰码方式目标是使数据的“0”和“1”最大程度的随机分布,减小连续出现的情况,因此它可能并不能适用于所有的码型,不像8B/10B编码一样对所有的bit组合都有出色的表现,具体还要看接收器的能力。但是无可否认,它最大的好处是效率比较高,传输冗余的bit只有2位,不像8B/10B编码需要20%的开销。这方面在更高速的传输环境下更具有优势。
转载自:高速先生
最后
以上就是粗犷眼睛为你收集整理的【电子杂记】数据传输:串行高速传输的全部内容,希望文章能够帮你解决【电子杂记】数据传输:串行高速传输所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复