PCIE系統(tǒng)標(biāo)準(zhǔn)體系結(jié)構(gòu)解讀(二):體系結(jié)構(gòu)概述之PCIe 的設(shè)備層

1.2.1 概述

PCIe?規(guī)范定義了一種分層的設(shè)備設(shè)計(jì)體系結(jié)構(gòu)。這些層分為處理層(Transaction Layer)、數(shù)據(jù)鏈路層(Data Link Layer)和物理層(Physical Layer),在垂直方向上又可以進(jìn)一步分成兩部分:處理出站流量的發(fā)送部分和處理入站流量的接收部分。


1.2.2 設(shè)備層及相關(guān)的數(shù)據(jù)包

1.2.2.1 處理層事務(wù)包(TLP)

TLP?數(shù)據(jù)包的裝配


軟件層/設(shè)備核心層將裝配 TLP 核心部分所需要的信息發(fā)送到處理層,這部分信息是 TLP 數(shù)據(jù)包的頭和數(shù)據(jù)部分。某些 TLP 不包含數(shù)據(jù)部分。接下來(lái)要計(jì)算可選的端到端的 CRC(ECRC) 字段并將其附加到數(shù)據(jù)包中,因?yàn)樵摂?shù)據(jù)包的最終目標(biāo)設(shè)備要使用 ECRC 字段來(lái)檢查 TLP 頭和數(shù)據(jù)部分中的 CRC 錯(cuò)誤。

TLP 的核心部分被轉(zhuǎn)發(fā)至數(shù)據(jù)鏈路層,然后由數(shù)據(jù)鏈路層為其附加序列 ID 和 LCRC 字段。鏈路另一端的相鄰接收器設(shè)備使用該 LCRC 字段檢查 TLP 的核心部分和序列 ID 中的 CRC 錯(cuò)誤。裝配后的 TLP 被轉(zhuǎn)發(fā)至物理層,由物理層再附加各一字節(jié)的開(kāi)始和結(jié)束成幀字符。然后,對(duì)數(shù)據(jù)進(jìn)行編碼,并使用鏈路上可用的通道差動(dòng)發(fā)送數(shù)據(jù)包。

TLP數(shù)據(jù)包的拆解


臨近的接收器設(shè)備接受進(jìn)入的 TLP 比特流。物理層解碼接收到的 TLP ,剝?nèi)ラ_(kāi)始和結(jié)束幀字段。得到的 TLP 被發(fā)送至數(shù)據(jù)鏈路層,由數(shù)據(jù)鏈路層檢查該 TLP 中的任何錯(cuò)誤,并剝?nèi)バ蛄?ID 和LCRC 字段。沒(méi)有 LCRC 錯(cuò)誤,則該 TLP 將被向上轉(zhuǎn)發(fā)至物理層。如果接收設(shè)備是交換器,那么交換器將根據(jù) TLP 頭中包含的地址信息將該數(shù)據(jù)包由交換器的一個(gè)端口路由至一個(gè)出端口。允許交換器檢查 ECEC 錯(cuò)誤,甚至報(bào)告它發(fā)現(xiàn)的錯(cuò)誤。但不允許交換器修改 ECRC,如果存在這樣的錯(cuò)誤,該 TLP 的目標(biāo)設(shè)備將檢測(cè)到一個(gè) ECRC 錯(cuò)誤。

該 TLP 的最終目標(biāo)設(shè)備負(fù)責(zé)檢查其頭和數(shù)據(jù)部分中的 ECRC 錯(cuò)誤。在剝?nèi)?ECRC 字段后,留下該數(shù)據(jù)包的頭和數(shù)據(jù)部分,而正是這些信息將最終被轉(zhuǎn)發(fā)至設(shè)備核心/軟件層。

數(shù)據(jù)鏈路層數(shù)據(jù)包(DLLP)


DLLP 數(shù)據(jù)包源于發(fā)送器設(shè)備的數(shù)據(jù)鏈路層,終止于接收器設(shè)備的數(shù)據(jù)鏈路層。當(dāng) DLLP 通過(guò) PCIe 鏈路從一臺(tái)設(shè)備傳送到另一臺(tái)設(shè)備時(shí),物理層對(duì) DLLP 的裝配和拆解也起作用。

DLLP 可用于鏈路管理功能,包括與 ACK/NAK 協(xié)議相關(guān)的 TLP 確認(rèn),電源管理和流控制信息的交換。

DLLP 在鏈路上兩個(gè)直連組件的數(shù)據(jù)鏈路層之間傳輸。與通過(guò) PCIe 結(jié)構(gòu)傳輸?shù)?TLP 不同,DLLP 不通過(guò)交換器。DLLP 也不包含路由信息。與 TLP 相比,這些數(shù)據(jù)包較小,為 8 個(gè)字節(jié)。

