What expansion cards are for

An expansion card (also called an add-in card or adapter card) is a circuit board that plugs into an expansion slot on the motherboard to add a capability. The motherboard already does a lot on its own: it has network, audio, USB and storage connections built in, and many processors include graphics. So why add a card? There are three reasons:

  • A capability the board lacks: a second network port, a fiber connection, a video capture input, more USB-C ports.
  • A better version of something built in: a graphics card that is many times faster than the graphics in the processor, or a sound card with cleaner audio.
  • A replacement for something broken: when the onboard network port dies, a cheap card is quicker than a new motherboard.

Older standards such as PCI (Peripheral Component Interconnect) and AGP (Accelerated Graphics Port) are gone from current desktops. You may still meet a PCI slot on an old machine, but new cards are PCI Express.

PCI Express

PCI Express (PCIe) is the standard high-speed connection between the processor or chipset and the devices around it. It is used for expansion slots, but also for the M.2 slots that hold NVMe (Non-Volatile Memory Express) solid-state drives, and for many chips soldered on the board itself. The standard is maintained by PCI-SIG, the PCI Special Interest Group.

The old PCI bus was parallel and shared: all cards used the same 32 wires, and only one could talk at a time. PCIe is serial and point-to-point: each device gets its own private connection, called a link, and data travels as a fast stream of bits instead of many slow wires in step. That is why PCIe could keep getting faster where PCI could not.

A link is built from one or more lanes. A PCIe lane is two pairs of wires: one pair to send and one pair to receive. Because the two directions have their own wires, a lane sends and receives at the same time (full duplex), and every bandwidth figure below is per direction.

A link can have 1, 4, 8 or 16 lanes, written x1, x4, x8 and x16 (say "by one", "by sixteen"). More lanes means more bandwidth, the way more lanes on a road carry more cars. Typical widths:

  • x16: graphics cards, which move the most data.
  • x4: NVMe drives (in an M.2 slot or on an adapter card), fast network cards.
  • x1: network cards up to a few gigabits, sound cards, USB cards, Wi-Fi cards.
An x4 link between the processor or chipset and an expansion card. Each of the four lanes has one wire pair that sends toward the card and one wire pair that receives from it. CPU or chipset Expansion card x4 link Lane 0 Lane 1 Lane 2 Lane 3 send pair receive pair
An x4 link: four lanes, each with its own send pair and receive pair, so data flows both ways at full speed at the same time.

Lanes are a limited resource. The processor provides a fixed number (roughly 20 to 28 on current desktop processors, at the time of writing) and the chipset adds more, usually slower ones. The motherboard maker decides how to share them out, which is why a manual may say that filling a second M.2 slot disables two Serial ATA (SATA) ports, or that the second x16 slot runs at x4. Splitting one x16 group into x8 + x8 or x4 + x4 + x4 + x4 is called bifurcation; it is how a board feeds two graphics cards or a card holding four NVMe drives.

PCIe generations

Each PCIe generation roughly doubles the speed of a lane. The raw speed is given in gigatransfers per second (GT/s): how many billion signal steps per second a lane makes. Not every transferred bit is data, though. To keep the receiver in sync, bits are sent in coded blocks:

  • 8b/10b (PCIe 1.x and 2.x): every 8 data bits travel as 10 bits, so 20% of the line rate is overhead.
  • 128b/130b (PCIe 3.0 to 5.0): 128 data bits in 130, only about 1.5% overhead. This is why PCIe 3.0 at 8 GT/s is nearly twice as fast as PCIe 2.0 at 5 GT/s, even though the rate went up only 60%.
  • PAM4 and FLIT mode (PCIe 6.0): four-level pulse amplitude modulation (PAM4) sends two bits per signal step instead of one, and data moves in fixed-size packets called flow control units (FLITs) with built-in error correction.
Generation Rate per lane Encoding Per lane, per direction x16, per direction
PCIe 1.x 2.5 GT/s 8b/10b 250 MB/s 4 GB/s
PCIe 2.x 5 GT/s 8b/10b 500 MB/s 8 GB/s
PCIe 3.0 8 GT/s 128b/130b ≈ 0.98 GB/s ≈ 15.8 GB/s
PCIe 4.0 16 GT/s 128b/130b ≈ 1.97 GB/s ≈ 31.5 GB/s
PCIe 5.0 32 GT/s 128b/130b ≈ 3.94 GB/s ≈ 63 GB/s
PCIe 6.0 64 GT/s PAM4, FLIT ≈ 8 GB/s raw, a little less after FLIT overhead ≈ 128 GB/s raw

