2020年12月28日14:09:06
该信号为全局复位信号,由处理器系统提供,处理器系统需要为PCIe插槽和PCIe设备提供该复位信号;
PCIe设备使用该信号复位内部逻辑。当该信号有效时,PCIe设备将进行复位操作。PCIe总线定义了多种复位方式,其中Cold Reset和Warm Reset这两种复位方式的实现与该信号有关。
为了支持热插拔,在原理图设计时,在该引脚和GND之间接一个1000pF的电容,热插拔时能进行复位。
当一个PCIe设备的Vcc电源上电后,处理器系统将置该设备的PERST#信号为有效,此时将引发PCIe设备的复位方式,这种方式属于Fundamental Reset。PCIe设备进行Clod Reset时,所有使用Vcc进行供电的寄存器和PCIe端口逻辑将无条件进入初始状态。但是使用这种方式依然无法复位使用Vaux(备用电源)供电的寄存器和逻辑,这些寄存器和逻辑只能在处理器完全掉电时彻底复位。
在一个处理器系统中,可能含有许多PCIe设备,这些设备可以作为Add-In card与PCIe插槽连接,也可以作为内置模块,与处理器系统提供的PCIe链路直接相连,而不需要经过PCIe插槽。PCIe设备与PCIe插槽都具有REFCLK+和REFCLK-信号,其中PCIe插槽使用这组信号与处理器系统同步。
在一个处理器系统中,通常采用专用逻辑向PCIe插槽提供REFCLK+和REFCLK-信号。其中100MHz的时钟源由晶振提供,并经过一个“一推多”的差分时钟驱动器生成多个同相位的时钟源,与PCIe插槽一一对应连接。
PCIe的REFCLK+/-使用的是LPHCSL电平
PCIe插槽需要使用参考时钟,其频率范围为100MHz±300ppm,单端摆幅为0~0.7V。处理器系统需要为每一个PCIe插槽、MCH、ICH和Switch提供参考时钟。而且要求在一个处理器系统中,时钟驱动器产生的参考时钟信号到每一个PCIe插槽(MCH、ICH和Swith)的距离差在15英寸之内。通常信号的传播速度接近光速,约为6 in/ns,由此可见,不同PCIe插槽间REFCLK+和REFCLK-信号的传送延时差最大约为2.5ns
当PCIe设备作为Add-In卡连接在PCIe插槽时,可以直接使用PCIe插槽提供的REFCLK+和REFCLK-信号,也可以使用独立的参考时钟,只要这个参考时钟在100MHz±300ppm范围内即可。内置的PCIe设备与Add-In卡在处理REFCLK+和REFCLK-信号时使用的方法类似,但是PCIe设备可以使用独立的参考时钟,而不使用REFCLK+和REFCLK-信号。
在PCIe设备配置空间的Link Control Register中,含有一个“Common Clock Configuration”位。当该位为1时,表示该设备与PCIe链路的对端设备使用“同相位”的参考时钟;如果为0,表示该设备与PCIe链路的对端设备使用的参考时钟是异步的。
在PCIe设备中,“Common Clock Configuration”位的缺省值为0,此时PCIe设备使用的参考时钟与对端设备没有任何联系,PCIe链路两端设备使用的参考时钟可以异步设置。这个异步时钟设置方法对于使用PCIe链路进行远程连接时尤为重要
当PCIe设备进入休眠状态,主电源已经停止供电时,PCIe设备使用该信号向处理器系统提交唤醒请求,使处理器系统重新为该PCIe设备提供主电源Vcc。在PCIe总线中,WAKE#信号是可选的,因此使用WAKE#信号唤醒PCIe设备的机制也是可选的。值得注意的是产生该信号的硬件逻辑必须使用辅助电源Vaux供电。
WAKE#是一个Open Drain信号,一个处理器的所有PCIe设备可以将WAKE#信号进行线与后,统一发送给处理器系统的电源控制器。当某个PCIe设备需要被唤醒时,该设备首先置WAKE#信号有效,然后再经过一段延时之后,处理器系统开始为该设备提供主电源Vcc,并使用PERST#信号对该设备进行复位操作。此时WAKE#信号需要始终保持为低,当主电源Vcc上电完成之后,PERST#信号也将置为无效并结束复位,WAKE#信号也将随之置为无效,结束整个唤醒过程。
PCIe设备除了可以使用WAKE#信号实现唤醒功能外,还可以使用Beacon信号实现唤醒功能。与WAKE#信号实现唤醒功能不同,Beacon使用In-band信号,即差分信号D+和D-实现唤醒功能。Beacon信号DC平衡,由一组通过D+和D-信号生成的脉冲信号组成。这些脉冲信号宽度的最小值为2ns,最大值为16us。当PCIe设备准备退出L2状态(该状态为PCIe设备使用的一种低功耗状态)时,可以使用Beacon信号,提交唤醒请求
SMCLK和SMDAT信号与x86处理器的SMBus(System Mangement Bus)相关。SMBus于1995年由Intel提出,SMBus由SMCLK和SMDAT信号组成。SMBus源于I2C总线,但是与I2C总线存在一些差异。
SMBus的最高总线频率为100KHz,而I2C总线可以支持400KHz和2MHz的总线频率。此外SMBus上的从设备具有超时功能,当从设备发现主设备发出的时钟信号保持低电平超过35ms时,将引发从设备的超时复位。在正常情况下,SMBus的主设备使用的总线频率最低为10KHz,以避免从设备在正常使用过程中出现超时。
在SMbus中,如果主设备需要复位从设备时,可以使用这种超时机制。而I2C总线只能使用硬件信号才能实现这种复位操作,在I2C总线中,如果从设备出现错误时,单纯通过主设备是无法复位从设备的。
SMBus还支持Alert Response机制。当从设备产生一个中断时,并不会立即清除该中断,直到主设备向0b0001100地址发出命令
JTAG(Joint Test Action Group)是一种国际标准测试协议,与IEEE 1149.1兼容,主要用于芯片内部测试。目前绝大多数器件都支持JTAG测试标准。JTAG信号由TRST#、TCK、TDI、TDO和TMS信号组成。其中TRST#为复位信号;TCK为时钟信号;TDI和TDO分别与数据输入和数据输出对应;而TMS信号为模式选择
PRSNT1#和PRSNT2#信号与PCIe设备的热插拔相关。在基于PCIe总线的Add-in卡中,PRSNT1#和PRSNT2#信号直接相连,而在处理器主板中,PRSNT1#信号接地,而PRSNT2#信号通过上拉电阻接为高
当Add-In卡没有插入时,处理器主板的PRSNT2#信号由上拉电阻接为高,而当Add-In卡插入时主板的PRSNT2#信号将与PRSNT1#信号通过Add-In卡连通,此时PRSNT2#信号为低。处理器主板的热插拔控制逻辑将捕获这个“低电平”,得知Add-In卡已经插入,从而触发系统软件进行相应地处理。
Add-In卡拔出的工作机制与插入类似。当Add-in卡连接在处理器主板时,处理器主板的PRSNT2#信号为低,当Add-In卡拔出后,处理器主板的PRSNT2#信号为高。处理器主板的热插拔控制逻辑将捕获这个“高电平”,得知Add-In卡已经被拔出,从而触发系统软件进行相应地处理。
不同的处理器系统处理PCIe设备热拔插的过程并不相同,在一个实际的处理器系统中,热拔插设备的实现也远比上图中的示例复杂得多。值得注意的是,在实现热拔插功能时,Add-in Card需要使用“长短针”结构。
PRSNT1#和PRSNT2#信号使用的金手指长度是其他信号的一半。因此当PCIe设备插入插槽时,PRSNT1#和PRSNT2#信号在其他金手指与PCIe插槽完全接触,并经过一段延时后,才能与插槽完全接触;当PCIe设备从PCIe插槽中拔出时,这两个信号首先与PCIe插槽断连,再经过一段延时后,其他信号才能与插槽断连。系统软件可以使用这段延时,进行一些热拔插处理
由于PCIe的速率越来越高,而普通的PCB板材和接插件对信号的传输损耗较严重,因此PCIe G1和G2在发送端都采用了去加重技术(De-emphasis),即发送端在发送信号时对跳变位之后的信号(代表信号中的低频成分)减小幅度发送,这样可以部分补偿一下传输线路对高频成分的衰减,从而得到比较好的眼图(信号摆幅小,眼图高度低,功耗小,EMC辐射小)。
PCIe G1中采用的是-3.5dB的去加重,G2中采用的是-3.5dB和-6dB的去加重。对于G3,由于信号速率更高,需要采用更加复杂的二阶去加重技术,即除了跳变位减小幅度(De-emphasis)发送外,在跳变位的前一位也要增大幅度发送,这个增大的幅度通常叫做Preshoot。
为了应对复杂的链路环境,PCIe G3中规定了共11种不同的Preshoot和De-emphasis的组合(Preset),实际应用中Tx和Rx端可以在Link Training阶段协商出一个最优的Preset值。
PCIe G3除了在发送端对信号高频进行补偿,在接收端还要对信号做均衡(Equalization),就是在Rx端的接收芯片内增加一个均衡电路,可以抬高接收到的信号中的高频分量,从而对线路的损耗进行进一步的补偿。均衡器的强弱也有很多档可选,在Link Training阶段Tx和Rx端会协商出一个最佳的组合
PCIe接口的电源包括+12V、+3.3V、+3.3Vaux三种。根据功耗的不同,三种电压的供电能力不同,PCIe卡可以分为以下几种:
10W,直接通过金手指提供;
25W,直接通过金手指提供;
75W,直接通过金手指提供;
150W,需同时通过金手指和2×3Connector提供;
225W,需同时通过金手指和2×4Connector提供;
300W,需同时通过金手指和2×3Connector和2×4 Connector提供;
PCIe卡和RC建立连接后,Link power management states有如下几种:
L0 – Active state. 是工作状态,所有的PCIe操作都可以进行。
L0s – A low resume latency, energy saving “standby” state. 是节能的待机状态,但是能很快恢复到工作状态。
L1 – Higher latency, lower power “standby” state. 是低能耗的待机状态,需要比L0s更多的时间恢复到工作状态。
L2/L3 Ready – Staging point for L2 or L3.
L2 – Auxiliary-powered Link, deep-energy-saving state. 使用辅助供电,深度节能状态,实现上面属于可选的状态。
L3 – Link Off state. 是完全关闭的状态。
LDn – A transitional Link Down pseudo-state prior to L0.
PCIe总线规范 | 总线频率 | 单Lane的峰值带宽 | 编码方式 |
---|---|---|---|
1.X | 1.25GHZ | 2.5GT/s | 8/10b编码 |
2.X | 2.5GHZ | 5GT/s | 8/10b编码 |
3.X | 4GHZ | 8GT/s | 128/130b编码 |
4.X | 8GHZ | 16GT/s | 128/130b编码 |
例:双工PCI-E 1.0 X1,其带宽 = 25001/818/101*2=500 MB/s
PCIe链路使用端到端的数据传送方式。在一条PCIe链路中,这两个端口是完全对等的,分别连接发送与接收设备,而且一个PCIe链路的一端只能连接一个发送设备或者接收设备。因此PCIe链路必须使用Switch扩展PCIe链路后,才能连接多个设备。使用Switch进行链路扩展的实例如图4‑5所示
在PCIe总线中,Switch是一个特殊的设备,该设备由1个上游端口和2~n个下游端口组成。PCIe总线规定,在一个Switch中可以与RC直接或者间接相连的端口为上游端口,在PCIe总线中,RC的位置一般在上方,这也是上游端口这个称呼的由来。在Switch中除了上游端口外,其他所有端口都被称为下游端口。下游端口一般与EP(endpoint)相连,或者连接下一级Switch继续扩展PCIe链路。其中与上游端口相连的PCIe链路被称为上游链路,与下游端口相连的PCIe链路被称为下游链路。
上游链路和下游链路是一个相对的概念。如上图所示,Switch与EP2连接的PCIe链路,对于EP2而言是上游链路,而对Switch而言是下游链路。
在Switch中,还有两个与端口相关的概念,分别是Egress端口和Ingress端口。这两个端口与通过Switch的数据流向有关。其中Egress端口指发送端口,即数据离开Switch使用的端口;Ingress端口指接收端口即数据进入Switch使用的端口。
Egress端口和Ingress端口与上下游端口没有对应关系。在Switch中,上下游端口可以作为Egress端口,也可以作为Ingress端口。如图4‑5所示,RC对EP3的内部寄存器进行写操作时,Switch的上游端口为Ingress端口,而下游端口为Egress端口;当EP3对主存储器进行DMA写操作时,该Switch的上游端口为Egress端口,而下游端口为Ingress端口。
PCIe总线还规定了一种特殊的Switch连接方式,即Crosslink连接模式。支持这种模式的Switch,其上游端口可以与其他Switch的上游端口连接,其下游端口可以与其他Switch的下游端口连接。
PCIe总线提供CrossLink连接模式的主要目的是为了解决不同处理器系统之间的互连,如图4‑6所示。使用CrossLink连接模式时,虽然从物理结构上看,一个Switch的上/下游端口与另一个Switch的上/下游端口直接相连,但是这个PCIe链路经过训练后,仍然是一个端口作为上游端口,而另一个作为下游端口。
处理器系统1与处理器系统2间的数据交换可以通过Crosslink进行。当处理器系统1(2)访问的PCI总线域的地址空间或者Requester ID不在处理器系统1(2)内时,这些数据将被Crosslink端口接收,并传递到对端处理器系统中。Crosslink对端接口的P2P桥将接收来自另一个处理器域的数据请求,并将其转换为本处理器域的数据请求。 使用Crosslink方式连接两个拓扑结构完全相同的处理器系统时,仍然有不足之处。假设图4‑6中的处理器系统1和2的RC使用的ID号都为0,而主存储器都是从0x0000-0000开始编址时。当处理器1读取EP2的某段PCI总线空间时,EP2将使用ID路由方式,将完成报文传送给ID号为0的PCI设备,此时是处理器2的RC而不是处理器1的RC收到EP2的数据。因为处理器1和2的RC使用的ID号都为0,EP2不能区分这两个RC。
由上所述,使用Crosslink方式并不能完全解决两个处理器系统的互连问题,因此在有些Switch中支持非透明桥结构。这种结构与PCI总线非透明桥的实现机制类似,本章对此不做进一步说明。
使用非透明桥仅解决了两个处理器间数据通路问题,但是不便于NUMA结构对外部设备的统一管理。PCIe总线对此问题的最终解决方法是使用MR-IOV技术,该技术要求Switch具有多个上游端口分别与不同的RC互连,如图6
即便MR-IOV技术可以合理解决多个处理器间的数据访问和对PCIe设备的配置管理,使用PCIe总线进行两个或者多个处理器系统间的数据传递仍然是一个不小问题。因为PCIe总线的传送延时仍然是制约其在大规模处理器系统互连中应用的重要因素
PCIx系列之“PCIe总线信号介绍”
PCIx系列之“PCIe总线AC耦合及信号调整”
预加重、去加重和均衡
PCIx系列之“PCIe总线复位”
PCIx系列之“PCIe总线电源管理”
PCIe总线的基础知识
PCI Express