DLLP?的裝配

DLLP 有多種類型,包括流控制 DLLP,確認(rèn) TLP 接收的確認(rèn)/否認(rèn) DLLP(ACK 和 NAK)、電源管理 DLLP(PMx)。DLLP 的類型字段會(huì)標(biāo)識(shí)出各種 DLLP 的類型。數(shù)據(jù)鏈路層在 DLLP 上附加 16bits 的 CRC ,DLLP 接收器用來(lái)檢查 DLLP 中的 CRC 錯(cuò)誤。

DLLP 的內(nèi)容和 16bits CRC 一起被轉(zhuǎn)發(fā)至物理層,物理層在該數(shù)據(jù)包中附加各 1 字節(jié)的開(kāi)始和結(jié)束成幀字符。然后對(duì)數(shù)據(jù)包進(jìn)行編碼,并利用可用通道在鏈路上差動(dòng)發(fā)送數(shù)據(jù)包。

DLLP?的拆解

由接收設(shè)備的物理層接收? DLLP ,解碼接收的比特流并剝?nèi)テ溟_(kāi)始和結(jié)束幀字段。再將得到的數(shù)據(jù)包發(fā)送至數(shù)據(jù)鏈路層,由該層檢查 CRC 錯(cuò)誤并剝?nèi)?CRC 字段。數(shù)據(jù)鏈路層時(shí) DLLP 的目的地,不再向上面的處理層轉(zhuǎn)發(fā)。


1.2.2.3 物理層數(shù)據(jù)包(PLP)

PLP 源于發(fā)送器設(shè)備的物理層,終止與接收器設(shè)備的物理層。PLP 是一種非常簡(jiǎn)單的數(shù)據(jù)包,開(kāi)始是 1 字節(jié)的 COM 字符,后面是定義 PLP 類型以及含有其它信息的 3 個(gè)或多個(gè)字符。PLP 的大小是 4 字節(jié)的整數(shù)倍。規(guī)范將這種數(shù)據(jù)包成為有序集(Ordered Set)。PLP 不包含任何路由信息,不會(huì)被路由通過(guò)結(jié)構(gòu),也不會(huì)通過(guò)交換器進(jìn)行傳播。在鏈路定向過(guò)程中會(huì)使用一些 PLP,一些 PLP 可以用于時(shí)鐘容差補(bǔ)償,還可以用PLP 將鏈路置于電氣空閑低功率狀態(tài),或者從這種低功率狀態(tài)喚醒鏈路。


1.2.4 各 PCIe 設(shè)備層的功能

下圖是一個(gè)更詳細(xì)的 PCIe 設(shè)備層模塊圖。該模塊圖可用來(lái)解釋每層的主要功能,以及生成出站流量和相應(yīng)入站流量時(shí)每一層的功能。這些層包括設(shè)備核心/軟件層、處理層、數(shù)據(jù)鏈路層和物理層。


1.2.4.1 設(shè)備核心/軟件層

設(shè)備核心由根聯(lián)合體核心邏輯或注入以太網(wǎng)控制器、SCSI 控制器、USB 控制器等端點(diǎn)核心邏輯組成。

發(fā)送部分:設(shè)備核心邏輯與本地軟件一起提供PCIe 設(shè)備生成 TLP 所需的必要信息。這些信息通過(guò)發(fā)送接口發(fā)送至設(shè)備的處理層。發(fā)送至處理層的信息包括:事務(wù)類型、地址、發(fā)送的數(shù)據(jù)量、數(shù)據(jù)、流量類別、消息索引等。

接收部分:設(shè)備核心邏輯負(fù)責(zé)通過(guò)接收接口來(lái)接收處理層發(fā)送的信息。這些信息包括:處理層接收的 TLP 的類型、地址、接收的數(shù)據(jù)量、數(shù)據(jù)、接收的 TLP 的流量類別、消息索引以及錯(cuò)誤情況等。

1.2.4.2 處理層

處理層負(fù)責(zé)生成出站 TLP 流量和接收入站 TLP 流量。處理層支持用于非報(bào)告事務(wù)的分離事務(wù)協(xié)議。處理層會(huì)將給定標(biāo)記值的入站完成 TLP 與早先發(fā)送的相同標(biāo)記值的出站非報(bào)告請(qǐng)求 TLP 聯(lián)系起來(lái)。

