以下文章來源于LPIoT,作者水鳥LPIoT
Pcie數(shù)據(jù)鏈路層
PCIe的數(shù)據(jù)鏈路層在事務(wù)層和物理層之間,用來負責(zé)鏈路管理,其主要功能是保證來自事務(wù)層的TLP在PCIe鏈路中的正確傳輸,為此數(shù)據(jù)鏈路層定義了一系列的DLLP報文,數(shù)據(jù)鏈路層使用了容錯和重傳機制保證數(shù)據(jù)傳輸?shù)耐暾院鸵恢滦裕═LP ACK/NAK),此外數(shù)據(jù)鏈路層還需要對PCIe鏈路進行管理(電源管理)和監(jiān)控(流量控制)。
與事務(wù)層不同的是,數(shù)據(jù)鏈路層主要處理端到端(同一條PCIe物理鏈路相鄰兩端設(shè)備的發(fā)送端和接收端)的數(shù)據(jù)傳輸;而事務(wù)層是源設(shè)備和目標(biāo)設(shè)備之間的數(shù)據(jù)傳輸(源設(shè)備與目標(biāo)設(shè)備之間傳輸距離更長,可能經(jīng)過多個Switch并有多條PCIe物理鏈路)。此處類似于網(wǎng)絡(luò)通訊的概念,鏈路層通訊在直接物理相連的設(shè)備端口進行,網(wǎng)絡(luò)層通訊可以跨過多個設(shè)備進行。
數(shù)據(jù)鏈路層結(jié)構(gòu)
數(shù)據(jù)鏈路層使用ACK/NAK協(xié)議發(fā)送和接收TLP(事務(wù)層報文),由發(fā)送部件和接收部件組成(每個PCIe設(shè)備的數(shù)據(jù)鏈路層包含了這兩部分,而兩個PCIe設(shè)備間的通信是發(fā)送部件和接收部件成對實現(xiàn)的),如下圖所示;
發(fā)送部件由1.Replay Buffer、2.ACK/NAK DLLP接收邏輯和3.TLP接收邏輯組成;
接收部件由1.“Error Check”邏輯、2.ACK/NAK DLLP發(fā)送邏輯和3.TLP發(fā)送邏輯組成。
PCIe總線數(shù)據(jù)鏈路層使用Replay Buffer和Error Check部件共通保證數(shù)據(jù)傳輸?shù)目煽啃院屯暾?;來自事?wù)層的TLP先暫存在Replay Buffer中,然后發(fā)送到目標(biāo)設(shè)備;源設(shè)備的數(shù)據(jù)鏈路層根據(jù)來自目標(biāo)設(shè)備的ACK/NAK DLLP報文來決定是重發(fā)這些TLP,還是清除存放在Replay Buffer中的TLP。
1.Replay Buffer的大小決定過了事務(wù)層可以暫存在數(shù)據(jù)鏈路層的報文數(shù)量;
2.PCIe設(shè)備使用Error Check檢查接收到的TLP,并決定如何向?qū)Χ嗽O(shè)備進行報文回應(yīng);
數(shù)據(jù)鏈路層狀態(tài)
數(shù)據(jù)鏈路層需要通過物理層來監(jiān)控PCIe鏈路狀態(tài),并維護數(shù)據(jù)鏈路層的“控制與管理狀態(tài)機”(Data Link Control and Management State Machine,DLCMSM),可以從物理層獲得與當(dāng)前PCIe鏈路相關(guān)的狀態(tài),如下圖所示:
DLCMSM主要包含三個狀態(tài):DL_Inactive、DL_Iinit、DL_Active
DL_Inactive狀態(tài):物理層通知數(shù)據(jù)鏈路層當(dāng)前PCIe鏈路狀態(tài)不可用,沒有檢測到PCIe鏈路的對端連接了PCIe設(shè)備;PCIe設(shè)備從復(fù)位狀態(tài)進入DL_Inactive狀態(tài)時,進行如下操作:
(1)對PCIe數(shù)據(jù)鏈路層進行徹底復(fù)位:將與PCIe鏈路相關(guān)的寄存器置為復(fù)位值,并丟棄在Replay Buffer中保存的所有報文;
(2)數(shù)據(jù)鏈路層向事務(wù)層提交DL_Down狀態(tài)信息;
(3)丟棄來自數(shù)據(jù)鏈路層和物理層的所有TLP,不再接收對端設(shè)備發(fā)送的DLLP;
(4)如果PCIe鏈路對端有PCIe設(shè)備相連,則物理層的LinkUp狀態(tài)位為1,且事務(wù)層并未禁止當(dāng)前PCIe鏈路時,數(shù)據(jù)鏈路層將從DL_Inactive狀態(tài)遷移到DL_Init狀態(tài)。
(5)如果PCIe鏈路對端不存在PCIe設(shè)備,則物理層的LinkUp狀態(tài)位為0,此時數(shù)據(jù)鏈路層一直處于DL_Inactive狀態(tài)。
2.DL_Iinit狀態(tài):物理層通知數(shù)據(jù)鏈路層當(dāng)前PCIe鏈路可用(LinkUp = 1),且物理層正處理鏈路初始化狀態(tài),此時數(shù)據(jù)鏈路層不能接收或發(fā)送TLP和DLLP;
3.DL_Active狀態(tài):當(dāng)前PCIe鏈路處于正常工作模式,物理層已完成PCIe鏈路訓(xùn)練(LTSSM);此時數(shù)據(jù)鏈路層可以從事務(wù)層和物理層正常接收和發(fā)送TLP,并處理DLLP。在多數(shù)情況下數(shù)據(jù)鏈路層從DL_Active狀態(tài)遷移到DL_Init狀態(tài),意味著處理器系統(tǒng)出現(xiàn)了異常,系統(tǒng)軟件需要處理這些異常;但如下情況的狀態(tài)遷移不會引發(fā)異常。
DLCMSM除了從物理層獲得當(dāng)前PCIe鏈路狀態(tài)外,還可以使用狀態(tài)位向事務(wù)層報告數(shù)據(jù)鏈路層所處的狀態(tài);如上圖所示,當(dāng)數(shù)據(jù)鏈路層收到物理層的狀態(tài)信息后,DLCMSM狀態(tài)機將進行狀態(tài)轉(zhuǎn)換,并向事務(wù)層通知PCIe鏈路的狀態(tài)。
1.DL_Down:數(shù)據(jù)鏈路層處于該狀態(tài)時,表示PCIe鏈路暫時沒有檢測到對端連接設(shè)備(并非對端不存在物理設(shè)備);當(dāng)數(shù)據(jù)鏈路層處于DL_Inactive時,該狀態(tài)位有效;
2.DL_Up:數(shù)據(jù)鏈路層處于該狀態(tài)時,表示PCIe鏈路的對端連接了設(shè)備;當(dāng)數(shù)據(jù)鏈路層處于DL_Acive狀態(tài)時,該狀態(tài)位有效。
事務(wù)層對DL_Down/Up狀態(tài)的處理
當(dāng)事務(wù)層收到數(shù)據(jù)鏈路層的DL_Down狀態(tài)信息時,則說明出現(xiàn)了如下狀況:
1.PCIe鏈路的對端沒有連接設(shè)備;
2.PCIe鏈路丟失了對端設(shè)備的連接;
3.數(shù)據(jù)鏈路層和物理層出現(xiàn)了某種錯誤,PCIe鏈路不能正常工作;
4.系統(tǒng)軟件禁用PCIe鏈路。
事務(wù)層受到DL_Down狀態(tài)信息后:
1.將不再從數(shù)據(jù)鏈路層中接收TLP,除了已經(jīng)使用ACK/NAK報文確認過的TLP;
2.RC或Switch的下游端口將復(fù)位與鏈路相關(guān)的內(nèi)部邏輯和狀態(tài);
3.Switch和Bridge的上游端口將復(fù)位相關(guān)的內(nèi)部邏輯和狀態(tài),并丟棄正在處理的TLP;
——此時Switch和PCIe橋使用Hot Reset方式復(fù)位所有下游端口。
以上是《PCIE數(shù)據(jù)鏈路層整體架構(gòu)》,敬請關(guān)注后續(xù)內(nèi)容
-
PCIe
+關(guān)注
關(guān)注
15文章
1263瀏覽量
83241 -
數(shù)據(jù)鏈路層
+關(guān)注
關(guān)注
0文章
58瀏覽量
12035 -
狀態(tài)機
+關(guān)注
關(guān)注
2文章
492瀏覽量
27665 -
網(wǎng)絡(luò)通訊
+關(guān)注
關(guān)注
0文章
75瀏覽量
11313
原文標(biāo)題:PCIE數(shù)據(jù)鏈路層整體架構(gòu)
文章出處:【微信號:Rocker-IC,微信公眾號:路科驗證】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
數(shù)據(jù)鏈路層組幀
TLP的數(shù)據(jù)鏈路層組成與操作
數(shù)據(jù)鏈路層.ppt
![<b class='flag-5'>數(shù)據(jù)鏈路層</b>.ppt](https://file.elecfans.com/web2/M00/48/85/pYYBAGKhtAuAW_YRAABPCL5WFbk365.jpg)
數(shù)據(jù)鏈路層的作用
數(shù)據(jù)鏈路層的功能
什么是OSI模型數(shù)據(jù)鏈路層
數(shù)據(jù)鏈路層到底是什么_數(shù)據(jù)鏈路層工作原理是怎樣的
![<b class='flag-5'>數(shù)據(jù)鏈路層</b>到底是什么_<b class='flag-5'>數(shù)據(jù)鏈路層</b>工作原理是怎樣的](https://file.elecfans.com/web1/M00/48/4A/o4YBAFqow52AEtsVAABZGPFmLyk214.jpg)
數(shù)據(jù)鏈路層常用成紙法有哪些_數(shù)據(jù)鏈路層的作用
![<b class='flag-5'>數(shù)據(jù)鏈路層</b>常用成紙法有哪些_<b class='flag-5'>數(shù)據(jù)鏈路層</b>的作用](https://file.elecfans.com/web1/M00/48/4C/pIYBAFqoyG-AIgYEAABcVQ4leSE629.jpg)
數(shù)據(jù)鏈路層和傳輸層的區(qū)別是什么
![<b class='flag-5'>數(shù)據(jù)鏈路層</b>和傳輸層的區(qū)別是什么](https://file.elecfans.com/web1/M00/48/4C/pIYBAFqozBuAXhaDAAA08Maoe4k418.jpg)
數(shù)據(jù)鏈路層設(shè)備有哪些
一文看懂數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層的區(qū)別
![一文看懂<b class='flag-5'>數(shù)據(jù)鏈路層</b>和網(wǎng)絡(luò)層的區(qū)別](https://file.elecfans.com/web1/M00/48/4E/pIYBAFqo1EmAIEtaAADmP9KHOoo219.jpg)
數(shù)據(jù)鏈路層的任務(wù)
數(shù)據(jù)鏈路層設(shè)備有哪些
PCIe鏈路層里的ACK/NAK介紹
![<b class='flag-5'>PCIe</b><b class='flag-5'>鏈路層</b>里的ACK/NAK介紹](https://file1.elecfans.com/web2/M00/8A/8E/wKgaomSXpveAP552AAAOFki5oic623.jpg)
評論