---
title: PCIe and High-Speed Interconnects
url: https://doc.liz6.com/en/hardware/06-interfaces-and-communication/04-pcie-and-high-speed-interconnects
locale: en
area: hardware
tags:
- hardware
- interfaces-and-communication
date: 2026-06-30
modified: 2026-07-16
description: PCIe and High-Speed Interconnects What is PCIe PCIe (PCI Express) — The high-speed serial bus in modern computers, connecting the CPU to peripherals such as GPU…
---

# PCIe and High-Speed Interconnects

## What is PCIe

**PCIe (PCI Express)** — The high-speed serial bus in modern computers, connecting the CPU to peripherals such as GPUs, SSDs, and network cards.

<svg viewBox="0 0 720 360" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system,'Source Han Sans CN','Microsoft YaHei',sans-serif" role="img" aria-label="PCIe Tree Topology: Device Hierarchy under a Single Root Complex">
  <rect width="720" height="360" fill="#ffffff"/>
  <text x="360" y="28" text-anchor="middle" font-size="17" font-weight="700" fill="#1f2933">PCIe Tree Topology: Device Hierarchy under a Single Root Complex</text>

  <rect x="315" y="50" width="90" height="36" rx="6" fill="#4f46e5"/>
  <text x="360" y="73" text-anchor="middle" font-size="13" font-weight="700" fill="#ffffff">CPU</text>

  <line x1="360" y1="86" x2="360" y2="96" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="220" y1="96" x2="520" y2="96" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="220" y1="96" x2="220" y2="100" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="520" y1="96" x2="520" y2="100" stroke="#94a3b8" stroke-width="1.5"/>

  <rect x="165" y="100" width="110" height="38" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="220" y="123" text-anchor="middle" font-size="12" font-weight="700" fill="#3730a3">PCIe RC</text>
  <rect x="445" y="100" width="150" height="38" rx="6" fill="#e2e8f0"/>
  <text x="520" y="123" text-anchor="middle" font-size="11" fill="#475569">Memory Controller</text>

  <line x1="220" y1="138" x2="220" y2="150" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="140" y1="150" x2="300" y2="150" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="140" y1="150" x2="140" y2="155" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="300" y1="150" x2="300" y2="155" stroke="#94a3b8" stroke-width="1.5"/>

  <rect x="95" y="155" width="90" height="36" rx="6" fill="#f0fdfa" stroke="#99f6e4"/>
  <text x="140" y="177" text-anchor="middle" font-size="12" font-weight="700" fill="#115e59">Switch</text>
  <rect x="235" y="155" width="130" height="36" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="300" y="171" text-anchor="middle" font-size="11" font-weight="700" fill="#3730a3">Endpoint</text>
  <text x="300" y="185" text-anchor="middle" font-size="10" fill="#4f46e5">(GPU)</text>

  <line x1="140" y1="191" x2="140" y2="200" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="70" y1="200" x2="210" y2="200" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="70" y1="200" x2="70" y2="205" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="140" y1="200" x2="140" y2="205" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="210" y1="200" x2="210" y2="205" stroke="#94a3b8" stroke-width="1.5"/>

  <rect x="40" y="205" width="60" height="36" rx="5" fill="#e2e8f0"/>
  <text x="70" y="227" text-anchor="middle" font-size="11" fill="#334155">EP</text>
  <rect x="110" y="205" width="60" height="36" rx="5" fill="#e2e8f0"/>
  <text x="140" y="227" text-anchor="middle" font-size="11" fill="#334155">EP</text>
  <rect x="180" y="205" width="60" height="36" rx="5" fill="#e2e8f0"/>
  <text x="210" y="227" text-anchor="middle" font-size="11" fill="#334155">EP</text>
  <text x="140" y="255" text-anchor="middle" font-size="11" fill="#64748b">(NVMe SSD, Network Card...)</text>

  <rect x="40" y="270" width="640" height="68" rx="8" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="56" y="292" font-size="12.5" fill="#3730a3">RC = Root Complex (typically within the CPU or PCH); Switch = Switching chip, expands more PCIe ports downwards</text>
  <text x="56" y="314" font-size="12.5" fill="#3730a3">EP = Endpoint (end device), i.e., the terminal devices such as NVMe SSDs and network cards connected under the Switch</text>
</svg>

---

## Lanes and Generations

### Lane
```
The minimum unit of PCIe is 1 Lane

x1:  1 lane
x4:  4 lanes (Common: NVMe SSD)
x8:  8 lanes
x16: 16 lanes (Common: GPU)

Each Lane is an independent full-duplex serial link
  TX+/TX- (Transmit) + RX+/RX- (Receive) = 4 signal lines per Lane

Physically, x16 = 64 signal lines (16×4)
```

### Speeds by Generation