處理層含有虛擬信道緩沖區(qū)(VC 緩沖區(qū)),用來(lái)存儲(chǔ)等待發(fā)送的出站 TLP 以及從鏈路上接收的入站 TLP。與這些虛擬信道緩沖區(qū)相關(guān)的流控制協(xié)議能保證遠(yuǎn)程發(fā)送器不會(huì)發(fā)送太多的 TLP,因而不會(huì)引起接收器接收器虛擬信道緩沖區(qū)溢出。發(fā)送前,處理層還能根據(jù)順序規(guī)則對(duì) TLP 排序。支持服務(wù)質(zhì)量(QoS)協(xié)議的正是該層。

處理層支持 4 種地址空間:存儲(chǔ)器地址空間、IO 地址空間、配置地址空間和消息空間。消息數(shù)據(jù)包內(nèi)包含信息。

發(fā)送部分:處理層從設(shè)備核心接收信息并生成出站請(qǐng)求和保存在虛擬信道緩沖區(qū)中的完成 TLP,同時(shí)負(fù)責(zé)裝配處理層數(shù)據(jù)包(TLP)。TLP 的主要組成部分是:頭、數(shù)據(jù)有效載荷和一個(gè)可選的 ECRC (規(guī)范中也是用摘要(Digest)這一術(shù)語(yǔ))字段。

頭的大小為 3 或 4 個(gè)雙字,并且可以包含諸如地址、TLP 類型、傳送大小、請(qǐng)求者ID/完成者ID、標(biāo)記、流量類別、字節(jié)允許、完成代碼和屬性(包括“不偵測(cè)(no snoop)”和“靈活的順序”比特)等字段。

對(duì)于存儲(chǔ)器請(qǐng)求,該地址是 32bits 的存儲(chǔ)器地址或擴(kuò)展的 64bits 地址。對(duì)于 IO 請(qǐng)求,該地址是 32bits 的地址。對(duì)于配置事務(wù),該地址時(shí)由總線號(hào)、設(shè)備號(hào)和功能號(hào)再加上目標(biāo)寄存器的配置寄存器地址組成的 ID。對(duì)于完成 TLP,該地址是最初發(fā)出請(qǐng)求設(shè)備的請(qǐng)求者 ID。對(duì)于消息事務(wù),用來(lái)路由的地址時(shí)目的地設(shè)備的 ID,它由總線號(hào)、設(shè)備號(hào)和消息請(qǐng)求的目標(biāo)設(shè)備的功能號(hào)所組成。消息請(qǐng)求也可以由目標(biāo)根聯(lián)合體或上游端口隱式廣播或路由。

傳送大小或長(zhǎng)度字段指出要傳送的數(shù)據(jù)量,計(jì)算時(shí)以雙字為單位。數(shù)據(jù)傳送長(zhǎng)度可以是 1~1024 個(gè) DW。寫請(qǐng)求 TLP 在其頭的長(zhǎng)度字段中指定的這個(gè)量包括數(shù)據(jù)有效載荷。對(duì)于讀請(qǐng)求 TLP,長(zhǎng)度字段指出向完成者請(qǐng)求的數(shù)據(jù)量。這些數(shù)據(jù)在 1 個(gè)或多個(gè)完成數(shù)據(jù)包中返回。讀請(qǐng)求 TLP 沒(méi)有包含數(shù)據(jù)有效載荷字段。字節(jié)允許指定了解析字節(jié)級(jí)地址的方法。

請(qǐng)求數(shù)據(jù)包中包含發(fā)送請(qǐng)求設(shè)備的請(qǐng)求者 ID (總線號(hào)、設(shè)備號(hào)、功能號(hào))。完成者將記住請(qǐng)求中的標(biāo)記字段并在完成中使用相同的標(biāo)記。

