本文转载自: FpgaHome微信公众号
1. 前言
最近几期,我们将通过专栏的方式向大家介绍一个更加常用的高速接口——PCIe接口。"Peripheral Component Interconnect Express"(PCIe或PCI-E)是一种串行扩展总线标准,计算机利用该接口可以扩展连接一个或多个外围设备。
在本专栏中,我们将由浅入深地讲述如何利用FPGA开发PCIe接口进行高速的数据传输。首先,我们将了解下PCIe协议的基本原理和工作机制;然后介绍FPGA开发PCIe接口时需要用到的IP核及使用方法;最后向大家介绍几种在FPGA中实用的PCIe接口应用方法。欢迎大家持续关注本公众号专栏。
2. 概述
PCIe协议是一种端对端的互连协议,提供了高速传输带宽的解决方案。与传统的并行总线标准如PCI和PCI-X相比,PCIe提供了更低的延迟和更高的数据传输速率。每个连接到主板上的设备都通过独立的点对点连接与之相连,这避免了设备之间因为共享同一总线而竞争带宽的情况。
目前市场上PCIe 4.0的设备已经很成熟了,并逐渐开始向PCIe 5.0协议的设备发展。
3.PCIe协议分类
PCIe的向下兼容性体现在以下几个方面:PCIe具有向下兼容的特性,这意味着较新版本的PCIe插槽和设备可以与较旧版本的PCIe插槽和设备进行互操作。这种兼容性确保了新设备可以与旧设备一起使用,从而减少了升级和更换设备时的不便。
插槽兼容性:较新版本的PCIe插槽通常可以容纳较旧版本的PCIe卡。例如,一个PCIe x16插槽通常可以容纳任何较小的PCIe卡,如PCIe x8、PCIe x4或PCIe x1。这意味着您可以将较旧的PCIe卡插入较新的插槽中,以实现互操作性。
带宽适配:如果您将一个使用较少通道的PCIe卡插入一个具有更多通道的PCIe插槽中,系统会自动适配带宽。例如,将一个PCIe x1卡插入PCIe x16插槽中,系统会将该卡的带宽限制为PCIe x1的速度。这确保了卡与插槽之间的通信不会出现不匹配问题。
协议兼容性:即使新版本的PCIe协议引入了一些新功能和特性,但它们通常会保持与旧版本的兼容性。这意味着使用旧版本PCIe设备的系统不会因为新版本PCIe插槽而出现兼容性问题。
供电兼容性:PCIe插槽还需要向下兼容供电。较新的PCIe插槽可以为较旧版本的PCIe卡提供适当的电源。这确保了即使插槽能够提供更高的电源能力,也不会损坏较旧的卡。
PCIe的向下兼容性使得用户能够在升级或更换设备时更加灵活,无需担心新设备是否与旧设备兼容。这种特性有助于维持系统的稳定性和灵活性,同时节省了升级成本。
4. PCIe架构
PCIe协议是一种端对端的互连协议,一个典型的PCIe系统框图如下:
与PCIe拓扑结构相关的其他术语如下:
Root Complex我们简称为根复合体。根复合体将CPU和内存子系统(Memory)连接到由一个或多个PCIe或PCI设备组成的PCI Express交换结构。它是PCI反向树拓扑结构的“根”,代表CPU与其他设备进行通信。
PCIe endpoint就是PCIe的终端设备/PCIe终结点。PCIe终端设备可以直接与根设备进行连接,也可以通过Swith交换设备与根设备连接(交换设备类似于接口扩展功能)。
根据PCIe规范,在PCIe拓扑中可以有256个总线,每个总线上有32个设备,每个设备有8个功能。一个终节点最多可以支持8个功能,每个功能都有自己独立的配置空间。
例如:基于PCIe的非易失性内存(NVM)和基于PCIe的固态硬盘(SSD)是计算机系统中的两种终节点设备。
PCIe桥接器:桥接器可以将PCI设备的请求转换为PCIe x1规范的请求,并连接到计算机PCIe插槽上。工作流程如下:
通过这种方式,PCI设备能够利用PCIe插槽和接口连接到计算机系统,实现数据和控制的交换。
5.总结
本文向大家初步介绍了下PCIe协议,如果觉得我们原创或引用的文章写的还不错,帮忙点赞和推荐吧,谢谢您的关注。
---------------------------------------------
参考文献:
[1] 维基百科, https://en.wikipedia.org/wiki/Root_complex.
[2] Stephen J. Bigelow, Peripheral Component Interconnect Express, https://www.techtarget.com/searchdatacenter/definition/PCI-Express
[3] https://prodigytechno.com.