In this table 1 GB is 109 bytes. PCI-SIG often quotes the total of both directions, so its headline for PCIe 6.0 x16 is 256 GB/s; per direction that is 128 GB/s. At the time of writing, desktop boards offer PCIe 4.0 and 5.0; PCIe 6.0 appears in servers first, and the PCIe 7.0 specification (128 GT/s) has been published but is not in consumer products.

Calculating the bandwidth

Bandwidth per direction is: transfers per second × encoding efficiency × number of lanes ÷ 8 bits per byte. For PCIe 3.0 to 5.0 the efficiency is 128/130; for 1.x and 2.x it is 8/10. PCIe 6.0 is left out because its FLIT overhead depends on the details of the traffic. The results are theoretical maximums: real transfers lose a further few percent to packet headers and acknowledgements.

GENERATIONS = {
    # generation: (gigatransfers per second per lane, encoding efficiency)
    "1.0": (2.5, 8 / 10),
    "2.0": (5.0, 8 / 10),
    "3.0": (8.0, 128 / 130),
    "4.0": (16.0, 128 / 130),
    "5.0": (32.0, 128 / 130),
}


def bandwidth(generation, lanes):
    """Theoretical bandwidth in GB/s per direction (1 GB = 10**9 bytes)."""
    rate, efficiency = GENERATIONS[generation]
    data_bits = rate * 1e9 * efficiency * lanes  # useful bits per second
    return data_bits / 8 / 1e9                     # 8 bits per byte


for generation, lanes in [("3.0", 4), ("4.0", 4), ("4.0", 16), ("5.0", 16)]:
    print(f"PCIe {generation} x{lanes:<2}  {bandwidth(generation, lanes):6.2f} GB/s")
PCIe 3.0 x4     3.94 GB/s
PCIe 4.0 x4     7.88 GB/s
PCIe 4.0 x16   31.51 GB/s
PCIe 5.0 x16   63.02 GB/s

These numbers explain spec sheets you will see every day. An NVMe drive advertised at "up to 7,000 MB/s" is a PCIe 4.0 x4 drive running close to its 7.88 GB/s link limit; the same drive in a PCIe 3.0 M.2 slot tops out below 3.94 GB/s. See Storage for NVMe drives.

Physical slot size versus electrical lanes

A slot has a physical size (how long it is, which cards fit) and an electrical width (how many lanes are actually wired to it). They are often different. A common example: the second full-length x16 slot on a desktop board is wired for only x4 lanes, so the board maker can fit any card in it without spending 16 lanes. The manual or the text printed on the board tells you, often as "PCIEX16_2 (x4 mode)" or "x16 (x4)".

Outlines of the four PCIe slot sizes drawn to scale. All have the same short section with a key notch at the left; after the notch the x1 slot is short, the x4 longer, the x8 longer still, and the x16 slot is the longest. key notch x1 36 pins, about 25 mm x4 64 pins, about 39 mm x8 98 pins, about 56 mm x16 164 pins about 89 mm
The four PCIe slot sizes, to scale. The short section before the key notch is the same on all of them; the length after it grows with the number of lanes the slot can hold.

Which card fits where:

  • A smaller card in a larger slot always works: an x1 network card runs fine in an x16 slot.
  • A larger card in a smaller slot only fits if the slot is open-ended (the far end of the slot is open), and then it runs with the lanes the slot has. Most slots are closed at the end; never cut or force a card.

Backward compatibility

PCIe is compatible in both directions. A PCIe 4.0 card works in a PCIe 3.0 slot, and a PCIe 3.0 card works in a PCIe 5.0 slot. When the system starts, both ends train the link: they agree on the highest generation and the widest width that both support, and the slot's wiring sets the width limit.

RATE = {3: 8.0, 4: 16.0, 5: 32.0}   # GT/s per lane; all three use 128b/130b


