0


PCIE 学习笔记(入门简介)

PCIE 学习笔记

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

  1. PCIE基础

  2. 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. 组件

  2. 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

  2. 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

  2. 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(表示对端接入设备).

  2. 端口支持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

  2. NAK

  3. 电源管理DLLP

  4. 流控DLLP

  5. 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。

  2. PLP。

  3. NAK DLLP

  4. ACK DLLP

  5. 重新发送replay buffer中的TLP

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

  7. 其他DLLP。

  8. 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

标签: 学习 网络 PCIE

本文转载自: https://blog.csdn.net/m0_38037810/article/details/128946662
版权归原作者 甲六乙 所有, 如有侵权,请联系我们删除。

“PCIE 学习笔记(入门简介)”的评论:

还没有评论