KiPI Solver Guide

What power integrity analysis is, why it is worth doing before a board is built, and how KiPI's DC, thermal and AC solvers turn a PCB layout into voltages, currents, temperatures and impedances.

This page explains the ideas. The user guide explains every button, the setup and the results, and the README how to install KiPI.

What power integrity is

Every chip on a board needs its supply voltage held within a tolerance, typically a few percent, whatever current it draws. A voltage regulator (VRM) sets that voltage, but the chip does not sit at the regulator's pins: between them is the power distribution network (PDN), made of traces, planes, vias, the capacitors around the chip and the copper that carries the current back to ground.

That copper is not a perfect conductor. It has resistance, so a steady current drops voltage along the way, and it has inductance, so a current that changes quickly drops voltage too. Power integrity (PI) analysis predicts those drops and checks that what arrives at each chip is still in tolerance:

The whole budget is shared: a 1.0 V rail with ±3% tolerance has 30 mV to spend, split between the regulator's own accuracy, the DC drop and the AC ripple and droop.

Why it matters

Supply voltages have fallen while currents have risen. A processor core at 0.8 V and 40 A has a total tolerance of about 25 mV. At that current, a single milliohm of copper uses 40 mV, more than the whole budget. A rail that is out of tolerance rarely fails cleanly. Instead it causes intermittent resets, bit errors, jitter on clocks and serial links, and failures that come and go with temperature or workload. These faults are hard to find on the bench and expensive to fix with a respin.

The layout decides most of the PDN, through plane shapes, neck-downs, via counts and where the capacitors go. PI simulation looks at it before fabrication, while fixing a problem means moving copper rather than adding bodge wires.

What KiPI simulates

AnalysisAnswersResults
DC voltage dropDoes every load get enough voltage at its full current? Which copper and vias carry the most current?Voltage, current density and power density on every layer in 3D, current in every via, the voltage at every load pin, copper losses, and PASS/FAIL per load, VRM and via.
Electro-thermal (optional, with DC)How hot does the copper get, and how much does that raise its resistance and the drop?Board temperature map, the hottest copper per layer, and the DC results at that temperature.
AC PDN impedanceHow stiff is the supply seen by a chip, from kHz to hundreds of MHz? Does it meet the chip's target impedance?|Z|, R and X at each probe over frequency, against flat or custom targets, with each capacitor model's own curve.

All three use the same model of the board: the copper of each net on each layer, read from KiCad (or a board file), the stackup's thicknesses and materials, and a power tree you describe once. The power tree says which pads are VRM outputs, which are loads and what they draw, and which parts (sense resistors, ferrite beads, load switches) join one net to another.

The triangle mesh

Copper shapes on a real board are irregular: planes with antipads, traces that bend, thermal reliefs, pads of every shape. No formula gives the resistance of such a shape, so KiPI cuts it into many small triangles, works out how current flows across each one, and combines them. This is the finite element method (FEM).

via drill: a hole, its rim a ring of nodes load pad: nodes of its own one net on one layer
A mesh made by Triangle, as KiPI makes them: quality triangles that shrink toward the drill hole and the pad. KiPI's default mesh is finer than this.

KiPI meshes each net on each copper layer with Jonathan Shewchuk's Triangle, a quality Delaunay mesher:

The number of nodes (unknowns) sets the solve time, from thousands on a small board to millions on a large one with fine meshing. A coarser Max edge solves faster; a finer one resolves narrow necks and small planes better.

DC: voltage drop

At DC, current in a copper sheet flows from high to low voltage, spreading out wherever the copper is wider. The voltage V on the sheet obeys

∇·(Gs ∇V) = 0, with sheet conductance Gs = t / ρ

where t is the copper thickness and ρ its resistivity (1.72×10⁻⁸ Ω·m for copper at 20 °C). 1 oz copper (35 µm) has a sheet resistance of about 0.5 mΩ per square: any square of it, of any size, measures 0.5 mΩ edge to edge. A trace 0.2 mm wide and 20 mm long is 100 squares, or about 50 mΩ.

