【PCIe 5.0 - 5】PCIe 事务层详解1

事务层概述

事务层(Transaction Layer)high level的描述是:

  • 流水线式完整拆分事务协议
  • 区分TLP 的排序和处理要求的机制
  • 基于信用的流量控制
  • 可选支持数据中毒和端到端数据完整性检测。

事务层包含以下内容:

  • TLP 构建和处理
  • 事务级机制与设备资源的关联,包括:
    • 流量控制(Flow Control)
    • 虚拟通道管理(Virtual Channel management)

事务层地址空间,事务类别及其作用

  事务是Requester和Completion之间信息传输的基础。Spec 定义了四种地址空间,不同的事务类型,每个都有其独特的用途,如下表1所示:

表1 不同地址空间的事务类型
地址空间事务类型基本用途
MemoryRead, Write向/从内存映射位置传输数据
I/ORead, Write向/从I/O映射位置传输数据
ConfigurationRead, WriteDevice Function配置
MessageBaseline(including Vendor-Defined)从事件信号机制到通用消息传递

Memory事务

Memory事务包括以下类型:

  • Read Request/Completion
  • Write Request
  • AtomicOp Request/Completion

Memory事务使用两种不同的地址格式:

  • 短地址格式:32 位地址
  • 长地址格式:64 位地址

某些Memory事务可以选择有一个包含Process Address Space ID (PASID) 的 PASID TLP Prefix 。

I/O事务

PCIe支持I/O地址空间是为了与旧版本兼容,未来可能删除这个地址空间。I/O事务包括以下类型:

  • Read Request/Completion
  • Write Request/Completion

I/O事务只有一种地址格式:

  • 短地址格式:32 位地址

Configure事务

Configuration事务用于访问device内Function的configure register.
Configuration事务包括以下类型:

  • Read Request/Completion
  • Write Request/Completion

Message事务

  Message事务,简称为Message,用于支持设备之间事件的带内(in-band)通信。

  除了PCIe base文档定义的特定Message之外,PCIe还使用指定的Message代码为供应商定义的Message提供支持。 除了PCI-SIG® Vendor ID (0001h) 表示的Vendor-Defined Messages外,供应商定义的Message由厂商自行定义。

  要注意的是,这些供应商定义的Message不能保证与来自不同供应商的组件相互操作

Packet格式

  事务由Requests和Completions组成,它们使用packet进行通信。 图 1 显示了 TLP 的high level视图,由一个或多个可选的 TLP Prefixes、一个 TLP header、一个data payload(对于某些类型的packets)和一个可选的 TLP Digest组成。 图 2 显示了 TLP 的更详细视图。

Serial View of a TLP

图 1 TLP串行图

  PCI Express 在概念上将信息作为序列化的字节流传输,如图 1 所示。 请注意,在字节级别,信息通过互连发送/接收,首先从如图 1 所示的 TLP 的最左侧字节发送/接收(如果存在一个或多个可选 TLP Prefixes,则为字节 0,否则为字节 H)。 有关如何对packet的各个字节进行编码和在物理介质上传输的详细信息,会在后面的物理层逻辑块中讲解。

  TLP Prefix、TLP Header和 TLP Digest的详细布局(图 2 通用格式)以较低编号的字节绘制在左侧,而不是在其他 PCI 规范中传统上描述的右侧。 header布局针对串行互连的性能进行了优化,这是由首先传输最重要最关键信息的要求驱动的。 例如,在 TLP header内,地址字段的最高有效字节首先传输,以便更早地址解码。

Generic TLP Format

图 2 通用TLP格式

  TLP 内的Payload数据用左上角显示的最低寻址字节(图 2 中的Byte J)表示。 数据结构的详细布局(在PCIe 5.0第 7 章中的Configuration Space描述)保留了传统的 PCI 字节布局,最低地址字节显示在右侧。 不管如何描述,所有字节在概念上都是以字节数递增的顺序通过链路传输的。

根据packet类型,packet header部分会包括以下字段类型:

  • packet的Format(Fmt)
  • packet的Type
  • 相关数据的Length
  • 事务描述符,包括:
    • Transaction ID
    • Attributes(Attr)
    • Traffic Class(TC)
  • 寻址/路由信息
  • Byte Enables
  • Message编码
  • Completion状态

事务层协议中对Packet的定义

  PCIe使用基于Packet的协议在通过链路相互通信的两个组件的事务层之间交换信息。 PCIe支持以下基本事务类型:Memory、I/O、Configuration和Message。 支持两种寻址格式的Memory Requests:32 位和 64 位。

  事务使用Requests和Completions进行。 Completion仅在需要时使用,例如,返回读取数据,或确认 I/O 和Configuration Write事务的Completion。 Completions与的Packet header 中的Transaction ID 字段中的值与其相应的Requests相关联。

  当 TLP 形成时,所有标记为 Reserved(有时缩写为 R)的 TLP 字段都必须填充为全 0。 同时Receivers必须忽略此类字段中的值,并且Switch必须不加修改地转发。 请注意,对于某些字段,既有指定值又有保留值 - 在这些情况下保留值的处理是针对每种情况单独指定的。

