Twitter上的一些人要求我解释为什么USB3最终比USB2更难实现。答案超出了一条推文所能容纳的范围,所以我想我应该在这里给出一个简单但粗略的答案。这绝对不是全面的;把它当作一条更长的推文吧,这是一条什么样的推文,我有240多个字符,而且有喋喋不休的习惯。(我知道。)。
许多挑战来自我们绕过物理层限制的工作方式。诗意地说,物理学给了我们很多小障碍,我们必须绕过,才能以每秒50亿次传输(5GT/s)的速度交谈。
很难在链路的两边建立共同的“直流运行条件”。
在长长的主板或电缆上获得相同的偏置电压和共同点并不是一件小事,而且当您以非常高的频率运行时,您会对操作环境的变化变得更加敏感。在USB3中,我们通过对链路两端进行电容隔离来解决这一问题-简而言之,我们使用电容器来确保链路上只传输信号变化,这意味着两端都可以建立自己的本地运行条件。
这对用于交换数据的数字协议提出了一些要求。由于数据电流随着相关电容器的充放电而交换,因此电容耦合仅在这些电容器有充放电空间时才起作用。这意味着我们的数据必须是直流平衡的;我们必须花费与放电一样多的时间给这些电容器充电。在数字方面,这意味着我们必须以发送相同数量的1和0的方式对数据进行编码。
很难在一个环节的两端建立一个“共同的时钟”。
在发送串行数据时,通常有两个挑战:您需要确保两端以相同的速率采样数据,并且两个采样时钟足够同步,以便在正确的点重新采样。许多高速协议使用一种称为时钟恢复的技术来处理这一问题,这实质上意味着每个接收器都会查看它接收到的数据,并试图找出产生它的时钟是什么样子。
如果双方已经就时钟频率达成一致,这在理论上可能很简单:如果接收器看到其接收的数据发生变化,它可以推断该变化发生在发射器时钟的活动边沿,因此它可以开始计算如何将其内部时钟与发射器对齐。
这引入了另一个协议要求:为了使时钟恢复工作,数据必须更改得足够频繁,以便两端能够保持同步。在5GT/s和高数据吞吐量的情况下,收到数据包时时钟变得同步的时间不多了;因此,即使线路空闲,对数据进行大量转换编码也很重要。
为确保直流平衡和足够的过渡密度,USB3使用一种称为8b10b编码的编码方法。在此编码方案中,数据的每个单个字节以10位的形式传输,编码选择如下:
典型的数据字节可以作为具有一比零或一比一多的代码来传输,这允许发送器在两种编码之间进行选择,以便将数据流保持在50%的1。
每种有效的编码都有足够的过渡密度,以确保它对时钟恢复有用。
我不会在这里深入讨论更多的8b10b背景,但是你可以在维基百科上读到典型的IBM实现。
即使成功恢复时钟,也很难让链路两端以相同的速率产生和消费数据。每一侧的内部逻辑都由其自己的时钟源运行;并且每个时钟都与其标称频率有一点偏差。为了使协议在不考虑这些差异的情况下仍能正常工作,USB3规范允许每个时钟偏离其标称值高达一定的容差;并指定了补偿该容差的方法。这种技术被恰当地命名为时钟容差补偿,或CTC。
为了补偿发送器/接收器时钟速率的不匹配,USB3要求发送器定期将填充数据插入其传输的数据流中。然后,接收器可以丢弃该数据;允许短暂的停顿,在这段时间内,链路的慢端可以“赶上”。为了使其有用,必须定期发送填充数据(称为‘跳过集’);这意味着在发送端用于插入的附加逻辑,以及在接收端用于移除的附加逻辑。
当以非常高的频率运行时,沿着传输路径的所有小的非理想性都会累积起来。在较慢的数据速率下,数字信号在改变后有充足的时间来“稳定”;这使得传输线的非理想属性不那么重要。您的数据获取得越快,对您的数据来说,快速达到“可读”值就越重要。
为了帮助实现这一点,大多数高速接收器采用了一种称为接收器均衡的技术,该技术使用模拟硬件来帮助重塑信号转换,因此可以更可靠地对信号进行采样。均衡有助于“抵消”一些非理想传输路径对信号产生不利影响的方式。
由于发送器、接收器和电缆属性的不同,每条传输路径都不同,因此不可能创建单一的“一刀切”均衡器。取而代之的是,每个USB3均衡器需要通过称为链路训练的过程来调谐到其传输路径。
在每次USB3通信开始时,链路合作伙伴重复交换称为训练集的已知数据集合,这为每一方提供了调整其均衡器的机会。训练集既包括被选择为具有高转换密度的数据集,也包括被设计为包括广泛的“正态分布”数据的集。
在几毫秒的数据交换中--在快速协议术语中是永恒的--链路的两端逐渐调整他们的均衡器设置,直到他们清楚地看到来自另一端的期望值。
USB3具有非常高的转换率-它很容易被称为高频信令-并且它的链路通常倾向于交换重复数据。这有一个令人讨厌的副作用:即使是功能良好的链路也可以充当天线;无意中发射射频,可能会干扰附近的系统。这个信号的重复元素越多,干扰就越麻烦。
为了减少产生的有害干扰量,USB3链路使用一种称为加扰的技术,在这种技术中,数据在传输之前以固定模式进行异或运算。然后,接收器能够应用相同的变换来解扰数据流,恢复相关数据。
您可以认为加扰非常类似于加密-只是每个人都知道密钥。一旦数据被加扰,它看起来更像是“随机数”,而不是加扰前的数据-因此,它产生麻烦干扰的可能性要小得多。一旦加扰数据通过链路传输,接收端就可以对其进行解扰-这一过程类似于解密-恢复原始数据流。
总而言之,在您甚至可以交换有意义的数据之前,您的设备的数字方面需要:
8b10b编码和解码硬件,因此交换的数据是直流平衡的,并且包含足够的转换以允许时钟恢复;
时钟容差补偿硬件,允许双方在时钟频率稍有变化的情况下进行通信;
用于协调链路训练和接收机均衡的硬件,这有助于处理非理想的传输特性;
这省略了一些次要的东西,例如USB3的低频周期性信号;但这些是主要组件。
最后,忽略与建立链路相关的所有物理层挑战,还有一个主要障碍:很难获得良好的资源来使用USB3:
支持该规范的文档非常少;现有的文档仍然没有得到足够的使用来识别它的所有错误。