接口技术【3】PCIe入门简介 -- 初识PCIe

本文介绍了PCIe,它将并行总线模型转为串行总线并保持与PCI并行总线兼容。阐述了串行传输优势,如克服并行传输缺陷、可实现高带宽;还介绍了差分信号、无共同时钟等特点。此外,说明了Link和Lane概念,以及PCIe的扩展性能、灵活拓扑结构和软件向上兼容性。

PCIe介绍

PCIe将PCI和PCI-X的并行总线模型转移到了串行总线,但同时还保持跟以前的PCI并行总线兼容。

和其他很多高速串行接口一样,PCIe是双工的,可以同时发送和接收数据。在两个设备之间传输的叫做link链接,由一对或者多对收发线组成,每对收发线被称为lane信道,一个链接允许有1、2、4、8、12、16或者32个信道。一个链接中的信道数叫做链接宽度,链接宽度越高,链接的传输带宽越高,相应要求更大接口空间和更高的功耗。
PCIe link
PCIe lane

串行传输

上一篇说到并行接口的三个主要缺陷导致其速度无法提升:

  1. 从发送到接收的飞行时间必须小于时钟周期
  2. 到达接收端有时钟漂移
  3. 到达接收端有信号漂移

这些缺陷对于串行传输来说都不存在,因为一个时钟周期只传输一个信号,不需要保持同步,因此PCIe可以达到2.5GT/s和5GT/s,甚至之后的8GT/s。用来接收信号的时钟是根据信号流恢复出来的,而不是外接的,因此没有飞行时间和时钟漂移的问题,由于传输的只有一个bit,也就不需要担心信号漂移的问题了。

虽然串行传输能够克服并行传输中的问题,但串行也有自己的问题,不过我们可以通过一系列手段克服相应的问题。

带宽

把高速和多link并列组合,PCIe可以到达很高的带宽。最早的PCIe用8b/10b传输协议来保证平均电压为0,它输入时8bit,输出是相应的10bit,因此2.5GT/s的传输速度意味着0.25GB/s,由于PCIe中的link是双工的,收和发可以同时进行,因此实际速度还要乘2到0.5GB/s。

第二代的PCIe把时钟频率提高到两倍5GT/s之后带宽达到1GB/s;第三代的PCIe把时钟提高到8GT/s,同时把传输协议改成128b/130b,每个link的带宽提高到了2GB/s。
bandwidth

差分信号

每个lane使用两条查分信号线,同时送正和负信号(D+和D-),这么做使接口量变为原来的两倍,但拥有了两项高速信号传输的优势:高信噪比和低信号电压。
diff

差分信号的接收器比较正负信号的电压后确定信号是1还是0。由于正负信号线必须在相邻的接口上,他们的载体也必须设计的非常靠近,能够影响信号传输的因素会同时影响两根信号线,相减以后就抵消了噪声的影响,提高了信噪比。

降低信号电压就很好理解了,原本要D的电压,只要正负电压都是D/2就可以了。

无共同时钟

PCIe link不需要外接一个共同时钟,因为它使用了源同步信号模型,信号的传输方位接收方提供时钟。不过PCIe的link并没有包含一条传输时钟的信号线,时钟信号被包含在了经过8B/10B处理的数据信号流中。这听起来似乎比较难以想象,但确是可以比较方便实现的。
pll

使用一个PLL锁相环把输入信号作为参考时钟输入PLL,和自己产生的时钟信号比较,产生一个负反馈信号来调节自己产生的时钟信号频率和相位,直到两者达到平衡,这时PLL会传出锁定lock信号,而输出的时钟信号就准确的匹配上了传输信号的时钟。PLL会持续跟踪信号来调节时钟,因此温度和电压导致的时钟变化都会被实时跟踪。

PLL恢复时钟需要有信号持续输入,否则它产生的时钟会逐渐漂移离开原来的频率。为了防止这种情况,8b/10b协议会防止连续5个1或者连续5个0的情况发生。

一旦时钟被恢复,它将被用来接收串行信号并转换成并行信号。有一个问题是,可不可以用这个恢复出的时钟来驱动整个接收端,答案是不能,因为一旦信号传输被终止,接收端就彻底没有时钟了,所以接收端还是应该有自己的内部时钟。

Link和Lane

就像上面讲的一样,两个PCIe设备之间的物理连接叫做link,link由一根或者多根lane组成,每个lane包含查分信号输出和接收

扩展性能

使用更多的lane可以提高link的速率,lane的数量可以是1到32中的几种。这种扩展性能使得设计者可以衡量速率和功耗等的平衡

灵活的拓扑结构