頭中的一個(gè)比特(TD = TLP 摘要)指出該數(shù)據(jù)包是否含有 ECRC 字段,又稱為摘要。該字段 32bits 位寬,含有端到端 CRC(ECRC)。ECRC 字段是由處理層在創(chuàng)建出站 TLP 時(shí)生成的,并且是根據(jù)整個(gè) TLP,從頭的第一個(gè)字節(jié)一直到數(shù)據(jù)有效載荷的最后一個(gè)字節(jié)(不包括? EP 比特和類型(Type)字段的bit0。在計(jì)算 ECRC時(shí),認(rèn)為則兩個(gè)比特總是 1 計(jì)算的。當(dāng) TLP 通過(guò)結(jié)構(gòu)時(shí),它從不會(huì)變化。當(dāng)數(shù)據(jù)包通過(guò)結(jié)構(gòu)時(shí),接收設(shè)備檢查可能出現(xiàn)的 ECRC 錯(cuò)誤。

接收部分:處理層的接收部分將入站 TLP 保存在虛擬信道緩沖區(qū)中。接收器根據(jù) TLP 中的 ECRC 字段檢查 CRC 錯(cuò)誤。如果沒(méi)錯(cuò)。刪去 ECRC 字段,然后將在 TLP 頭中得到的信息以及數(shù)據(jù)有效載荷發(fā)送給設(shè)備核心。

流控制:流控制是在硬件級(jí)自動(dòng)管理的,且對(duì)軟件是透明的。軟件僅僅涉及使超出虛擬信道緩沖區(qū)默認(rèn)設(shè)置(成為 VC0 緩沖區(qū))的其它緩沖區(qū)可用。鏈路定向后,自動(dòng)啟用默認(rèn)的緩沖區(qū)。因而在鏈路定向之后,允許 TLP 流量立即通過(guò)結(jié)構(gòu)。配置事務(wù)使用默認(rèn)虛擬信道緩沖區(qū),并且在鏈路定向過(guò)程結(jié)束后可以立即開(kāi)始。

接收設(shè)備定期地發(fā)送一種稱為流控制數(shù)據(jù)包(FCx DLLP)的 DLLP 給發(fā)送設(shè)備。該 FCx DLLP 含有流控制信用(credit)信息,用來(lái)更新發(fā)送器關(guān)于接收器虛擬信道緩沖區(qū)還有多少可用空間的信息。發(fā)送器會(huì)追蹤這一信息,并且在知道遠(yuǎn)程接收器有多少空間可以接收 TLP 時(shí),才發(fā)送 TLP 離開(kāi)其物理層。

服務(wù)質(zhì)量(QoS):指的是以不同的優(yōu)先級(jí)和確定的延遲及帶寬路由不同應(yīng)用程序的數(shù)據(jù)包通過(guò)結(jié)構(gòu)的能力。PCI 和 PCI-X 系統(tǒng)不支持 QoS 能力。能實(shí)現(xiàn)多組虛擬信道緩沖區(qū)的? PCIe 設(shè)備具有仲裁來(lái)自不同 VC 緩沖區(qū)的 TLP 的能力。VC 緩沖區(qū)的優(yōu)先級(jí)時(shí)可配置的。因此不同 VC 緩沖區(qū)中流過(guò)系統(tǒng)的流量將遵守不同的性能。在流過(guò)不同 VC 緩沖區(qū)的 TLP 流量之間進(jìn)行仲裁的機(jī)制成為 VC 仲裁。

流量類別(TC)和虛擬信道(VC):TC 是在數(shù)據(jù)包內(nèi)發(fā)送的一個(gè) TLP 頭字段,在端到端通過(guò)結(jié)構(gòu)時(shí)沒(méi)有改變。本地應(yīng)用軟件和系統(tǒng)軟件應(yīng)根據(jù)性能要求確定某個(gè) TLP 使用什么樣的 TC 標(biāo)志。VC 是物理緩沖區(qū),它通過(guò)使用發(fā)送和接收器虛擬信道緩沖區(qū),提供一種在物理鏈路上支持多個(gè)獨(dú)立邏輯數(shù)據(jù)流的手段。PCIe 設(shè)備可以最多實(shí)現(xiàn) 8 個(gè) VC 緩沖區(qū)(VC0~VC7)。TC 字段是一個(gè) 3bits 長(zhǎng)的字段,可以將不同的流量分成 8 種流量類別(TC0~TC7)。設(shè)備必須實(shí)現(xiàn) VCO。設(shè)備或交換器要實(shí)現(xiàn) TC-VC 映射邏輯,把給定 TC 號(hào)的 TLP 使用特定的 VC 號(hào)的緩沖區(qū)通過(guò)鏈路轉(zhuǎn)發(fā)。PCIe 具有映射多個(gè) TC到一個(gè) VC 的能力,因而可通過(guò)提供有限數(shù)目的 VC 緩沖區(qū)支持來(lái)降低設(shè)備成本。

端口仲裁和?VC?仲裁:處理層支持仲裁的目的是:為結(jié)構(gòu)內(nèi)的數(shù)據(jù)流提供不同的服務(wù);提供確定的、有保證的帶寬并使端到端事務(wù)延遲最小。端點(diǎn)設(shè)備和只有一個(gè)端口的根聯(lián)合體不支持端口仲裁,僅支持處理層 VC 仲裁。

事務(wù)順序:事務(wù)順序規(guī)則可以保證與給定流量類別相關(guān)的 TLP 流量以正確的順序路由通過(guò)結(jié)構(gòu),以防止可能發(fā)生死鎖或活鎖現(xiàn)象。與不同TC 標(biāo)志相關(guān)的流量之間沒(méi)有次序關(guān)系。處理層保證在將給定 TC 的 TLP 轉(zhuǎn)發(fā)至數(shù)據(jù)鏈路層和物理層傳輸之前,對(duì)它和其他 TC 標(biāo)志相同的 TLP 正確排序。

電源管理:處理層支持 ACPI/PCI 電源管理,同系統(tǒng)軟件要求的一樣。處理層硬件可自動(dòng)管理某設(shè)備的電源,使其在工作電源狀態(tài)的功耗最小。這種自動(dòng)電源管理成為活動(dòng)狀態(tài)電源管理,與軟件無(wú)關(guān)。與 OS 有關(guān)的電源管理軟件通過(guò)電源管理配置寄存器管理某一設(shè)備的電源狀態(tài)。

配置寄存器:設(shè)備的配置寄存器與處理層有關(guān)。這些寄存器將在初始化和總線計(jì)數(shù)期間配置。也可以由設(shè)備驅(qū)動(dòng)程序配置,由運(yùn)行時(shí)軟件/OS 訪問(wèn)。這些寄存器要負(fù)責(zé)保存已協(xié)商的鏈路功能,例如鏈路帶寬和頻率。

1.2.4.3 數(shù)據(jù)鏈路層

數(shù)據(jù)鏈路層的主要功能是保證在各鏈路上發(fā)送和接收數(shù)據(jù)包時(shí)數(shù)據(jù)的完整性。如果某發(fā)送器設(shè)備發(fā)送一個(gè) TLP 至鏈路另一端的遠(yuǎn)程接收器設(shè)備,并且檢測(cè)到了一個(gè) CRC 錯(cuò)誤,則發(fā)送器設(shè)備會(huì)得到一個(gè) NAK DLLP,而且該發(fā)送器設(shè)備會(huì)自動(dòng)發(fā)送該 TLP。在錯(cuò)誤檢查和接收數(shù)據(jù)包有錯(cuò)重發(fā)的情況下,PCIe 能以非常高的概率保證由一臺(tái)設(shè)備發(fā)送的 TLP 能夠毫無(wú)錯(cuò)誤地到達(dá)其最終目的地。

發(fā)送部分:在轉(zhuǎn)發(fā)出站 TLP 至數(shù)據(jù)鏈路層前,數(shù)據(jù)鏈路層必須遵守流控制機(jī)制。如果存在足夠的信用,保存在虛擬信道緩沖區(qū)內(nèi)的 TLP 將從處理層被傳遞至數(shù)據(jù)鏈路層準(zhǔn)備發(fā)送。

下圖顯示了與數(shù)據(jù)鏈路層的 ACK-NAK 機(jī)制有關(guān)的邏輯。數(shù)據(jù)鏈路層負(fù)責(zé) TLP CRC 的產(chǎn)生和 TLP 錯(cuò)誤檢查。對(duì)于發(fā)送設(shè)備 A 的出站 TLP,將生成鏈路 CRC(LCRC)并附加在 TLP 上。另外,還要講一個(gè)序列 ID 附加在 TLP 上。設(shè)備 A 的數(shù)據(jù)鏈路層在重放緩沖區(qū)中保留該 TLP 的一個(gè)副本并發(fā)送該 TLP 給 B。數(shù)據(jù)鏈路層的遠(yuǎn)程設(shè)備 B 接收該 TLP 并檢查 CRC 錯(cuò)誤。

如果沒(méi)有錯(cuò)誤,設(shè)備 B 的數(shù)據(jù)鏈路層返回一個(gè)帶序列 ID 的 ACK DLLP 給設(shè)備 A。設(shè)備 A 可以確認(rèn)該 TLP 已經(jīng)成功到達(dá)設(shè)備 B。同時(shí),設(shè)備 A 清除其重放緩沖區(qū)中與該序列 ID 有關(guān)的 TLP。

如果遠(yuǎn)程設(shè)備 B 在接收到的 TLP 中檢測(cè)到了 CRC 錯(cuò)誤,則一個(gè)帶序列 ID 的NAK DLLP 將被返回到設(shè)備 A。若在 TLP 傳輸過(guò)程中出現(xiàn)了錯(cuò)誤,設(shè)備 A 的數(shù)據(jù)鏈路層將重發(fā)重放緩沖區(qū)中相關(guān)的 TLP。數(shù)據(jù)鏈路層生成用于錯(cuò)誤報(bào)告和記錄機(jī)制的錯(cuò)誤標(biāo)記。

對(duì)于重放緩沖區(qū)中某一給定的 TLP,如果發(fā)送器設(shè)備接受了某一 NAK 4 次,結(jié)果將導(dǎo)致該 TLP 另外被重發(fā)了 3 次,則數(shù)據(jù)鏈路層記錄此錯(cuò)誤,報(bào)告一個(gè)可糾正的錯(cuò)誤并重新定向該鏈路。

接收部分:數(shù)據(jù)鏈路層的接收端負(fù)責(zé)入站 TLP 的 LCRC 錯(cuò)誤檢查。如果沒(méi)有檢測(cè)到錯(cuò)誤,該設(shè)備安排一個(gè) ACK DLLP 傳回遠(yuǎn)程的發(fā)送器設(shè)備。接收器設(shè)備還要負(fù)責(zé)剝?nèi)ピ?TLP 的LCRC 字段和序列 ID。數(shù)據(jù)鏈路層的接收端還能接收遠(yuǎn)程設(shè)備的 ACK 和 NAK。如果接收到一個(gè) ACK,數(shù)據(jù)鏈路層的接收端會(huì)通知發(fā)送端清除重放緩沖區(qū)中相關(guān)的 TLP。如果接收到一個(gè) NAK,接收端引起發(fā)送端的重放緩沖區(qū)重發(fā)相關(guān)的 TLP。

