高速串口不需要传时钟来同步数据流,没有时钟周期性的沿变,频谱不会集中,所以噪声干扰少很多。以pcie和sata为例,时钟信息通过8b/10b编码已经集成在数据流里面,数据本身经过加扰,绝对不可能有多于5个0或者5个1的长串(利于时钟恢复),也绝对不存在周期性(避免频谱集中)。这样,通过数据流的沿变可以直接用pll恢复出时钟,再用恢复的时钟采集数据流。这有什么好处?时钟信号消耗的功耗极多,带来的噪声也最大,不传时钟可以降低功耗,减少噪声。
所有高速串口都采用差分总线传输,外界噪声同时加载到并行传输的两条差分线上,相减之后可以抵消,对外部噪声的抵抗能力强。
没有时钟skew问题,因为它根本就没有同步时钟,不存在时钟和数据流的对齐问题。只需要保证差分信号线是对齐的就行,这是很容易的,因为差分信号线的值总是相反,相关性强,易控制。一根线跳的时候,另一根线经过一个非门的延时马上会跳,这个非门的延时是很容易补偿的。并行总线最大的问题就是多根线传输的时候,无法保证所有的沿变都对齐,很有可能传着传着某些信号跟不上,落后了一个t,数据就传错了。想控制也难,因为各个信号没有相关性,互相的沿变本身就是独立的,因为布线不同,很有可能一个跳的早点,另一个跳的晚点,再加上各个传输线电阻不同,噪声不同,传一会儿就分辨不出来哪个值对应哪个周期。
线少,干扰少。并行传输,一般32根或者64根,一根线跳变,会给旁边的线带来噪声,频率越高,这种噪声越大,很容易导致别的线值被篡改或者无法辨认,所以频率不可能很高。串行传输一般就4根数据线,分成rx两根差分线和tx两根差分线,差分线总是往相反方向跳,可以抵消各自的跳变噪声,比如rx的正极性发生跳变时会产生噪声,这种噪声可以被rx的负极性以相反的跳变直接抵消掉(因为他们是差分信号对),总的噪声为0,根绝了内部噪声。综上,串口传输的各种优势使得其内外噪声皆免疫,又没有信号对齐之忧,可以以极高的速率传输。比如sata可以以6gb的速率传输数据流,pcie可以以8gb的速率传输数据流。这种速率,并行传输是根本做不到的,更不要说串行传输还能节省大量引脚。
为了提高单根线的传输速率,必须要讲到我们模拟电路工程师的三大法宝,差分信号(differential signaling),时钟-数据恢复(clock-data recovery,简称cdr),和信道均一化(channel equalization,eq)
差分信号的好处 不外乎抗干扰能力强,引入的噪声也比较小,虽然必须要两根线,但速度从几百m提高到几g,还是很值得的。
cdr的好处 消灭了skew,减少了时钟的功耗和噪声(但多出了cdr电路本身的功耗和噪声),同时避免了电磁干扰。想想在pcb或者电线上传一个15g的时钟,太带感了,幸亏我们不用做这种事。
一般来说,真实世界中的信道都是低通特性的,到处都是小电容,所谓绝缘体中的分子在高频情况下吸收电场能量,再加上金属线中的趋肤效应,所以我们想要的高频信号走不了多远就不像样子了,比如下面某信道的频率特性(绿线)。
来源:硬件十万个为什么