访问电脑版页面

导航:老古开发网手机版其他

从PCIe探索弹性缓冲器真义

导读:
关键字:
弹性缓冲器其实就是一个FIFO(First-In-First-Out)先进先出器件。数据以某个时钟频率写入,输出却用另一个不同的时钟频率。因此,依靠这个电气特征,该回路功能方块的最主要目的是要确保高速环境下,传送及接收两端时钟差异上的补偿作用。如此一来,数据通信的集成性可获最佳保证。

  下面以两个耳熟能详的接口为例,来说明弹性缓冲器一般位于控制器中的确切位置。

弹性缓冲器在不同接口中的位置

  首先以USB2.0 Hub为例。众所周知,Hub装置的职责就是承上启下,单进多出,以扩展连接设备的数量。USB接口最多可连接127个设备。而USB2.0的Hub又有别于上一代USB1.1规格,它将收进来的封包去头去尾,只读取数据本身,然后以局部新的干净时钟信号将它输出。因此,480Mbps可连续接5阶Hub装置依然保持480Mbps数据传送畅通。

  所以,USB2.0 Hub内部的重发器(Repeater)区块通常内含弹性缓冲器,可用来补偿Rcv_Clk及Xmt_Clk两个时钟信号差。

  再以PCI Express为例。PCI Express采用内置时钟的8b/10b编码方式,因此在接收端势必要构建一个时钟数据回复CDR(Clock Data Recovery)回路,其中的弹性缓冲器也用来补偿传送时钟f1与接收端时钟f2的差异。

  逻辑上,因为FIFO两端的时钟存在差异,最后很有可能发生溢位(Overflow)或下溢(Underflow)现象。为了避免这种情况,EB弹性缓冲器通常会在特定的时间插入或移除特殊的符号(Symbol)。如此一来,用来补偿两端时钟的差异就不用考虑额外的问题了。这也是EB弹性缓冲器名称的由来。

  弹性缓冲器的出现甚至可以回溯到60年代。1963年,Maurice Karnaugh获得这个技术的专利,只不过当时的应用是在PCM电话网络上。当高速传输转向串行方式时,EB弹性缓冲器的价值再度显现。

PCIe中的时钟差

  PCI Express采用的8b/10b编码,输出端与接收端时序的同步关系可看成是一种“源同步”,也是一种“时钟传递”的数据传输协议方法。这与过去的PCI或PCI-X采用的共通时钟方式是截然不同的。

  为了方便记忆起见,最为简单的方法就是将“源同步”看成时钟与数据的合成,都来自于输出端的驱动器就可以了。

  PCI Express的传输速率是 2.5Gbps(波特率),容许的误差范围是±300ppm。将它展开数学运算后,即可发现该总线输出端允许的频率范围就是2.49925GHz~2.50075GHz。如果用单元间距UI(Unit Interval)来计算的话, 2.5Gbps的一个单元间距为400ps,由于有±300ppm的余裕,因此,最坏的情况下应该是399.88ps~400.12ps、600ppm的两端时钟差。换句话说,经过1666个周期,可能位移了一个时钟。

  既然数据的写入与读取是有差异的,那么势必要追踪缓冲器里的数据存取状态,才能避免错误的发生。

EB在PICe中的应用

  PCI Express为EB弹性缓冲器可以在适当的时间插入或移除符号,特地规范了SKP指令集(Ordered-sets),由COM+SKP+SKP+SKP四个编码后的符号所组成。输出端则必须在最大容许范围(也就是600ppm的最坏情况下)输出SKP指令集,用来补偿两端时钟差异。

  根据PCI Express规范,输出端在1180~1538个符号时间内(不是位时间)输出SKP指令集。而弹性缓冲器在接收到的SKP指令集内,最多可插入或移除两个SKP符号以补偿两端的时钟差。至于为什么不是位时间,最主要的原因是SKP符号的插入或移除每次都是整个符号在处理,也就是4ns的时间。

  不难想像,有一种可能会让SKP指令集不能在依据规定的时间片内送出。那就是当TLP数据交易层封包很大的时候,就必须等到整个TLP封包传完之后,才能够立即将累积的待传送SKP指令集发送出去。

  由于PCI Express PHY实体层的构成元素颇多,这里只针对最为重要的三个功能区块与EB间的连接关系进行分析。这三个要素即De-serializer解串器、8b/10b解码器及Deskew解偏移电路。