接收端還負(fù)責(zé)檢查接收 TLP 中的序列 ID,以檢驗(yàn)丟失的或失序的 TLP。

數(shù)據(jù)鏈路層對(duì)?TLP??DLLP?的影響:數(shù)據(jù)鏈路層將一個(gè) 12bits 的序列 ID 和 32bits 的 LCRC 字段與從處理層得到的出站 TLP 連接在一起。得到下圖的 TLP。序列 ID 可以用來(lái)將重放緩沖區(qū)中保存的出站 TLP 的副本與從相鄰遠(yuǎn)程設(shè)備接收的入站 ACK/NAK DLLP 聯(lián)系起來(lái)。ACK/NAK DLLP 確認(rèn)出站 TLP 已到達(dá)遠(yuǎn)程設(shè)備。

該 32bits 的 LCRC 是根據(jù) TLP 的所有字節(jié),包括序列 ID 計(jì)算出來(lái)的。

DLLP 是一個(gè) CRC 字段為 16bits 的 4 字節(jié)數(shù)據(jù)包。8bits 的 DLLP 類型字段可以表示各種類型的 DLLP,包括 ACK、NAK、與電源管理有關(guān)的 DLLP(PM_Enter_L1、PM_Enter_L23、PM_Active_State_Request_L1、PM_Request_L1)和與流控制有關(guān)的 DLLP(InitFC1-P、InitFC1-NP、InitFC1-Cpl、InitFC2-P、InitFC2-NP、InitFC2-Cpl、UpdateFC-P、UpdateFC-NP、UpdateFC-Cpl)。16bits 的 CRC 是利用 DLLP 的所有4 個(gè)字節(jié)計(jì)算出來(lái)的。接收到 CRC 檢查失敗的 DLLP 被丟棄。丟棄一個(gè) DLLP 損失的信息是自修復(fù)的,因而后續(xù)的 DLLP 將代替丟失的信息。ACK 和 NAK DLLP 含有設(shè)備可以用來(lái)將入站的 ACK 和 NAK DLLP 與重放緩沖區(qū)中保存的 TLP 副本關(guān)聯(lián)起來(lái)的序列 ID 字段(如下圖中雜項(xiàng)字段所示)。

