PCI Express

外圍組件快速互連（Peripheral Component Interconnect Express），簡稱PCI-E，官方簡稱PCIe，是計算機總線的一個重要分支，它沿用既有的PCI編程概念及信號標準，並且構建了更加高速的串行通信系統標準。目前這一標準由PCI-SIG組織制定和維護。PCIe僅應用於內部互連。由於PCIe是基於既有的PCI系統，所以只需修改物理層而無須修改軟件就可將現有PCI系統轉換為PCIe。
PCIe擁有更快的速率，所以幾乎取代了以往所有的內部總線（包括AGP和PCI）。現在英特爾和AMD已採用單芯片組技術，取代原有的南橋和北橋方案。
除此之外，PCIe設備能夠支援熱拔插特性，目前支援的三種電壓分別為+3.3V、3.3Vaux以及+12V。
考慮到現在顯卡功耗的日益增加，PCIe而後在規範中改善了直接從插槽中取電的功率限制，×16的最大提供功率一度達到了75W，相對於AGP 8X接口有了很大的提升。
PCIe保證了相容性，支援PCI的作業系統無需進行任何更改即可支援PCIe總線。這也給用戶的升級帶來方便。由此可見，PCIe最大的意義在於它的通用性，不僅可以讓它用於南橋和其他設備的連接，也可以延伸到芯片組間的連接，甚至也可以用於連接圖形處理器，這樣，整個I/O系統重新統一起來，將更進一步簡化計算機系統，增加計算機的可移植性和模塊化。

**歷史**
在2001年的春季英特爾開發者論壇（IDF）上Intel公佈取代PCI總線的第三代I/O技術，被稱為“3GIO”。該總線的規範由Intel支持的AWG（Arapahoe Work  Group）負責制定。2002年4月17日，AWG正式宣佈3GIO 1.0規範草稿制定完畢，移交PCI特殊興趣組織（PCI-SIG）進行審核，2002年7月23日經過審核後正式公佈，改名為“PCI Express”，並根據開發藍圖在2006年正式推出Spec 2.0（2.0規範）。2019年5月28日，PCI-SIG官方發佈了PCIe 5.0的1.0版基礎規範，規範主要定義了PCIe5.0的架構（architecture）、互聯屬性規範（interconnect attributes）、網絡結構管理（fabric management）以及編程接口（programming interface）等內容。
以PCIe 2.0為例，每秒5GT（Gigatransfer）原始數據傳輸率，編碼方式為8b/10b（每10個位元只有8個有效數據），即有效頻寬為4Gb/s = 500MByte/s。

**PCI Express與其他傳輸規格比較**
PCI Express ×16插槽
PCI Express ×1插槽
PCIe的規範主要是為了提升電腦內部所有匯流排的速度，因此頻寬有多種不同規格標準，其中PCIe ×16是特別為顯示卡所設計。AGP的資料傳輸效率最高為2.1GB／s，不過對上PCIe ×16的8GB／s，很明顯的就分出勝負，但8GB／s是指資料傳輸的理想值，並不是使用PCIe介面的顯示卡，就能夠有突飛猛進的效能表現，實際的測試數據並不會有這麼大的差異存在。
計算公式：PCI-E串行總線帶寬（MB/s） = 串行總線時鐘頻率（MHz）* 串行總線位寬（bit/8 = B）* 串行總線管線* 編碼方式* 每時鐘傳輸幾組數據（cycle），例：雙工PCI-E 1.0 X1，其帶寬 = 2500*1/8*1*8/10*1*2=500 MB/s。
PCI Express 1.0總線頻率2500 MHz，這是在100 MHz的基準頻率通過鎖相環振盪器（Phase Lock Loop，PLL）達到的。PCI-E 2.0總線頻率從2.5GHz提高到5GHz，3.0則提高到8GHz，編碼方式變成128/130。

**PCI Express的硬件協議**
PCIe的連接是建立在一個單向的序列的（1-bit）點對點連接基礎之上，這稱之為通道（lane）。這一點上PCIe連接與早期PCI連接形成鮮明對比，PCI連接基於總線控制，所有設備共享雙向32位並行總線。PCIe是一個多層協議，由事務層，數據交換層和物理層構成。物理層又可進一步分為邏輯子層和電氣子層。邏輯子層又可分為物理代碼子層（PCS）和介質接入控制子層（MAC）。這些術語借用自 IEEE 802 網絡協議模型。PCIe通過Active State Power Management協定進行電源管理。