EB在PCIe中的具体位置

  由于EB针对SKP指令集中SKP符号的插入或移除是以符号的层次来处理,所以EB肯定在 De-serializer解串器后面。

  其次,EB放在8b/10b解码器之前或之后似乎都很合理。但PCI Express有规定一种叫做“回路从属端(Loopback Slave)”的机能,大意是说,PCI Express设备必须将主控端送过来的10位符号原封不动地传送回去,不能有任何更改。但时钟补偿还是必须维持,因此EB只能放在8b/10b解码器之前了。

  最难理解的是EB与Deskew解偏移电路的前后关系。PCI Express总线允许多条传输通道(Lane)的构成,也就是x1/x2/x4/x8/x16/x32的构成。PCI Express允许数据在分割多条传输通道上传输,专用术语即“Byte Striping”。

  这时候问题就来了。由于驱动器或各个传输通道跑线长度不同等因素,各个传输通道的接收端有可能提前或落后,并由此产生“Lane-to-lane Skew”时间差。这就需要Deskew解偏移电路的对其进行纠正。所以,EB通常也放在Deskew解偏移电路后面。

EB的空间大小

  一般而言,EB缓冲器的大小至少取决于三个因素,它们分别是:传送SKP指令集的时间片、设备支持的最大数据承载量(Payload)及链接宽度。尽管规格明文指出:每1180~1538个符号需要送出一个SKP指令集。但有时候,TLP封包传到一半正遇上该丢SKP指令集的时间点,就必须耐心等待TLP封包完全传送出去。这就是为什么一定要郑重考虑最多数据承载量的主要原因。

  最坏的情况是:当两端PCI Express设备以x1的连接状态存在时,输出端输出最大承载量的封包后刚好也是必须输出SKP指令集的时候,可以用图8所示的数学式表达。

图8所示的数学式中的TLP_Overhead是可以定性定量算出最高值的,总共28个符号值,罗列如下:

◆ 数据框的开始符号(1个符号)

◆ 封包次序号码(2个符号)

◆ 封包标头(16个符号)

◆ ECRC(4个符号)

◆ LCRC(4个符号)

◆ 数据框的退出符号(1个符号)

  由于PCI Express允许的数据最大承载量是4096字节。根据上面数学式就可算出,最多的符号位移是3.4个;若承载量是2048字节,符号位移是2.17个(见表1)。

EB深度与数据承载量有关

  EB缓冲器实践的方法一般有两种。第一种是把EB维持在半满状态。

  正常的情况下,EB缓冲器维持在半满状态。SKP指令集中的SKP符号可以插入或移除来补偿两端的时钟差。当一个设备能够满足4096字节的承载量时,其EB缓冲器深度应该为8。

  举例来说,当局部端的时钟比较慢,也就是读取的速度比不上符号写入的速度,为了防止溢位,就可在接收到的SKP指令集中移走2个SKP符号,尽可能让EB维持在半满状态。

  另外一种实践策略是流程控制手段。这种方式并不把EB缓冲器维持在半满状态,而只维持在一个底端进入点的状态。

  局部端时钟比较快的情况下是允许下溢的。但当局部端时钟比较慢时,处理方法就与前面一样,在SKP指令集中移走SKP符号,尽可能让EB维持在正常状态。

  上述两种方式各有优点。比如说,流程控制的手段可降低缓冲器深度,等待时间(Latency)也比较短。在4096位承载量时,EB缓冲器的深度为5,因为必须加上一个底端的进入点。但这种情况的实现线路比较复杂。

  综上所述,EB的深度与数据承载量息息相关,而EB宽度取决于编码方式。

EB技术继往开来

  总之,好的技术即使发源有点久远,传承沿用也绝对是一件好事。过度开发太多新技术不见得是一种幸福,有时候还造成另一种负担。踏上知识经济的列车,小心安全行驶,方为上策。

来源:电子产品世界   作者:陈乃塘  2005/10/17 18:43:00
栏目: [ ]

相关阅读

安森美推出新的高功率图腾柱PFC控制器,满足具挑战的能效标准

动态功耗低至60μA/MHz!助力设备超长续航,首选国民技术低功耗MCU!