PCIE 学习笔记(入门简介)

PCIE 学习笔记

书到用时方恨少啊,一年前学PCIE的笔记,再拿出来瞅瞅。发到博客上,方便看。

  1. PCIE基础

  1. PCIE和PCI的不同

  • PCIE采用差分信号传输,并且是dual-simplex传输——每条lane上有TX通道和RX通道,所以每条lane上的信号是4条。PCI是同步时钟、并行传输。

  • PCIE是端到端的传输,一条链路上只能有两个设备,而PCI是共享总线型的。

  • PCIE的lane可以扩展成x2, x4, x8, x16, x32.

  • PCIE没有专门的中断信号,而是通过message报文传输。

PCIE version

Gigabits/second/lane/direction

coding

V1

2.5

8/10b

V2

5

8/10b

V3

8

128/130b

V4

16

128/130b

V5

32

128/130b

  1. PCIE 拓扑

PCIE系统主要包括RC、Switch和EP(pcie设备)。一个PCIE树上最多可以有256个PCIE设备。

  1. 组件

  1. RC (ROOT COMPLEX)

RC是PCIE树的根节点,RC可以有一个或者多个PCIE端口(port),它可以根CPU 和memory controller相接,或者说分隔PCIE domain和CPU/MEMORY domain。

类似于PCI 中的HOST主桥。

  1. Switch

Switch有一个上游端口和两个或者两个以上的下游端口。上游端口是RC或者上游Switch的下游端口。

Switch中每个端口都可以看成是一个PCI-to-PCI bridge,这些bridge也都有配置空间,跟PCI中一样,配置空间有IO/Memory 的base address和limit size。

Switch中还有一条虚拟的PCI总线连接Switch内部的各个bridge。

Switch还支持crosslink的连接方式,也就是Switch上游端口可以和其他Switch的上游端口连接;下游端口也可以和其他Switch的下游端口连接。

Ingress和Egress:在一次传输中,Switch中的端口可分为ingress port和egress port,划分跟数据流向有关。Ingress port就是数据进来的端口,egress port就是输出流出的端口。

Virtual channel:端口上一般都会采用virtual channel的技术来缓存不同ingress port发来的数据。Virtual channel就是buffer,缓存数据。最多8个VC。

数据在Switch中传输,涉及到VC/TC mapping、端口仲裁、VC仲裁。

  1. EP(endpoint)

EP有三种: legacy EP,PCIE EP,RC integrated EP。

Legacy EP:就是PCI device

PCIE EP:

RC integrated EP:集成在RC内部的EP。

  1. PCIE bridge

PCIE bridge就是PCI-to-PCI/PCI-X bridge

  1. PCIE 层次简介

PCIE协议分为如上三层:transaction layer, data link layer, physical layer。

发送端发送的报文以此经过transaction -> data link layer ->physical,经过物理链路到达接收端,又经过physical layer->data link layer -> transaction layer到达接收端。

不同层次的数据包格式如下,这个简单的格式,实际更复杂:

在transaction layer,TLP由header+data+ECRC,可能也会有TLP Prefix和TLP digest。

Data link layer接受transaction layer的TLP报文,加上sequence number和LCRC;在data link layer还有自己独有的DLLP,DLLP尽在data link layer以下传输,不会传到transaction layer。

  1. transaction layer service