說(shuō)明?ACK-NAK?協(xié)議的非報(bào)告事務(wù):

步驟1a:請(qǐng)求者發(fā)送一個(gè)存儲(chǔ)器讀請(qǐng)求 TLP(MRd)。交換器接收 MRd TLP 并利用 MRd TLP 中的 LCRC 字段檢查 CRC 錯(cuò)誤;

步驟1b:如果沒(méi)有錯(cuò)誤,則交換器返回一個(gè) ACK DLLP 給請(qǐng)求者。請(qǐng)求者丟棄其重放緩沖區(qū)中該 TLP 的副本。

步驟2a:交換器利用存儲(chǔ)器地址進(jìn)行路由,轉(zhuǎn)發(fā) MRd TLP 至正確的出端口。完成者接收 MRd TLP,并利用 LCRC 檢查接收 MRd TLP 中的 CRC 錯(cuò)誤;

步驟2b:如果沒(méi)有錯(cuò)誤,則返回者返回一個(gè) ACK DLLP給交換器。見(jiàn)換氣丟棄其重放緩沖區(qū)中該 MRd TLP 的副本;

步驟3a:完成者利用 MRd TLP 中的可選字段 ECRC 來(lái)檢查 CRC 錯(cuò)誤。假設(shè)沒(méi)有端到端錯(cuò)誤。當(dāng)完成者得到請(qǐng)求的數(shù)據(jù)時(shí),它返回一個(gè)帶數(shù)據(jù) TLP 的完成(CplD)。交換器接收 CplD TLP,并利用 LCRC 檢查 CRC 錯(cuò)誤;

