在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字段能夠有效地管理和標識事務,從而保證數據傳輸的可靠性和正確性。