Felix

技术源于积累,成功始于执着! 个人邮箱:justlxy@mail.dhu.edu.cn QQ:1576109464

PCIe扫盲——弹性缓存(Elastic Buffer/ CTC Buffer)

1
阅读(5938) 评论(6)

连载目录篇:http://blog.chinaaet.com/justlxy/p/5100057779


前面在介绍PCIe物理层逻辑子层的文章中,有提到过弹性缓存(Elastic Buffer,又称为CTC Buffer或者Synchronization Buffer)。其本质上是一种FIFO,主要用于解决跨时钟域问题。当然,PCIe的弹性缓存还用于补偿时钟误差(Compensate for the clock differences)。实际上,除了PCIe,弹性缓存还广泛应用于其它的高速串行接口——USB、InfiniBand、Fibre Channel、Gigabit Ethernet等基于SerDes的应用。

由于PCIe采用的基于8b/10b的嵌入式源同步时钟,接收端存在两个时钟域:一个是通过CDR从数据流中解析出来的时钟,用该时钟对数据进行采样;另一个是本地时钟域,用于其他的逻辑的。借助弹性缓存(FIFO),可以实现数据在这两个时钟域的转换。

以PCIe Gen1为例,链路上的数据速率为2.5Gbps。但实际上,任何晶振(或者其他频率发生器)都是有误差的,PCIe Spec允许的误差范围为±300ppm(Parts Per Million)。即,链路上实际的频率范围为2.49925GHz~2.50075GHz。借助弹性缓存,通过删除或者插入SKP Ordered Set可以消除链路频率误差的影响。如下图所示:

image.png

需要注意的是PCIe Spec并没有规定弹性缓存的具体位置,设计者可以将弹性缓存放在8b/10b解码器之前,也可以把弹性缓存放在8b/10b解码器之后。不过,Mindshare的建议是将弹性缓存放置于8b/10b解码器之前的。

当本地时钟域的时钟(Local Clock)的速度比数据流通过CDR解析出的时钟(Recovered Clock)的时钟要快时,且弹性缓存即将被读空之前,可以向SKP Ordered Set中插入1~2个SKP。如下图所示:

image.png

当本地时钟域的时钟(Local Clock)的速度比数据流通过CDR解析出的时钟(Recovered Clock)的时钟要慢时,且弹性缓存即将溢出之前,可以从SKP Ordered Set中移除1~2个SKP。如下图所示:

image.png

需要特别注意的是,Intel提出的PIPE规范(并非PCI-SIG强制的规范,具体参考前面关于PIPE的文章)中,只允许每次从一个SKP Ordered Set中插入或者移除一个SKP。如果需要插入或者移除两个SKP,则需要对两个SKP Ordered Set进行操作。如下图所示:

image.png

 

 


  1. @Nicola1991   

    这里是否应该叫弹性缓冲?缓冲和缓存不是一样的

    严格来说,是应翻译为弹性缓冲,以区别于常说的CPU的n级缓存等类似概念。

  2. 这里是否应该叫弹性缓冲?缓冲和缓存不是一样的

  3. @dugu9jian   

    在L0的状态会进行补偿时钟误差吗?

    时钟误差补偿是自发的,和LTSSM的具体状态没有关系

  4. 在L0的状态会进行补偿时钟误差吗?

  5. PCI Express Base Specification Revision 5.0 Version 1.0

    4.2.7.2 SKP Ordered Set for 128b/130b Encoding

    When using 128b/130b encoding, a transmitted SKP Ordered Set is 16 Symbols, and a received SKP Ordered set can be 8, 12, 16, 20, or 24 Symbols.

    (In the 128b/130b encoding scheme, the Symbol is one byte long, similar to the 10-bit Symbol of 8b/10b encoding.)

  6. PCI Express Base Specification Revision 5.0 Version 1.0

    4.2.7.1 SKP Ordered Set for 8b/10b Encoding

    When using 8b/10b encoding, a transmitted SKP Ordered Set is a COM Symbol followed by three SKP Symbols, except as is allowed for a Loopback Slave in the Loopback.Active LTSSM state. A received SKP Ordered Set is a COM Symbol followed by one to five SKP Symbols. See Section 4.3.6.7 for Retimer rules on SKP Ordered Set modification.