**物理層**
各式不同的PCI Express插槽（由上而下：x4, x16, x1，與x16），相較於傳統的32-bit PCI插槽（最下方），取自於DFI的LanParty nF4 Ultra-D機板
於使用電力方面，每組流水線使用兩個單向的低電壓差分信號（LVDS）合計達到2.5 Gbit/s。傳送及接收不同數據會使用不同的傳輸通道，每一通道可運作四項資料。兩個PCIe設備之間的連接成為“鏈接”，這形成1組或更多的傳輸通道。各個設備最少支援1傳輸通道（x1）的鏈接。也可以有2，4，8，16，32個通道的鏈接。這可以更好的提供雙向兼容性（x2模式將用於內部接口而非插槽模式）。PCIe卡能使用在至少與之傳輸通道相當的插槽上（例如x1接口的卡也能工作在x4或x16的插槽上）。一個支援較多傳輸通道的插槽可以建立較少的傳輸通道（例如8個通道的插槽能支援1個通道）。PCIe設備之間的鏈接將使用兩設備中較少通道數的作為標準。一個支援較多通道的設備不能在支援較少通道的插槽上正常工作，例如x4接口的卡不能在x1的插槽上正常工作（插不入），但它能在x4的插槽上只建立1個傳輸通道（x1）。PCIe卡能在同一數據傳輸通道內傳輸包括中斷在內的全部控制信息。這也方便與PCI的兼容。多傳輸通道上的數據傳輸採取交叉存取，這意味著連續字節交叉存取在不同的通道上。這一特性被稱之為“數據條紋”，需要非常複雜的硬件支援連續數據的同步存取，也對鏈接的數據吞吐量要求極高。由於數據填充的需求，數據交叉存取不需要縮小數據包。與其它高速數傳輸協議一樣，時鐘信息必須嵌入信號中。在物理層上，PCIe採用常見的8B/10B代碼方式來確保連續的1和0字符串長度符合標準，這樣保證接收端不會誤讀。編碼方案用10位編碼比特代替8個未編碼比特來傳輸數據，佔用20%的總帶寬。到了PCIe 3.0，採用128B/130B代碼方式，僅佔用1.538%的總帶寬。有些協議（如SONET）使用另外的編碼結構如“不規則”在數據流中嵌入時鐘信息。PCIe的特性也定義一種“不規則化”的運算方法，但這種方法與SONET完全不同，它的方法主要用來避免數據傳輸過程中的數據重複而出現數據散射。第一代PCIe採用2.5GT/s單信號傳輸率，PCI-SIG計劃在未來版本中增強到5~10GT/s。

**數據鏈路層**
數據鏈路層採用按序的交換層信息包（Transaction Layer Packets,TLPs），是由交換層生成，按32位循環冗餘校驗碼（CRC，本文中用LCRC）進行數據保護，採用著名的協議（Ack and Nak signaling）的信息包。TLPs能通過LCRC校驗和連續性校驗的稱為Ack（命令正確應答）；沒有通過校驗的稱為Nak（沒有應答）。沒有應答的TLPs或者等待逾時的TLPs會被重新傳輸。這些內容存儲在數據鏈路層的緩存內。這樣可以確保TLPs的傳輸不受電子噪音干擾。PCIe對於ACK有所規範，在收到TLP封包之後，在一定時間內必須回應ACK，也就是ACK延遲（ACK Latency）的等待時間。因應ACK/NAK流程的需要，必須實作出重新播送緩衝器（Replay Buffer）。
TLPs加上Sequence number以及16 位元 CRC 後，被包裹成為數據鏈路層信息包（Data Link Layer Packet,DLLP），除了資料傳遞外，交握信號ACK和NAK信號亦被包裹在信息包中傳送，除此之外也用來傳送兩個互連設備的交換層之間的流控制信息和實現電源管理功能。

**事務層**
PCI Express採用分離交換（數據提交和應答在時間上分離），可保證傳輸通道在目標端設備等待發送回應信息傳送其它數據信息。
PCI Express採用可信性流控制。這一模式下，一個設備廣播它可接收緩存的初始可信信號量。鏈接另一方的設備會在發送數據時統計每一發送的TLP所佔用的可信信號量，直至達到接收端初始可信信號最高值。接收端在處理完畢緩存中的TLP後，它會回送發送端一個比初始值更大的可信信號量。可信信號統計是定製的標準計數器，相比於其他方法，如基於握手的傳輸協議，這一模式的優勢在於可信信號的回傳反應時間不會影響系統性能，因為如果雙方設備的緩存足夠大，是不會出現達到可信信號最高值的情況，這樣發送數據不會停頓。
第一代PCIe標稱可支援每傳輸通道單向每秒250 MB的數據傳輸率。這一數字是根據物理信號率2500 Mbit/s除以編碼率（10位／每字節）計算而得。這意味著一個16通道（x16）的PCIe卡理論上可以達到單向250*16=4000 MB/s（3.7 GB/s）。實際的傳輸率要根據數據有效載荷率，即依賴於數據的本身特性，這是由更高層（軟件）應用程序和中間協議層決定。
PCI Express與其它高速序列連接系統相似，它依賴於傳輸的強健性（CRC校驗和ACK）。長時間連續的單向數據傳輸（如高速存儲設備）可以達到>95%的PCIe通道數據傳輸利用率。這樣的傳輸受益於增加的傳輸通道（x2, x4 等）。但大多數應用程序如USB或乙太網路控制器會把傳輸內容拆成小的數據包，同時還會強制加上確認信號。這類數據傳輸由於增加數據包的解析和強制中斷，降低傳輸通道的效率。作為一個在同一個印刷電路板（PCB）設備間的通信協議，它不需要達到其他遠距離通信協議要求的高數據傳輸錯誤容忍度，而且，這種效率的降低並非只出現在PCIe上。