On each triangle the voltage is taken to vary linearly. That turns the equation into a small conductance matrix per triangle, like three resistors joining its corners. Adding them up gives one large sparse system G·V = I: the conductance matrix, the unknown node voltages, and the currents injected at the pads. Then:

Solving gives the voltage at every node. The current density comes from the voltage gradient, the via currents from the barrels, and the power lost in the copper from I²R summed over every triangle and barrel.

The power tree

Boards have more than one rail, and rails feed each other: a 12 V input feeds a buck to 3.3 V, which feeds an LDO to 1.8 V. KiPI solves them downstream first:

Tolerance analysis

Each load can have a tolerance: how far its supply may sit from the nominal voltage, as ± percent or in volts, taken from the load's datasheet. After the solve, KiPI checks every supply pin of the load. The worst pin's deviation from the VRM's set voltage (from DC drop on the rail, rise on ground, and a VRM load line if it has one) must be within the tolerance for the load to PASS. Any pin outside it makes the load FAIL, and the result tables show which pin and by how much.

Tolerance analysis answers "does this layout leave the chip enough margin?" rather than "what is the voltage?". Two points matter when choosing the number:

VRMs are checked too: whether the input left after the input rail's drop is still above the regulator's dropout and within its input range. A VRM that cannot hold its output fails every load downstream of it.

Electro-thermal co-simulation

The power lost in the copper, I²R, turns into heat. On a high-current rail that heat raises the board temperature by tens of degrees, and the heat from neighboring planes, regulators and loads adds to it. KiPI's thermal model spreads that heat across the whole board:

∇·(Gth ∇T) − 2h (T − Tamb) + q″ = 0

Through its thickness the board is taken as one temperature at each point. For FR4, the resistance across 1.6 mm is about a tenth of the resistance from the surface into the air, so the layers sit within a degree or two of each other.

Hot copper resists more

Copper's resistivity rises with temperature, by about 0.393% per °C near room temperature:

R(T) = R20 · (1 + α (T − 20 °C)), α ≈ 0.00393 /°C

Copper that runs 50 °C hotter than 20 °C has about 20% more resistance, and at 100 °C about 31% more. The physics behind it: as the copper heats, its atoms vibrate harder and scatter the electrons carrying the current more often.

That forms a loop: current heats the copper, the heat raises its resistance, more resistance means more drop and more I²R loss, and that loss heats it further. KiPI's co-simulation follows the loop:

  1. Solve the DC power tree at the current temperature map (20 °C everywhere at first).
  2. Gather every loss on the board onto one grid, and solve the board temperature.
  3. Set each triangle's resistivity from the temperature where it sits, and go back to step 1.

Each pass reports how much the peak temperature changed. On most boards it settles within a few passes, which is when DC drop and temperature agree. A rail that keeps heating from pass to pass is a warning in itself: its copper is too narrow for its current.

The temperature coefficient can be set per layer in the Stackup window, for conductors other than copper.

AC: PDN impedance

What PDN impedance is

Chips draw current in bursts: a processor that wakes up, an FPGA's clock that starts, an amplifier at full swing. The regulator's control loop corrects slowly, typically within tens or hundreds of kHz, so faster changes in current are supplied by the capacitors and the planes. How much the voltage moves for a given change in current depends on frequency:

ΔV(f) = Z(f) · ΔI(f)

PDN impedance Z(f) is the impedance a chip sees looking out of its power pins into the power supply network. It is the ratio of voltage change to current change, and it depends on every capacitor, plane and via between them and ground. It is a complex number at each frequency: KiPI shows its magnitude |Z| and its resistive and reactive parts.

|Z| (log) frequency (log) target bulk MLCCs plane anti-resonance package and via inductance
A typical PDN curve. Each group of capacitors pulls the impedance down near its resonance. Where one group hands over to the next, an inductance meets a capacitance and the impedance peaks (an anti-resonance). Above the plane's range, inductance wins.