主要是生成和接受TLP,进行基于credit的flow control,power management。

  • 在初始化和配置中,事务层的作用:

  • 保存处理器设置的链路配置信息;

  • 将物理层链路协商的bus width 和frequency保存在link capabilities结构中。

  • 在TLP生成的接收中,事务层的作用:

  • 为device core发出的请求生成TLP。

  • 将接受到的请求转换成device core可识别的Requests(或者说一种格式吧)

  • 从接受到的完成报文提取出data payload和status信息给到device core。

  • 识别出不支持的TLP,并且采用合适的机制进行处理。

  • 如果支持end-to-end 数据完整性,那么生成CRC,并且更新对应的TLP header。

  • 在流控中,事务层的作用:

  • 追踪传输中TLP的flow control credit信息。

  • 将credit status周期性地传递给对端的transaction layer,这是通过data link layer实现的。

  • 根据credit来阻塞TLP传输。

  • 事务层在ordering的作用:

  • PCI/PCI-X兼容的生产者-消费者ordering model。

  • Relaxed-ordering

  • ID-Based ordering

  • 事务层在电源管理的作用:

  • 软件控制的电源管理

  • 硬件自动控制的电源管理。

  • 事务层在VC和TC上的作用:

  • 结合VC和TC机制,来为不同类型的服务和应用提供不同的服务和QoS。

  • Virtual channel

  • Traffic class

  1. Data link layer service
  • 初始化和电源管理的作用:

  • 接收来自transaction layer的电源状态请求,并将他们传递给physical layer。

  • 将active/reset/disconnected/power managed state传给transaction layer。

  • 数据保护、错误检查、重试:

  • CRC生成。

  • 为了重试机制,保存发送的TLP。

  • 错误检查

  • TLP应答和retry messages。

  • 错误报告和打印。

  1. Physical layer service
  • 接口初始化、maintenance control、状态追踪

  • 复位、热插拔控制和状态

  • 连线的电源管理

  • 协商Width and lane mapping

  • Lane polarity inversion。

  • 生成Symbol和ordered set

  • 8b/10b 编码、解码。

  • 嵌入式的时钟tuning和对齐。

  • Symbol传输和对齐

  • 传输电路

  • 接收电路

  • 接收端的弹性缓冲器

  • 接收端的Multi-lane de-skew

  • DFT feature

  1. PCIE配置空间

0x00- 0x3f这段配置空间是PCI、PCIE设备都要支持的。

0x40-0xff这段空间主要存放于MSI中断和电源管理相关的capabilities。

0x100-0xfff是PCIE所独有的。

Capability

Capability是PCI/PCIE配置结构,一个capability对应一个capability point和一段空间,可以把一个capability看做寄存器set,

多个capability组成capability 链表,上一个capability保存下一个capability的point。当然会有一个其实的capability point register。

每种Capability 结构中的capability ID是唯一的,

PCI Power management capability

PCIE capability

Device capability:max payload等

Link capability:supported link speed/width, current link speed, negotiate link widthdeng 。

PCIE extended capability

包含VC/TC mapping table和端口、VC仲裁策略。

  1. 端口仲裁和VC仲裁

VC(virtual channel)

Virtual channel:端口上一般都会采用virtual channel的技术来缓存不同ingress port发来的数据。Virtual channel就是buffer,缓存数据。最多8个VC。

数据在Switch中传输,涉及到VC/TC mapping、端口仲裁、VC仲裁。

TC/VC mapping

Arbitration

端口仲裁:当有多个ingress port的 数据包用同一个VC的时候,决定哪个port使用该VC。

VC仲裁:在egress port上,有多个VC,仲裁决定哪个VC从egress port发出,也就是占用link。

  1. Transaction layer

  1. TLP格式

TLP Header

  1. TLP 类型

Fmt和Type两个字段决定TLP类型。

主要有五种访问类型:存储器、I/O、配置、message、原子操作。

存储器、I/O、配置读请求;不带数据

存储器、I/O、配置写请求;带数据

存储器、I/O、配置读完成;带数据

I/O、配置写完成;不带数据

消息请求;带数据或不带数据

原子操作:swap、CAS

  1. 三种TLP路由方式

地址路由

通过地址来定位目标设备,用在memory和I/O 请求中。

在Switch的PCI-to-PCI bridge的配置空间中有I/O address、limit和memory address、limit,用来判断地址是否在bridge的访问空间内。

在TLP header中就会有地址字段。

ID路由

通过ID来定位目标设备,用在配置读写请求和完成报文。

ID是由bus number, device number和function number组成的。

PCI-to-PCI bridge的配置空间中会有primary bus number, secondary bus number和subordinate bus number。Primary bus number是bridge上游bus number,secondary bus number是下游第一个PCI bus number,subordinate bus number是下游最后一个bus number。

