这段文字描述了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 1和Byte 2)会根据格式和类型的不同,包含不同的字段。比如,TC、LN、TH等字段。
• Length字段占据Byte 2和Byte 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协议的工作原理,特别是在数据包如何传递和处理的层面。
通过这些字段,设备可以知道:
• 该如何解析包头并处理数据;
• 是否需要执行特殊的操作(如中毒检查、数据校验等);
• 如何确定数据包的大小、类型,以及是否包含数据等。