PCIE学习(1)PCIE简介

前言

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 规范中,对这个参考时钟有两个约束:

  1. 参考时钟统一使用 RC 的时钟(通常为100MHz);
  2. 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总线使用的版本相关。

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PCIE(Peripheral Component Interconnect Express)是一种用于计算机系统中扩展设备的高速串行总线标准。FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,可以根据需要重新配置其电路。学习如何将PCIEFPGA结合使用,可以为您提供更高性能和更灵活的硬件设计方案。 有几种方法可以学习PCIE学习FPGA的相关知识和技能: 1. 学习文档和教程:您可以查找和阅读关于PCIEFPGA的相关文档和教程。这些资源通常包括PCIEFPGA的基本概念、原理和应用示例等内容。这些资料可以帮助您建立起对PCIEFPGA的基本了解。 2. 参加培训课程:有许多在线和实体的培训机构提供PCIEFPGA的培训课程。这些课程通常涵盖PCIEFPGA的理论知识、设计技巧和实际应用。通过参加这些课程,您可以系统地学习PCIEFPGA的相关知识,并通过实践项目来锻炼您的技能。 3. 实践项目:通过实践设计和开发PCIEFPGA的项目,您可以更深入地理解它们的工作原理和应用场景。您可以从简单的项目开始,逐步扩展到更复杂的项目。通过实践项目,您可以学习如何使用相关工具和软件来设计、实现和验证PCIEFPGA的功能。 4. 参与社区和论坛:加入PCIEFPGA的社区和论坛,与其他人分享经验、提问问题和获得帮助。这些社区和论坛通常有许多经验丰富的人员,可以与他们交流并学习他们的经验和见解。 总结起来,要学习PCIEFPGA,您可以通过阅读文档和教程、参加培训课程、进行实践项目以及参与社区和论坛来获取相关知识和技能。这些方法的结合使用将帮助您掌握PCIEFPGA的概念、原理和应用,并能够进行相关的设计和开发工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顺子学不会FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值