大俠好,歡迎來到FPGA技術江湖,江湖偌大,相見即是緣分。大俠可以關注FPGA技術江湖,在“闖蕩江湖”、"行俠仗義"欄里獲取其他感興趣的資源,或者一起煮酒言歡。
今天給大俠帶來PCI-Express transaction Layer specification(處理層協議),本次PCIE TLP 學習經驗分享分為三篇,今天帶來第一篇TLP概況(四種空間、三種處理類型、兩種屬性、主要包格式、TLP通用包頭)和TLP打包地址和路由導向方式(Address尋址、ID尋址方式、處理層描述符),話不多說,上貨。 為了方便各位大俠瀏覽,下面列出三篇分享的大概內容目錄介紹:
- 一、TLP概況
- 1. 四種空間
- 2. 三種處理類型
- 3. 兩種屬性
- 4. 主要包格式
- 5. TLP通用包頭
- 二、TLP打包地址和路由導向方式
- 1. Address尋址
- 2. ID尋址方式
- 3. 處理層描述符(transaction Descriptor)
- 三、I/O,Memory,Configuration,Message Request、Completetion詳解
- 1. Memory Request Package
- 2. I/O Request 包
- 3. Configuration Request包
- 4. Message
- 5. Completion Rules(應答機制)
- 四、請求和應答處理機制
- 1. Request Handling Rules
- 2. Completion Handling
- 五、virtual channel(vc)Mechanism虛擬通道機制
- 1. TC/VC映射
- 2. Flow Control
- 六、Data Integrity數據完整性
一、TLP概況
處理層(transaction Layer specification)是請求和響應信息形成的基礎。包括四種地址空間,三種處理類型,從下圖可以看出在transaction Layer 中形成的包的基本概括。
1. 四種空間:
2. 三種處理類型
i/o口和memory的讀寫包(TLPS:transaction Layers packages)
配置寄存器的讀寫設置包
信息包,描述通信狀態。
作為事件的信號告知用戶。
對memory的讀寫包分為讀請求包和響應包、寫請求包(不需要存儲器的響應包)。而i/o類型的讀寫請求都需要返回I/O口的響應包,configuration包對配置寄存器的讀寫請求也有響應包。這些請求包還可以按屬性來分類。
3.兩種屬性
Non Posted:即請求需要返回completion的響應包;
Posted:即不需要completion返回響應包。例如上面的存儲器寫入請求包和Message包都隸屬于posted包。
4. 主要包格式
每種類型的包都有一定格式的包頭(Tlp Header),根據不同的包的特性,還包括有效數據負荷(Data Payload)和tlp開銷塊(Tlp Digest)。包頭中的數據用于對包的管理和控制。有效數據負荷域存放有效數據信息。具有數據的TLP傳遞是有一定規則的:以DW為長度單位,發送端數據承載量不得超過“Device Control Register”中的“Max_Payload_Size”數值,接收端中,所接收到的數據量也不能超過接收端“Device Control Register”中的“Max_Payload_Size”數值。TLp Digest域是32位的ECRC校驗。具體的包結構圖如下:
由此圖可看出數據從低字節的高位先發送,從左到右。以下詳細介紹TLPS的每個成分。
5.TLP通用包頭
R為保留信息位,應設為0,路由器switch對此位不做修改,接收器應該忽略此位。
Fmt[1:0]:Format of TLP (see Table 2-2) – bits 6:5 of byte0。
Type[4:0]:Type of TLP – bits 4:0 of byte 0。
TC[2:0]: Traffic Class – bits [6:4] of byte1,關于TC的作用將在下文說明。
Attr[1:0]: Attributes – bits [5:4] of byte 2,詳細介紹見下文。
TD:1b indicates presence of TLP digest in the form of a single DW at the end of the TLP標志TLPDigest域的有無。
EP: indicates the TLP is poisoned – bit 6 of byte 2有效數據中毒(出錯)機制。
Length[9:0]:Length of data payload in DW。
Fmt開銷位說明TLP Header的長度和TLP是否包含數據,如下圖:
Fmt[1:0]=00b,代表3DW的包頭,沒有數據。
Fmt[1:0]=01b,代表4DW的包頭,沒有數據。
Fmt[1:0]=10b,代表3DW的包頭,有數據。
Fmt[1:0]=11b,代表4DW的包頭,有數據。
Fmt [0] 表示包頭格式是3長字還是4長字,Fmt[1] 表示包頭是否包含數據。
Fmt和Type開銷組合定義了包(TLP)的類型如下:
上圖定義了各種類型的包,圖中的r[2:0]用于定義Message包的隱含尋址方式,在下文中更為詳細。 Length域定義了有效負荷的DW長度如下:
在不包含data payload塊的包中Length的值應被設置為保留值R,并被接收端忽略。余下的各個開銷位將在后文提到。
二、TLP打包地址和路由導向方式
地址路由(address)
ID識別路由
間接路由(implicit) 下面主要介紹address和ID尋址方式,間接尋址將在后面提及。
1.Address尋址
主要用于memory和i/o request請求包
memory讀寫請求包支持64位地址和32位地址,
i/o讀寫請求只支持32位地址
64位地址尋址的TLP Header有4DW(16字節),
32位地址尋址的TLP Header有3DW長。
上圖就是64位地址的4DW的包頭和32位地址的3DW的包頭。對于memory讀寫request包,AT(address Type field)有如下的編碼。
2.ID尋址方式
主要用在configuration 請求包、部分message包、響應包中。ID包括Bus number、Divce number、function number為TLP定位目標接收器。ID尋址的TLP包頭長度也有4DW和3DW兩種,ID在TLP中位置見下圖。
第七個Byte(Byte7)是第一個DW數據負荷和最后一個DW數據負荷使能位(Byte Enables),Byte Enables在于memory,i/o,configuration 請求包中有效,如圖。
對于last DW BE和1st DW BE中的每一個位,為0表示相應的數據字節不被讀或寫,為1表示相應的數據字節有效。每個使能位相對應的字節如下。
3.處理層描述符(transaction Descriptor)
對于兩種路由方式來說是通用的。
用于請求器件和應答器件間轉送處理層信息,包括三部分,Transaciton ID、Attributes、Traffic class(TC),如下圖。
其中Transaction ID包括: Requester ID、Tag,如圖。
Tag[7:0]是由產生請求包的器件生成的,如果請求器件需要應答,則每個Tag[7:0]和Function Number是獨一無二的。Transaction ID是一個全局標識符用于響應包尋址請求器件。
TC的規定如下,描述服務的層次和用于映射虛擬通道:
處理層描述符在請求包中第二個DW:
從圖中看出,描述字符放在第二個DW的前三個字節中。
第一篇到此結束,下次金帶來第二篇,i/o,memory,configuration,message request、completetion(Memory Request Package、I/O Request 包、Configuration Request包、Message、Completion Rules(應答機制))等。
-
FPGA
+關注
關注
1626文章
21669瀏覽量
601866 -
寄存器
+關注
關注
31文章
5317瀏覽量
120013 -
PCI
+關注
關注
4文章
662瀏覽量
130184 -
TLP
+關注
關注
0文章
32瀏覽量
15605
原文標題:PCI-E TLP(處理層協議)學習經驗分享 I
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論