PCIE系统标准体系结构解读(四):体系结构概述之处理层数据包

1.4.1 TLP 的结构

通用 TLP 头的格式:下图展示了一个 3DW 头的格式内容。


头字段头位置字段用途

Lenth[9:0]字节3的7:0

字节2的1:0

TLP 数据有效载荷的传送大小,以DW为单位,最大为 1024 DW。编码:00 0000 0001b = 1DW;00 0000 0010b = 2DW;…;11 1111 1111b = 1023DW;00 0000 0000b = 1024W

Attr字节2的比特5:4bit5:灵活的顺序,设置为1时,对于此TLP,允许使用PCI-X的灵活顺序。设置为0,则使用PCI的严格顺序。

bit4:不侦测,设置为1时,表明请求者对于此TLP不存在主机缓存一致性的问题。引起处理器缓存侦测一致性不需要系统硬件,设置为0时,要求进行PCI类型的缓存侦测保护

EP(中毒数据)字节2的比特6设置为1时,尽管允许正常完成事务,但伴随此数据应该是被认为时无效的

TD(摘要字段存在)字节2的比特7如果设置为1,可选的一个双字的TLP摘要字段要包含在TLP中,而且该TLP包含ECRC值。

TC(流量类别)[2:0]字节1的比特6:4000b=流量类别0(默认)

111b=流量类别7

Tpye[4:0](类型)字节0 的比特4:0编码此TLP使用的事务变体。类型字段和Fmt[1:0]字段用来指定事务的类型、头的大小、数据有效载荷是否存在等。

Fmt[1:0](格式)字节0的比特6:5编码有关头大小以及数据有效载荷是否该TLP的一部分等信息:00b-3DW头,没有数据;01b-4DW,没有数据;10b-3DW头,有数据;11b-4DW头,有数据

第一个DW字节允许字节7的比特3:0这4个比特一对一映射到有效载荷第一个双字中的各字节。

比特3=1:第一个双字中的字节3有效,否则无效;

比特2=1:第一个双字中的字节2有效,否则无效;

比特1=1:第一个双字中的字节1有效,否则无效;

比特0=1:第一个双字中的字节0有效,否则无效。

最后一个DW字节允许字节7的比特7:4这4个比特一对一映射到有效载荷最后一个双字中的各字节。

比特3=1:最后一个双字中的字节3有效,否则无效;

比特2=1:最后一个双字中的字节2有效,否则无效;

比特1=1:最后一个双字中的字节1有效,否则无效;

比特0=1:最后一个双字中的字节0有效,否则无效。

1.4.2 头类型/格式字段的编码


1.4.3 事务描述符字段


1.4.4 IO 请求


字段名头字节/比特用途

Lenth[9:0]字节3的比特7:0

字节2的比特1:0

DW为单位,数据有效载荷的大小。对于IO请求,这个字段总为1。

Attr[1:0]字节2的比特5:4属性1:灵活的顺序比特

属性0:不侦测比特

IO请求中,总为0

EP字节2的比特6为1时表明数据有效载荷中毒

TD字节2的比特7如果为1,表明存在摘要字段(1DW)

TC[2:0]字节2的比特6:4数据包的传送类别。IO请求,TC=0

Type[4:0]字节0的比特4:0TLP数据包的类型字段。对于IO请求总设置为00010b

Fmt[1:0]字节0的比特6:500b-IO读;10b-IO写

Byte count[3:0]字节7的比特3:0第一个双字的字节允许,对于IO请求,任意的比特组合都有效

Byte count[7:4]字节7的比特7:4最后一个双字的字节允许,对于IO请求,这些比特必须为0000b

标记[7:0]字节6的比特7:0这些比特用来标识请求者发出的每一个未完成的请求,如果发送的是非报告请求,则分配下一个连续的标志。默认情况:只使用比特4:0;如果控制寄存器中的扩展标记比特置1,则可以使用全部8个比特

Requester ID[15:0]字节5的比特7:0;字节4的比特7:0识别请求者,以便返回完成数据包等。

