通用包头字段
所有TLP前缀和报头都包含如下字段:
•Fmt[2:0] - TLP格式-字节0的比特数[7:5]
•Type[4:0] - TLP类型-字节0的比特数[4:0]
Fmt字段表示存在一个或多个TLP前缀,Type字段表示关联的TLP前缀类型。
TLP报头的Fmt和Type字段提供了确定TLP报头剩余部分的大小所需的信息,以及包是否在报头后面包含数据负载。
TLP报头的Fmt、Type、TD和Length字段包含了确定TLP非前缀部分的总体大小所需的所有信息。Type字段除了定义TLP的类型外,还决定了TLP如何被Switch路由。
除了允许的Fmt[2:0]和Type[4:0]字段值,所有其他编码是保留的。
•TC[2:0] -流量类-位于字节1的位[6:4]
•轻量级通知(LN)—1b,表示内存请求是LN Read或LN Write,或完成是LN Completion。位于字节1的位[1] (PCIe6.0已经废除),可参考 【PCIe 6.0】缘起缘灭缘终尽,花开花落花归尘——缅怀被PCIe 6.0拿掉的LN(Lightweight Notification)协议-CSDN博客
•TLP提示(TH) - 1b 表示在TLP报头中存在TLP处理提示(TPH)和可选的TPH TLP前缀(如果存在)-位于第1字节的第0位
•Attr[1:0] -属性 位于字节2 的[5:4]位
•Attr[2] -属性位于字节1的第2位
•TD - 1b 表示TLP摘要以一个双字(DW)的形式出现在TLP的末尾—字节2的第7位
•Error Poisoned(EP)—指示TLP中毒-字节2的第6位
•Length[9:0]- DW中数据有效载荷的长度-字节2的[1:0]位与字节3的[7:0]位连接
◦TLP数据必须是4字节自然对齐的,并以4字节DW的增量进行增加。
◦保留给不包含或引用数据有效负载的tlp,包括Cpl, CplLk和Messages(除非指定)
下图为这些组成的位置示意
下图为Fmt编码及对应含义
下图为Fmt与Type字段编码及对应含义
下图为Length编码及代表长度
TLP摘要规则
•对于任何TLP, TD位的值为1b 表示存在TLP摘要字段,包括TLP末尾的端到端CRC (ECRC)值。
◦一个TLP的TD位值与观察到的大小不对应(考虑数据负载,如果存在)是一个畸形的TLP。
这是一个与接收端口相关的报告错误。
•如果TLP的中间或最终PCI Express Receiver不支持ECRC检查,则该Receiver必须忽略TLP Digest 6。
◦如果TLP的接收方支持ECRC检查,则将TLP摘要字段中的值解释为ECRC值。