文章目录
前言
PCIE是一种串行通信协议。在低速情况下,并行结构绝对是一种非常高效的传输方式,但是当传输速度非常高,并行传输的致命性缺点就出现了。因为时钟在高速的情况下,因为每一位在传输线路上不可能严格的一致,并行传输的一个字节中的每个位不会同时到达接受端就被放大了。而串行传输一位一位传输就不会出现这个问题。串行的优势就出现了,串行因为不存在并行的这些问题,就可以工作在非常高的频率下,用频率的提升掩盖它的劣势。
一、PCIE传输速度
传输速率为每秒传输量GT/s,而不是每秒位数Gbps,因为传输量包括不提供额外吞吐量的开销位; 比如 PCIe 1.x和PCIe 2.x使用8b / 10b编码方案,导致占用了20% (= 2/10)的原始信道带宽。
GT/s —— Giga transation per second (千兆传输/秒),即每一秒内传输的次数。重点在于描述物理层通信协议的速率属性,可以不和链路宽度等关联。
Gbps —— Giga Bits Per Second (千兆位/秒)。GT/s 与Gbps 之间不存在成比例的换算关系。
PCIe 吞吐量(可用带宽)计算方法:
例如:PCI-e2.0 协议支持 5.0 GT/s,即每一条Lane 上支持每秒钟内传输 5G个Bit;PCIe 2.0 的物理层协议中使用的是 8b/10b 的编码方案。 即每传输8个Bit,需要发送10个Bit;
PCIe 2.0协议的每一条Lane支持 5 * 8 / 10 = 4 Gbps = 500 MB/s 的速率。
以一个PCIe 2.0 x8的通道为例,x8的可用带宽为 4 * 8 = 32 Gbps = 4 GB/s。
二、PCIE硬件设计
下图是FPGA上PCIE2.0 x 8的接口,最大物理速度为 5Gbps*8
PETp0与PETn0:发送器差分线对,通道0
PERp0与PERn0:接收器差分线对,通道0
Vcc与Vaux(由处理器系统提供)
PCIe设备使用两种电源Vcc和Vaux,额定电压都为3.3V,其中Vcc为主电源,PCIe设备使用的主要逻辑模块由Vcc进行供电,而一些与电源管理相关的寄存器使用使用Vaux进行供电。
在PCIe设备中,一些特殊的寄存器通常使用Vaux进行供电,因为这样的话即使设备的Vcc被移除,这些与电源管理有关的逻辑状态和特殊寄存器的内容也不会丢失。这样可以大大的缩短系统恢复时间和降低系统功耗,因为Vaux在大多数情况下并不会被移除,这样当Vcc恢复后,设备不必恢复使用Vaux供电的逻辑,从而设备可以很快的恢复到正常工作状态。
PERST#(#:低电平有效)
该信号为全局复位信号,由处理器系统提供,处理器系统需要为PCIe插槽和PCIe设备提供该信号,PCIe设备使用该信号复位内部逻辑,当该信号有效时,PCIe设备将对内部逻辑进行复位操作,其中Cold Reset和Warm Reset这两种复位方式与该信号有关。
REFCLK+和REFCLK-信号
这个参考时钟要连接到 FPGA 的 MGT-BANK 的参考时钟输入引脚上。在 PCI-E 规范中,对这个参考时钟有两个约束:
- 参考时钟统一使用 RC 的时钟(通常为100MHz);
- 2.RC 和 EP 各自使用各自的时钟源(通常为 100MHz)。 那么在第 2种情况中, RC 和 EP 的晶振抖动不能超过 500PPM,不然 PCI-E 物理层无法正常 Link。因此我们使用第 1 种的同源时钟是最稳妥的方式。
PRSNT_X*信号
用于检测当前PCIE的通道数目
三、PCIE拓扑结构
PCIe拓扑结构是一个树结构,层次结构的顶层是一个CPU,一般包含组件RC(Root Complex),交换器switch,终端设备EP(endpoint)等类型的PCIE设备。
3.1 Root Complex
Root Complex:简称RC,CPU和PCle总线之间的接口,代表CPU与系统的其余部分进行通信,可以理解为系统CPU和PCle拓扑之间的接口,主要功能是完成存储器域到PCIe总线域的地址转换,RC把来自CPU的request转化成PCIe的4种不同的requests(configuration, Memory, I/O, Message)并发送给接在它下面的设备。
3.2 PCIe-PCI Bridge
PCIe-PCI Bridge提供了与其他总线(如PCI、PCI- x,或另一个PCle总线)的接口,它允许旧的PCI或PCIX卡通过桥接入系统中。
3.3 Switch
PCIe总线采用端到端的连接方式,,因此在每一条PCIe链路中两端只能各连接一个设备, 如果需要挂载更多的PCIe设备,那就需要用到Switch转接器。
Switch内部可以视为多个虚拟的PCI到PCI的桥,实现扩展功能,允许更多的设备连接到一个PCle端口。该组件会根据事务类型将数据送到不同的通道,对数据包没有处理的功能只有转发功能。在软件层面可以看到switch的上行口(upstream port, 靠近RC的那一侧) 和下行口(downstream port)。一般而言,一个switch 只有一个upstream port, 可以有多个downstream port。
3.4 Endpoint
Endpoint只能接受来自上级拓扑的数据包或者向上级拓扑发送数据包。例如声卡、网卡,还有应用到PCIE的些功能设备,均是端点。
四、PCIE分层结构
图片来自:https://zhuanlan.zhihu.com/p/452554611
CIe总线架构是一种分层协议架构,分为事务层(Transaction Layer)、数据链路层(Data Link Layer) 和物理层(Physical Layer)。这些层中的每一层都分为两部分:一部分处理出站 (要发送的) 信息,另一部分处理入站(接收的) 信息。
在PCIe结构中使用数据包在设备之间传递信息,数据包在事务层和数据链路层中形成,以将信息从发送设备传送到接收设备。
4.1 事务层
PCIe总线使用的数据报文首先在事务层中形成,这个数据报文也被称之为事务层数据报文,即TLP(Transaction Laver Packet),事务层的主要责任是事务层包TLP的组装和拆卸。事务层接收来自PCIe设备核心层的数据,并将其封装为TLP。TLP用于传达事务,例如读取和写入,以及确定事件的类型。事务层还可以从数据链路层中接收数据报文,然后转发至PCIe设备的核心层。
4.2 数据链路层
数据链路层的主要职责包括链路管理和数据完整性,包括错误检测和错误纠正。数据链路层的发送方接受事务层组装的TLP,检查接收到的TLP的完整性。在检测到TLP错误时,数据链路层负责请求重发TLP,直到正确接收信息或确定链路失败为止。数据链路层还生成并使用用于链路管理功能的数据包,称为数据链路层数据包(Data Link Layer Packet,DLLP),DLLP产生于数据链路层,终止于数据链路层,主要实现的功能有流量控制、电源管理、应答机制和虚拟通道。
TLP在经过数据链路层时被加上Sequence Number前缀和CRC后缀,然后发向物理层。
4.3 物理层
物理层负责将从数据链路层接收的信息转换为适当的序列化格式,并以与链路另一端的设备兼容的频率和通道宽度在PCI Express链路上传输该信息。PCIe总线的物理层定义了 LTSSM(Link Training and Status State Machine)状态机,PCIe链路使用该状态机管理链路状态,并进行链路训练、链路恢复和电源管理。
PCIe 总线使用端到端的连接方式,在一条PCIe链路的两端只能各连接一个设备,这两个设备互为数据发送端和数据接收端。由于 PCIe 是支持全双工通信的,所以发送端和接收端中都含有TX(发送逻辑)和RX(按收逻辑)。在PCIe总线的物理链路的一个数据通路(Lane)中,有两组差分信号,共4根信号线组成。其中发送端的TX与接收端的RX使用一组差分信号连接,该链路也被称为发送端的发送链路,也是接收端的接收链路;而发送端的RX与接收端的TX使用另一组差分信号连接,该链路也被称为发送端的接收链路,也是接收端的发送链路。
一个PCIe链路可以由多个Lane组成。目前PCIe链路可以支持1、2、4、8、12、16和32个Lane,即xl、x2、x4、x8、x12、x16和x32宽度的PCIe链路。每一个Lane上使用的总线频率与PCIe总线使用的版本相关。