2.2.4.路由和尋址規則
TLP路由具備三個主要機制:地址路由、ID路由和隱式(implicit)路由。其中,隱式路由僅有消息請求使用。
2.2.4.1 基於地址的路由規則
- 地址路由主要用於內存和I/O請求。
- 定義了兩種地址格式,64位格式使用了4個DW的頭部,32位格式使用了3個DW的頭部。(分別如figure 2-7和2-8所示)。
- 對於內存讀、內存寫和AtomicOp 請求,地址類型域(AT)將按照如Table2-5中進行編碼。對於其他請求,AT域是保留的。
- Table2-6給出了TLP頭部的地址映射。
- 內存讀、內存寫和AtomicOp 請求均可以使用上述兩種格式
1).對於低於4GB的地址空間,請求者必須使用32位格式。如果接受者收到了一個用於請求4GB以下(即,高32位地址全爲0)的地址空間的64位格式地址,那麼其行爲是未定義的。 - I/O讀請求和I/O寫請求使用的是32位格式。
- 所有代理都必須對頭部中的所有地址位進行解碼,不允許使用地址別名。
2.2.4.2.基於ID的路由規則
-
配置請求、ID路由消息和“完成”將使用ID路由。
-
ID路由使用總線、設備和功能編號來指定TLP的目的地:
1)Table2-7給出了非ARI的I路由ID,總線、設備和功能編號(3位)同TLP頭部的映射關係
2)Table2-8給出了ARI的I路由ID,總線、設備和功能編號(3位)同TLP頭部的映射關係
-
定義了兩種ID路由格式,一種使用了4個DW的頭部,一種使用了3個DW的頭部。分別如Figure2-9/2-10所示。
2.2.5.頭/尾DW字節使能規則
內存、I/O和配置請求都包含字節使能。“字節使能”處於請求頭部的第7個字節(見Figure2-11)。對於設置了TH位的內存讀請求,字節使能域也用於攜帶ST[7:0]域。TH位僅能在內存讀請求中設置,使得在數據都可用時完成這些讀請求。
-
對於設置了TH位的內存讀請求,如下的值用於進行字節使能。
1)如果請求的Length域所指定的長度爲1DW,那麼頭DW的字節使能的值被設置爲“1111b”,尾DW的字節使能的值被設置爲“0000b”。
2)如果請求的Length域所指定的長度大於1DW,那麼頭/尾DW字節使能的值將被設置爲“1111b”。 -
頭DW BE[3:0]域中包含了由一個請求使用的第一個(或唯一一個)DW的字節使能。
1)如果請求中的Length與所指定的長度大於1DW,那麼這個域不能設置爲0000b。 -
尾DW BE[3:0]域中包含了一個請求的最後一個DW的字節使能。
1)如果一個請求的Length域所指定的長度爲1DW,那麼這個域僅能設置爲0000b。
2)如果一個請求的Length域所指定的長度大於1DW,那麼這個域不能設置爲0000b。 -
對於字節使能域中的每個位:
1)如果被設置位0b,則對應的字節不能寫,或者如果不能預取,則Completer不能讀該字節。
2)如果被設置爲1b,則對應的字節必須寫或Completer必須讀該字節。 -
對於所有長度爲1DW的請求,頭DW的BE域的值可以設置爲非連續的使能。
1)非連續字節使能示例:1010b,0101b。 -
對於QW對齊的長度爲2DW(1QW)的內存請求,允許使用非連續字節使能。
-
所有長度爲2DW(1QW)的非QW對其內存請求和長度爲3DW或更多的內存請求,只能使能請求中的頭DW和尾DW中連續的數據。
1)連續字節使能示例:
頭DW BE:1100b,尾DW BE:0011b
頭DW BE:1000b,尾DW BE:0111b -
Table2-9展示了字節使能域中的位和所處請求頭部中的位置、對應數據的字節的關係
-
1DW長度的寫請求可以不使能字節,對Completer也沒有影響。
-
如果一個1DW的讀請求指定所讀取的數據爲未使能 (頭DW BE[3:0]域=0000b),則對應的Completion必須將Length設置爲1DW,其中包含1DW的數據負載。
1)Completion包中數據負載的內容是未定義的,可能爲任意值。 -
如果TLP沒有遵守字節使能規則,那麼接受者/完成者的行爲將是未定義的。
-
接受者可能會根據配置,檢查是否有違反字節使能規則。如果接受者實現了這類檢查,那麼如果一個TLP違反了字節使能規則,那麼這個TLP就是一個存在錯誤的TLP。
1)如果檢查了字節使能的規則,那麼當違反規則時,將報告與接收端口所對應的錯誤。
零長度讀取
設備將使用沒有字節使能的1DW內存讀取請求(或“零長度讀取”),作爲一種清空請求。對於一個請求者,清空原語允許一個設備可以確保之前的Posted writes操作已經在PCIE目的地完成了。爲了滿足所有情況,零長度讀取的地址必須和用於清空的Posted Writess指向同一個設備。建議使用Posted writes清空時使用的同一個地址。
清空原語具有廣泛的應用,所有Completer都必須實現同這個原語相關的功能。因爲Requester可能在不瞭解Completer特點的情況下使用清空原語,Completer必須保證零長度讀取沒有副作用。對於規則“在一個非預取空間,Completer不能讀取未使能的字節”,這是一種具體的情況。需要注意的是,在進行零長度讀取時,清空僅用於相同的Traffic Class流。
2.2.6. 事務描述符
待續