步驟3b:如果沒(méi)有錯(cuò)誤,則交換器返回一個(gè) ACK DLLP 給完成者。完成者丟棄其重放緩沖區(qū)中該 CplD TLP 的副本;

步驟4a:交換器解碼 CplD TLP 中的請(qǐng)求者 ID 字段,并路由該數(shù)據(jù)至正確的出端口。請(qǐng)求者接收 CplD TLP,并利用 LCRC 來(lái)檢查接收 CplD TLP 中的 CRC 錯(cuò)誤;

步驟4b:如果沒(méi)有錯(cuò)誤,則請(qǐng)求者返回一個(gè) ACK DLLP 給交換器。交換器丟棄其重放緩沖區(qū)中該 CplD TLP 副本。請(qǐng)求者可以利用可選 ECRC 字段中的 CRC 字段確定該 CplD TLP 是否有錯(cuò)。假設(shè)沒(méi)有端到端錯(cuò)誤,請(qǐng)求者檢查 CplD 中的完成錯(cuò)誤代碼。假設(shè)完成代碼是“成功完成”。為了將完成與原請(qǐng)求關(guān)聯(lián)起來(lái),請(qǐng)求者將 CplD 中的標(biāo)記與原 MRd 請(qǐng)求中的標(biāo)記相匹配,并且接收數(shù)據(jù)。

數(shù)據(jù)鏈路層的其他功能:加電或復(fù)位后,流控制機(jī)制將由數(shù)據(jù)鏈路層初始化。這一過(guò)程是在硬件層次上自動(dòng)完成的,沒(méi)有軟件的參與。

默認(rèn)虛擬通道 VC0 的流控制首先被初始化。當(dāng)軟件**其它 VC 時(shí),對(duì)每一新**的 VC 要重讀流控制初始化過(guò)程。

1.2.4.4 物理層

物理層分成兩部分:邏輯物理層和電氣物理層。邏輯物理層包括在鏈路上發(fā)送之前,對(duì)數(shù)據(jù)包進(jìn)行有關(guān)處理的數(shù)字邏輯,或在發(fā)送數(shù)據(jù)包至數(shù)據(jù)鏈路層之前,對(duì)從鏈路上入站的數(shù)據(jù)包進(jìn)行處理的數(shù)字邏輯。電氣物理層是連接物理層和鏈路的模擬接口,由各通道的差動(dòng)驅(qū)動(dòng)器和差動(dòng)接收器組成。

發(fā)送部分:來(lái)自數(shù)據(jù)鏈路層的 TLP 和 DLLP 被定時(shí)輸入到邏輯物理層的緩沖區(qū)中。物理層在 TLP 和 DLLP 前后分別添加一個(gè)開(kāi)始和結(jié)束成幀字符。這一符號(hào)時(shí)成幀編碼字節(jié),接收設(shè)備利用它來(lái)監(jiān)測(cè)數(shù)據(jù)包的開(kāi)始和結(jié)束。附加在一個(gè) TLP 和 DLLP 上的開(kāi)始和結(jié)束字符如下圖所示。

發(fā)送邏輯子部分將從數(shù)據(jù)鏈路層接收的數(shù)據(jù)包整理成正確的發(fā)送格式。數(shù)據(jù)包被拆分成字節(jié),由鏈路上的可用通道傳送。

然后,用線性反饋移位寄存器類型的擾頻器加擾數(shù)據(jù)包中的每個(gè)字節(jié)。通過(guò)加擾各個(gè)字節(jié),可以消除鏈路上重復(fù)的比特模式,從而降低所產(chǎn)生的平均 EMI 噪聲。

得到的字節(jié)由 8b/10b 編碼邏輯編碼成 10b 的代碼。將 8b 的字符編碼成 10b 符號(hào)的主要目的,是使比特流中有足夠多的 1 到 0 和 0 到 1 的轉(zhuǎn)換,以便在遠(yuǎn)程接收器設(shè)備上 PLL 的幫助下很容易地重建接收時(shí)鐘。注意,沒(méi)有將數(shù)據(jù)和時(shí)鐘一起發(fā)送,而是比特流中含有足夠多的轉(zhuǎn)換,使得接收器設(shè)備能夠重建接收時(shí)鐘。

并行到串行轉(zhuǎn)換器用于生成每條通道上數(shù)據(jù)包的串行比特流。

