PCIe掃盲 TLP路由(Routing)基礎

2021-09-24 21:12:34 字數 1467 閱讀 9425

首先來分析乙個例子,如下圖所示:

當包(packet)到達switch的輸入埠(ingress port)時,埠首先會檢查包是否有錯誤,然後根據包的路由(routing)資訊,來做出以下三種處理方式之一:

1、 接受這個包,並自己(switch)使用它(internal use);

2、 將其通過響應的輸出埠(egress port)**到下一級endpoint(或者下一級switch);

3、 拒絕接受這個包。

在前面的文章中多次介紹過,pcie匯流排中一共有三種型別的包:ordered sets(命令集包,只在相鄰的裝置的物理層之間進行傳遞,不會被**到其他的裝置中)、dllps(資料鏈路層包,只在相鄰的裝置的資料鏈路層之間進行傳遞,不會被**到其他裝置中)和tlps(事務層包,可以根據包中的路由資訊被**到其他的裝置中)。

注:實際上不論是tlps還是dllps都會經過物理層,這裡說的tlp和dllp指的是包的最初**分別是事務層和資料鏈路層,即dllp和上一層的事務層沒有什麼關係,其內容和作用完全是由資料鏈路層自己決定的。

注:endpoint不僅可以傳送tlp給其上層的裝置(如root),也可以傳送tlp給其他的endpoint,當然這需要借助switch來實現。這種傳輸方式叫做peer-to-peer。

tlp一共有三種路由方式,分別是id路由(id routing,即bdf routing)、位址路由(address routing,包括memory和io)以及模糊路由(implicitly routing)。本文將簡單介紹一些關於tlp路由的基礎知識,具體的路由方式將會在接下來的三篇文章中依次進行介紹。

具體採用哪一種路由方式是由tlp的型別所決定的,如下表所示:

注:一般情況下,message都是使用模糊路由(implicitly routing)的,但是也有pcie裝置廠商自定義的message會使用位址路由或者id路由。

可能有的人要有疑惑了,既然message可以使用位址路由或者id路由,為什麼還要單獨搞出來乙個模糊路由呢?原因很簡單,使用模糊路由可以廣播message到每乙個裝置,採用其他的路由方式必須明確指定是哪乙個裝置。

那麼pcie中是如何來判斷tlp的型別的呢?又是如何判斷其為request還是completion的呢?實際上是通過tlp header的format和type部分來確定的,如下圖所示:

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 ...

PCIe掃盲 PCIe匯流排事務層入門(一)

在介紹事務層之前,首先簡單地了解一下pcie匯流排的通訊機制。假設某個裝置要對另乙個裝置進行讀取資料的操作,首先這個裝置 稱之為requester 需要向另乙個裝置傳送乙個request,然後另乙個裝置 稱之為completer 通過completion packet返回資料或者錯誤資訊。在pcie...