A real capacitor is not a pure capacitance. It also has an equivalent series inductance (ESL, from its construction, termination, and mounting) and resistance (ESR). These factors vary greatly from capaitor to capacitor and case size to case size. Below its self-resonant frequency it acts as a capacitor and its impedance falls with frequency. Above it, it acts as an inductor and its impedance rises. That is why a PDN uses many values: bulk capacitors for low frequencies, many small ceramics for the middle, and the plane pair's own capacitance for the top. Where one hands over to the next, the curve has peaks (anti-resonances), and those peaks are where a rail is most likely to fail.

Target impedance

If the voltage may move by ΔV while the load steps by ΔI, the PDN must stay below the target impedance

Ztarget = ΔV / ΔI

up to the highest frequency in the step. A 1.0 V rail allowed 3% (30 mV) of transient for a 10 A step needs Ztarget = 3 mΩ. A step that rises in time tr has most of its energy below f ≈ 1 / (π·tr), which is how far the target applies. KiPI's target calculator works both out from the load's transient spec (after Smith et al., 1999). Some chip vendors publish a frequency-dependent target mask instead, which KiPI takes as corner points.

KiPI leaves the regulator out of the AC model and computes the open-loop PDN impedance. Below the regulator's control-loop bandwidth, the loop is assumed to hold the voltage. Above it, the loop is too slow, which is the range a target applies to, so you give each VRM's bandwidth and the targets are judged from there up. Other analysis methods can model the interaction with the control loop and the capacitive portion of hte PDN, this is called closed-loop analysis and is outside the scope of KiPI.

How KiPI models it

The AC solver uses the same triangle mesh, extended for the fields between rail and ground copper:

For two facing planes this is the classic plane-pair (cavity) model, so plane resonances come out of the mesh, as does the spreading inductance between a capacitor and the chip. The sweep factorizes the copper model at a few frequencies per decade, solves for every capacitor and probe port at once, interpolates that smoothly, and adds the capacitors at each of the many frequencies plotted. This keeps a sweep from 1 kHz to 300 MHz at a few hundred points per decade fast. Note this this creates a massive computational problem. AC solves can take a long time.

Effective vs nominal capacitance

The capacitance printed on a ceramic capacitor (MLCC) is measured at 1 kHz, 25 °C, with no DC voltage, when the part is new. On a board it is often much less. KiPI uses the capacitance you enter for each model, so enter the effective value at your rail's conditions. Four effects stack up:

EffectWhat happensTypical size
DielectricClass I dielectrics (C0G/NP0) are stable. Class II (X7R, X5R, X6S) use barium titanate, whose very high permittivity depends on temperature, voltage and time. The code gives the temperature range and the allowed change across it. Class III (Y5V, Z5U) varies far more.C0G: ±30 ppm/°C. X7R and X5R: ±15% over their range. Y5V: +22% / −82%.
DC biasA DC voltage across a class II dielectric aligns its ferroelectric domains, which then respond less to the AC signal, so the permittivity falls. Small cases and low voltage ratings have thinner layers, a stronger field at the same voltage, and lose the most. C0G does not have this effect.Often −30% to −80% at the rated voltage. A 10 µF 0402 6.3 V X5R part can keep under half its capacitance at 3.3 V. Good design practice dictates that a cap should only be exposed to half its rated voltage, for both safety factor purposes and to minimize DC bias impact.
AgingAfter a class II part last cooled through its Curie point (about 125 °C, as in reflow), its domains slowly relax and its capacitance falls logarithmically with time: the same loss each decade of hours. Heating above the Curie point resets it ("de-aging").X7R: about 1–2% per decade hour. X5R: about 3–5%. That is roughly 5–15% after a few years in the field.
Manufacturing toleranceParts are sold within a tolerance of the nominal value, coded by a letter (K = ±10%, M = ±20%).−10% or −20% at the low end.