隐式路由

用在message报文中,要么是发向RC,要么是从RC广播。

  1. Data link layer

  1. data link layer作用

  • 数据交换

  • 接收事务层TLP并转发到物理层;

  • 从物理层接收TLP转发到事务层。

  • 初始化和电源管理的作用:

  • 接收来自transaction layer的电源状态请求,并将他们传递给physical layer。

  • 将active/reset/disconnected/power managed state传给transaction layer。

  • 数据保护、错误检查、重试:

  • CRC生成。

  • 为了重试机制,保存发送的TLP。

  • 错误检查

  • TLP应答和retry messages。

  • 错误报告和打印。

  1. 组成

数据链路层通过ACK/NAK协议发送和接受TLP,主要包括发送部件和接收部件。

发送部件包括Replay buffer、ACK/NAK DLLP接收逻辑和TLP发送逻辑。

接收部件包括Error check逻辑、ACK/NAK DLLP发送逻辑和TLP接收逻辑。

  1. 链路层状态机

链路层通过data link control and management state machine(DLCMSM)来控制链路状态,并且在事务层和物理层之间传递链路状态。

链路层从物理层获取link上的状态,如下:

  • DL_Inactive: 物理层向链路层报告当前PCIE链路不可用,对端没有连接人和设备,或者没有检测到对端的设备。

  • DL_Feature(optional):物理层报告当前链路可用,进行data link feature exchange(这些feature保存在capability结构中。)

  • DL_Init:物理层通知链路层当前PCIE链路可用,正在对VC0进行流量控制。当前链路层不能接收或者发送TLP和DLLP。

  • DL_Active:当前PCIE链路处于正常工作状态。

链路层向事务层报告link上的状态,如下:

  • DL_Down:告知事务层,当前link处于DL_Inactive状态,没有从对端检测到设备。

  • DL_Up:告知事务层,link上检测到对端设备,正在跟对端的设备进行数据链路层交流。也就是link处于DL_Active状态。

Link状态跳变过程如下:

  • DL_Incative:当hot, warm, cold reset之后,link进入DL_Inactive状态;当时FLR reset不能。

在这个状态下,所有跟链路层状态机有关的信息都被复位到默认值;retry buffer中的数据丢失。

链路层向事务层报告DL_Down状态,事务层接收到DL_Down之后,会丢弃所有的outstanding transaction,停止发送TLP。

链路层本身会丢弃TLP相关的信息,停止生成和接受DLLP。

DL_Inactive -> DL_Init的情况有两种:

  1. 端口不支持DL_Feature特性,软件没有disable当前link,物理层报告LinkUp 状态位为1(表示对端接入设备).

  1. 端口支持DL_Feature,但是被软件disable;软件没有disable当前link,物理层报告LinkUp 状态位为1(表示对端接入设备).

  • DL_Init:改状态分为两个子状态:FC_INIT1和FC_INIT2。在INIT1阶段,向事务层报告DL_Down状态,在FC_INIT2阶段,报告DL_Up状态。

在端口处于DL_Down状态的时候,接收端会丢弃那些接收到的但没有去应答的TLP。

DL_Init ->DL_Active:当流量初始化完成,并且物理层LinkUp为高,进入DL_Active状态。

  1. DLLP报文

DLLP主要分为:

  1. ACK

  1. NAK

  1. 电源管理DLLP

  1. 流控DLLP

  1. Vendor-defined DLLP

  1. ACK/NAK应答机制

参考《PCIE体系结构导读》7.2章节。

发送端和接收端通过sequence number来标记报文。

接收端不会为每个报文回复应答。如果发送端发送了3-5 sequence number报文,接收端NAK应答中的AckNak_Seq_Num是4,说明报文3-4已经被成功接受。

  1. 链路层发送报文的顺序

TLP、DLLP和物理层报文PLP都会使用同一个物理link发送报文,他们之间的顺序是有要求的,一般发送中的报文优先级最高,越是底层的报文优先级越高。

