[PCIE5.0] 2.2.2 TLPs with Data Payloads - Rules

206 阅读5分钟

这段文字描述了PCI Express协议中,带有**数据负载(Data Payload)的事务层包(TLP)**的相关规则。简单来说,主要讲解了如何处理和限制TLP中数据部分的大小、数据格式的顺序以及数据包的完整性。

1. Length字段与数据负载大小的限制

	• Length字段:在TLP头部的Length字段中,指定了数据负载的大小,单位是双字(DW)。一个双字通常是4字节,因此Length字段指示的是数据部分的字节数,按4字节的单位来计算。
这意味着:
		○ 如果Length字段的值为1,那么数据部分的大小是4字节;
		○ 如果Length字段的值为2,那么数据部分的大小是8字节,以此类推。
	• 最大负载大小(Max_Payload_Size):每个设备在传输数据时,有一个最大数据负载大小,即数据包的最大长度不能超过设备配置中的Max_Payload_Size设置。如果数据包的负载超过这个限制,传输会失败。
		○ 设备的最大负载大小可以通过设备控制寄存器来设置。这保证了每个设备在处理数据时不会超出硬件的限制。
		○ 如果设备有多个功能(例如多功能设备),通常Max_Payload_Size设置是共享的,但某些设备可以为不同的功能设置不同的负载大小。
这意味着:
		○ 如果TLP的数据负载超过了Max_Payload_Size,那么设备会报错,数据包会被认为是“格式错误的TLP(Malformed TLP)”。
		○ 对于内存读取请求(Memory Read Requests),数据长度由Length字段控制,而不是受Max_Payload_Size限制。

2. 接收方检查数据负载

接收方设备在接收到TLP时,也会检查TLP的数据负载长度:

• 接收方必须确保数据负载的大小符合其自身Max_Payload_Size的设置。如果不匹配,接收方会将该TLP判定为“格式错误的TLP”。
• 格式错误的TLP会被认为是一个错误,接收方将会报告此错误。

3. Length字段与数据的匹配

• 数据负载与Length字段一致:在传输带有数据的TLP时,Length字段中的值必须与实际的数据负载大小一致。如果TLP的Length字段显示有数据,但实际的数据量不符,接收方应认为这是一个“格式错误的TLP”,并报告错误。
• 数据负载和TLP Digest不计入Length字段:需要注意的是,TLP的Digest(摘要)部分不包含在Length字段计算的负载中,Length字段仅指代实际的数据部分。

4. 数据负载的地址序列

• 非AtomicOp请求:如果TLP的数据负载是内存写请求或者其它普通请求(非AtomicOp请求),数据会按字节地址顺序进行排列。例如,如果要写16字节的数据到地址100h,数据包的第一个字节会写入100h,第二个字节写入101h,依此类推,直到10Fh。
• AtomicOp请求:对于原子操作(AtomicOp)请求,如“交换”操作(Swap)或者“比较和交换”(Compare and Swap),数据的排列顺序有所不同。AtomicOp要求最低有效字节(least significant byte)在数据包的开头,后续字节按字节序列的递增顺序排列。这样做是为了确保原子操作的数据一致性。

5. 字节序(Endianess)

• 字节序的格式:TLP中的数据可以有不同的字节序(Endianess)。字节序决定了数据在内存中存储的顺序。常见的字节序有小端(Little Endian)和大端(Big Endian)。
	○ 小端格式:数据的最低有效字节存储在内存的最低地址。比如一个64位(8字节)的写请求,第一字节会存储在最低的地址(如100h),第二字节存储在下一个地址(101h),依此类推。
	○ 大端格式:与小端相反,数据的最低有效字节存储在内存的最高地址。比如同样的64位请求,第一字节会存储在最高地址(107h),第二字节存储在106h,依此类推。
• AtomicOp字节序格式:对于AtomicOp操作,字节序的格式可以由操作的完成器(Completer)根据目标内存的需求来选择。不同的系统可能支持不同的字节序格式,甚至在不同的内存区域使用不同的字节序格式。

6. 实现建议

• 保持数据对齐:在数据传输过程中,确保数据在内存中的对齐是很重要的,尤其对于高效的写操作来说。如果数据按照64字节或128字节的边界进行对齐,系统的性能可能会得到显著提高。

7. 总结

这一段规则的核心目的是确保数据负载的正确性和一致性,并规范了:

• TLP的长度字段必须正确反映数据负载的实际大小;
• 设备和接收方必须遵循最大负载大小限制;
• 数据负载的顺序和字节序格式必须遵循协议的要求,尤其是在原子操作(AtomicOp)中;
• 确保数据的对齐,以提高系统性能。

这些规则保证了数据传输的准确性和高效性,避免了由于数据长度不匹配或字节序问题导致的错误。