字节4-7:0:总线号

字节5-7:3:设备号

字节5-2:0:功能号

Address[31:2]字节8的比特7:2;字节7,6,5,的比特7:0IO传送的32比特起始地址的高30比特。最低两位保留(00b),强制起始地址为DW对齐

1.4.5 存储器请求

PCIe 存储器事务包括两大类:读请求/完成和写请求。当请求存储器数据传送时,决不允许存储器事务跨 4KB 边界。

3DW 和 4DW 头之间的差别在于起始地址字段的位置和大小:对于 3DW 头,地址比特 31:2 在字节 8~11 中,字节 12 ~ 15 没用。对于 4DW 头,地址比特 31:2 在字节12 ~ 15 中,地址比特 63:32 在字节8~11 中。

 4DW 存储器请求头字段

字段名头字节/比特功能

长度[9:0]字节3的比特7:0

字节2的比特1:0

TLP 数据有效载荷传送大小

属性字节2的比特5:4bit5:灵活的顺序

bit4:不侦测

EP字节2的比特6中毒数据

TD(摘要)字节2的比特7设置为1时,一个可选的双字摘要字段包含在此TLP中

TC字节1的比特6:4000b-流量类别0

111b-流量类别7

类型[4:0]字节0的比特4:0类别字段

00000b-存储器读或写

00001b-存储器读锁定

格式[1:0]字节0的比特6:500b-3DW存储器读

10b-3DW存储器写

01b-4DW存储器读

11b-4DW存储器写

第一个DW BE[3:0]字节7的比特3:0 

最后一个DW BE[3:0]字节7的比特7:4 

标记7:0字节6的比特7:0 

请求者ID[15:0]字节5的比特7:0

字节4的比特7:0

字节4-7:0:总线号

字节5-7:3:设备号

字节5-2:0:功能号

地址[31:2]字节15的比特7:2

字节14的比特7:0

字节13的比特7:0


地址[63:32]字节11的比特7:2

字节10的比特7:0

字节9的比特7:0

字节8的比特7:0



1.4.6 配置请求

字段名头字节/比特功能

长度[9:0]字节3的比特7:0

字节2的比特1:0

这一字段总为1

属性[1:0]字节2的比特5:4bit5:灵活的顺序

bit4:不侦测

EP字节2的比特6中毒数据

TD(摘要)字节2的比特7设置为1时,一个可选的双字摘要字段包含在此TLP中

TC字节1的比特6:4TC=0

类型[4:0]字节0的比特4:0类别字段

00100b-类型0配置请求

00101b-类型1配置请求

格式[1:0]字节0的比特6:500b-3DW配置读

10b-3DW配置写

第一个DW BE[3:0]字节7的比特3:0 

最后一个DW BE[3:0]字节7的比特7:40000b

标记7:0字节6的比特7:0 

请求者ID[15:0]字节5的比特7:0

字节4的比特7:0

字节4-7:0:总线号

字节5-7:3:设备号

字节5-2:0:功能号

寄存器数号字节11的比特7:2配置空间偏移量的低6比特

扩展寄存器数号字节10比特3:0配置空间偏移量的高端4比特

完成者ID[15:0]字节9的比特7:0

字节8的比特7:0

字节8-7:0:总线号

字节9-7:3:设备号

字节9-2:0:功能号


1.4.7 完成

完成在以下每个非报告事务请求后返回:存储器读请求可能导致带数据的完成;IO读请求可能导致带或不带数据的完成;IO写请求可能导致没有数据的完成;配置读请求可能导致带数据的完成;配置写请求可能到时没有数据的完成。

字段名头字节/比特功能

长度[9:0]字节3的比特7:0

字节2的比特1:0

这一字段总为1

属性[1:0]字节2的比特5:4bit5:灵活的顺序

bit4:不侦测

EP字节2的比特6中毒数据

TD(摘要)字节2的比特7设置为1时,一个可选的双字摘要字段包含在此TLP中

TC字节1的比特6:4TC=0

类型[4:0]字节0的比特4:0类别字段

