Controlled impedance means designing a trace so its characteristic impedance hits a specific target — usually 50Ω single-ended, or 90Ω/100Ω for a differential pair. You get there by matching three things: the signal, the board stackup, and the trace geometry. KiCad has the tools to do all of it in-house.
Short answer: Get your fab's real stackup (dielectric heights, Er, copper weight), enter it into KiCad's impedance calculator to solve for the trace width that gives your target impedance, then put those nets in a net class set to that width and route with the interactive router. The fab's stackup — not KiCad's defaults — is the source of truth.
What controlled impedance is and when you need it
At low speeds, a trace is just a wire and its impedance doesn't matter. Once edge rates get fast enough that the trace behaves like a transmission line, impedance mismatches cause reflections, ringing, and failed signal integrity. That's when you need controlled impedance.
The usual suspects:
- USB (High-Speed and up) — 90Ω differential
- Ethernet — 100Ω differential
- HDMI, PCIe, SATA, MIPI — differential pairs, typically 90–100Ω
- DDR memory — 40–50Ω single-ended, plus tight length matching
- RF — 50Ω single-ended is the near-universal convention
If your design has any of these, the manufacturer needs to build your board to hold those impedances, and your layout has to route the traces at the geometry that produces them.
How impedance depends on the stackup
A trace's impedance isn't a property of the trace alone — it's the trace plus the dielectric between it and its reference plane. Four factors dominate:
- Trace width — wider trace, lower impedance.
- Dielectric height — the distance from the trace to its reference (ground/power) plane. Thinner dielectric, lower impedance.
- Copper weight — 1oz vs 2oz changes the trace's cross-section and shifts impedance slightly.
- Dielectric constant (Er) — the FR4 property that sets how the field couples; typically ~4.2–4.5 for standard FR4, but it varies by material and by frequency.
For differential pairs, the spacing between the two traces adds a fifth variable (coupling), which sets the differential impedance alongside each trace's single-ended value.
The practical consequence: you cannot pick a trace width in isolation. A 0.3mm trace might be 50Ω on one stackup and 60Ω on another. You need the stackup first.
Using KiCad's stackup and impedance calculator
KiCad gives you two built-in tools.
Board Setup → Physical Stackup. This is where you define your layer stack: how many copper layers, the dielectric thickness between each, the Er of each dielectric, and copper weights. Set the layer count and thicknesses to match what your fab will actually build. The stackup editor shows an impedance estimate per layer as you go.
Calculator Tools → Transmission Line. This is the dedicated impedance solver. Pick the geometry (microstrip for outer layers, stripline for inner layers), enter the dielectric height, Er, copper thickness, and either solve for impedance from a width or sweep the width to hit a target. Use the differential mode to solve width and spacing together for a pair.
The workflow is: enter your stackup numbers, set the target impedance, and read off the trace width (and spacing, for pairs). Write those numbers down — they become your net class settings.
Common impedance targets
These are the targets you'll design to most often. The geometry that hits them is always stackup-specific, so treat these as the "what," and the calculator as the "how."
| Signal type | Target impedance | Configuration |
|---|---|---|
| RF / general single-ended | 50Ω | Single-ended |
| DDR single-ended | 40–50Ω | Single-ended |
| USB High-Speed | 90Ω | Differential pair |
| Ethernet | 100Ω | Differential pair |
| HDMI / PCIe / SATA | 90–100Ω | Differential pair |
Get real numbers from your fab
Here's the part people skip: KiCad's default stackup is a placeholder. The dielectric heights and Er values it ships with are generic and won't match what your manufacturer actually presses. If you route to KiCad's defaults and the fab builds on a different stack, your impedance is off.
So before you route:
- Ask your fab for their controlled-impedance stackup for your layer count. Most manufacturers (JLCPCB included) publish standard impedance-controlled stackups with exact dielectric heights, Er at the relevant frequency, and copper weights.
- Enter those numbers into KiCad's stackup editor and calculator.
- When you order, request a controlled-impedance quote and specify your targets (e.g. "50Ω single-ended, 90Ω USB diff pairs"). The fab tunes their process and often adds a test coupon to verify.
The fab's stackup is the source of truth. Always.
Route to the calculated width with net classes
Once the calculator gives you a width, you don't want to hand-set it trace by trace. Use net classes.
Create a net class for each impedance target — say a USB_90 class and an RF_50 class — assign the relevant nets to each, and set the class's track width (and, for pairs, the gap) to the values from the calculator. Now the interactive router holds that width automatically as you route, and the differential-pair router respects the gap. Your DRC also flags anything that drifts off-target.
If net classes are new to you, our guide to KiCad net classes and design rules walks through setting them up. And if you want a refresher on how layers and dielectrics fit together before you tune impedance, start with PCB stackup basics.
Verify in your manufacturing outputs
After routing, it's worth confirming the whole package is consistent — the stackup you designed to, the trace widths you actually routed, and the fab notes that tell the manufacturer your impedance targets. This is exactly the kind of thing that's easy to let drift between revisions.
That's where GoForFab helps: connect your KiCad project and every push regenerates the full manufacturing package with kicad-cli — Gerbers, drill files, BOM, CPL, DRC/ERC reports, and 3D renders — so the outputs you send your fab always match the board you just routed. It's free forever for solo work, so you can keep your controlled-impedance designs reproducible without adding a step to your workflow.
Controlled impedance isn't hard — it's just a chain that has to stay consistent: fab stackup → calculator → net class → router → outputs. Keep every link in sync and your high-speed nets come out right the first time.