在PCIe 5.0规范中,TLP(Transaction Layer Packet)报文的Tag字段用于标识和管理事务。以下是关于Tag的生成和使用规则和定义的详细描述:
Tag字段的定义
- Tag字段:位于TLP报文的Header中,占用8位(Byte 7的第0到第7位)。
- Transaction ID:由Requester ID和Tag组成,用于唯一标识一个事务。
Tag的生成规则
-
Requester生成Tag:
- 当一个Requester(发起请求的设备)发送一个Non-Posted TLP时,它必须生成一个唯一的Tag值。
- Tag值必须在Requester的范围内是唯一的,以确保每个Non-Posted TLP可以被唯一标识。
-
Tag的唯一性:
- 对于同一个Requester,Tag值必须在所有未完成的Non-Posted TLP中是唯一的。
- Tag值的范围是0到255(8位),但在PCIe 3.0及以上版本中,可以通过启用Extended Tag字段来扩展到10位(0到1023)。
-
Extended Tag字段:
- 在PCIe 3.0及以上版本中,Tag字段可以扩展到10位,以支持更多的并发事务。
- 如果Requester支持Extended Tag,它可以在TLP Header中使用Extended Tag字段来生成更多的唯一Tag值。
Tag的使用规则
-
Tag的保留:
- 在发送Non-Posted TLP时,Requester必须保留该Tag值,直到收到对应的Completion TLP。
- 如果Requester在等待Completion期间发送了另一个Non-Posted TLP,它必须使用一个新的、唯一的Tag值。
-
Completion TLP的Tag匹配:
- Completion TLP必须包含与对应的Request TLP相同的Tag值,以确保事务的正确匹配。
- 如果Completion TLP的Tag值与Request TLP的Tag值不匹配,接收端将丢弃该Completion TLP,并报告错误。
-
Tag的释放:
- 当Requester收到对应的Completion TLP时,它可以释放该Tag值,以便在后续的事务中重用。
- 如果Requester在等待Completion期间发生超时或其他错误,它必须释放该Tag值,以避免资源泄漏。
其他注意事项
-
Tag字段的保留位:
- 在PCIe 3.0及以上版本中,Tag字段的第9和第8位(Tag[9:8])用于支持10位Tag。
- 如果Requester不支持10位Tag,它必须将Tag[9:8]设置为00b。
-
Tag字段的错误处理:
- 如果接收端检测到Tag字段的值无效(例如,Tag[9:8]为00b但Requester声称支持10位Tag),它必须将TLP视为Malformed TLP,并报告错误。
通过以上规则和定义,PCIe 5.0规范确保了TLP报文的Tag字段能够有效地管理和标识事务,从而保证数据传输的可靠性和正确性。