**引腳**
下表列出在邊緣連接器上的PCI Express卡兩側的導線。在印刷電路板（PCB）的焊接側為A側，並且組件側的B側。PRSNT1# 和PRSNT2# 引腳必須比其餘稍短，以確保熱插入卡完全插入。該WAKE# 引腳採用全電壓喚醒計算機，但必須拉高從備用電源，以表明該卡是能夠喚醒。

**制式標準**
有RS-232接口的PCIe x1卡- 半高卡- Mini PCIe：用以代替Mini PCI卡（支援x1 PCIe、USB 2.0和SMBus總線接口）。- ExpressCard：類似PC卡接口標準（支援x1 PCIe、USB 2.0/3.0、熱插拔）。- PCI Express ExpressModule：支援熱插拔的接口標準，用於伺服器和工作站上。- XMC：類似CMC／PMC接口標準（支援x4 PCIe或串行RapidI/O）。- AdvancedTCA：用以代替Compact PCI卡，支援串行背板拓撲結構基礎。- AMC：AdvancedTCA規範的補充，支援處理器和I/O模塊在ATCA板上（x1、x2、x4或x8 PCIe）。- PCI Express外置接線。- Mobile PCI Express Module（MXM）英偉達所發明的圖形模塊規範。- Advanced eXpress I/O Module（AXIOM）圖形模塊，由ATI認可。- Thunderbolt- M.2
*U.2

**競爭協議**
基於高速序列構架產生了很多傳輸標準，包括HyperTransport、InfiniBand、RapidIO和StarFabric等等。這些標準均有業界的不同企業支援，背後也都有大量的資金投入標準的研究開發，所以每一標準都聲稱自己與眾不同，獨佔優勢。主要的差異在於可擴展性、靈活性與反應時間、單位成本的取捨平衡各不相同。其中的一個例子是在傳輸包上增加一個複雜的頭信息以支援複雜路由傳輸（PCI Express不支援這種方式）。這樣的信息增加降低了接口的有效帶寬也使傳輸更復雜，但是相應創造了新的軟件支援此功能。這種架構下需要軟件追蹤網絡拓撲結構的變化以實現系統支援熱插拔。InfiniBand和StarFabric標準即能實現這一功能。另一個例子是縮小信息包以減少反應時間。較小的信息包意味著包頭佔用了包的更大百分比，這樣又降低了有效帶寬。能實現此功能的標準是RapidIO和HyperTransport。PCI Express取中庸之道，定位於設計成一種系統互連接口而非一種設備接口或路由網絡協議。另外為了針對軟件透明，它的設計目標限制了它作為協議，也在某種程度上增加了它的反應時間。

**應用與前景**
技嘉GV-NX62TC256D8顯示卡，採用PCI Express x16插槽
在2005年，PCIe已近乎成為新的個人電腦主機板標準。關於此有不少評論，但最基本的原因是它對於軟件開發者完全透明——為PCI所設計的操作系統可以不做任何代碼修改來啟動PCIe設備。其二，它能增強系統性能，還有強有力的品牌認知。各類網卡、聲卡、顯卡，以及當下的NVMe固態硬碟都使用了PCIe標準。下面為主流的使用PCIe 的外設產品。

**顯卡**
大部分新型的AMD或NVIDIA顯卡都使用PCIe標準。NVIDIA在它新開發的SLI上採用PCIe的高速數據傳輸，這使得兩塊相同芯片組顯卡可同時工作於一臺電腦之上。AMD公司也基於PCIe開發一種兩個GPU一同運作的技術，稱為CrossFire。

**硬盤**
當下主流的固態硬盤介面有M.2、U.2、PCIe、SATA、SATA Express、SAS等。M.2和U.2可選PCIe介面。NVMe協議是目前最高效的PCIe SSD協議標準。

**參考文獻**

**參見**
 PCI- PCI-X- M.2- USB Type-C- Express Card- USB 3.1