首先來(lái)分析一個(gè)例子,如下圖所示:
當(dāng)包(Packet)到達(dá)Switch的輸入端口(Ingress Port)時(shí),端口首先會(huì)檢查包是否有錯(cuò)誤,然后根據(jù)包的路由(Routing)信息,來(lái)做出以下三種處理方式之一:
1、 接受這個(gè)包,并自己(Switch)使用它(Internal Use);
2、 將其通過(guò)響應(yīng)的輸出端口(Egress Port)轉(zhuǎn)發(fā)到下一級(jí)Endpoint(或者下一級(jí)Switch);
3、 拒絕接受這個(gè)包。
在前面的文章中多次介紹過(guò),PCIe總線中一共有三種類(lèi)型的包:Ordered Sets(命令集包,只在相鄰的設(shè)備的物理層之間進(jìn)行傳遞,不會(huì)被轉(zhuǎn)發(fā)到其他的設(shè)備中)、DLLPs(數(shù)據(jù)鏈路層包,只在相鄰的設(shè)備的數(shù)據(jù)鏈路層之間進(jìn)行傳遞,不會(huì)被轉(zhuǎn)發(fā)到其他設(shè)備中)和TLPs(事務(wù)層包,可以根據(jù)包中的路由信息被轉(zhuǎn)發(fā)到其他的設(shè)備中)。
注:實(shí)際上不論是TLPs還是DLLPs都會(huì)經(jīng)過(guò)物理層,這里說(shuō)的TLP和DLLP指的是包的最初來(lái)源分別是事務(wù)層和數(shù)據(jù)鏈路層,即DLLP和上一層的事務(wù)層沒(méi)有什么關(guān)系,其內(nèi)容和作用完全是由數(shù)據(jù)鏈路層自己決定的。
注:Endpoint不僅可以發(fā)送TLP給其上層的設(shè)備(如Root),也可以發(fā)送TLP給其他的Endpoint,當(dāng)然這需要借助Switch來(lái)實(shí)現(xiàn)。這種傳輸方式叫做Peer-to-Peer。
TLP一共有三種路由方式,分別是ID路由(ID Routing,即BDF Routing)、地址路由(Address Routing,包括Memory和IO)以及模糊路由(Implicitly Routing)。本文將簡(jiǎn)單介紹一些關(guān)于TLP路由的基礎(chǔ)知識(shí),具體的路由方式將會(huì)在接下來(lái)的三篇文章中依次進(jìn)行介紹。
具體采用哪一種路由方式是由TLP的類(lèi)型所決定的,如下表所示:
注:AtomicOp是PCIe Spec V2.1新增的內(nèi)容,有興趣的可以自行閱讀V2.1的相關(guān)內(nèi)容。
注:一般情況下,Message都是使用模糊路由(Implicitly Routing)的,但是也有PCIe設(shè)備廠商自定義的Message會(huì)使用地址路由或者ID路由。
可能有的人要有疑惑了,既然Message可以使用地址路由或者ID路由,為什么還要單獨(dú)搞出來(lái)一個(gè)模糊路由呢?原因很簡(jiǎn)單,使用模糊路由可以廣播Message到每一個(gè)設(shè)備,采用其他的路由方式必須明確指定是哪一個(gè)設(shè)備。
那么PCIe中是如何來(lái)判斷TLP的類(lèi)型的呢?又是如何判斷其為Request還是Completion的呢?實(shí)際上是通過(guò)TLP Header的Format和Type部分來(lái)確定的,如下圖所示:
-
總線
+關(guān)注
關(guān)注
10文章
2890瀏覽量
88155 -
PCIe
+關(guān)注
關(guān)注
15文章
1241瀏覽量
82742 -
TLP
+關(guān)注
關(guān)注
0文章
32瀏覽量
15639
原文標(biāo)題:【博文連載】PCIe掃盲——TLP路由(Routing)基礎(chǔ)
文章出處:【微信號(hào):ChinaAET,微信公眾號(hào):電子技術(shù)應(yīng)用ChinaAET】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論