常用Packet Header字段

所有TLP prefixes和headers包含下列字段(图4):

  • Fmt[2:0] - Format of TLP (see 表2 ) - byte 0的bits 7:5
  • Type[4:0] - Type of TLP - byte 0的bits 4:0

  Fmt 字段表示存在一个或多个 TLP Prefixes,Type字段表示相关的 TLP Prefix类型。

  TLP Header的 Fmt 和Type字段提供了确定 TLP Header剩余部分大小所需的信息,以及packet是否在Header后面包含data payload。

  TLP Header的 Fmt、Type、TD 和 Length 字段包含确定 TLP 的非前缀部分的总体大小所需的所有信息。 Type 字段除了定义 TLP 的类型外,还决定了Switch如何路由 TLP。 以下部分将更详细地讨论不同类型的 TLP。

  • 允许的 Fmt[2:0] 和 Type[4:0] 字段值显示在:
    • 所有其他编码都是保留值(见PCIe5.0 2.3节)
  • TC[2:0] - Traffic Class-Byte 1 的bit [6:4]
  • Lightweight Notification (LN) - 1b 表示Memory Request是 LN Read或 LN Write,入,或者Completion是 LN Completion。
  • TLP Hints(TH) - 1b 表示 TLP header 中存在 TLP Processing Hints (TPH) 和可选的 TPH TLP Prefix(如果存在)- Byte 1的bit 0
  • Attr[1:0] - Attributes - byte2的bits [5:4]
  • Attr[2] - Attribute - byte 1的bit 2
  • TD - 1b 表示在 TLP 末尾以单个 DW 的形式存在 TLP Digest - byte 2 的bit 7
  • Error Poisoned (EP) - 表示TLP中毒 - byte 2的bit 6
  • Length[9:0] - DW中的data payload长度 - byte 2的bits 1:0 + byte 3的bits 7:0
    • TLP 数据必须是 4 字节自然对齐并以 DW 为增量(1 DW=4 Bytes)。
    • 为不包含或引用data payloads的 TLP 保留,包括 Cpl、CplLk 和Messages(除非另有规定)
表 2 Fmt[2:0]字段值
Fmt[2:0]TLP格式
000b3 DW header, no data
001b4 DW header, no data
010b3 DW header, with data
011b4 DW header, with data
100bTLP Prefix
不在以上的编码都是保留值
表 3 Fmt[2:0] 和 Type[4:0]字段编码
TLP TypeFmt [2:0] (b)Type [4:0] (b)描述
MRd000,0010 0000Memory Read Request
MRdLk000,0010 0001Memory Read Request-Locked
MWr010,0110 0000Memory Write Request
IORd0000 0010I/O Read Request
IOWr0100 0010I/O Write Request
CfgRd00000 0100Memory Read Request
CfgWr00100 0100Memory Read Request
CfgRd10000 0101Configuration Read Type 1
CfgWr10100 0101Configuration Write Type 1
TCfgRd0001 1011已弃用的TLP Type
TCfgWr0101 1011已弃用的TLP Type
Msg0011 0r2r1r0Message Request - 子字段 r[2:0] 指定Message路由机制
MsgD0111 0r2r1r0带data payload的Message Request - 子字段 r[2:0] 指定Message路由机制
Cpl0000 1010不带Data的Completion - 用于具有任何Completion Status的 I/O 和Configuration Write Completions。 也用于Completion Status不是Successful Completion的AtomicOp Completions和Read Completions(I/O、Configuration或Memory)。
CplD0100 1010带Data的Completion - 用于Memeory, I/O, Configure Read Completions.也用于AtomicOp Completions.
CplLk0000 1011不带Data的Locked Memory Read的Completion,仅在错误情况下使用
CplDLk0100 1011Locked Memory Read的Completion, 反之类似CpID
FetchAdd010,0110 1100获取并添加AtomicOp Request
Swap010,0110 1101无条件交换 AtomicOp Request
CAS010,0110 1110比较并交换 AtomicOp Request
LPrfx1000L3L2L1L0Local TLP Prefix - 子字段 L[3:0] 指定Local TLP Prefix类型
EPrfx1001E3E2E1E0End-End TLP Prefix -子字段E[3:0]指定End-End TLP Prefix类型
所有上面未显示的编码都是保留值
表4 Length[9:0]字段编码
Length[9:0]对应TLP Data Payload大小
00 0000 0001b1 DW
00 0000 0010b2 DW
11 1111 1111b1023 DW
00 0000 0000b1024 DW
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值