和PCI总线不同,PCIe中的link是点对点传输,因为PCIe的link速度足够快。不过这就意味着PCIe需要一种扇出fan-out设备,这是用开关和桥接实现的,如下图所示
bridge
在拓扑结构的顶端是CPU,和PCI的拓扑结构一样是树状结构,没有回路。一些和拓扑结构的定义如下

Root Complex

这部分被称为RC或者Root,作为CPU、存储设备和PCIe设备之间连接的重要部分。它联系了CPU和其他所有设备。

Switches 和 Bridges

Switch提供了扇出和聚合能力,使更多PCIe设备可以接入拓扑结构中。Switch扮演路由的角色,根据数据包的地址决定了数据包要走的路径。

Bridge桥接提供了通往其他总线的接口,比如PCI和PCI-X,甚至其他PCIe总线。

PCIe Endpoints 和 Legacy PCIe Endpoints

PCIe Endpoint是PCIe中的实际设备,可以作为数据交换的发送方或者接收方。它们的特点是,在拓扑结构中处于末端节点,可以有一条下行路径(从Root传出)和上行路径(传到Root)。相比起来,Switch可以有多条下行路径(通向不同Endpoints),却只能有一条上行数据。

软件向上兼容

为了向上兼容PCI和PCI-X,对PCIe设备的配置header和对PCIe桥接的配置遵循PCI中的传统,有一点不同的是,桥接被汇总在Switch和Root中,不过PCI软件系统无法识别这种区别。现在还不详细介绍各个部分的具体含义,只放出示意图看他的header配置
header
在系统看起来,PCIe拓扑结构如下图所示,Root作为结构顶端,在软件中被视为PCI 0,而那些PCIe的接口被视为PCI桥接。它的内部结构不会真的像一个PCI总线,但对于软件来说是这样的。
topology
相应的,为了让Switch兼容PCI系统,它对于软件来说如下图所示。
switch

总结

对于PCIe的结构简介差不多了,下一篇开始介绍PCIe不同设备间的数据传输

09-07
PCI Express(PCIe)是一种高速串行计算机扩展总线标准,用于在计算机内部连接各种组件,如显卡、网卡、存储设备等。 从基本概念来看,PCIe是对传统PCI和PCI-X总线的重大改进。传统的PCI总线是并行总线,在数据传输过程中容易受到信号干扰和时序问题的影响,而且随着频率的提升,这些问题会更加严重,限制了数据传输速率的进一步提高。而PCIe采用了串行差分信号传输技术,通过多个差分信号对同时传输数据,有效减少了信号干扰,并且可以通过增加通道数量来提高带宽。 PCIe以“通道(Lane)”为基本单位,每个通道包含一对发送差分线和一对接收差分线,能够实现双向数据传输。PCIe有不同的版本,如PCIe 1.0、PCIe 2.0、PCIe 3.0、PCIe 4.0、PCIe 5.0等,每个新版本都在数据传输速率上有显著提升。例如,PCIe 1.0每个通道的单向传输速率为2.5Gbps,PCIe 2.0将速率提升到5Gbps,PCIe 3.0达到8Gbps,PCIe 4.0为16Gbps,PCIe 5.0则高达32Gbps。 在系统中,PCIe设备通过根复合体(Root Complex)与CPU和内存进行连接。根复合体是PCIe系统的核心,负责管理和分配PCIe总线资源,协调不同设备之间的数据传输。 在应用方面,PCIe广泛应用于计算机的各个领域。在显卡领域,高端显卡通常采用x16的PCIe接口,以满足其巨大的数据传输需求,确保能够实时处理和传输高分辨率、高帧率的图像数据。在存储方面,NVMe(Non-Volatile Memory Express)固态硬盘通过PCIe接口与主板相连,大大提高了数据读写速度,缩短了系统的响应时间。 在基于FPGA的PCIe接口设计中,可以通过规划相关内容来实现对PCIe的应用。例如,先介绍PCIe的基本概念,再以xilinx提供的例程PIO为例进行仿真、板载测试等,最后承接前面的成果进行DMA的介绍,从而实现基本入门 [^1]。 ```python # 以下是一个简单的伪代码示例,模拟PCIe数据传输过程 class PCIeDevice: def __init__(self, lane_count, version): self.lane_count = lane_count self.version = version self.transfer_rate = self.get_transfer_rate() def get_transfer_rate(self): rates = { "1.0": 2.5, "2.0": 5, "3.0": 8, "4.0": 16, "5.0": 32 } return rates.get(self.version, 0) def calculate_bandwidth(self): return self.lane_count * self.transfer_rate # 创建一个PCIe设备实例 device = PCIeDevice(16, "3.0") print(f"PCIe设备带宽: {device.calculate_bandwidth()} Gbps") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值