接收部分:接收設(shè)備的電氣物理層會(huì)定時(shí)輸入差動(dòng)到達(dá)所有鏈路的數(shù)據(jù)包。利用串行到并行轉(zhuǎn)換器可將數(shù)據(jù)包的串行比特流轉(zhuǎn)換成 10b 的并行流。接收邏輯還有一個(gè)彈性緩沖器,可以調(diào)節(jié)發(fā)送時(shí)鐘和接收時(shí)鐘之間的時(shí)鐘頻率變化,發(fā)送時(shí)鐘是數(shù)據(jù)包比特流定時(shí)輸入接收器時(shí)鐘。8b/10b 解碼器此時(shí)用于將 10b 符號(hào)流解碼回每個(gè)符號(hào)的 8b 表示。8b 字符時(shí)去擾的。字節(jié)反拆分邏輯將重建遠(yuǎn)程設(shè)備發(fā)送的原數(shù)據(jù)包流。

鏈路定向與初始化:物理層的另一個(gè)功能是初始化和定向鏈路。鏈路初始化和定向是物理層控制的過(guò)程。這一過(guò)程配置并初始化正常工作的每條鏈路。該過(guò)程是自動(dòng)的,要確定下面的參數(shù):

鏈路寬度;

鏈路數(shù)據(jù)速率;

通道反轉(zhuǎn);

極性倒置;

每通道比特鎖定;

每通道符號(hào)鎖定;

多通道鏈路內(nèi)通道到通道之間的相位補(bǔ)償。

鏈路寬度:可以連接每鏈路通道數(shù)不同的兩臺(tái)設(shè)備。

通道反轉(zhuǎn):可選。通道是編號(hào)的,設(shè)計(jì)者可能沒(méi)有正確地連接兩個(gè)端口正確通道之間的連線。在這種情況下,鏈路定向會(huì)考慮將通道號(hào)反過(guò)來(lái),以便鏈路各端相鄰端口的通道號(hào)相匹配。部分相同的過(guò)程可能考慮將多通道鏈路分解成多條鏈路。

極性倒置:兩臺(tái)設(shè)備的 D+ 和 D- 差動(dòng)對(duì)終端的連接可能不正確。在這種情況下,定向序列接收器會(huì)將差動(dòng)接收器上的極性倒置。

鏈路數(shù)據(jù)速率:定向期間,各節(jié)點(diǎn)通告其最高數(shù)據(jù)速率能力。將用鏈路兩端對(duì)應(yīng)設(shè)備所支持的最大公共頻率來(lái)初始化該鏈路。

通道到通道之間的相位補(bǔ)償:由于多通道鏈路上鏈路導(dǎo)線長(zhǎng)度變化和驅(qū)動(dòng)器/接收器的特性不同,各通道的比特流到達(dá)接收器時(shí)相對(duì)于其它通道有相位偏移。接收器電路必須通過(guò)增加或減小各通道的延遲來(lái)補(bǔ)償這一相位偏移。

鏈路電源管理:鏈路的正常加電操作成為 L0 狀態(tài)。低功率的鏈路狀態(tài)時(shí) L0s、L1、L2 和 L3 狀態(tài)。在這些狀態(tài)下,不發(fā)送或接收數(shù)據(jù)包。當(dāng)鏈路不活動(dòng)一段時(shí)間并出現(xiàn)超時(shí)后,鏈路自動(dòng)進(jìn)入 L0s 電源狀態(tài)。進(jìn)入和退出這一狀態(tài)不設(shè)計(jì)軟件,且退出延遲最短。L1 和 L2 是比 L0s 還低的電源狀態(tài),但退出 L1 和 L2 的延遲較大。L3 電源狀態(tài)是全關(guān)閉電源狀態(tài)。設(shè)備不能由此狀態(tài)生成喚醒事件。

復(fù)位:支持兩類復(fù)位。①冷/熱復(fù)位也稱為基本復(fù)位,發(fā)生在設(shè)備加電后(冷復(fù)位)或沒(méi)有重新施加電源的復(fù)位(熱復(fù)位)。②hot 復(fù)位有時(shí)又成為協(xié)議復(fù)位,是一種帶內(nèi)傳播復(fù)位的方法。有序集的發(fā)送就是用來(lái)發(fā)出 hot 復(fù)位信號(hào)的。軟件發(fā)起 hot 復(fù)位的生成。

電氣物理層:一臺(tái)設(shè)備的發(fā)送器與鏈路另一端另一臺(tái)設(shè)備的接收器時(shí) AC 耦合的,如下圖。AC 耦合電容器的大小在 75~200nF 之間。發(fā)送器的 DC 共模電壓時(shí)在鏈路定向和初始化期間確定的。DC 共模阻抗通常是 50Ω,而差動(dòng)阻抗通常是 100Ω。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容