| Gen | Rate/Lane (Unidirectional) | Bandwidth/Lane (Bidirectional) | x16 Bandwidth | Year |
|-----|-------------------|-------------------|----------|------|
| 1.0 | 2.5 GT/s | 250 MB/s | 4 GB/s | 2003 |
| 2.0 | 5.0 GT/s | 500 MB/s | 8 GB/s | 2007 |
| 3.0 | 8.0 GT/s | ~1 GB/s | ~16 GB/s | 2010 |
| 4.0 | 16.0 GT/s | ~2 GB/s | ~32 GB/s | 2017 |
| 5.0 | 32.0 GT/s | ~4 GB/s | ~64 GB/s | 2019 |
| 6.0 | 64.0 GT/s | ~8 GB/s | ~128 GB/s | 2022 (Just Commercialized) |

```
8b/10b (Gen1/2): 2.5 GT/s × 8/10 = 2 Gbps = 250 MB/s
128b/130b (Gen3+): 8 GT/s × 128/130 ≈ 7.88 Gbps ≈ 985 MB/s
→ Encoding overhead is significantly reduced for Gen3+

"GT/s" = Gigatransfers per second (includes encoding overhead)
"GB/s" = Gigabytes per second of effective data
```

### Common Configurations
```
Typical PCIe Lanes for Consumer CPUs:
  AMD Ryzen: 24~28 lanes (4 connect to PCH, 16+4 for GPU+NVMe)
  Intel Core: 16~20 lanes (4 connect to PCH)

Graphics Cards: x16 Gen4/5 (but x8 is usually sufficient, with only 1~3% performance loss)
NVMe SSDs: x4 Gen4/5 (Gen4 x4 = ~8 GB/s)
10GbE Network Cards: x4 Gen3
```

### Backward Compatibility
```
Gen4 devices can be inserted into Gen3 slots → Speed drops to Gen3
Gen3 devices can be inserted into Gen4 slots → Operate at Gen3

Link Training:
  Upon power-on, both ends automatically negotiate → Determine the highest speed and maximum number of lanes supported
```

---

## Physical Layer

### Signals
```
Per Lane:
  TX+ TX- : Differential Transmit (AC coupled, capacitor blocks DC)
  RX+ RX- : Differential Receive (AC coupled)

Reference Clock: 100MHz (HCSL or LVDS differential)
  Common Clock (Source Synchronous) or Separate Clock (Independent)
  Currently, SRIS (Separate Refclk Independent SSC) is mostly used

Gen3+ uses 128b/130b encoding + scrambling
No separate clock line; the receiver recovers the clock from the data (CDR)
```

### PCB Design Key Points
```
PCIe Traces:
  - Differential pairs must be length-matched (P/N skew <5mil)
  - Characteristic Impedance: 85Ω differential (Gen3), sometimes 100Ω
  - Avoid reference plane discontinuities (crossing splits)
  - AC coupling capacitors (100nF~220nF) should be placed close to the transmitter
  - Minimize vias (each via disrupts impedance)
```

---

## PCIe Protocol Layers

```
Three-Layer Model:

Transaction Layer:
  Generates/Consumes TLPs (Transaction Layer Packets)
  Address routing / ID routing / Implicit routing

Data Link Layer:
  Ensures reliable transmission
  ACK/NAK, Retransmission, CRC Checksum
  Generates/Consumes DLLPs (Data Link Layer Packets)

Physical Layer:
  8b/10b or 128b/130b encoding
  Serial-to-Parallel conversion, Link Training
```

---

## Common Applications

### NVMe over PCIe
```
The NVMe protocol runs over PCIe
AHCI (the traditional protocol for SATA) runs over PCIe → Replaced by NVMe

NVMe Advantages:
  - 64K Queue Depth (AHCI is only 32)
  - 64K Queues (AHCI is only 1)
  - Lower Latency (no need to access the SATA controller)
```

### GPU Connection
```
Consumer GPUs: x16 PCIe Direct Connect to CPU
  Gen3 x16 = 16 GB/s (RTX 20/30 Series)
  Gen4 x16 = 32 GB/s (RTX 40 Series)
  Gen5 x16 = 64 GB/s (RTX 50 Series)

Reality: In gaming scenarios, Gen3 x8 has almost no performance loss.
         Gen4 for consumer GPUs is mainly for future headroom.
         High bandwidth is more critical for compute/ML scenarios (Multi-GPU interconnects).
```

### Resizable BAR (Smart Access Memory)
```
Traditional: CPU can only access GPU VRAM through a 256MB BAR window
ReBAR: CPU can map all GPU VRAM at once → Reduces copying, improves performance

Requirements: BIOS Support + GPU Driver Support + PCIe Support
```

---

## Connection to CPU

