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