def link(card, slot):
    """Both ends settle on the highest generation and width they share."""
    generation = min(card[0], slot[0])
    lanes = min(card[1], slot[1])
    gb_s = RATE[generation] * 128 / 130 * lanes / 8
    return generation, lanes, gb_s


card = (4, 16)                        # a PCIe 4.0 x16 graphics card
slots = [
    ("Top slot: PCIe 4.0, x16 wired", (4, 16)),
    ("Older board: PCIe 3.0, x16 wired", (3, 16)),
    ("Bottom slot: PCIe 3.0, x4 wired", (3, 4)),
]

for name, slot in slots:
    generation, lanes, gb_s = link(card, slot)
    print(f"{name:<34} PCIe {generation}.0 x{lanes:<2}  {gb_s:5.2f} GB/s")
Top slot: PCIe 4.0, x16 wired      PCIe 4.0 x16  31.51 GB/s
Older board: PCIe 3.0, x16 wired   PCIe 3.0 x16  15.75 GB/s
Bottom slot: PCIe 3.0, x4 wired    PCIe 3.0 x4    3.94 GB/s

The card works in all three places, which is exactly the trap: a graphics card in the wrong slot does not fail, it just performs worse. For a graphics card, the drop from PCIe 4.0 x16 to 3.0 x16 is usually small in practice; the drop to x4 is often noticeable.

Graphics: integrated and dedicated

What a GPU does

A graphics processing unit (GPU) is a processor built for doing the same calculation on huge amounts of data at once. Drawing a frame means working out the color of millions of pixels, many times per second, and each pixel can be computed largely independently. A central processing unit (CPU) has a handful of powerful cores for varied work; a GPU has thousands of simpler cores that work in parallel. The GPU renders 3D scenes, decodes and encodes video (so a 4K film plays without loading the CPU), and drives the display outputs.

The same parallel design makes GPUs the standard hardware for training and running artificial intelligence (AI) models, which consist mostly of very large matrix multiplications.

Integrated graphics

Integrated graphics is a GPU built into the processor package (older designs put it in the chipset). It has no memory of its own: it borrows part of the system random-access memory (RAM), a region you can sometimes size in the firmware setup as "shared memory" or "UMA frame buffer". Integrated graphics use little power, cost nothing extra and are fast enough for office work, web browsing and video. Most laptops and business desktops use nothing else.

The video ports on a desktop motherboard's rear panel, High-Definition Multimedia Interface (HDMI) and DisplayPort, are connected to the integrated graphics. They only work if the installed processor actually has integrated graphics, and many systems switch them off when a dedicated card is present.

Dedicated graphics cards

A dedicated (discrete) graphics card has its own GPU, its own memory and its own cooling, and sits in a PCIe x16 slot. It is needed for gaming, 3D design, video editing, many monitors at high resolution, and AI work. Laptops can have a dedicated GPU too, soldered to the mainboard; they usually switch between the integrated GPU (to save battery) and the dedicated one (for heavy work) automatically.

VRAM

Video RAM (VRAM) is the memory on a graphics card, used only by its GPU. It holds the frames being drawn and everything needed to draw them: textures, 3D models, and for AI work the model itself. VRAM is usually graphics double data rate (GDDR) memory, such as GDDR6 or GDDR7, designed for very high bandwidth; data-center GPUs use stacked high bandwidth memory (HBM). Because it sits right next to the GPU on a wide bus, a graphics card can move data far faster than system RAM allows.

The amount of VRAM matters when a job does not fit: high resolutions and detailed textures in games, large video projects, or AI models that must be loaded entirely into VRAM. When VRAM runs out, data spills over into system RAM across the PCIe link, which is much slower, and performance drops sharply. VRAM cannot be upgraded; it is soldered to the card.

Power for graphics cards

A PCIe x16 slot can deliver up to 75 W. A modest graphics card runs on that alone; a powerful one can draw several hundred watts and needs extra power cables straight from the power supply:

Source Maximum power
PCIe x16 slot 75 W
6-pin PCIe power connector 75 W
8-pin (6+2) PCIe power connector 150 W
12VHPWR / 12V-2x6 (16-pin) connector up to 600 W

