PCIe 6.0入门之事务层

电子说

1.2w人已加入

描述

PCIE 6.0 (三)

事务层

⊙transaction layer

作为协议的最高层,事务层的主要功能是:

• 流水线式完整拆分交易协议

• 区分事务层数据包 (TLP) 的排序和处理要求的机制

• 基于credit的流量控制

• 可选支持数据中毒和端到端数据完整性检测。

0****1

**###

Transaction Layer Overview

**

PCIe 6.0 增加了一种新的传输模式 flit mode,而传统的传输模式就变成了non-flit mode。在传统模式中,TLP是不定长的,物理层中需要start end标志来标记数据包的头和尾。而且TLP和DLLP是工作在不同的层中,相互之间是独立的。

PCIe 6.0的flit mode借用了NoC中flit的概念(也可能不是借用,因为笔者是做NoC的,所以可能会有先入为主的影响),将多个TLP和一个DLLP的信息打包成一个大的数据帧,称为flit,数据的传输以flit为单位,每个flit固定为256Byte。需要注意的是,flit既不在事务层也不在数据链路层,而是在物理层,就好比NoC的flit是直接定义在物理总线上的,PCIe的flit是直接定义在物理层的lane中的.

PCIe事务层是请求者和完成者之间信息传输的基础。 在这层协议中定义了四个地址空间,并定义了不同的事务类型,每个都有自己独特的预期用途,如下所示

PCIe

Memory Transactions

内存事务包括以下类型:

• 读取请求/完成

• 写请求

• 可延迟内存写入请求/完成

• 原子操作的请求/完成

I/O Transactions

PCI Express 支持 I/O 空间,以便与需要使用它们的旧设备兼容。 I/O 事务包括以下类型:

• 读取请求/完成

• 写请求/完成

Message Transactions

message事务,或简称为消息,用于支持设备之间事件的带内通信。除了协议中定义的特定消息外,PCI Express 还支持供应商定义的消息使用指定的消息代码。

事务层数据包格式

事务由请求和完成组成,它们使用数据包进行通信。数据包的域断可见下图,(一个数据包的大小如果为512Bit,则每个预断的值就是将512Bit的值按顺序填在下图的格式表中)。

PCIe

0****2

事务层协议 - 数据包定义

前面给大家介绍了TL的数据包格式由TLP Prefix、header,data组成。下面为大家介绍在每个小部分里不同域断的含义。

Header Fields For Non-Flit Mode

PCIe

Fmt 字段指示一个或多个 TLP 前缀的存在,Type 字段指示相关的 TLP前缀类型。

  • TLP Header 的 Fmt 和 Type 字段提供了确定剩余部分大小所需的信息。同时TLP 报头的 Fmt、Type、TD 和 Length 字段包含确定 TLP 非前缀部分的总体大小所需的所有信息。 Type 字段除了定义 TLP 的类型外,还决定了交换机如何路由 TLP。 以下各节将不同类型的 TLP。
  • TC[2:0]:流量类别 (TC) 是一个 3 位字段,允许将事务区分为八个流量类别。 与 PCI Express 虚拟通道支持一起,TC 机制是实现差异化流量服务的基本要素。(TC0是表示此次传输的数据包优先级最高要优先通过) 每个 PCI Express 事务层数据包都使用 TC 信息作为在 PCI Express 结构中端到端携带的不变标签。 当数据包穿过结构时,此信息将在每个链路和每个交换机元素内使用,以做出有关正确处理流量的决策。 服务的一个关键方面是根据 TC 标签通过相应的虚拟通道路由数据包。
  • R:保留;
  • TLP Hints (TH):TLP Hints,用以指示 TLP Header 中是否含有 TPH 及 TPH TLP Prefix。(具体参考PCIE协议介绍)
  • Attr:Attributes,通过该字段提供附加信息给接收端,告知接收端采用非默认方式来处理当前 TLP,常用于 TLP 排序、Snoop 硬件一致性管理等方面。
  • TD:TLP Digest,用以指示 TLP 末尾的 Digest 字段是否含有 ECRC。仅用于 NFM。FM 的 ECRC 相关指示放在了 TS。
  • Error Poisoned:Error Poisoned,PCIe E2E 数据完整性相关,用以指示当前 TLP 的 Data Payload 被污染。
  • Length[9:0]:Length,用以指示当前 TLP 的 Data Payload 长度,仅对带有 Data Payload 的 TLP 有效, 单位为 DW。

