PCIE系統標準體系結構解讀(五):數據鏈路層數據包

PCIe 數據鏈路層的主要功能時保證兩臺設備之間傳送TLP的完整性。還負責鏈路的初始化和電源管理,包括跟蹤鏈路狀態以及上面的處理層和下面的物理層之間傳遞的消息和狀況。

在管理鏈路時,由3組重要的DLLPTLP確認Ack/Nak DLLP;電源管理DLLP;流控制數據包DLLP

DLLPTLP不同,沒有攜帶目標信息,因爲它們只用於相鄰最近組件之間的通信。

DLLP從發送器發送至接收器時,立即被處理,不能對DLLP進行流量控制。與TLP不同,DLLP沒有確認協議,PCIe規範定義了超時機制,能夠用來從丟失或者丟棄DLLP的狀態中恢復出來。

固定大小的DLLP數據包8個字節。所有的數據鏈路層數據包由如下幾部分組成:①由一個字節的類型字段和3個附加屬性字節組成的1DW核心,其中屬性隨DLLP類型的變化而變化;②一個根據DW核心內容計算的16比特CRC,附加在覈心之後;③然後,把這6個字節傳送至物理層,物理層給數據包添加一個DLLP開始控制字符和一個數據包結束控制字符。

DLLP中不會有數據有效載荷,所有有用信息都在類型字段和屬性字段中。

1.5.1 DLLP數據包的類型

規範定義了3組DLLP,每組都有許多變體。

DLLP類型

類型字段編碼

用途

ACK

0000 0000b

TLP傳送的完整性

Nak

0001 0000b

TLP傳送的完整性

PM_Enter_L1

0010 0000b

電源管理

PM_Enter_L23

0010 0001b

電源管理

PM_Active_State_Request_L1

0010 0011b

電源管理

PM_Request_Ack

0010 0100b

電源管理

廠商專用

0011 0000b

廠商

INitFC1-P(xxx-VC#)

0100 0xxxb

TLP流控制

INitFC1-NP(xxx-VC#)

0101 0xxxb

TLP流控制

INitFC1-Cpl(xxx-VC#)

0110 0xxxb

TLP流控制

INitFC2-P(xxx-VC#)

1100 0xxxb

TLP流控制

INitFC2-NP(xxx-VC#)

1101 0xxxb

TLP流控制

INitFC2-Cpl(xxx-VC#)

1110 0xxxb

TLP流控制

UpdateFC-P(xxx-VC#)

1000 0xxxb

TLP流控制

UpdateFC-NP(xxx-VC#)

1001 0xxxb

TLP流控制

UpdateFC- Cpl (xxx-VC#)

1010 0xxxb

TLP流控制

保留

其他

保留

1.5.2 Ack或Nak DLLP數據包的格式

下圖是接收器用來確認或否認一個TLP傳送的DLLP數據包的格式。

 

各字段定義如下表:

字段名

頭字節/比特

DLLP功能

AckNak_Seq_Num[11:0]

字節3的比特7:0

字節2的比特3:0

ACK DLLP:對於接收的序列號等於EXT_RCV_SE count的正確TLP數據包,使用NEXT_RCV_SEQ count-1;對於接收的序列號小於EXT_RCV_SE count的正確TLP數據包,使用NEXT_RCV_SEQ count-1;

NAK DLLP:與CRC校驗失敗的TLP有關,使用NEXT_RCV_SEQ count-1;對接收的序列號早於NEXT_RCV_SEQ count的TLP,使用NEXT_RCV_SEQ count-1;發送器一旦接收到NAK DLLP,它就會清除序列號等於或早於該序列號的TLP,重發剩餘的TLP

類型[7:0]

字節0的比特7:0

表示DLLP的類型

0000 0000b = ACK DLLP

0001 0000b = NAK DLLP

16比特的CRC

字節5的比特7:0

字節4的比特7:0

16比特的CRC用來保護此DLLP的內用,根據ACK/NAK的字節0~3計算的

1.5.3 電源管理DLLP數據包的格式

PCIe電源管理DLLPTLP數據包可代替大部分與電源管理狀態變化有關的信號。用於電源管理的DLLP的格式如下圖。

 

字段名

頭字節/比特

DLLP功能

類型[7:0]

字節0的比特7:0

0010 0000b = PM_Enter_L1

0010 0001b = PM_Enter_L2

0010 0011b = PM_Active_State_Request

0010 0100b = PM_Request_Ack

鏈路CRC

字節5的比特7:0

字節4的比特7:0

16比特的CRC用來保護此DLLP的內用,根據ACK/NAK的字節0~3計算的

1.5.4 流控制數據包的格式

PCIe通過使用基於信用的流控制方案消除了早期總線協議中許多效率低下的方面。初始化信用和當接收器緩衝區空間可用時更新信用要使用3個略有不同的DLLP。兩個流控制初始化數據包分別稱爲InitFC1InitFC2。更新DLLP稱爲UpdateFC

 

字段名

頭字節/比特

DLLP功能

DataFC 11:0

字節3的比特7:0
字節2的比特3:0

此字段含有與數據存儲相關的信用。數據信用的單位時每信用16個字節,能夠應用於對V[2:0]表示的虛擬信道和字節0中比特7:4代碼表示的流量類別的流控制計數

HdrFC 11:0

字節2的比特7:6

字節1的比特5:0

此字段含有與頭存儲相關的信用。數據信用的單位時每信用一個頭,能夠應用於對V[2:0]表示的虛擬信道和字節0中比特7:4代碼表示的流量類別的流控制計數

VC[2:0]

字節0的比特2:0

此字段表示接收信用的虛擬信道(VC0~7)

類型[3:0]

字節0的比特7:4

0100b = INitFC1-P

0101b = INitFC1-NP

0110b = INitFC1-Cpl

0101b = INitFC2-P

1101b = INitFC2-NP

1110b = INitFC2-Cpl

1000b = UpdateFC-P

1001b = UpdateFC-NP

1010b = UpdateFC- Cpl

鏈路CRC

字節5的比特7:0

字節4的比特7:0

16比特的CRC用來保護此DLLP的內用,根據ACK/NAK的字節0~3計算的

1.5.5 廠商專用DLLP

 

字段名

頭字節/比特

DLLP功能

類型[3:0]

字節0的比特7:4

廠商專用

鏈路CRC

字節5的比特7:0

字節4的比特7:0

16比特的CRC用來保護此DLLP的內用,根據ACK/NAK的字節0~3計算的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章