A card with two 8-pin connectors can therefore draw up to 75 + 150 + 150 = 375 W. Every connector on the card must be plugged in; a missing one usually means no picture or a warning on screen. The 16-pin connector must be pushed in completely: a partly seated plug has caused melted connectors. The card maker's recommended power supply wattage covers the whole system, not just the card. See Power Supplies and Power for connectors and power budgets.

Other common expansion cards

Network interface cards

A network interface card (NIC) adds Ethernet ports, often faster ones than the board has (2.5, 10 or 25 Gbit/s), or fiber ports through small form-factor pluggable (SFP) transceivers. Servers often get a card with two or four ports. Wi-Fi cards are NICs too, with antenna connectors on the bracket. See Cabling and the Physical Layer for the cables and transceivers.

Sound cards

Onboard audio is good enough for most users. A sound card adds cleaner analog outputs (less electrical noise from inside the case), more inputs and outputs, or professional connectors. Many musicians and podcasters use an external USB audio interface instead, which does the same job outside the noisy case.

Capture cards

A capture card records or streams a video signal from another device, such as a game console or camera, through an HDMI input. It is an input, not a display output: plugging a monitor into it shows nothing. External USB capture devices do the same job for laptops.

Storage controllers and HBAs

A storage controller card adds drive connections. Simple ones add SATA ports; a host bus adapter (HBA) connects many SATA or SAS (Serial Attached SCSI) drives in a server and passes them to the operating system unchanged; a RAID controller combines drives itself (see RAID). Adapter cards that hold one to four M.2 NVMe drives are also common; a four-drive card needs an x16 slot with bifurcation enabled in the firmware.

USB and other port cards

A USB expansion card adds ports or newer USB versions to an older desktop, for example USB-C at 10 or 20 Gbit/s. Some faster cards need an extra power cable from the power supply to power the devices plugged into them. See Ports, Connectors and Cables for USB versions.

Riser cards

A riser card plugs into a slot and turns it by 90 degrees, so cards lie parallel to the motherboard. It is used where there is no room for upright cards: slim desktops and rack servers (a 1U server is only 44.45 mm high). A riser cable does the same with a flexible ribbon, for example to mount a graphics card vertically. A cheap or too-long riser cable can force the link down to a lower PCIe generation.

Installing an expansion card

  1. Check compatibility first: a free slot of the right size and wiring, room in the case (length and thickness of the card), power supply capacity and connectors, and driver support for the operating system.
  2. Power off and unplug the computer. Switching off is not enough; the power supply keeps some parts powered while the cable is in.
  3. Protect against electrostatic discharge (ESD): use an antistatic wrist strap connected to the case, and hold the card by its edges and bracket, never by the gold contacts. See Safety and Handling.
  4. Remove the slot cover on the back of the case, then press the card straight into the slot until the latch at the end clicks (x16 slots have one). Fasten the bracket with its screw.
  5. Connect power cables if the card has connectors, and support a heavy graphics card if it sags.
  6. Start and install the driver. The operating system often has a basic driver, but the manufacturer's current driver gives full performance and features. See Peripherals and Input Devices for what drivers do.

Because a card works even when it negotiated a narrower or slower link, it helps to check. On Linux, lspci lists PCIe devices, and with -vv shows what the device can do (LnkCap, link capability) and what it is running at (LnkSta, link status). The output below is illustrative:

lspci | grep -i vga
sudo lspci -s 01:00.0 -vv | grep -E 'LnkCap:|LnkSta:'
01:00.0 VGA compatible controller: NVIDIA Corporation AD104 [GeForce RTX 4070] (rev a1)
		LnkCap:	Port #0, Speed 16GT/s, Width x16, ASPM L1, Exit Latency L1 <4us
		LnkSta:	Speed 2.5GT/s (downgraded), Width x16

The width is the full x16, as it should be. The speed of 2.5 GT/s looks alarming but is normal at idle: graphics cards drop the link to a low speed to save power and raise it under load. Run the check again while the card is busy. A width lower than expected (x8 or x4 on an x16 card in the top slot) is the real warning sign: a badly seated card, dirt in the slot, or a second card or M.2 drive taking lanes. On Windows, tools from the GPU maker, or free system information utilities, show the same "bus interface".