PCIE3.0基礎說明(PCI Express Base Specification Revision 3.0 by PCI-SIG)筆記——第二章:事務層說明(1)


2.事務層說明

2.1. 事務層概述

下圖爲事務層在PCIE整體結構中的示意圖
在這裏插入圖片描述

從一個較高的層級來看,事務層所涉及的關鍵內容包括:

  • 一種流水線的完全拆分事務協議
  • 用於區分事務層數據包(TLP)的排序和處理需求的機制
  • 基於信用的流控制
  • 用於數據中毒檢測和端到端數據完整性檢測的可選支持

事務層主要包括如下內容:

  1. 構建和處理TLP

  2. 與設備資源相關的事務層機制,包括:

  • 流控制

  • 虛擬通道管理

  1. 用於TLP排序和管理的規則
  • 與PCI/PCI-X兼容的排序方式
  • 包括流類別的劃分

2.1.1. 地址空間、事務類型和用法

“事務”是在請求者和完成者之間進行信息傳輸的基礎。下表中定義了四種地址空間和不同的事務類型,每種地址空間都有其特有的用法。

地址空間 事務類型 基本用法
內存(memory) 讀/寫 向內存映射的地址傳輸數據
I/O 讀/寫 向I/O映射的地址傳輸數據
配置(configuration) 讀/寫 設備功能配置/設置
消息(message) 基線 從事件信令機制到通用消息

2.1.1.1.內存事務

內存事務包括如下類型:

  • 讀請求/讀完成
  • 寫請求
  • 請求/完成的原子操作

內存事務使用了兩種不同的地址格式:

  • 短地址格式:32位地址
  • 長地址格式:64位地址

2.1.1.2. I/O事務

PCIE支持I/O空間,以兼容老設備的使用需求。未來可能會不再使用I/O空間。I/O事務包括如下類型:

  • 讀請求/讀完成
  • 寫請求/寫完成

I/O事務僅使用一種地址格式:

  • 短地址格式:32位地址

2.1.1.3.配置事務

配置事務用於訪問設備的配置寄存器。

配置事務包括如下類型:

  • 讀請求/讀完成
  • 寫請求/寫完成

2.1.1.4.消息事務

消息事務或簡稱消息,用於支持設備之間事件的帶內通信。

除了規定的消息之外,PCIE還支持由廠商定義的使用特定消息格式的消息。

2.1.2.數據包格式概述

事務由”請求“和”完成“構成,並使用數據包進行通信。下圖展示了TLP的結構,主要由一個或多個可選的TLP前綴、一個TLP頭部、一個數據負載和一個可選的TLP摘要構成。

在這裏插入圖片描述

如上如所示,從概念上而言,PCIE將信息按照序列化的字節流進行傳輸。注意,在字節層面來看,將最先傳輸上圖中的最左邊的字節。

下圖展示了TLP前綴、TLP頭部和TLP摘要的細節內容。其中,爲了提高串行互聯的性能,對頭部的佈局進行了優化,以滿足首先傳輸對時間要求最嚴格的信息的需求。例如,在TLP頭部中,在地址域中最高位字節首先被傳輸,以儘早用於地址解碼。

在這裏插入圖片描述

根據數據包的類型,數據包頭部將會包括如下類型的域:

  • 數據包格式

  • 數據包類型

  • 任何相關數據的長度

  • 事務描述符,包括:
    a.事務ID
    b.屬性
    c.流類型

  • 地址/路由信息

  • 字節使能

  • 消息編碼

  • 完成狀態

2.2.事務層協議:數據包定義

對於在鏈路上相互通信的兩個組件,PCIE將使用基於數據包的協議在事務層進行信息交換。PCIE支持如下基本的事務類型:內存、I/O、配置和消息。內存請求支持兩種地址格式:32位和64位。

事務是使用“請求”和“完成”展開的。“完成”是按需使用的,例如,爲了返回讀取的數據,或爲了確認I/O完成以及配置寫事務。“完成”與它們所對應的請求相關聯,這種關聯可通過數據包頭部中的事務ID域的值確定。

