[PCIE5.0] 2.2.1 Common Packet Header Fields

145 阅读4分钟

这段文字描述了PCI Express中事务层包(TLP)头部的常见字段。TLP头部是数据包的核心,它包含了很多控制信息,用于确保数据正确传输和处理。

1. TLP格式和类型

在这里插入图片描述

每个TLP数据包都有一个头部(Header),头部包含两个非常重要的字段:
	• Fmt (Format):表示TLP的格式。它指示该TLP头部的大小,以及是否包含数据负载。比如: 
		○ 000b 表示3字(32位)头部,没有数据;
		○ 010b 表示3字头部,后面跟着数据负载;
		○ 100b 表示是一个TLP前缀(不包含数据)。
	• Type (Type):表示TLP的类型。它标识了数据包的类型,并影响数据包如何在交换机中路由。不同的TLP类型有不同的功能(如内存读请求、内存写请求、I/O请求等)。

2. Traffic Class (TC)

• Traffic Class (TC):这是一个3位的字段,表示流量类别。它用于区分不同的传输流。可以通过它来进行优先级调度,比如有些数据包可能需要优先处理。

3. 轻量级通知(LN)

• Lightweight Notification (LN):这是一个标志位,用来表示内存请求是否是轻量级的读取(LN Read)或写入(LN Write),或者完成是否是轻量级的完成。

4. TLP处理提示(TH)

• TLP Hints (TH):这是一个标志位,表示TLP头部中是否包含TLP处理提示(TPH)。TLP处理提示是一些额外的信息,可能会影响数据包的处理方式。

5. 属性字段(Attr)

• Attr[1:0] 和 Attr[2]:这两个字段用于指定事务的属性,比如请求的权限、传输的性质等。它们通常用于控制数据传输的细节。

6. TLP摘要(TD)

• TLP Digest (TD):这是一个标志位,指示该TLP是否包含TLP摘要(数据完整性校验信息)。如果设置为1,表示该TLP包含一个双字(Double Word)大小的摘要,用于数据校验。

7. 错误中毒(EP)

• Error Poisoned (EP):这是一个标志位,表示该TLP是否是中毒的。如果一个数据包被标记为“中毒”,意味着它在传输过程中可能出现了错误,接收方应当丢弃这个数据包。

8. 数据长度(Length)

• Length[9:0]:表示数据负载的长度,单位是双字(DW)。长度字段指定了TLP数据部分的大小,指示接收方该接收多少字节的数据。如果TLP没有数据负载,这个字段的值通常为0

9. TLP头部字段的布局

• 在TLP头部的第一个字节中(Byte 0),Fmt和Type字段指示了数据包的基本格式和类型。
• 接下来的一些字节(Byte 1Byte 2)会根据格式和类型的不同,包含不同的字段。比如,TC、LN、TH等字段。
• Length字段占据Byte 2Byte 3,指示数据负载的大小。

10. TLP类型

TLP的类型决定了数据包的具体功能。不同类型的TLP执行不同的操作。下面列出一些常见的TLP类型:
	• MRd:内存读请求(Memory Read Request)。
	• MWr:内存写请求(Memory Write Request)。
	• CfgRd:配置读取请求(Configuration Read)。
	• Msg:消息请求(Message Request)。
	• Cpl:没有数据的完成包(Completion without Data)。
	• CplD:有数据的完成包(Completion with Data)。
	• FetchAdd、Swap、CAS:原子操作请求类型(如“获取并加”、“交换”)。

11. TLP长度编码(Length[9:0])

TLP数据的长度是以双字(DW)为单位进行编码的。比如:
	 00 0000 0001b 表示1个双字(DW)的数据;
	 00 0000 0010b 表示2个双字(DW);
	 11 1111 1111b 表示1023个双字(DW)。

12. 总结

这些字段组合在一起,构成了每个TLP数据包的头部,用于描述该包的类型、大小、属性、流量控制信息等。这些信息是确保PCI Express系统能够高效、可靠地传输数据的关键。理解这些字段有助于深入了解PCI Express协议的工作原理,特别是在数据包如何传递和处理的层面。
通过这些字段,设备可以知道:
	• 该如何解析包头并处理数据;
	• 是否需要执行特殊的操作(如中毒检查、数据校验等);
	• 如何确定数据包的大小、类型,以及是否包含数据等。