00100b-类型0配置请求

00101b-类型1配置请求

格式[1:0]字节0的比特6:500b-3DW配置读

10b-3DW配置写

字节计数字节7的比特7:0

字节6的比特3:0

读请求结束之前的剩余字节数。

BCM(修改的字节计数)字节6的比特4只能由PCI-X完成者设置为1。表示字节数字段能够反映第一次传输的有效载荷,而不是剩余的总有效载荷。

CS[2:0](完成者状况代码)字节6的比特7:5由完成者对这些比特编码表示成功实现请求。

000b-成功完成SC

001b-不支持的请求UR

010b-配置请求重试状态CR,S

100b-完成者终止CA

完成者ID[15:0]字节5比特7:0

字节4比特7:0

标识完成者。尽管路由完成数据包不需要这一信息,但在调试总线流量时,这一信息可能非常有用。

字节4-7:0:完成者总线号

字节5-7:3:完成者设备号

字节5-2:0:完成者的功能号

低地址[6:0]字节11比特6:0一次读操作返回数据的第一个允许字节的地址的地段7比特。可以由请求数据包中的长度和字节允许来计算,常用来确定下以合法读完成的边界。

标记[7:0]字节10波特7:0设置这些比特以反映接收的请求标记,请求者使用这一字段将入站的完成数据包与未完成的请求关联起来。

请求者ID[15:0]字节9的比特7:0

字节8的比特7:0

从请求中复制此字段,用来路由完成数据包返回原请求者。

字节4-7:0:请求者总线号

字节5-7:3:请求者设备号

字节5-2:0:请求者功能号


1.4.8 消息请求

消息请求可以代替早期总线协议使用的中断、错误和电源管理等边带信号。所有消息请求都使用 4DW 头格式,并且处理消息请求的过程与处理存储器写事务基本相同。消息可以使用地址、ID或隐式路由方法来路由。数据包头中的路由子字段表示应用的路由方法,以及另外在使用哪些头寄存器。


字段名头字节/比特功能

长度[9:0]字节3的比特7:0

字节2的比特1:0

这一字段总为0或1

属性[1:0]字节2的比特5:4bit5:灵活的顺序

bit4:不侦测

EP字节2的比特6中毒数据

TD(摘要)字节2的比特7设置为1时,一个可选的双字摘要字段包含在此TLP中

TC字节1的比特6:4TC=0

类型[4:0]字节0的比特4:0类别字段

bit4:3-10b=Msg

bit2:0(消息路由子字段)

000b-路由至根联合体

001b-根据地址路由

010b-根据ID路由

011b-根联合体广播Msg

100b-本地,终止于接收器

101b-收集/路由至根联合体

其它-保留

格式[1:0]字节0的比特6:501b-没有数据的消息请求

11b-带数据的消息请求

消息代码[7:0]字节7的比特7:0这一字段含有表明要发送的消息类型的编码

0000 0000b-解除锁定消息

0001 xxxb-电源管理消息

0010 0xxxb-INTx消息

0011 00xxb-出错消息

0100 0000b-热插拔消息

0101 0000b-插槽电源消息

0111 111xb-厂商类型0消息

0111 1111b-厂商类型1消息

标记7:0字节6的比特7:0所有消息请求都是非报告请求,没有分配表肌比特,这些比特都是0

请求者ID[15:0]字节5的比特7:0

字节4的比特7:0

标识发送消息的请求者。

字节4-7:0:请求者总线号

字节5-7:3:请求者设备号

字节5-2:0:请求者功能号

地址[31:2]字节11的比特7:2

字节10的比特7:0

字节9的比特7:0

字节8的比特7:0

如果选择地址路由,则此字段含有起始地址的低32比特,否则不使用此字段

地址[63:32]字节15的比特7:0

字节14的比特7:0

字节13的比特7:0

字节12的比特7:0

如果选择地址路由,则此字段含有起始地址的高32比特,否则不使用此字段

你可能感兴趣的:(PCIE系统标准体系结构解读(四):体系结构概述之处理层数据包)