<svg viewBox="0 0 720 410" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system,'Source Han Sans CN','Microsoft YaHei',sans-serif" role="img" aria-label="PCIe Connection to CPU: Direct Connect vs. via PCH, Intel vs. AMD Comparison">
  <rect width="720" height="410" fill="#ffffff"/>
  <text x="360" y="28" text-anchor="middle" font-size="17" font-weight="700" fill="#1f2933">PCIe Connection to CPU: Direct Connect vs. via PCH (Intel / AMD Comparison)</text>

  <rect x="20" y="51" width="60" height="20" rx="5" fill="#334155"/>
  <text x="50" y="65" text-anchor="middle" font-size="11" font-weight="700" fill="#ffffff">Intel</text>

  <rect x="85" y="60" width="110" height="34" rx="6" fill="#4f46e5"/>
  <text x="140" y="81" text-anchor="middle" font-size="13" font-weight="700" fill="#ffffff">CPU</text>
  <rect x="485" y="60" width="130" height="34" rx="6" fill="#0d9488"/>
  <text x="550" y="81" text-anchor="middle" font-size="12" font-weight="700" fill="#ffffff">PCH (Chipset)</text>
  <line x1="195" y1="77" x2="485" y2="77" stroke="#94a3b8" stroke-width="1.5"/>
  <text x="340" y="70" text-anchor="middle" font-size="11" fill="#64748b">DMI (Essentially PCIe x8)</text>

  <line x1="140" y1="94" x2="140" y2="106" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="70" y1="106" x2="225" y2="106" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="70" y1="106" x2="70" y2="118" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="225" y1="106" x2="225" y2="118" stroke="#94a3b8" stroke-width="1.5"/>
  <rect x="5" y="118" width="130" height="34" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="70" y="139" text-anchor="middle" font-size="11" font-weight="700" fill="#3730a3">PCIe x16 (Direct Connect)</text>
  <rect x="145" y="118" width="160" height="34" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="225" y="139" text-anchor="middle" font-size="11" font-weight="700" fill="#3730a3">PCIe x4 (NVMe Direct Connect)</text>

  <line x1="550" y1="94" x2="550" y2="106" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="470" y1="106" x2="630" y2="106" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="470" y1="106" x2="470" y2="118" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="630" y1="106" x2="630" y2="118" stroke="#94a3b8" stroke-width="1.5"/>
  <rect x="385" y="118" width="170" height="34" rx="6" fill="#f0fdfa" stroke="#99f6e4"/>
  <text x="470" y="139" text-anchor="middle" font-size="10" font-weight="700" fill="#115e59">SATA/USB/Ethernet/WiFi</text>
  <rect x="555" y="118" width="150" height="34" rx="6" fill="#f0fdfa" stroke="#99f6e4"/>
  <text x="630" y="139" text-anchor="middle" font-size="11" font-weight="700" fill="#115e59">More PCIe Lanes</text>

  <rect x="20" y="216" width="60" height="20" rx="5" fill="#334155"/>
  <text x="50" y="230" text-anchor="middle" font-size="11" font-weight="700" fill="#ffffff">AMD</text>

  <rect x="85" y="225" width="110" height="34" rx="6" fill="#4f46e5"/>
  <text x="140" y="246" text-anchor="middle" font-size="13" font-weight="700" fill="#ffffff">CPU</text>
  <rect x="485" y="225" width="130" height="34" rx="6" fill="#0d9488"/>
  <text x="550" y="246" text-anchor="middle" font-size="12" font-weight="700" fill="#ffffff">PCH</text>
  <line x1="195" y1="242" x2="485" y2="242" stroke="#94a3b8" stroke-width="1.5"/>
  <text x="340" y="235" text-anchor="middle" font-size="11" fill="#64748b">PCIe x4 (IF Bus)</text>

  <line x1="140" y1="259" x2="140" y2="271" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="70" y1="271" x2="225" y2="271" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="70" y1="271" x2="70" y2="283" stroke="#94a3b8" stroke-width="1.5"/>
  <line x1="225" y1="271" x2="225" y2="283" stroke="#94a3b8" stroke-width="1.5"/>
  <rect x="5" y="283" width="130" height="34" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="70" y="304" text-anchor="middle" font-size="11" font-weight="700" fill="#3730a3">PCIe x16/x8</text>
  <rect x="145" y="283" width="160" height="34" rx="6" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="225" y="304" text-anchor="middle" font-size="11" font-weight="700" fill="#3730a3">PCIe x4 (NVMe)</text>

  <line x1="550" y1="259" x2="550" y2="283" stroke="#94a3b8" stroke-width="1.5"/>
  <rect x="450" y="283" width="200" height="34" rx="6" fill="#f0fdfa" stroke="#99f6e4"/>
  <text x="550" y="298" text-anchor="middle" font-size="11" font-weight="700" fill="#115e59">Similar to Intel Topology</text>
  <text x="550" y="311" text-anchor="middle" font-size="9.5" fill="#0f766e">(SATA/USB/More Lanes)</text>

  <rect x="40" y="330" width="640" height="64" rx="8" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="56" y="352" font-size="12.5" fill="#3730a3">PCIe Direct Connect to CPU (Independent x16 GPU, CPU Direct NVMe) = Lower Latency, Best for GPU/NVMe;</text>
  <text x="56" y="374" font-size="12.5" fill="#3730a3">PCIe via PCH (SATA/USB/Network Cards, etc.) = Shares DMI/IF Bus Bandwidth, then uplinks to CPU.</text>
</svg>

---
*Keywords: PCIe, Lane, GT/s, NVMe, Root Complex, Endpoint, Differential Signal, ReBAR, Gen*