當構建一個TLP時,對於TLP中標記了“保留”(簡寫爲“R")的域,必須使用”0"進行填充。接收者必須忽略這些保留域中的值,交換器在進行轉發時也不能進行修改。值得注意的是,某些域可能同時是“定義的”和“保留的”——對於這些情況的保留值需要單獨處理。

2.2.1.常見的數據包頭部域

所有事務層數據包(TLP)的前綴和頭部都包含如下域,如下圖所示:

  • Fmt[2:0],TLP格式(見Table 2-2),字節0的7~5位
  • Type[4:0],TLP類型,字節0的4~0位

在這裏插入圖片描述

Fmt域表示存在一個或多個TLP前綴,類型域表示了相關的TLP前綴類型。

TLP頭部的Fmt和類型域中提供了用於確定TLP頭部其餘部分大小的信息,還可以用於說明數據包在頭部之後是否包含了數據負載。

TLP頭部中的Fmt、類型、TD和長度域,包含了用於確定TLP中非前綴部分整體大小的所有信息。類型域除了定義了TLP的類型之外,還確定了交換器將如何路由該TLP。

  • Table 2-3中給出了Fmt[2:0]和Type[4:0]所允許的值。
  • TC[2:0],流類型,字節1的6~4位
  • TH,在TLP頭部中用於表示存在TLP處理提示(TLP Processing Hints,TPH),以及可選的TPH TLP前綴(如果有),字節1的第0位
  • Attr[1:0],屬性,字節2的5~4位
  • Attr[2],屬性,字節1的第2位
  • TD,表明在TLP末尾,存在構成單個DW的TLP摘要,字節2的第7位
  • EP,表明TLP中毒了,字節2的第6位
  • Length[9:0],DW中的數據負載長度,包括字節2中的1~0位和字節3中的7~0位
    a.TLP數據必須4字節對齊,並按4字節(Double Words,DW)增長
    b.爲不包含或引用數據有效載荷的TLP保留 ,包括Cpl,CplLk和消息

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

2.2.2. 帶數據負載的TLP:規則

  1. Length必須爲整數個DW

  2. Length[9:0]爲所有消息所保留,除了那些顯示給出數據長度的消息

  3. 由TLP 長度域指定的發送方數據負載長度,不能超過發送方設備控制寄存器Max_Payload_Size域所指定的長度

  • 對於ARI設備,Max_Payload_Size僅有Function 0設定。其他Function中的Max_Payload_Size設定將被忽略
  • 對於一個和非ARI多功能設備相關的上游端口,如果Max_Payload_Size的設定在所有Function中都是一樣的,發送的TLP數據負載不能超過這個通用的Max_Payload_Size設定
  • 對於一個和非ARI多功能設備相關的上游端口,如果Max_Payload_Size的設定在所有Function中不全相同,發送的TLP數據負載不能超過特定的Max_Payload_Size設定
    a.實現Transmitter時,儘量使用由產生事務的Function中所設定的Max_Payload_Size,或者所有Function中最小的Max_Payload_Size
    b.軟件不能在不同Function中設定不同的Max_Payload_Size,除非軟件知曉具體的實現
  • 注意:Max_Payload_Size僅在具有數據負載的TLP中使用;內存讀請求的長度不受Max_Payload_Size的限制。內存讀請求的大小由Length域控制。
  1. 接收到的TLP的數據負載長度由TLP的長度域指定,該長度不能超過由接收者的設備控制寄存器所指定的Max_Payload_Size大小
  • 接受者必須驗證這一規則是否被違背。如果接受者確定一個TLP違背了該規則,那麼這個TLP就是一個畸形的TLP。
  • 對於ARI設備,Max_Payload_Size僅有Function 0設定。其他Function中的Max_Payload_Size設定將被忽略
  • 對於一個和非ARI多功能設備相關的上游端口,如果Max_Payload_Size的設定在所有Function中都是一樣的,接收的TLP數據負載不能超過這個通用的Max_Payload_Size設定
  • 對於一個和非ARI多功能設備相關的上游端口,如果Max_Payload_Size的設定在所有Function中不全相同,接收的TLP數據負載不能超過特定的Max_Payload_Size設定
  • 實現Receiver時,儘量使用由產生事務的Function中所設定的Max_Payload_Size,或者所有Function中最小的Max_Payload_Size
  • 軟件不能在不同Function中設定不同的Max_Payload_Size,除非軟件知曉具體的實現
  1. 對於包含數據的TLP,Length域中的值必須TLP中實際包含的數據長度相匹配
  2. Length域中的值僅用於指定數據長度,TLP摘要的長度不包含在Length域中
  3. 當一個數據負載被包含在一個TLP中,而非一個AtomicOp Request或一個AtomicOp Completion中,那麼數據的第一個字節將緊跟頭部之後,後續字節將按字節序遞增
  • 例:將16字節數據寫到地址100h,頭部之後的第一個字節應該寫到地址100h,第二個字節應該寫到地址101h,以此類推,最後一個字節寫在地址10Fh
  1. 在AtomicOp Requests和AtomicOp Completions中的數據負載必須按照如下格式進行排列:TLP頭部之後的第一個數據字節應該是第一個數據值的最低有效字節,後續數據字節要嚴格安彙總啊有效位遞增。對於CAS Requests,第二個數據值必須緊跟第一個數據值,並且使用相同格式。

2.2.3 TLP摘要規則

  1. 對於任何TLP,TD位中的值表明了在TLP的最後存在包括ECRC值的TLP摘要。
  • 如果TLP的TD位的值與觀察到的值不一致,那麼這個TLP就是一個存在錯誤的TLP
  1. 如果處於中間或最後的PCIE 接受者不支持ECRC檢查,那麼接受者必須忽略TLP摘要。
  • 如果接收者支持ECRC檢查,那麼接收者將把TLP摘要中對應的域解釋爲ECRC值。

2.2.4 路由和尋址規則

值表明了在TLP的最後存在包括ECRC值的TLP摘要。

  1. 如果TLP的TD位的值與觀察到的值不一致,那麼這個TLP就是一個存在錯誤的TLP

  2. 如果處於中間或最後的PCIE 接受者不支持ECRC檢查,那麼接受者必須忽略TLP摘要。

  • 如果接收者支持ECRC檢查,那麼接收者將把TLP摘要中對應的域解釋爲ECRC值。

2.2.4 路由和尋址規則

待續

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