一、PCIe架构组件
首先先看下PCIE架构组件,下图中主要包括:
ROOT COMPLEX (RC) (CPU);
PCIE PCI/PCI-X Bridge;
PCIE SWITCH;
PCIE ENDPOINT (EP) (pcie设备);
BUFFER;
各个器件的时钟来源都是由100MHz经过Buffer后提供。一个PCIE树上最多可以有256个PCIE设备。
1、RC (ROOT COMPLEX)
RC是PCIE树的根节点,为主模式,RC可以有一个或者多个PCIE端口(port),它可以根CPU 和memory controller相接,CPU 与 PCIe 总线之间的接口可能包含一系列的组件(处理器接口,DRAM 接口等,甚至是包含多个芯片)将这些组件合起来称这一组的组件为根组件(Root Complex);或者说分隔PCIE domain和CPU/MEMORY domain。
个人理解:RC在功能上和Switch几乎一样,都是用于将一个PCIE接口拓展成多个PCIE接口,区别是RC集成在芯片内部,并且还会连接内存,类似PCI总线的根桥;
RC 存在于 PCI 树状拓扑的“根部”,代表 CPU 与系统的其余部分通信;但PCIe 协议规范并没有对 RC 进行严格定义,而是给出了一个 RC 必需功能与可选功能的列表;所以从广义上说,根组件可以被理解为系统 CPU 与 PCIe 拓扑之间的接口,这个 PCIe 端口即是 RC,在配置空间中被标记为“根端口”。
——不同处理器的RC设计并不相同,只有x86才存在PCIe总线规范定义的“标准RC”,而其它很多处理器并不存在真正意义上的RC,而只是PCIe总线控制器。
——RC与HOST主桥并不相同,RC除了完成地址空间的转换之外,还需要完成物理信号的转换(举个栗子:FSB信号协议与PCIe总线的电气特性不兼容,总线事务也不同,必须进行信号协议和总线事务的转换)。
2、Switch
提供了扇出以及聚合能力:使得单个 PCIe 端口上可以连接更多的设备,它作为数据包路由器的角色,可以根据所给数据包的地址或者其他路由信息来识别这个数据包要走哪条路径;
Switch有一个上游端口和两个或者两个以上的下游端口。上游端口是RC或者上游Switch的下游端口。
3、EP(endpoint)
EP就是终端设备,为从模式,没有转发数据的功能;
EP有三种: legacy EP,PCIE EP,RC integrated EP。
Legacy EP:就是PCI device
PCIE EP:
RC integrated EP:集成在RC内部的EP。
4、PCIE bridge
PCIE bridge就是PCI-to-PCI/PCI-X bridge。
提供了一个通往其他总线的接口。现在使用PCI总线的场景应该已经不多,不做扩展分析。
PCI的EP和RC分别对应从模式和主模式,普通的PCI RC主模式可以用于连接PCI-E以太网芯片或PCI-E的硬盘等外设。RC模式使用外设一般都有LINUX 驱动程序,安装好驱动基本都能正常使用。但是对于SOC芯片本身能做EP有能做RC 两者如何互相通信可能就需要对PCIE的使用和基本原理有所了解才能较好的使用。
接着上图的架构,我们来简单看下PCIE时钟的三种架构:
1. Common Clock Architecture (即常说的CC架构);
2. Separate Clock Architecture;
3. Data Clock Architecture;
二、PCIe 参考时钟架构
开聊之前先梳理几个概念:
- Jitter,时钟抖动,是对于同一 Clock 而言的, 是时钟源引起的,用来描述被测时钟与理想时钟在时域的偏差(单位为 ps RMS,皮秒均方根)。
- Skew,时钟偏斜,是对于多个时钟线而言的,是时钟树不平衡引起的。
- 此外还有一个概念是频率稳定性,用来描述被测时钟频率与理想时钟频率的偏差(单位 ppm,百万分之一)。
- Refclk Architecture是指 PCIe 系统中收发端设备给定参考时钟的方案。
参考时钟
PCIe Serdes 在时钟驱动下收发串行数据流。Serdes 所用时钟由 PHY 内的 PLL 生成,PLL 的参考时钟由外部提供或从接收数据流中恢复出来。
PCIe 协议指定标准的参考时钟为 HCSL 电平的 100 MHz 时钟,Gen1~Gen4 下要求收发端参考时钟精度在 ±300 ppm 以内,Gen5 要求频率稳定性 ±100 ppm。在 FPGA 应用中,为了兼顾其他 IP,采用 LVCMOS/LVDS/LVPECL 电平 125 MHz/250 MHz 的方案也较为常见。
关于参考时钟详细参数需求,已经测试测量等相关内容,本文将不会涉及,具体请参考PCIe CEM Spec和2.0或以上版本的PCIe Base Spec中的相关章节。
1. Common Refclk Architecture
即同源参考时钟架构,PCIe收发设备共用一个时钟源,是目前是使用最为广泛的方案,也是Spec推荐使用的,三种 PCIe 参考时钟架构中,Common Clock 是最为常用的一种时钟架构。
对于适用同一 Common Clock 作为参考时钟的 PCIe 设备,所有设备的参考时钟分布必须匹配到15英寸以内在系统板上。在接收端数据和时钟之间的传输延迟增量(时钟偏斜(Clock Skew))必须要小于等于12ns。通常允许PCIE卡上的时钟线长不大于4inch。特别注意这点,涉及到我们实际PCB走线。这无疑对大型电路板上或跨板的 PCIe 设备间布局布线形成巨大挑战。
采用 Common Clock 支持时钟扩频(SSC, Spread Spectrum Clock) 且对参考时钟的要求不如 Separate Clock 方案严苛。
即使系统使用了带有扩频的参考时钟源,时钟抖动也只有-300~+2800ppm,对于频率稳定性的要求是 ±300 ppm。这对于物理层中的RxCDR和TxPLL就比较友好了,可以降低RxCDR和TxPLL的复杂程度,达到节约成本的目的。
其次,当PCIe链路处于L0s或者L1状态时,即使链路上没有数据流,RxCDR依然可以设计出保持锁定的状态,这样做的好处是,链路从L0s或L1状态恢复到L0状态的时间将会更短。
缺点:
对于适用同一 Common Clock 作为参考时钟的 PCIe 设备,所有设备间的时钟偏斜(Clock Skew)必须保持在一定范围内(有部分文章介绍是12ns,我目前还没找到数据来源),大型电路板设计或者跨板的PCIe设备布局布线存在很大挑战。
优点:
·收发侧的时钟抖动jitter都是相同的,因此便于跟踪和计算
·在此架构中,支持SSC功能,很容易达到600 ppm的指标
·即使收发端进入L0S和L1低功耗状态,refclk仍然是可用的,即使在缺少bit流提供数据边沿(in the absence of a bit stream to supply the edges in the data)的情况下,接收器的CDR仍然能够保持恢复时钟的平衡,有效阻止了本地PLL的偏移,相对于其他时钟方案,恢复到L0状态所需时间最少。
总结:Common Refclk Architecture 稳定性好,支持SSC,是目前应用最广泛的参考时钟方案,也是最推荐的设计方案。
2.Separate Clock Architecture
即独立参考时钟架构,收发端采用独立的参考时钟。 PCIe Spec强烈不推荐使用这种参考时钟架构,尽管这是其提出的三种参考时钟架构之一。
PCIe Spec强调,如果使用这种架构,扩频时钟必须被禁止使用(2.5GT/s & 5GT/s),因为这中情况下使用扩频时钟的话,CDR的带宽需甚至需要大于5600ppm,这对于CDR来说是非常大的挑战。
对于收发端采用独立参考时钟的方案,其收发端独立使用不同的参考时钟源,无需单独传递时钟,对布局布线的要求更宽松。SRNS 允许 ±300 ppm (600ppm),而 SRIS 允许 ±2800 ppm (5600 ppm,其中SSC允许 5000ppm,TX/RX允许 600 ppm)。
根据有无 SSC 可进一步分为 SRNS ( Separate Refclk with No SSC) 及 SRIS (Separate Refclk with Independent SSC)。
SRNS:不使用SSC功能,时钟抖动更小,不需要额外加大弹性缓存(Elastic Buffer)的深度
SRIS: 使用SSC功能,能够有效减少电磁干扰(EMI),但是时钟抖动增加,需要额外加大弹性缓存(Elastic Buffer)的深度。
相对于SRNS,SRIS:开启了SSC,接收侧观察到的时钟抖动会加大,因此发生SKP的频率会增加,因此在物理层需要加大弹性缓存(Elastic Buffer)的深度,用于消除开启SSC的负面影响。但是弹性缓存(Elastic Buffer)深度加大后,数据传输路径延时也增加了。
若 PCIe 设备开启了 SRIS,其发生 SKP 的频率应该加大,同时加大弹性缓存(Elastic Buffer)的深度。弹性缓存加大使得延时更大,在一定程度上降低了 performance。对于一条 PCIe 链路,如何知道要不要采用 SRIS 呢?遗憾的是,目前尚没有机制实现收发端之间的 SRIS 协商。
需要注意的是,PCIe Base Spec V3.x中,提到对于8GT/s的PCIe链路而言,在Separate Refclk Architecture下实现扩频时钟也是可行的(即Separate Refclk With Independent SSC (SRIS) Architecture),但是需要更复杂的CDR设计,具体请参考Spec相关章节。
优点:参考时钟独立,参考时钟不需要穿越背板和连接器,从而使PCB设计变得更为简单,使得架构更加的灵活。
缺点:接收侧观察到的时钟抖动(jitter)是两端参考时钟jitter的组合,并且不利于计算,使得参考时钟的设计更加严格。在此模式下,支持SSC模式对设计提出了更高的要求,例如物理层CDR设计更加复杂,物理层需要更大的缓存。
3.Data Clock Architecture
即数据时钟参考时钟架构,仅发送端需要 Refclk,接收端无需外部 RefClk,接收端物理层从数据流中恢复出时钟提供给 CDR(Clock Data Recovery,时钟数据恢复)作为参考时钟。
这种参考时钟架构最为简洁,也是三种方案中最易实现的方案。Rx端器件的CDR并不需要外部参考时钟,而是直接从数据流中恢复出时钟。
Data Clocked Refclk Architecture在PCIe2.0中首次,PCIe3.0中保留了这项技术,该方案仅适用于 Gen2 及 Gen3,单 lane 单向最高速率 8GT/s。但是在PCIe4.0又丢弃了。因此不推荐使用,慎用,有些不支持。
不过这种结构的RxCDR几乎很少在FPGA的SerDes中使用,因为在没有外部参考时钟的协助下,CDR实现锁定都是一个很大的挑战,还要保证在5600ppm的抖动范围内不失锁(对于带有扩频时钟的PCIe链路来说)。
注:绝大部分的FPGA SerDes都是多协议SerDes,除了支持PCIe外,往往还需要支持其他主流的串行协议,比如SATA、USB、DisplayPort、HDMI、Ethernet (Q)SGMII、CoaXpress、CPRI、FPD-Link II/III、Serial RapidIO、SLVS-EC等等。这种参考时钟架构对于PCIe来说行得通,对于其他的某些串行协议来说可能是无法实现的。
优点:实现简单,Data Clock 时钟方案是三种方案中最易实现的方案,其无需外部参考时钟
缺点:PCIe4.0 没有保留此方案,不推荐使用。
注意,虽说PCIE时钟有三种架构,但是最常用的还是CC架构,无特殊情况,不要使用其他时钟架构,如果真的要使用其他两种架构,也需要严谨评估先。
从下表可知,展频跟非CC架构慎用。
鉴于PCIE时钟要求多且复杂的,故此文章给出主要的参数要求,其它详细的要求以及测试方法,后续有机会再编写分享。
信号要求:
PCIE_CLK_P/N是差分信号,通常差分阻抗为100Ω,少部分要求85Ω。
电平:HCSL or LP-HCSL。
频率:100±0.03MHz。
频率稳定度:±300ppm,越小越好。
占空比:50%±10%。
抖动:如下CC模式的要求:
注意:上图给出的是CC时钟架构下的抖动要求;仿真PCIE4.0时候,抖动是按照0.7ps RMS来的;仿真PCIE5.0时候,抖动是按照0.25ps RMS来的;因为标准考虑了实际系统中的额外噪声,故会比较严格。
提到PCIE时钟,相信大部分人会联想到CLKREQ#:
很多时候有疑问,CLKREQ#是否要接,首先要知道的是,这个信号是可选的,可要可不要。那么什么时候需要呢?如果要支持L1-PM子状态(ASPM(Active State Power Management)中的状态)和/支持时钟电源管理,那么这个信号就是必要的(即使你不是使用的CC模式)。
注意:如果硬件电路这个CLKREQ#没接的话,可让BIOS把PCIE中的ASPM的L1状态默认关闭,不然容易出现异常现象。
扩频时钟
什么是SSC?展频时钟全称Spread Spectrum Clocking 。
顾名思义是一种对时钟频率进行调制以削平时钟产生的峰值能量的技术,可降低由时钟基频及其谐波信号产生的EMI尖峰,从而优化系统EMC结果(含传导与辐射骚扰);
由于信号的能量过于集中在其载波频率位置,导致信号的能量在某一频点位置处的产生过大的辐射发射。为了有效地降低EMI辐射,芯片厂家在设计芯片时也给容易产生EMI的信号增加了SSC扩频时钟的功能,频率变化的时钟,其频谱能量被分散在一定频谱范围上。当前PCIE、SATA、SAS、USB3.0等高速芯片都支持SSC的功能。采用SSC的功能可以有效的降低信号所产生的EMI。
展频的基本原理是通过将窄带信号转换为宽带信号,将能量分散在一定的宽频范围内,从而降低EMI的影响,如下图所示。
扩频时钟可以抑制电磁干扰(EMI)。为了降低 PCIe 时钟及数据线的电磁辐射、增强高速数据传输可靠性,PCIe 时钟可以采用 SSC 对参考进行时钟扩频。Gen1~Gen5 都支持 SSC,但只有 Gen3 及以上支持 SRIS。
PCIe 扩频模式为向下扩频,扩频范围为-0.5%~0%,确保最大频率在标称频率之下。最大调制幅度为 -0.5%!
调制频率为 30 KHz ~ 33 KHz,确保 PLL 能够跟得上,同时减小音频噪声的引入。调制波形采用三角波,该波形易于实现,且调制后的频谱接近均匀分布。
注意:30 KHz ~ 33 KHz 是指频率随时间周期变化的频率,不是展宽的带宽,带宽为时钟频率的 0.5% 。
扩频时钟对于PCIe来说是可选的,并非是强制的。如果选择支持扩频时钟的话,需满足以下要求:
※ 调制范围为+0%到-0.5%,即向下扩频(Down Spreading),如下图所示
※ 调制频率必须在30KHz到33KHz,一般为三角波
※ 参考时钟源的抖动(Jitter)需在300ppm以内
带有SSC的参考时钟频率变化曲线如下图所示:
注:为什么选用的是向下扩频,而不是中心扩频或者向上扩频?主要是考虑到,当100MHz已经是系统最靠基准频率的话, 向上扩频或者中心扩频会导致系统基准频率超过最高值,进而可能引发系统工作异常。
注:三角波的能力较为集中在低次谐波中,相比于正弦波,方波或者锯齿波,更适合用于SSC中。
PCIe CC架构
更多扩频相关介绍,请查看参考资料:http://blog.chinaaet.com/justlxy/p/5100064134。
三、PCIe时钟实现方法和参考设计
1.使用有容微GM5528或GM5508时钟清抖器/时钟产生器芯片输出HCSL 100MHz时钟
GM5528/GM5508输出HCSL 100MHz时钟的相噪/抖动测试
GM5528/GM5508输出HCSL 100MHz 抖动数据 vs PCIe时钟标准要求
可见:GM5528/GM5508输出的HCSL 100MHz时钟符合PCIe Gen1/2/3/4/5/6 (CC)标准
(*说明:GM5528支持多达14路输出,GM5508支持多达8路输出)
2.使用有容微GM5351A时钟产生器芯片输出HCSL 100MHz时钟
GM5351A时钟产生器芯片本身是3路2.5KHz-250MHz之间任意频率的单端输出,但是可以使用双通道(一般使用CLKout0和CLKout1,因为这两路输出PIN脚相邻便于设计)做反相配置实现HCSL的差分输出,且达到PCIe Gen2/Gen3标准:
GM5351A输出HCSL 100MHz 抖动vs PCIe时钟标准要求
3.使用有容微GM50301/GM50304时钟缓冲器芯片输出HCSL 100MHz时钟
GM50301/GM50304输出HCSL 100MHz抖动测试