前面的一系列文章簡(jiǎn)要地介紹了PCIe總線(xiàn)的結構、事務(wù)層、數據鏈路層和物理層。下面我們用一個(gè)簡(jiǎn)單地的例子來(lái)回顧并總結一下。
如下圖所示,Requester的應用層(軟件層)首先向其事務(wù)層發(fā)送如下信息:32位(或者64位)的Memory地址,事務(wù)類(lèi)型(Transaction Type),數據量(以DW為單位),TC(Traffic Class,即優(yōu)先級),字節使能(Byte Enable)和屬性信息(Attributes)等。
然后接收端的事務(wù)層使用這些信息創(chuàng )建了一個(gè)Mrd TLP(Memory Read的事務(wù)層包),并將Requester的ID(BDF,Bus & Device & Function)寫(xiě)入到該TLP的Header中,以便Completer根據這一BDF將Completion信息返回給Requester。然后這個(gè)TLP會(huì )根據其TC的值被放到對應的VC Buffer中,Flow Control邏輯便會(huì )檢車(chē)接收端的對應的接收VC Buffer空間是否充足。一旦接收端的VC Buffer空間充足,TLP便會(huì )準備被向接收端發(fā)送。
注:TLP的Header實(shí)際上有兩種,32位的地址對應的是3DW的Header,64為的地址對應的是4DW的Header。這在后續的文章中會(huì )詳細介紹。
當TLP到達數據鏈路層(Data Link Layer)時(shí)候,數據鏈路層會(huì )為其添加上12位的序列號(Sequence Number)和32位的LCRC。并將添加上這些信息之后的TLP(即DLLP)在Replay Buffer中做一個(gè)備份,并隨后將其發(fā)送至物理層。
物理層接收到DLLP之后,為其添加上起始字符(Start & End Characters,又叫幀字符,Frame Characters),然后依次進(jìn)行解字節(Strip Byte)、擾碼(Scramble)、8b/10b編碼并進(jìn)行串行化,隨后發(fā)送至相鄰的PCIe設備的物理層。
接收端PCIe設備(即Completer)的物理層接收到數據之后,依次執行與發(fā)送端相反的操作。并從數據中恢復出時(shí)鐘,然后將恢復出來(lái)的DLLP發(fā)送至數據鏈路層。
Completer的數據鏈路層首先檢查DLLP中的LCRC,如果存在錯誤,則向Requester發(fā)送一個(gè)Nak類(lèi)型的DLLP,該DLLP包含了其接受到的DLLP中的序列號(Sequence Number)。Requester的數據鏈路層接收到來(lái)自Completer的Nak DLLP之后,從中找到序列號(Sequence Number),并根據序列號在Replay Buffer找到對應的DLLP,然后將其重新發(fā)送至Completer。如果Completer的數據鏈路層沒(méi)有檢查到LCRC的錯誤,也會(huì )向Requester發(fā)送一個(gè)Ack類(lèi)型的DLLP,該DLLP同樣包含了其接收到的DLLP中的序列號。Requester的數據鏈路層接收到之一Ack DLLP之后,便會(huì )根據其中的序列號在Replay Buffer中找到對應的DLLP的備份,并將其丟棄(Discard)。
當接收端PCIe涉筆(即Completer)的數據鏈路層正確的接收到了來(lái)自Requester的DLLP(包含TLP的)時(shí),隨后將其進(jìn)一步發(fā)送至事務(wù)層,事務(wù)層檢查ECRC(可選的),并對TLP進(jìn)行解析,然后將解析后的信息發(fā)送至應用層(軟件層)。
如下圖所示,Completer的應用層會(huì )根據接受到的信息進(jìn)行相應的處理,處理完成后會(huì )將數據發(fā)送至事務(wù)層,事務(wù)層根據這一信息創(chuàng )建一個(gè)新的TLP(即CplD,Completion with data)。并根據先前接收到的TLP中的BDF信息,找到原來(lái)的Requester,然后將CplD發(fā)送至該Requester。這一發(fā)送過(guò)程與Requester向Completer發(fā)送TLP(Mrd Request)的過(guò)程基本是一致的。所以這里就不在重復了。
注:如果Completer不能夠返回有效數據給Requester,或者遇到錯誤,則其返回的就不是CplD了,而是Cpl(Completion without data),Requester接收到Cpl的TLP之后便會(huì )知道發(fā)生了錯誤,其應用層(軟件層)會(huì )進(jìn)行相應的處理。
-
總線(xiàn)
+關(guān)注
關(guān)注
10文章
2735瀏覽量
87391 -
PCIe
+關(guān)注
關(guān)注
13文章
1104瀏覽量
81262
原文標題:【博文連載】PCIe掃盲——一個(gè)Memory Read操作的例子
文章出處:【微信號:ChinaAET,微信公眾號:電子技術(shù)應用ChinaAET】歡迎添加關(guān)注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論