事務層包(tlp)的一般格式如下圖所示:
前面的文章介紹過,tlp header為3dw或者4dw,data payload為1-1024dw,最後的tlp digest(ecrc)是可選的,為1dw。
tlp header在整個tlp的位置如下圖所示,需要注意的是,tlp header的格式和內容都會隨著tlp的型別和路由方式的改變而改變。
tlp的型別和路由方式由fmt和type所決定,這在前面關於tlp路由的文章中已經詳細的介紹過。上圖顯示的是各種不同格式的tlp header的相同的部分。
每乙個field的作用與意義如下表所示:
下面分別詳細地介紹一下byte enable,在pcie中data payload的單位是dw,也就是說資料大小(位址)需要以dw作為對齊。但是很多情況下,資料的大小並不是dw的整數倍,因此pcie引入了byte enable來解決這一問題。使用byte enable需要遵循一下原則:
· byte enable為高電平有效,低電平(0)表示data payload的對應byte將被認為是無效的,即不被completer使用。
· 如果有效資料小於1dw,則last dw byte enable應全部為0。
· 如果data payload大於1dw,則first dw byte enable至少有一位是有效的。
· 如果data payload大於或等於3dw,則first dw byte enable和last dw byte enable當中的有效位必須是連續的。即這種情況下,byte enable只能用於調整起始位址和結束位址。
· 如果data payload等於1dw,則first dw byte enable中的有效位可以是不連續的。
· 如果data payload等於2dw,則first dw byte enable和last dw byte enable中的有效位都可以是不連續的。
· 寫請求中的dw等於1,但是first dw byte enable中沒有任何一位是有效的,也是允許的,但是這樣的請求對於completer沒有任何作用。
· 如果讀請求dw等於1,但是first dw byte enable中沒有任何一位是有效的,此時completer會返回1dw的data payload,只是其中的資料都是無效的。這一方式常備用於flush mechanism。
乙個簡單的byte enable使用的例子,如下圖所示:
關於tlp的data payload有:
· data payload的大小由tlp header中的length決定。
· data payload的資料採用的是little endian,即低位元組存放於低位址中。
· data payload的大小並不是有效的資料的大小,有效資料的大小是由data payload和byte enable共同決定的。
· 當tlp型別為message時,length一般是保留的(reserved),除非該message是帶有資料的(msgd)。
· tlp的data payload大小不得超過max_payload_size的值,該值位於device control register中。對於比較大的資料量,因此只能分多次進行傳送。對於讀請求來說,並沒有data payload,也就是說該規則並不適用於讀請求。
· 需要特別注意的是,起始位址和結束位址之間不能夠跨越4kb的位址邊界。
PCIe掃盲 TLP Header詳解(三)
completions completions的tlp header的格式如下圖所示 這裡來解釋一下completion status codes 000b sc successful completion 表示請求 request 被正確的處理 001b ur unsupported reques...
PCIe掃盲 PCIe錯誤源詳解(一)
這篇文章來詳細地分析一下各種錯誤源的產生原理,由於內容較多,因此分為兩篇文章。第一篇介紹一下ecrc校檢錯誤和data poisoning等 第二篇文章介紹事務 transaction 錯誤 鏈路流量控制 link flow control 相關的錯誤 異常的tlp malformed tlp 以及...
PCIe掃盲 PCIe匯流排體系結構入門
和很多的序列傳輸協議一樣,乙個完整的pcie體系結構包括應用層 事務層 transaction layer 資料鏈路層 data link layer 和物理層 physical layer 其中,應用層並不是pcie spec所規定的內容,完全由使用者根據自己的需求進行設計,另外三層都是pcie ...