优先级从高到低如下:

  1. 正在传输的TLP和DLLP。

  1. PLP。

  1. NAK DLLP

  1. ACK DLLP

  1. 重新发送replay buffer中的TLP

  1. 其他在事务层等待的TLP。

  1. 其他DLLP。

  1. Physical layer-逻辑子层logical sub-block

4.1 逻辑子层结构图

Byte striping/un-striping

将数据分到不同的lane上,或者从多条lane上合并数据。

会进行de-skew操作。

Scrambler、de-scrambler 加扰

加扰:通过线性反馈移位寄存器LSFR产生伪随机序列,数据跟这个伪随机序列进行异或操作。

作用:防止信号有某些固定的重复值,降低EMI干扰

  1. 8/10b编码 2.5GT/s 5.0GT/s

8/10b

为了0、1均衡,如果在一个高速链路上有较多连续的“1”,会将AC耦合电容充满,从而影响这些电容正常工作。

连续传输的0或1不会超过5个。

保证每十位中最多有6个0或者6个1.

但是仅仅如此还不够,可能10位中连续是6个0或者1,那么0或1就会聚集。所以有了CRD(current running disparity),每个byte(symbol)的编码都有两个,一个0多,一个1多

传输

Symbol

编码结果可以通过Dxx.y和Kxx.y表示,前者表示数据字符,后者表示控制字符。

Figure4.5中,在TLP前面加上STP symbol,在TLP后面加上END,分别表示TLP的开始和结束。

在figure 4.6中,在DLLP前面加上SDP,后面加上END。

加上TLP,DLLP的开始符号和结束符号之后再进行byte-striping。

  1. 128/130b 编码 8GT/s

每个symbol是8bit。

每条lane上传输sync bit。

两位Sync bit

‘b10代表是data block。

‘h01代表ordered set block

Ordered set block

在所有的lane同时传输相同的ordered set block。

Data block

Data block 包括framing token、DLLP、TLP。

Framing token类似于8/10b编码中的控制符号。

传输

传输TLP和DLLP

EDS framing token之后代表要传输ordered set block,从下图figure4.17中可以看出,所有lane上传输的ordered set block是相同的。

  1. Physical layer-电气子层electrical sub-block

Power management

System architecture

  • 10
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PCIE-DMA是一种基于PCIe接口的直接内存访问技术,能够实现高速数据传输。在我的学习笔记中,我详细记录了与PCIE-DMA相关的知识和学习心得。 首先,我了解到PCIE-DMA技术的基本原理和作用。PCIE-DMA可以通过PCIe总线直接访问系统内存中的数据,而不需要过多的CPU干预,提高数据传输的速度和效率。这种技术在需要大量数据传输的场景下非常有效,比如高性能计算、数据采集等。 其次,我深入学习PCIE-DMA的工作原理。PCIE-DMA的核心是DMA控制器,它负责管理和控制数据传输的流程。当设备需要读写内存中的数据时,它通过DMA控制器发送请求,然后DMA控制器生成一个事务,将数据直接传输到或从内存中。这样就大大减少了CPU的参与,提高了数据传输的效率。 另外,我还学习PCIE-DMA的配置和编程方法。PCIE-DMA的配置主要包括硬件配置和软件配置两个部分。硬件配置通常涉及到DMA控制器和PCIe接口的初始化和配置,软件配置则需要编写驱动程序来驱动DMA控制器和处理数据传输过程中的事件和异常。这部分内容对于我来说还比较新颖,需要更多的实践和实践。 最后,我总结了PCIE-DMA的应用场景和发展前景。PCIE-DMA在高性能计算、数据采集等领域具有广阔的应用前景。随着数据量的不断增加和传输速度的要求越来越高,PCIE-DMA技术的需求也将越来越大。因此,对于我来说,学习掌握PCIE-DMA技术非常有价值。 通过学习和记录PCIE-DMA的相关知识和经验,我对这项技术有了更深入的理解和掌握。希望将来能通过应用PCIE-DMA技术解决实际问题,为科研和工程项目的顺利进行做出贡献。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值