Data Payloads For Non-Flit Mode

ARI : Alternative Routing-ID,用于Requester IDs,Completer IDs以及Routing ID。

ARI Device : 与Upstream Port关联的设备,其Functions均包含 ARI Extended

ARI Downstream Port : 支持 ARI 转发的Switch Downstream Port或Root Port。

( ARI(Alternative Routing-ID),备选路由ID。在PCIE中,往往数据包传输通过TLP的形式。这些TLP大致分为Memory Read/Write TLP , Configuration Read/Write TLP ,Completion TLP, Message TLP以及IO TLP。这些TLP从Request端到Completion端的过程叫做路由,而路由又大致分为两类地址路由和ID路由。

所有的ID路由中的ID包括Request端的bus number,device number以及function number。其中ID有16 bits,bus number 8 bits,device number 5 bits,function number 3 bits意味着支持8个function。

对于有些device功能比较复杂或者支持FBP技术的root port或者device,往往8个function不足以满足要求,这个时候就出现了ARI技术。将device number的5 bits也用作function,这样便可以由原来的8个function扩展到256个function。 )

  • Length表示DW的数目,为整数
  • 除了那些明确引用数据长度的消息,Length[9:0] 为所有Message保留
    (请参阅协议第 2.2.8 节中的Message Code表。)
  • 有 data payload的 TLP 发送器不允许TLP Length字段给出的data payload长度超过发送器Device Control寄存器 Max_Payload_Size 字段中的值指定的DW长度。
  • 对于ARI 设备,Max_Payload_Size 仅由Function 0 中的设置决定,忽略其他Function中的 Max_Payload_Size 设置。
  • 如果一个非ARI Multi-Function Device(MFD)中的所有Functions 的Max_Payload_Size完全相同,如果有个Upstream Port与这个MFD相关联,它传输的 TLP data payload不得超过通用 Max_Payload_Size 设置。
  • 如果一个非ARI Multi-Function Device(MFD)中的所有Functions 的Max_Payload_Size不完全相同,如果有个Upstream Port与这个MFD相关联,它传输的 TLP data payload不得超过我们自定义的 Max_Payload_Size 设置。
  • 由 TLP 的 Length 字段给出的已接收 TLP 的data payload大小不得超过接收器设备Controller 寄存器的 Max_Payload_Size 字段中的值指定的长度。接收者必须检查是否违反此规则。 如果接收器确定 TLP 违反此规则,则该 TLP 是格式错误的 TLP,这是一个与接收端口相关的报告错误。
  • 对于 ARI 设备,Max_Payload_Size 仅由Function 0 中的设置确定。其他Function中的 Max_Payload_Size 设置将被忽略。
  • 如果一个非ARI Multi-Function Device(MFD)中的所有Functions 的Max_Payload_Size完全相同,如果有个Upstream Port与这个MFD相关联,接收器需要根据通用 Max_Payload_Size 的设置检查 TLP data payload大小。
  1. 如果一个非ARI Multi-Function Device(MFD)中的所有Functions 的Max_Payload_Size不完全相同,如果有个Upstream Port与这个MFD相关联,接收器需要根据自定义的Max_Payload_Size 设置检查 TLP 的data payload。

对于包含数据的 TLP,Length字段中的值与 TLP 中包含的实际数据量必须匹配。同时,接收者必须检查是否违反此规则。 如果接收器确定 TLP 违反此规则,则该 TLP 是Malformed TLP,这是一个跟Receiving Port相关的Reported Error。(RTL实现中要实现的ERROR异常)

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分