The effects multiply. A worst case for that 10 µF X5R part on a 3.3 V rail at 85 °C:

10 µF × 0.45 (DC bias) × 0.85 (temperature) × 0.92 (aging) × 0.80 (tolerance) ≈ 2.8 µF

More than two thirds of the capacitance is gone. Lower capacitance raises the impedance below the part's resonance and moves the resonance up, by the square root of the ratio, while the inductance above resonance does not change. Capacitor makers publish DC-bias and temperature curves per part, and their online tools (Murata SimSurfing, TDK SEAT, KEMET K-SIM, Samsung's tool) give the capacitance, ESR and ESL at a chosen bias and temperature. Enter the manufacturer's delectric, tolerance, aging and DC bias factors. KiPI can work out how each impacts the PDN impedance.

Linear solvers and PARDISO

Every analysis ends in a large sparse system of equations, one unknown per mesh node. DC and thermal systems are symmetric positive definite; AC systems are complex. How KiPI solves them:

SolverHow it worksUsed for
SuperLU (SciPy)A sparse direct solver: it factorizes the matrix once, then each right-hand side is a fast forward and back substitution. Single-threaded. Always installed.Systems up to about 200k unknowns without PARDISO.
AMG-CGConjugate gradients, an iterative solver, preconditioned by algebraic multigrid (pyamg). Uses much less memory than a factorization, but has to iterate for every right-hand side.DC and thermal systems above the direct limit.
PARDISO (Intel MKL)A parallel sparse direct solver. It factorizes on every CPU core and handles complex systems too.Up to 1M unknowns, if installed.

PARDISO is an optional install (the pypardiso package). Its benefits:

The drawbacks: Intel MKL is about 600 MB installed, it exists only for x86-64 Windows and Linux (not macOS or ARM), and small boards, which solve in a second either way, gain little. That is why it is not installed by default. KiPI falls back to SuperLU on its own if PARDISO is missing, cannot load, or returns an inaccurate result, and the results are the same either way. Because PARDISO utilizes all cores, the machine running the simulation will really stretch its legs. Expect high CPU utilization and higher junction temperatures, at the gain of simulation speed. About → Copy version info says which solver is in use. See the README for how to add it.

What PI simulation finds

Design problems KiPI typically exposes, and where to look for each:

ProblemHow it showsTypical fix
Neck-downsA bright spot in the current density where a plane narrows between holes, or a pour squeezes past a connector.Widen the path, move the obstacle, add a parallel layer.
Too few viasVias over their current rating in the via table, or one via carrying most of the current while its neighbors idle.Add vias, spread them along the current's path.
Load out of toleranceA load FAILs; the voltage map shows where the drop is.Thicker copper, a wider pour, the VRM closer, or remote sense at the load, or add more parallel copper planes.
Ground dropThe ground net's own voltage map, with load grounds sitting tens of mV above the VRM.Solid ground under the current's path; no slots across it. More ground planes
Sense in the wrong placeThe sense point meets its set voltage while the far loads fail.Sense at the most critical (high current, tighter tolerance) load, or where the loads are grouped.
Hot spotsThe temperature map, the hottest copper per layer, and a drop that grows with each electro-thermal pass.More copper or layers, a wider path, airflow.
Anti-resonance peaks|Z| above the target between two capacitor groups, or where the plane resonates.Add intermediate values, change ESR, physically move capacitors in the layout.
Capacitors too far awayHigh impedance above a few MHz at the probe despite enough capacitance on the rail.Move capacitors next to the pins, shorten their vias, use thinner dielectric to ground. Consider smaller case size/lower ESR/lower ESL capacitors at load. Adding these at supply will do little.

What KiPI does not model

Like any simulation, the results are only as good as the setup. Check that the load currents are worst case, the capacitor values effective, and the stackup right. The tool is incredibly powerful with thoughtful and complete inputs.

Further reading