PCIe基础知识文档 PCIe 总线的基础知识 与 PCI 总线不同,PCIe 总线使用端到端的连接方式,在一条 PCIe 链路的两端只能各连接一个设备,这两个设备互为是数据发送端和数据接收端PCIe 总线除了总线链路外,还具有多个层次,发送端发送数据时将通过这些层次,而接收端接收数据时也使用这些层次PCIe总线使用的层次结构与网络协议栈较为类似 4.1.1 端到端的数据传递 PCIe 链路使用端到端的数据传送方式,发送端和接收端中都含有 TX(发送逻辑)和 RX(接收逻辑),其结构如图 4-1 所示 由上图所示,在 PCIe 总线的物理链路的一个数据通路(Lane)中,由两组差分信号,共 4 根信号线组成其中发送端的 TX 部件与接收端的 RX 部件使用一组差分信号连接,该链路也被称为发送端的发送链路,也是接收端的接收链路;而发送端的 RX 部件与接收端的 TX 部件使用另一组差分信号连接,该链路也被称为发送端的接收链路,也是接收端的发送链路一个 PCIe 链路可以由多个 Lane 组成 高速差分信号电气规范要求其发送端串接一个电容,以进行 AC 耦合该电容也被称为 AC耦合电容PCIe 链路使用差分信号进行数据传送,一个差分信号由 D+和 D-两根信号组成,信号接收端通过比较这两个信号的差值,判断发送端发送的是逻辑1还是逻辑0。
与单端信号相比,差分信号抗干扰的能力更强,因为差分信号在布线时要求等长、 等宽、贴近,而且在同层因此外部干扰噪声将被同值而且同时加载到 D+和 D-两根信号上,其差值在理想情况下为 0,对信号的逻辑值产生的影响较小因此差分信号可以使用更高的总线频率 此外使用差分信号能有效抑制电磁干扰 EMI(Electro Magnetic Interference)由于差分信号 D+与 D-距离很近而且信号幅值相等、极性相反这两根线与地线间耦合电磁场的幅值相等,将相互抵消,因此差分信号对外界的电磁干扰较小当然差分信号的缺点也是显而易见的,一是差分信号使用两根信号传送一位数据;二是差分信号的布线相对严格一些 PCIe 链路可以由多条 Lane 组成,目前 PCIe 链路可以支持 1、2、4、8、12、16 和 32 个 Lane,即×1、×2、×4、×8、×12、×16 和×32 宽度的 PCIe 链路每一个 Lane 上使用的总线频率与 PCIe 总线使用的版本相关 第 1 个 PCIe 总线规范为 V1.0,之后依次为 V1.0a,V1.1,V2.0 和 V2.1。
目前 PCIe 总线的最新规范为 V2.1,而 V3.0 正在开发过程中,预计在 2022 年发布不同的 PCIe 总线规范所定义的总线频率和链路编码方式并不相同,如表 4-1 所示 表 4-1 PCIe 总线规范与总线频率和编码的关系 PCIe 总线规范 总线频率1[1] 单 Lane 的峰值带宽 编码方式 1.x 1.25GHz 2.5GT/s 8/10b 编码 2.x 2.5GHz 5GT/s 8/10b 编码 3.0 4GHz 8GT/s 128/130b 编码 如上表所示,不同的 PCIe 总线规范使用的总线频率并不相同,其使用的数据编码方式也不相同PCIe 总线 V1.x 和 V2.0 规范在物理层中使用 8/10b 编码,即在 PCIe 链路上的 10 bit中含有 8 bit 的有效数据;而 V3.0 规范使用 128/130b 编码方式,即在 PCIe 链路上的 130 bit中含有 128 bit 的有效数据 由上表所示,V3.0 规范使用的总线频率虽然只有 4GHz,但是其有效带宽是 V2.x 的两倍下文将以 V2.x 规范为例,说明不同宽度 PCIe 链路所能提供的峰值带宽,如表 4-2 所示。
表 4-2 PCIe 总线的峰值带宽 PCIe 总线的数据位宽 ×1 ×2 ×4 ×8 ×12 ×16 ×32 峰值带宽(GT/s) 5 10 20 40 60 80 160 由上表所示,×32 的 PCIe 链路可以提供 160GT/s 的链路带宽,远高于 PCI/PCI-X 总线所能提供的峰值带宽而即将推出的 PCIe V3.0 规范使用 4GHz 的总线频率,将进一步提高 PCIe链路的峰值带宽 在 PCIe 总线中,使用 GT(Gigatransfer)计算 PCIe 链路的峰值带宽GT 是在 PCIe 链路上传递的峰值带宽,其计算公式为总线频率×数据位宽×2 在 PCIe 总线中,影响有效带宽的因素有很多,因而其有效带宽较难计算,这部分内容详见第 8.4.1 节尽管如此,PCIe 总线提供的有效带宽还是远高于 PCI 总线PCIe 总线也有其弱点,其中最突出的问题是传送延时 PCIe 链路使用串行方式进行数据传送,然而在芯片内部,数据总线仍然是并行的,因此 PCIe链路接口需要进行串并转换,这种串并转换将产生较大的延时。
除此之外 PCIe 总线的数据报文需要经过事务层、数据链路层和物理层,这些数据报文在穿越这些层次时,也将带来延时本书将在第 8.4 节详细讨论 PCIe 总线的延时与带宽之间的联系 在基于 PCIe 总线的设备中,×1 的 PCIe 链路最为常见,而×12 的 PCIe 链路极少出现,×4和×8 的 PCIe 设备也不多见Intel 通常在 ICH 中集成了多个×1 的 PCIe 链路用来连接低速外设,而在 MCH 中集成了一个×16 的 PCIe 链路用于连接显卡控制器而 PowerPC 处理器通常能够支持×8、×4、×2 和×1 的 PCIe 链路 PCIe 总线物理链路间的数据传送使用基于时钟的同步传送机制,但是在物理链路上并没有时钟线,PCIe 总线的接收端含有时钟恢复模块 CDR(Clock Data Recovery),CDR 将从接收报文中提取接收时钟,从而进行同步数据传递 值得注意的是,在一个 PCIe 设备中除了需要从报文中提取时钟外,还使用了 REFCLK+和REFCLK-信号对作为本地参考时钟,这个信号对的描述见下文。
4.1.2 PCIe 总线使用的信号 PCIe 设备使用两种电源信号供电,分别是 Vcc 与 Vaux,其额定电压为 3.3V其中 Vcc 为主电源,PCIe 设备使用的主要逻辑模块均使用 Vcc 供电,而一些与电源管理相关的逻辑使用Vaux 供电在 PCIe 设备中,一些特殊的寄存器通常使用 Vaux 供电,如 Sticky Register,此时即使 PCIe 设备的 Vcc 被移除,这些与电源管理相关的逻辑状态和这些特殊寄存器的内容也不会发生改变 在 PCIe 总线中,使用 Vaux 的主要原因是为了降低功耗和缩短系统恢复时间因为 Vaux 在多数情况下并不会被移除,因此当 PCIe 设备的 Vcc 恢复后,该设备不用重新恢复使用 Vaux供电的逻辑,从而设备可以很快地恢复到正常工作状状态 PCIe 链路的最大宽度为×32,但是在实际应用中,×32 的链路宽度极少使用在一个处理器系统中,一般提供×16的PCIe插槽,并使用PETp0~15、PETn0~15和PERp0~15、PERn0~15共 64 根信号线组成 32 对差分信号,其中 16 对 PETxx 信号用于发送链路,另外 16 对 PERxx信号用于接收链路。
除此之外 PCIe 总线还使用了下列辅助信号 1 PERST#信号 该信号为全局复位信号,由处理器系统提供,处理器系统需要为 PCIe 插槽和 PCIe 设备提供该复位信号PCIe 设备使用该信号复位内部逻辑当该信号有效时,PCIe 设备将进行复位操作PCIe 总线定义了多种复位方式,其中 Cold Reset 和 Warm Reset 这两种复位方式的实现与该信号有关,详见第 4.1.5 节 2 REFCLK+和 REFCLK-信号 在一个处理器系统中,可能含有许多 PCIe 设备,这些设备可以作为 Add-In 卡与 PCIe 插槽连接,也可以作为内置模块,与处理器系统提供的 PCIe 链路直接相连,而不需要经过 PCIe插槽PCIe 设备与 PCIe 插槽都具有 REFCLK+和 REFCLK-信号,其中 PCIe 插槽使用这组信号与处理器系统同步 在一个处理器系统中,通常采用专用逻辑向 PCIe 插槽提供 REFCLK+和 REFCLK-信号,如图 4-2 所示其中 100Mhz 的时钟源由晶振提供,并经过一个一推多的差分时钟驱动器生成多个同相位的时钟源,与 PCIe 插槽一一对应连接。
PCIe 插槽需要使用参考时钟,其频率范围为 100MHz±300ppm处理器系统需要为每一个PCIe 插槽、MCH、ICH 和 Switch 提供参考时钟而且要求在一个处理器系统中,时钟驱动器产生的参考时钟信号到每一个 PCIe 插槽(MCH、ICH 和 Swith)的距离差在 15 英寸之内通常信号的传播速度接近光速,约为 6 英寸/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 链路进行机箱到机箱间的互连,因为参考时钟可以异步设置,机箱到机箱之间进行数据传送时仅需要差分信号线即可,而不需要参考时钟,从而极大降低了连接难度 3 WAKE#信号 当 PCIe 设备进入休眠状态,主电源已经停止供电时,PCIe 设备使用该信号向处理器系统提交唤醒请求,使处理器系统重新为该 PCIe 设备提供主电源 Vcc在 PCIe 总线中,WAKE#信号是可选的,因此使用 WAKE#信号唤醒 PCIe 设备的机制也是可选的值得注意的是产生该信号的硬件逻辑必须使用辅助电源 Vaux 供电 WAKE#是一个 Open Drain 信号,一个处理器的所有 PCIe 设备可以将 WAKE#信号进行线与后,统一发送给处理器系统的电源控制器。
当某个 PCIe 设备需要被唤醒时,该设备首先置 WAKE#信号有效,然后在经过一段延时之后,处理器系统开始为该设备提供主电源 Vc。