KiPI User Guide

How to set up, solve and read power integrity simulations of a KiCad board. Every section below can be opened and closed; use the contents on the left to jump around.

Tip: almost every button, box and table in KiPI has a tooltip. Hover over it for a one-line reminder of what it does. Press F1 in KiPI to open this guide.

What KiPI does

KiPI is a power integrity (PI) analyzer that runs as a KiCad 9/10 plugin. It reads the copper of your board straight from the PCB editor and simulates how power gets from your regulators to the parts that use it. It also runs standalone, without KiCad, on board files. It has two analysis modes, chosen at the right end of the toolbar:

New to power integrity? The Solver Guide explains what PI analysis is, why it matters, and how the mesh and the DC, thermal and AC solvers work.

ModeQuestion it answersWhat you get
DCWith every load drawing its current, what voltage actually reaches each pin, how much current flows through each trace, plane and via, and how hot does the board get?IR drop and PASS/FAIL per load, voltage, current density, power density, via current and temperature maps in 3D, VRM and loss tables, an optional HTML report.
ACLooking into a device's power pins, how does the impedance of the power distribution network (planes, vias, decoupling capacitors) vary with frequency, and is it below the device's target impedance?|Z| versus frequency curves for each probe point, a cursor to read values off them, and PASS/FAIL against a flat or custom target mask.

KiPI infers nothing about your power system from the schematic. You tell it where the regulators are, what each load draws, which parts sit in series between nets, and (for AC) which capacitor model each decoupling capacitor uses. The board's copper, layer stackup, vias and pads come from KiCad.

Accuracy: KiPI's solvers are a 2.5D finite element model of the copper, checked against closed-form results. Solving the field is the well-understood part; the modelling of vias, regulators and parts is where the approximations are. Treat the results as an engineering estimate and sanity-check anything surprising.

Quick start

DC voltage drop in ten minutes the most common first run
  1. In KiCad, enable Preferences → Plugins → Enable KiCad API (once).
  2. Open your board in the PCB editor and click the KiPI toolbar button. KiPI reads the board (refilling zones first) and draws it in 3D.
  3. In the Nets list on the left, tick the power and ground nets you want to analyze. KiPI pre-ticks a guess the first time.
  4. In the PI setup panel on the right, VRMs tab: click Add, pick the regulator's output net and part, set its voltage. Add its Ground pins if you want the ground return solved too.
  5. Loads tab: click Add for each part that draws current, pick its supply pins, enter its current and a tolerance (e.g. ±3 %).
  6. If a sense resistor, ferrite, fuse or load switch sits between two nets you ticked, add it on the Series links tab.
  7. Click Solve all. Watch the log at the bottom.
  8. Read the Loads table for PASS/FAIL, and click around the 3D view to probe voltages. Switch the field to Current density and tick Arrows to find bottlenecks.

The setup is saved next to your board as <board>.kipi-setup.yml every time you solve, so the next session starts where you left off.

AC impedance of one rail after the DC setup has a VRM on the rail
  1. Switch Mode (right end of the toolbar) to AC. The setup panel becomes the AC setup; VRMs and series links are shared with DC.
  2. Make sure the rail's net, its ground and every net its capacitors connect to are ticked in the Nets list.
  3. Capacitors tab: click Models from values to make one model per capacitor value, then enter each model's ESL and ESR from the datasheet (and check the capacitance).
  4. Probes tab: click Add. KiPI picks the busiest part on the rail that also has ground pins, which is usually the load. Or click From DC load and pick a DC load: the probe gets that load's supply and ground pins. Set a target impedance, or open the target calculator.
  5. Under the tabs, choose the Rail (by its VRM) and Ground, then click Solve rail.
  6. The Impedance tab in the middle shows |Z| against frequency. Click a curve to place a cursor and read the values in the Info box.
Try it without a board of your own

The repository includes an example: a 4-phase 12 V → 0.9 V, 40 A core rail with decoupling and probes already set up. From a development checkout run

python -m kipi examples/multiphase_buck/multiphase_buck.kipi.json.gz

which opens it in standalone KiPI, or open that file with Open… (standalone) or Open snapshot… (the plugin).

The main window

KiPI main window with nets on the left, the board in 3D and the PI setup on the right
The main window in DC mode.

The Board, setup and Log panels are dock widgets: drag their title bars to move them or float them in their own windows.

Starting KiPI

Typing values

A number on its own is in the field's unit. Fields in an SI unit (Ω, F, H, Hz, A, V, W, m) also take a prefix, with or without the unit, and convert it to the field's unit: in a µF field, 10n, 10 nF and 0.01 are all 10 nF. A resistance can be written 2 mOhm, 2mΩ or 4k7. Prefixes are case sensitive (m is milli, M is mega), and u stands for µ. Fields in other units (%, °C, A/µs, µΩ·cm) take plain numbers. A field shows its usual number of decimals, plus more when a small typed value needs them.

Toolbar

Every toolbar button
ButtonWhat it does
Load from KiCad
plugin
Re-reads the board from the running PCB editor (after you change the layout) and reloads the saved setup. The nets you have ticked stay ticked. Save the setup first if you have unsaved changes. Only one KiCad may be open (see Starting KiPI).
Refill zones
plugin
When ticked, KiPI asks KiCad to refill every zone and waits for it before reading. KiPI only sees filled copper, so leave this on unless the fills are already current and the refill is slow.
Open snapshot…
plugin
Opens a board saved with Save snapshot…. KiCad does not need to be running.
Open…
standalone
Opens a board file: a KiCad board (.kicad_pcb), an ODB++ job (.zip, .tgz, or its matrix/matrix file) or a KiPI snapshot (.kipi.json.gz). Its saved setup comes with it, as with Load from KiCad. The arrow beside it lists the boards opened lately.
Reload
standalone
Reads the open board file again. When the file is saved (in KiCad, say), KiPI asks whether to read it again by itself. Ticked nets stay ticked.
Save snapshot…Saves the extracted board as .kipi.json.gz, to analyze later, on another machine, or to attach to a bug report.
Top / Bottom / IsoSnap the 3D camera to look down on the board, up at its underside, or from an isometric angle. They also bring the 3D view to the front from the Impedance and Board map tabs.
Screenshot…Saves whatever is in the middle as a PNG: the 3D view, the impedance plot or the board map, whichever tab is showing.
Open results…Reopens saved results without solving again. Load the same board first. In DC mode it opens a DC solve saved with Export ▾ → Save results…; in AC mode, the rails saved with the AC panel's Save results….
StackupOpens the Stackup window: the board's layers with their thicknesses, εr and copper resistivity.
Power treeOpens a block diagram of the setup, drawn left to right in the direction power flows: each source and regulator, the rails they drive, series links between rails, and the loads and capacitor models on each rail (capacitors are grouped per model and rail, with a dashed line). VRM types differ in colour and tag: a SOURCE has a double border, and regulators (LDO and SMPS) a dashed one. A rail with three or more loads, or capacitor groups, packs them into a framed grid fed by one arrow, titled with their count (and the loads' total current); the grids take the shape that lets the whole tree fit the window largest. Each block sits just right of the one feeding it. Ground nets, and net ties between them, are left out. Hover a block for its pins; drag to pan, Ctrl + wheel to zoom, Save image… for a PNG. It redraws as the setup changes.
Help F1Opens this guide in your web browser.
AboutVersion, author and project links, and how often the project has been cloned and its releases downloaded. Those counts are fetched once a session from the project's GitHub repository; offline, the last ones fetched are shown, or none. Copy version info copies the versions of KiPI, Python, its libraries and the sparse solver in use, for bug reports. Check for updates asks GitHub for the newest KiPI release and says whether it is newer than yours, with a link to download it; KiPI never checks on its own. In standalone KiPI started by its launcher, Manage dependencies… closes KiPI and opens its setup (for example to add or remove PARDISO).
Mode: DC / ACChooses the analysis. The setup dock shows that mode's panel. The DC setup and results are kept while you are in AC and come back when you switch to DC. You cannot switch while a task is running.

Stackup window

The Stackup toolbar button opens a window with the board's layers top to bottom: each copper layer and each dielectric with its thickness, each dielectric's material, εr and in-plane thermal conductivity, and each copper layer's conductor and resistivity. Every analysis, DC and AC, uses this stackup, and the 3D view draws it. The window can stay open beside the main window.

The Stackup window listing copper and dielectric layers
The Stackup window.
Controls
ControlWhat it does
Lock to imported valuesTicked (the default), the thicknesses, materials and εr are the ones read from KiCad's board stackup. Untick it to try others: type a new thickness for any copper or dielectric layer, or choose a dielectric's material or type its εr. The layers above and below move with a thickness change, and the total board thickness shows under the table next to KiCad's. Ticking it again goes back to KiCad's values.
Thickness unitShows and takes the thicknesses in µm, mm, mil or oz (1 oz = 35 µm). Ounces are a copper weight, so in oz the dielectrics show in mil. In a µm or mm field a value can also carry its own unit, like 35um or 0.2mm. KiPI remembers the unit.
Material (dielectrics)Each dielectric's material, from the list KiPI knows: FR4 core and prepreg, polyimide, Kapton, Rogers RO4350B, RO4003C, RO3003 and RT/duroid, PTFE, polyolefin, alumina and aluminum nitride ceramics, and an aluminum metal core. KiCad's own name for the material is listed too when it is not one of these. Choosing a material sets its typical εr (a datasheet value near 1 GHz; type another if your laminate's differs) and its in-plane thermal conductivity k, which the electro-thermal solve uses. Type over k, unlocked, if your laminate's differs; choosing a material again goes back to its typical value. A ⚠ beside k means KiPI did not recognize KiCad's name and took the layer as FR4. Setups from before 0.8.0 with a Thermal tab Laminate k open with that value as every dielectric's k.
Material (copper layers)What each copper layer is made of. Copper (board Resistivity) uses the Resistivity and TCR below. Or choose annealed copper, electrodeposited or rolled-annealed copper foil (IPC-4562's maximum resistivity), silver, gold, aluminum, nickel or tin: this sets the layer's resistivity, its TCR for the electro-thermal solve, and its thermal conductivity k for heat spreading. A resistivity typed in the table afterwards wins; setting it back to default returns the layer to the board's copper. A layer given a resistivity by hand in an earlier version shows as Custom resistivity. Like the thicknesses, a layer's conductor is changed only with Lock to imported values unticked; ticking it again keeps the conductor chosen.
εrEach dielectric's constant, for the AC solve. default means the stackup gives none (or the material is a metal), and the AC setup's Default εr applies.
Resistivity at 20 °C (table)A copper layer's own resistivity, set by its conductor or typed in while unlocked; default uses the Resistivity below.
Resistivity, TCRResistivity at 20 °C (annealed copper, 1.724 µΩ·cm, by default) of every layer left at the board's copper and of via plating, and its temperature coefficient (0.00393 /°C for copper), used by the electro-thermal solve. These are setup settings, so they can be changed while the stackup is locked.
ResetBack to KiCad's thicknesses, materials and εr, still unlocked.
  • The stackup and resistivities are saved with the PI setup. An edited stackup is used again the next time the board is opened (unlocked). If a layer has been added, removed or renamed in KiCad since, the log says so and KiCad's stackup is used.
  • To compare stackups, solve, edit, and solve again. A stackup change clears the DC results, which were for the old stackup; the AC results stay until a rail is solved again. Reports note a stackup edited in KiPI.
  • KiCad's API cannot change a board's stackup yet, so edits stay in KiPI. To keep a stackup you settle on, enter it in KiCad's Board Setup → Board Stackup → Physical Stackup.
  • A board snapshot (Save snapshot) keeps KiCad's stackup; the edits live in the setup.

Board panel

The left-hand dock. Its four parts are separated by splitters you can drag.

Nets

Every net on the board. Tick the nets you want to analyze. Ticked nets are drawn in 3D and are the only nets offered in the setup's pin pickers, so a net you need for a VRM, load, series link, capacitor or probe must be ticked first.

ControlWhat it does
Filter boxShows only nets whose name contains the text.
Power & ground onlyHides signal nets that are not ticked. Power nets are shown in orange with [PWR], grounds in blue with [GND]. KiPI recognizes them by name (+3V3, VCC, GND…), net class, or a zone with several pads.
All powerTicks every power and ground net, keeping any others already ticked.
NoneUnticks everything.

The ticked nets are saved with the setup. A board with no saved choice starts with a guess: its largest power planes and the main ground. Building the 3D copper of a big net takes a moment; nets appear as they finish, and Cancel stops the build.

Copper layers

Each copper layer with its thickness and height in the stackup. Untick a layer to hide it; All and None show or hide every layer at once. Hiding layers does not change the result colors; set the color scale to look closer.

Display
ControlWhat it does
ColorColors the plain copper by layer or by net. By layer, each layer has its color from the PCB editor's color theme (Preferences → Colors in KiCad), read again on every Load from KiCad; the log names the theme. If the theme cannot be read, KiCad's default theme colors are used.
Z scaleStretches the stackup vertically (1× to 100×) so the layers can be told apart. It only changes the drawing.
OpacityHow solid the copper layers and pads are drawn, from 5% to 100%, in both the plain and the result views. Lower it to see the layers beneath; vias stay solid.
Vias / Pads / BoardShow or hide via barrels, pads and the board body.
PI ModelsMarks the parts the current analysis uses on the copper: a dot on each of their pads, larger on the rail's pins and smaller on ground, with the part's name above. In DC mode those are the setup's VRMs (green), loads (cyan), series links (magenta) and capacitors with a model (white). In AC mode the probes (violet) take the loads' place — the impedance is looked into at a probe, and a load's current says nothing about it — beside the same VRMs, series links and capacitors. Only pads on a net shown are marked, and the marks follow setup edits. They are drawn over the plain copper only, not over results. Unticked to start with.
Clicking a VRM, load, series link or probe in the setup's lists marks it in amber, and with Snap to selected ticked brings the view to it; PI Models is left as you set it. Clicking a part's name (or one of its dots) in 3D selects it in the current mode's setup, ready to edit. Either way, the newly selected part blinks red and amber for a few seconds. Capacitors are marked but not selected this way: a model names several parts.
Snap to selectedBrings the view to a part when it is picked in the setup's lists (ticked to start with). Available only while PI Models is ticked, since it goes to the part's marks. Untick it to keep the view where it is; the part is still marked and blinks. KiPI remembers the choice.
3D ModelsShows the KiCad 3D models of every part on the board. In the geometry view they are on to start with; over results they start hidden, and ticking 3D Models there shows them too. Each view remembers its own setting. See Part 3D models below.
PI Models marks on the board, the selected switcher in amber
PI Models, snapped to the selected +3.3V switcher.

Part 3D models

  • KiPI asks KiCad's command-line tool, kicad-cli, to export just the parts it needs, so KiCad finds the model files the same way its own 3D viewer does (STEP and VRML). It runs in the background, the first time the models are shown; each part is read once per board.
  • kicad-cli reads the saved .kicad_pcb file. A part moved since the last save is drawn where it was saved; save the board and click Load from KiCad to update it.
  • The Z scale stretches the board but not the parts: top-side parts sit on the stretched board at their true height, and on a board made thicker or thinner in the Stackup window.
  • Clicks go through the models to the copper beneath, so probing works as without them.
  • A part whose model KiCad cannot find is named in the log with the missing path. If kicad-cli or the board file cannot be found, the log says so once and no models are drawn; see Troubleshooting.
Info and Select in KiCad

Shows a summary of the board when it loads, and afterwards whatever you last clicked in 3D: the layer and coordinates, the pad or via hit (net, drill, layer span), and, when results are shown, the voltage, drop, current density, power density and via current at that point. In AC mode it shows the impedance plot's cursor values.

The summary says where the board came from (for example From KiCad PCB editor 10.0.7, and the snapshot file it was opened from). Under Placeholders it lists anything KiPI had to fill in because the source did not give it, such as a default stackup when the board's own is incomplete. Results that depend on a placeholder are only as good as the placeholder.

Select in KiCad selects the picked pad or via in the PCB editor, so you can find it in your layout. It needs a live KiCad connection (not a snapshot), so the plugin has it and standalone KiPI does not.

3D view and mouse

Navigating and probing
ActionMouse
RotateLeft-drag
PanShift + left-drag, or middle-drag
ZoomScroll wheel
Probe / identifyLeft-click copper or a via. The result goes to the Info box and the status bar. Clicks pass through part models.

In AC mode two more tabs appear beside 3D view: Impedance, with the impedance plot, and Board map, with the mesh and parts of the solve.

Log and progress

The Log dock

The bottom dock shows the current stage, a progress bar, and Cancel, which stops the running task (loading, building nets or solving). The log streams every stage with its timing, solver residuals and warnings: warnings are amber, errors red, stage headers blue.

Each session also writes a log file to kipi/ in your temporary folder (%TEMP% on Windows, $TMPDIR on macOS, /tmp on Linux). See Troubleshooting.

DC concepts

Net groups, the power tree and voltage references

Net groups

KiPI solves copper one net group at a time. A group is a net plus every net joined to it by a series link. For example, +3V3 and +3V3_FILT joined by a ferrite bead are one group. Each group may be driven by at most one VRM. Ground nets used by VRM or load ground pins are their own groups.

The power tree

A VRM's input pins make it a load on its upstream net. KiPI solves the tree from the leaves back to the source: downstream rails first, then each VRM's input current (from its output current, efficiency or quiescent current) is applied as a load upstream. So the 12 V input rail carries the current of everything it feeds.

Power tree block diagram of the multiphase buck example
The Power tree window: the multiphase buck example.

Voltage reference

Voltages are measured against the source's ground (0 V). If ground pins are given, the ground return is solved too and a load's ground rises above 0 V. The figure to compare with the set point is the load's effective voltage: supply minus ground at the load.

Drop and boost

A drop is a pin below the VRM's set voltage. A boost is a pin above it, which happens with remote sense: the VRM raises its output to hold a sense point further down the copper, so pins nearer the VRM sit above the set point. A load is judged by its worst pin, whichever direction.

The pin picker used everywhere pins are chosen

Every "pins" field is three boxes:

  1. Net: one of the nets ticked in the Board panel. Type to search.
  2. Part: the parts with pads on that net, busiest first, shown as reference, value and pad count, e.g. U4 TPS62130 (3). Type to search (u4 is enough).
  3. Pins: optional pin numbers, comma-separated, e.g. 1,2,5. Blank means every pin of that part on that net; the placeholder lists them.

Optional pickers have (none) as their first net.

Pre-filled fields guesses from the board, always yours to change

As you pick pins, KiPI fills in the fields that usually follow from them. Each guess only fills a field you have not set yourself (an empty field, or one it filled in for the previous part), and when the board does not give an answer the field is left as it was. Change anything it fills in: your value is kept.

When you…KiPI fills in
pick a VRM's output netSet voltage from the net's name: +3V3, 3.3V, V1P8, VDD_0V75, +12V, -5V, VBUS (5 V). A name with no voltage in it (VCORE, VIN) leaves the voltage alone.
pick a VRM's output pinsGround pins: the same part's pins on its ground net. For an LDO or switcher, Input pins: the same part's pins on its other rail, if it has exactly one. The VRM's Name follows the part while it is still the part's reference.
add phases to a VRMEach new phase repeats the last one on the parts the next phase likely uses, with the same pin numbers:
  • the same parts on the next schematic sheet, when the board is annotated by sheet (L101, Q101, Q102 → L201, Q201, Q202, or ×1000). Every one of the phase's parts must be there;
  • otherwise, the same step on as between the last two phases (Q2, Q4 → Q6), or the next parts in sequence (L1 → L2, Q1 → Q2).
Without a next part, the phase copies the last one for you to edit.
pick a load's supply pinsGround pins: the same part's pins on its ground net.
pick a series link's side ASide B: when the part has pads on just two nets (a resistor, ferrite, fuse, inductor), its pins on the other net. Not for capacitors, or when the other net is a ground. When both sides are on one resistor, Resistance is read from its value.
pick a probe's supply pins (AC)Ground pins: the same part's pins on the probe's ground net, or on its own ground net.
Add a VRM, load or series linkThe same guesses for its first part. A new series link starts on a two-terminal part between the first two ticked nets that are not grounds.

How the ground net is found. Ground nets are not always called GND, so KiPI tries, in order: ground nets the setup already uses (any VRM, load or probe ground pins), nets named like a ground (GND, PGND, AGND, VSS, EARTH…), then the board's biggest net (the one with the most pads) if it is not named like a rail. Only nets ticked in the Board panel are used, except grounds the setup already uses. Once one VRM or load has ground pins on an unusually named ground, every later guess uses it.

DC setup tabs

The PI setup dock on the right. Save at its top writes the setup next to the board (DC and AC share one file). Import… beside it fills the VRMs, loads and series links from a Tomachie power-tree file (.pdn.json), keeping the settings, thermal and AC setup. Where the file gives a minimum, typical and maximum, the typical current or resistance is used, and the log lists what was left out or could not be placed on the board. Problems that stop a solve are listed in red under the tabs as you edit. The VRMs, Loads and Series links tabs share one layout: a list with Add, Duplicate and Remove, and an editor for the selected entry below it.

VRMs tab regulators and supplies
FieldMeaning
NameUsed in the results tables.
TypeSource: an ideal supply with no input (connector, bench supply, battery). LDO: Iin = Iout + Iq. Switcher: Pin = Pout / efficiency.
Set voltageThe voltage it holds at its output (or sense) pins. Read from the net name when you pick the output net (see pre-filled fields).
EfficiencySwitcher only.
QuiescentLDO and switcher: extra input current.
Output current limitOptional. The VRM row shows PASS if its total output current (all phases) is at most this.
Load lineOptional, DC only (adaptive voltage positioning). The VRM regulates to its set voltage less this resistance times its output current: what its connected loads and the VRMs it feeds actually draw, so a disconnected load adds no droop. Drops are still measured from the set voltage, so the droop counts against each load's tolerance. The Notes tab, the HTML report and the VRM CSV show the droop and the voltage it regulates to (V target). none holds the set voltage.
DropoutLDO only: the least input-to-output difference at which it still regulates.
Input rangeOptional input range, min and max on one row, in V or in % from the input rail's nominal voltage (the set voltage of the VRM driving it; e.g. min -10 %, max +10 %). Switching the unit converts the values when that VRM is known. A range in % with no VRM driving the input is a setup error. A VRM whose solved input is outside its range (or an LDO below its dropout) cannot hold its output, and every load it feeds, directly or downstream, is marked VRM OUT OF REGULATION.
DC accuracyLDO and switcher only; used by the AC target calculator. The output's DC error from the datasheet (reference and feedback tolerance, line and load regulation): min and max on one row, in % of the set voltage (e.g. -1 %, +1 %) or in V, the lowest and highest output voltage.
Control loop bandwidthAC only. The AC solve leaves the VRM out of circuit, so it gives the open-loop PDN impedance; below this frequency the converter's loop holds the rail. Probe targets are drawn and judged only above it (see Targets and the VRM bandwidth); none judges the whole target.
Phases / Edit phaseMulti-phase regulators. See the multi-phase workflow.
Output pinsWhere it drives the rail: the output pin, or for a switcher usually the inductor's output side.
Input pinsLDO and switcher: where it draws its input. This links it into the power tree. Filled in from the output part when it has one other rail.
Ground pinsOptional: solve the ground return as well. Filled in with the output part's ground pins.
Sense pinsOptional remote sense (positive).
Ground sense pinsOptional negative remote sense on the ground net (needs ground pins).
Loads tab parts that draw current
FieldMeaning
NameDefaults to the supply part's reference.
Supply pinsWhere the current is drawn.
Current splitEqual across the supply pins, or Per pin group: a table of groups, each with its own pins and current. Add pin group adds a row; One group per pin replaces the table with one row per supply pin, sharing the total. ✕ removes a row. Use groups when a part draws different currents on different pins.
CurrentThe load's total current (equal split). Negative values are allowed for parts that source current.
Ground pinsOptional: include the load's ground return. Filled in with the supply part's ground pins.
ToleranceOptional min and max on one row, in % from the VRM set voltage (e.g. min -3 %, max +5 %) or in V (e.g. 3.135 to 3.465 V). Either may be left "not set". PASS if every supply pin is within it. Switching the unit converts the values when a VRM drives the load's rail.
HeatOptional, W: the heat the part puts into the board in the electro-thermal solve, when load power is included. Not set: the power it draws. Set it for a part that passes most of its power on, such as a load switch.
The load editor
The load editor.
Solve tab choose which net groups to solve

Lists every net group with its role (rail from a VRM, ground, or not driven). Untick groups that are not modeled or routed yet; All and None tick or untick them all. Only ticked groups are validated and solved, and the choice is saved. Where a solved group meets an excluded one:

  • A VRM whose output is excluded becomes a constant load on its input pins, drawing the input current its rail would need at nominal voltages.
  • A VRM whose input is excluded is treated as an ideal source.
  • Ground pins on an excluded ground are ignored.

The Notes results tab lists what was left out and substituted. The Solve button shows how many groups will be solved, e.g. Solve 3 of 5 net groups.

The Solve tab listing net groups with checkboxes
The Solve tab of the example board.
Mesh tab
FieldMeaning
Max edgeLargest triangle edge, mm. Smaller is more accurate and slower. Raise it for quick looks at big boards.
Via gradingHow fast elements grow away from plated holes, where current crowds. Lower keeps the mesh fine further out; 0 turns grading off.
Via platingA table of rules, first match wins: hole type, drill range, plating (µm, growing inward from the drill) and what a filled hole is filled with. A via the KiCad board marks as filled carries its core too when the fill conducts. Defaults: IPC-6012 Class 2 minimum averages.

The defaults suit most boards; set the via plating your fabricator states.

The Mesh tab with the via plating rules
The Mesh tab and its via plating rules.
Thermal tab electro-thermal co-simulation, off by default

Tick Electro-thermal co-simulation to let copper losses heat the board, with warmer copper becoming more resistive. KiPI alternates electrical and thermal solves.

FieldMeaning
AmbientAir temperature around the board.
IterationsElectrical/thermal passes. Three is usually enough; the Thermal results tab shows how much each changed.
AirflowAir speed over both faces, m/s; 0 is still air. The air always flows parallel to the board, along both faces, and its direction is fixed: every point is cooled equally, as if the air stayed at ambient across the whole board, so upstream parts do not warm the air that reaches downstream ones. Convection is h = 10 + 3.8·v W/m²K per face.
GridThermal cell size; auto is about 250 cells across the board.
Include load power dissipationOff by default. When ticked, each load heats the board with the power it draws: the sum over its supply and ground pins of pin current × pin voltage, spread over those pins. A load without ground pins is taken as returning at 0 V.
Max copper temperatureOptional limit: copper hotter than this on any layer is FAIL.
Max rise above ambientOptional limit on the temperature rise.

Heat comes from every solved net and layer, vias, DC connections (I²R, at their pins), VRM conversion loss and, with Include load power dissipation, the loads. The report's Component power dissipation table lists the DC connections' and loads' heat. The limits grade the last solve straight away when you change them.

Thermal settings
Thermal settings.

Solving

Solve all, HTML report and Cancel

Solve all saves the setup, meshes every ticked net group and solves the power tree. It is disabled while there are problems (listed in red). If you click it while the 3D view is still building nets, the solve is queued and starts as soon as that finishes.

Tick HTML report before solving to also write <board>_kipi_report_<date>_<time>.html next to the board; the time stamp keeps each solve's report instead of overwriting the last one. It opens in your web browser when the solve finishes, and Report opens it again later. The report is a single offline file with every table, an interactive 3D view of each net group, per-layer statistics and maps, and the temperature map.

The report's Pins section, and _pins.csv in Export ▾ Tables as CSV…, list every pin each group was solved with. That covers VRM output, phase, input and sense pins, load supply and ground pins, and DC connection pins. Each row gives the pin's position, voltage, drop or boost from the VRM set point (0 V for a ground), and current. The current is what the pin draws from the copper, so it is negative where current is delivered into the copper, as at a VRM output. VRM output pin currents are solved, so they show how the current shares between the pins. A load's current is split equally across its pins, as the solver applies it, and a DC connection's current across the pins on each side.

A solve that fails on a setup problem (e.g. no copper path) shows Cannot solve in the Notes tab with the reason. Untick the group with the problem in the Solve tab to solve the rest.

DC results

The Results box under the Solve button. Pick a net group and a field to color the copper in 3D.

3D result fields
FieldShowsLook for
Voltage (V)Copper potential.The gradient from VRM to load; where the drop happens.
Current density (A/mm²)How hard the copper is worked. Tick Arrows to see where and which way current flows: flat white arrows drawn on each layer's copper, top and bottom faces, longer where the current is denser.Necks, thermal reliefs, narrow traces, plane slots. Clipped at the 99.5th percentile (pad corners spike).
Power density (mW/mm²)Copper loss per area. Hot spots that the thermal solve will pick up.
Via current (mA)Current in each via barrel. Vias doing all the work while neighbors idle.
Temperature (°C)Board temperature (electro-thermal only). Peak location and rise.

Show copper returns to the plain geometry; pick a group or field again to bring the results back. Click anywhere to probe: Info shows the exact value at that point (not clipped).

Color scale: the minimum and maximum of the colors, under the group and field. Each result starts on its whole range, over every layer whether shown or not. Type limits (or step them with the arrows) to stretch the colors over the part you care about; values outside take the end colors. Limits are kept for each net group and field until Auto fits the whole range again; temperature limits apply to every group, so an ambient-to-limit scale stays put while you switch groups. On the logarithmic power-density scale, a minimum of zero or below falls back to four decades below the maximum.

Voltage across a plane
Voltage.
Current density with arrows
Current density with arrows.
Via current
Via current and the Vias table.
Board temperature
Temperature from the electro-thermal solve.
Results tables click a header to sort; again to reverse
TabColumns and use
LoadsCurrent, effective voltage (supply − ground), average drop/boost, worst pin, worst %, tolerance and verdict. Double-click a row to show its group.
VRMsV/I out, V/I in, input power, conversion loss, current limit and PASS/FAIL; a gray row per phase under multi-phase VRMs.
Series linksResistance, current and power in each part.
ViasEvery via and PTH barrel, highest current first. The Current limit for PASS/FAIL starts at 1 A, a placeholder; set your own, or 0 for none. Double-click a row to fly the camera to it.
LossesCopper loss per group and layer, in vias and series parts, with the total and each VRM's conversion loss at the bottom.
ThermalAfter an electro-thermal solve: the hottest copper on each layer, its rise and location, PASS/FAIL against the limits, the iteration history and the dielectric conductivities used. Double-click a row to show its group's temperature.
NotesSolve time, the nets in each group, pin group results, warnings and excluded groups.

Load verdicts

VerdictMeaning
PASSEvery supply pin within the tolerance.
FAILAt least one pin outside the tolerance.
VRM OUT OF REGULATIONA VRM feeding it, directly or upstream, is outside its input range or below its dropout.
NOT CONVERGEDIts group's solve did not converge; the numbers cannot be trusted. See Troubleshooting.
DISCONNECTEDNone of its supply pins, or none of its ground pins, has a copper or series-link path to its VRM, so its current was left out of the solve. The Notes tab names the pins. See Loads not connected by copper.
(blank)No tolerance set.
Reading the numbers
  • Effective voltage is what the load actually sees: its supply pins minus its ground pins. Compare it with the set point, not the raw plane voltage.
  • A supply plane reading above its set point is normal with remote sense or when ground return is solved; see drop and boost.
  • Worst pin is the one furthest from the set point; with many pins, one far pin can fail a load whose average looks fine.
  • The color scale covers the whole result; type a minimum and maximum under it to look closer.
  • Losses are I²R in the copper; VRM conversion loss is the difference between input and output power.
Export and HTML report
Export ▾ itemWrites
Tables as CSV…One CSV per results table into a folder, plus <name>_pins.csv: every pin each group was solved with, and its voltage and current.
3D results for ParaView (.vtm)…The result meshes, for ParaView or other VTK tools.
Save results…A .kipi-dc-results file, or .kipi-dc-thermal-results after an electro-thermal solve, that Open results… reloads without solving, named with the board and the time by default. It holds JSON and NumPy arrays in a zip, which open on any computer and cannot run code, so it is safe to share; the 3D views are rebuilt when it opens.
HTML report tables
HTML report: summary tables.
HTML report 3D view
HTML report: interactive 3D.

AC concepts

What the AC analysis models

The AC analysis computes the PDN impedance seen from a probe, a device's supply and ground pins, looking out into the board over a range of frequencies. A device that draws a changing current I from a PDN of impedance Z sees its supply move by about I·|Z|, so keeping |Z| below a target impedance keeps the supply ripple within tolerance.

A solve covers one rail (the nets its VRM drives, plus nets joined to them by series links) against one ground net. It includes:

  • The copper, field-solved: plane and trace resistance (with skin effect), the spreading inductance of planes, the capacitance between facing rail and ground copper, cavity resonances, and the inductance of vias and their mounting.
  • Capacitors between the rail and ground, each as a series R-L-C from its model. Only the part's own ESL is entered; its mounting (pads, vias, planes) is simulated.
  • Series links as their resistance plus ESL.
Note: the VRM itself is not modeled as an impedance. In AC, VRMs only define which nets make up a rail and its default ground. Below the frequency where the capacitors take over, the real PDN impedance is set by the regulator's control loop, which the plotted curve does not include: expect the curve to rise toward low frequency as the bulk capacitance runs out.

Capacitors that sit between the rail and ground but have no model are left out, and the results notes list them.

AC setup tabs

Switch Mode to AC. The setup dock becomes the AC setup; it edits the same setup file as DC.

VRMs and Series links tabs shared with DC

The same VRMs and series links as the DC setup; edits in one mode show in the other. Every VRM field can be edited in either mode; the tooltip of a field only DC uses says so. In AC:

  • A VRM's output net (and ground pins) define a rail and its default ground for the Rail picker.
  • A series link adds its ESL to its resistance. A link leading off the rail to a net that is not part of the solve is left out, with a note. A 0 Ω link with no ESL merges the two nets.
Capacitors tab RLC models and which parts use them

A model is a capacitance, ESL and ESR shared by a group of identical parts. All three are required.

ControlWhat it does
Models from valuesCreates one model per distinct value among the capacitors that have none yet, named after the value, with the capacitance read from it, and the voltage rating when the value gives one (10uF 6.3V X5R). Enter ESL and ESR yourself.
CapacitancePer part, with no DC bias. For a ceramic, enter its Voltage rating to estimate DC bias, or enter the effective value at the rail's voltage if the datasheet gives it.
ESLThe part's own inductance (datasheet), not including mounting.
ESRPer part.
Voltage ratingThe part's rated DC voltage. Class II ceramics (X5R, X7R, X6S…) lose capacitance with DC voltage; with a rating, each part's capacitance is derated by the DC voltage across it: what the last DC solve found across its pads, or else the rail's VRM set point. The Results notes and the HTML report give the voltages and the capacitance left. Models from values fills it in for values naming a class II dielectric. Leave it not set for polymer and electrolytic parts; a model with a C0G dielectric is never derated.
DielectricThe ceramic dielectric (C0G, X7R, X5R, Y5V…), for aging and temperature. Picking one fills in its typical aging rate, and with a Temperature in the Sweep tab the capacitance follows the dielectric's typical curve from its rated value at 25 °C (X7R: −4 % at 85 °C and −12 % at 125 °C; Y5V: −75 % at 85 °C; C0G: flat). Leave it unset for polymer and electrolytic parts, which are then not aged. Models from values reads it from the value (NP0 counts as C0G).
AgingCapacitance lost per decade of hours operated, in % (X7R about 2, X5R about 3, Y5V about 7; C0G does not age). Enter the datasheet's rate if it gives one. Used when Capacitor aging is ticked in the Sweep tab.
Manufacturing toleranceOptional: the part's capacitance tolerance, in % of nominal, from its datasheet or its value code (J is ±5 %, K ±10 %, M ±20 %). Used when Capacitor manufacturing tolerance is ticked in the Sweep tab, which solves the model at the low end of it. Leave it not set for a part whose entered capacitance is already the figure you want simulated.
Kept at ratingHow much of its capacitance the part keeps at its rated voltage, from the datasheet's DC bias curve (40 % by default; often 30 to 50 %, and less for smaller cases). Between 0 V and beyond the rating, the capacitance follows C / (1 + k (V / Vrated)1.5), a typical X5R/X7R curve's shape.
Filter boxNarrows the parts table by reference, value, footprint, net or model.
Parts tableEvery capacitor (reference C…) whose pads are all on ticked nets, across two nets, with its footprint (hover for the library). Tick a part to give it this model; it moves from any other model. Grayed rows already belong to another model, named in the last column. Click a column header to sort by it.
Tick same value / footprint / value + footprintTicks every part matching the selected row: the same value, the same library footprint, or both (e.g. only the 0402 100 nF parts, whose ESL differs from the 0603 ones).
Tick shown / Untick shownApplies to every row the filter shows.
The Capacitors tab with a model and its parts
A capacitor model and the parts that use it.
Probes tab where the impedance is measured, and its target
FieldMeaning
NameShown in the plot legend and the table; follows the supply part by default.
Supply pinsThe device's power pins. Picking a part also picks its ground pins if it has any.
Ground pinsMust be on the ground net being simulated.
TargetFlat, up to a frequency, or Custom (piecewise linear).
Target |Z| / Target frequencyFlat target: PASS if |Z| stays at or below it from the VRM's control loop bandwidth up to the frequency (none: to the end of the sweep).
Calculator…Opens the Target Impedance/Frequency Calculator.
Custom pointsFrequency/|Z| corner points, joined by straight lines on the log-log plot. Below the first point the first |Z| holds, above the last the last holds. Add point adds one a decade above the last; ✕ removes one.

From DC load adds a probe on the same supply and ground pins as a DC load picked from its dropdown. The dropdown also lists the input of every LDO and switcher, one entry per phase (e.g. VR4 phase 2 input): a regulator's input pins load the rail feeding it just as a device does.

A rail can have several probes, e.g. one per device; they are all solved together and each sees the others as open circuits.

Targets and the VRM bandwidth

The AC solve leaves the VRM out of circuit: it gives the open-loop PDN impedance, which keeps rising toward low frequency. In the real circuit the converter's control loop holds the rail below its bandwidth. So when the rail's VRM has a Control loop bandwidth, a probe's target (flat or custom) applies only from that frequency up:

  • the plot draws the target only above the bandwidth, and marks the bandwidth with a dotted line;
  • PASS/FAIL, the worst |Z| and the margin only look above it. Without a target, the worst |Z| is the highest above the bandwidth;
  • the cursor shows "none here" below it.

Fallback: if the bandwidth is at or above a flat target's frequency, or above the whole sweep, no frequencies are left to judge. That probe's target is then judged over its whole range, as if the VRM had no bandwidth, and a note in the results says so.

Target Impedance/Frequency Calculator

Works out a flat target from the device's transient spec:

  • DC load: the DC load whose tolerance and current the copy buttons use. A load on the probe's own supply and ground pins is used directly. Otherwise the dropdown offers the loads on the probe's part: supply pins on the same footprint, and ground pins too where the load has them. An LDO's or switcher's input pins count as a load too: its Input range is the tolerance, and its input current and the DC drop at its input pins come from the last DC solve.
  • AC voltage tolerance: how far the supply may move during a load transient, e.g. the AC part of a ±3 % spec on a 0.9 V rail: 27 mV.
  • Copy tolerance from DC load fills the AC voltage tolerance from a DC load's tolerance: ± its tighter side, from the voltage of the VRM feeding it (2 % for -2 % / +5 %). A DC tolerance is the whole budget, and the DC drop uses up part of it, so lower the value if the AC part is smaller.
  • Subtract DC drop at the load takes the DC drop the copper causes at the selected load's own pins off the AC voltage tolerance, so what is left is the budget for the transient. It reads the last DC solve: its effective voltage there (supply pins minus ground pins) against the set voltage of the VRM driving it, so solve the power tree on the DC tab first — without a result for that load the button stays disabled and says so. A load above its set voltage (a remote-sensed VRM raises pins near it) has its boost subtracted just the same, since it eats the same symmetric window. Each click subtracts again.
  • Subtract VRM DC accuracy takes the DC accuracy of the LDO or switcher driving the probe's rail off the AC voltage tolerance: the larger side of it (20 mV for -1 % / +2 % of 1 V), as the output may already sit that far from its set voltage. It shows a menu when several VRMs drive the rail; each click subtracts again.
  • Load step (ΔI): the size of the current step.
  • Copy current from DC load fills the load step from a DC load's current, a step from no load to all of it. Lower it if the device's current steps by less.
  • Load step slew rate: how fast it steps, A/µs; 10 A/µs until you change it.

Then Ztarget = VAC / ΔI, flat up to ftarget = 1 / (π · trise), with trise = ΔI / slew rate. Use for probe fills the probe's target fields; the inputs are remembered for next time. The target applies above the VRM's control loop bandwidth (Targets and the VRM bandwidth).

The target impedance method was introduced by L. D. Smith, R. E. Anderson, D. W. Forehand, T. J. Pelc and T. Roy, "Power Distribution System Design Methodology and Capacitor Selection for Modern CMOS Technology," IEEE Transactions on Advanced Packaging, vol. 22, no. 3, pp. 284–291, Aug. 1999.

Target impedance calculator dialog
The calculator: 27 mV over a 10 A step at 10 A/µs gives 2.7 mΩ up to about 318 kHz.
Sweep tab
FieldMeaning
Start / StopFrequency range.
Points per decadeResolution of the plotted curve. Cheap: the parts are evaluated at every point.
Field solves per decadeHow often the copper itself is solved; in between, its response is interpolated (smoothly, it varies slowly). Every point solves the copper at each sweep frequency: exact and slowest. Raise this if sharp plane resonances look under-resolved.
Capacitor DC biasTicked (the default), the capacitor models with a Voltage rating are derated by the DC voltage across each part. Untick it to solve with every model's capacitance as entered.
Capacitor manufacturing toleranceTicked, every capacitor model with a Manufacturing tolerance is solved at the low end of it: the tolerance is subtracted, so a ±10 % model keeps 90 % of its capacitance and a ±20 % model 80 %. That is the worst case for a PDN, where too little capacitance raises the impedance. Models without a tolerance are unchanged. This multiplies with the DC bias estimate, aging and temperature. Off by default.
TemperatureNot modeled (the default): copper at 20 °C and capacitors at their rated values. Fixed: the whole board at Board temperature. From DC thermal co-simulation: each copper triangle and capacitor at the temperature the last DC solve with thermal co-simulation found there; DC results opened from a file work too. Without one, the AC solve uses the Board temperature and says so. The copper's resistivity follows its temperature coefficient (from the DC settings), and models with a dielectric follow its temperature curve.
Board temperatureThe temperature when Fixed, and where the thermal co-simulation gives none.
Capacitor agingTicked, every capacitor model with a dielectric loses its aging rate for each decade of Hours operated past 1000 hours (the usual reference age of the rated capacitance): an X7R part at 2 %/decade keeps 96 % after 100,000 hours. This multiplies with the DC bias estimate. Off by default.
Hours operatedHow long the capacitors have aged, in hours (8760 a year; 87,600, ten years, by default). Heating a ceramic past its Curie point, as in reflow soldering, restarts its aging. While aging is ticked, a slider under it sets the hours from 1000 to 1,000,000 on a log scale, with the time in years beside it.
Mesh tab
FieldMeaning
Max edgeLargest element, mm.
Via gradingElement growth per mm away from plated holes.
Min edge (at holes)Element size at plated holes. The mesh here decides the via and mounting inductance.
Loss tangentDielectric loss (FR4 about 0.02). Damps the plane resonances.
Default εrDielectric constant where the stackup gives none. Every other dielectric uses the εr from KiCad's board stackup (Board Setup → Physical Stackup); a dielectric made of several sublayers gets their series combination. The log and the HTML report list the εr used for each dielectric.

Copper resistivity and the via plating rules come from the DC setup's Copper and Mesh tabs.

Solving a rail

Rail, Ground and Solve rail

Below the tabs: Rail lists each VRM and its output net; Ground lists the ticked nets with grounds first, defaulting to the VRM's ground pins' net. Solve rail saves the setup and runs the sweep; problems that stop it are listed in red above. The log shows the field solves as they go.

Tick HTML report next to Solve rail to also write <board>_<rail>_ac_report_<date>_<time>.html next to the board after each rail's solve; the report opens in your web browser when the rail finishes solving, and Report opens the shown rail's report again later. See AC HTML report.

Each rail keeps its last result: switch Rail to look at another rail's curves without solving again. If you change the rail while a solve is running, the result is kept for its own rail and the notes say so.

AC results

Impedance plot and cursor

The Impedance tab in the middle plots |Z| against frequency on log-log axes: one solid curve per probe and, dashed in the same color, its target. Hovering shows every probe's |Z| at the frequency under the mouse in the line above the plot.

Impedance plot with a cursor and its values in the Info box
Impedance curves and targets, with the cursor's values in the Info box.

Cursor

ActionInput
Place on the nearest curveLeft-click
Move along the curveDrag, or ← → (with Shift: 10 points)
Switch curve↑ ↓
RemoveEsc or right-click

The Info box shows the cursor's frequency, |Z|, phase, R and X, the reactance as an equivalent L or C, the target there with PASS/FAIL and the margin in dB (positive is below the target), and every other probe's |Z| at the same frequency.

Screenshot… in the toolbar saves the plot as a PNG while its tab is showing.

Board map

The Board map tab shows the solve from above, as in the HTML report: the solver's mesh of the rail (copper colored) and its ground (blue-gray), the board outline, the probes as red stars, and the capacitors in the model as dots, one color per capacitor model. Capacitors between the rail and ground that have no model, and so are left out, are crossed. The view is fixed, always fitted to the board.

The map fills in while the rail solves: the parts as soon as the solve starts, then the mesh once it is built. The tab comes to the front for the solve; the Impedance tab comes back to the front when the results arrive.

ControlDoes
LayerThe copper layer whose mesh is shown, or All layers (the rail drawn over its ground).
Mesh edgesDraws the triangles' edges. Untick it to see the copper alone.
Hover a partIts reference, value, side and capacitor model (C, ESL, ESR).

The map belongs to each rail's result, so switching Rail shows that rail's map, and saved results keep it. Results saved by KiPI before 0.7.2 have no map.

Board map of the core rail's mesh with the probe and capacitors
The Board map of the multiphase buck's core rail.
Results table and notes
ColumnMeaning
Min |Z|Lowest impedance in the sweep.
Worst |Z| / atWith a target: the point where |Z| comes closest to, or furthest over, the target (within the target's frequency range). Without one: the highest |Z| in the sweep.
TargetThe flat level, or the custom mask's range.
VerdictPASS if |Z| is at or below the target everywhere it applies.

Below the table, the notes give the rail's nets and ground, the number of capacitors and series links included, the total plane capacitance, the solve size and time, capacitors left out for having no model, and any warnings. Export CSV… writes |Z|, R and X of every probe at every frequency. Save results… writes every rail solved so far to a .kipi-ac-results file (named with the board and the time by default); Open results… in AC mode brings them back, each under its VRM in Rail. Rails whose VRM is no longer in the setup are left out.

AC HTML report

With HTML report ticked, each rail's solve also writes <board>_<rail>_ac_report_<date>_<time>.html next to the board; the time stamp keeps every solve's report. Like the DC report, it is a single offline file you can email. It holds:

  • a summary and the probe table: pins, minimum and worst |Z|, the target, the margin in dB at the worst point (positive passes), PASS/FAIL, and an overall verdict;
  • an interactive impedance plot of |Z| at every probe, with the targets dashed. Drag to zoom, double-click to reset, hover for f, |Z|, R and X. Click a legend entry to hide or show a curve. The grey dotted curves, hidden at first, are each capacitor model on its own (one part, without mounting), useful for matching dips to capacitor banks;
  • a board map seen from the top: the board outline, the rail's copper on every layer merged, the probes as stars and each capacitor colored by its model. Capacitors left out for having no model show as grey crosses;
  • the capacitor models (C, ESL, ESR, self-resonance, how many parts and which), the series links, the sweep, mesh and copper settings, and the solver's size, backend and time;
  • notes: capacitors left out and any warnings.

If the report can't be written, the log says why; the solve's results are kept either way.

Reading an impedance curve
  • Falling at −20 dB/decade (|Z| ∝ 1/f): capacitive. At the low end this is the bulk capacitance; since the VRM is not modeled, the curve keeps rising toward low frequency.
  • Dips: series resonances, where a capacitor bank's C and its ESL plus mounting inductance cancel. The depth is set by ESR.
  • Peaks between dips: anti-resonances, where one bank's inductance resonates with the next bank's capacitance. These are usually where a target fails. Fix them with more or lower-ESL parts, more value overlap between banks, or extra damping (ESR).
  • Rising at +20 dB/decade (|Z| ∝ f): inductive. The capacitors' ESL and their mounting (pad, via and spreading inductance) dominate. Place the cursor here: Info shows it as an equivalent inductance. Shorter, wider connections and more vias lower it.
  • Sharp peaks at high frequency: plane-pair cavity resonances. Their frequencies come from the board's dimensions and stackup.
  • Phase near −90° is capacitive, near +90° inductive, near 0° resistive.

Step-by-step workflows

1. A first DC IR-drop check of one rail
  1. Tick the rail and its ground in the Nets list; untick everything else.
  2. VRMs tab: Add a Source on the regulator's output pins at the set voltage. Add its ground pins.
  3. Loads tab: Add each consumer with its current, tolerance and ground pins.
  4. Solve all. Check the Loads table. For a FAIL, double-click the row, choose Voltage, and click around the load's pins to see where the drop comes from.
  5. Switch to Current density with Arrows to find the bottleneck, change the layout in KiCad, and use Load from KiCad and Solve all again.
2. A full power tree (input → switcher → LDO)
  1. Tick every rail in the chain and the ground.
  2. Add the input as a Source (e.g. the 12 V connector).
  3. Add the switcher as Switcher with its efficiency, output pins (inductor), Input pins on the 12 V net, and ground pins.
  4. Add the LDO as LDO with its quiescent current, dropout and Input pins on the switcher's output.
  5. Add loads on each rail and solve. The VRMs table shows each converter's input current, which includes everything downstream, and its conversion loss.
  6. Set Input range and Dropout to catch a regulator starved by upstream drop: its loads show VRM OUT OF REGULATION.
3. A multi-phase regulator
  1. Add the VRM and set phase 1's output pins (its inductor), input pins and ground pins.
  2. Set Phases to the number of phases. Each new phase takes the next parts in sequence (phase 1 on L1 and Q1 gives phase 2 L2 and Q2), or the same parts on the next sheet of a board annotated by sheet (L101 → L201), or copies the previous phase when there is no next part.
  3. Choose each phase in Edit phase to check its pins, and change any that are wrong.
  4. Set the shared set voltage, type, efficiency and sense pins once.

Each phase carries an equal share of the output current and settles at whatever voltage its copper needs. The VRM regulates its sense pins or, without them, the average of its phase outputs. The VRMs table lists each phase under its VRM: unequal phase voltages show a layout imbalance.

4. Remote sense
  1. On the VRM, set Sense pins to the point the feedback trace connects to (often the load's supply pins).
  2. For differential sensing, also set Ground sense pins on the ground net (the VRM needs ground pins too).
  3. Solve. The sense point sits exactly at the set voltage; pins nearer the VRM read above it (a boost). The tolerance check catches both directions.
5. Solving only part of the board

When some rails are not routed or modeled yet, open the Solve tab and untick their groups. The rest solves, with the substitutions described under Solve tab. Untick the group a Cannot solve message names to get past a setup problem while you fix it.

6. Thermal and current capacity checks
  1. Thermal tab: tick Electro-thermal co-simulation, set ambient and airflow, and limits for maximum temperature and rise.
  2. On the Vias results tab, set the Current limit per via from your fab's via current rating (it starts at 1 A).
  3. Solve all (electro-thermal). Read the Thermal tab for the hottest point per layer, and sort the Vias tab by current for overloaded vias.
  4. Use the Temperature field to see the map; double-click a Thermal row to jump to its group.
7. Designing decoupling to a target impedance (AC)
  1. Make sure the rail has a VRM (Source is fine), and tick the rail, its ground and any nets joined by series links.
  2. Switch to AC. Capacitors tab: Models from values, then enter ESL and ESR for each model from the datasheets.
  3. Probes tab: add a probe on the device's power and ground pins. Use the calculator for the target, or a custom mask from the device vendor.
  4. Solve rail. In the plot, put the cursor on the worst peak (the table's Worst |Z| tells you where).
  5. Change capacitor models (values, counts by re-assigning parts) or the layout, and solve again. Each probe's margin in dB shows the improvement.
  6. To compare rails, solve each and switch between them with Rail; each keeps its last result for the session.

Capacitors listed under "have no model and were left out" are not part of the result: give them a model or confirm they really do not belong on this rail.

8. Sharing a board and its results
  • Save snapshot… stores the board; anyone with KiPI can open it with Open snapshot…, or with Open… in standalone KiPI, without KiCad or your design files.
  • Keep <board>.kipi-setup.yml in version control next to the board.
  • Tick HTML report for a single file you can email: it needs nothing but a browser.
  • Export ▾ → Save results… (DC) or Save results… (AC) lets you reopen a long solve later with Open results….

Files KiPI reads and writes

File reference
FileWhat it is
<board>.kipi-setup.ymlThe setup: ticked nets, VRMs, loads, series links, mesh, copper and thermal settings, capacitor models, probes and the sweep, in YAML. Saved next to the board on Save and on every solve.
<board>.kipi-setup.jsonA setup saved by KiPI before 0.8.0. It still opens, with a warning, when there is no .yml setup; the next save writes the .yml and leaves the JSON file alone. JSON setups are deprecated: a future KiPI will stop reading them.
*.kipi.json.gzA board snapshot (copper, stackup, pads, vias, parts).
*.kipi-dc-resultsA saved DC solve: JSON and NumPy arrays in a zip.
*.kipi-dc-thermal-resultsA saved electro-thermal solve (DC with the board temperature), in the same format.
*.kipi-resultsDC results saved by KiPI 0.7 and earlier, as Python pickles, which can run code; KiPI asks before it opens one, and they are deprecated.
*.kipi-ac-resultsSaved AC results, every rail solved, in the same format.
<board>_kipi_report_<date>_<time>.htmlThe DC HTML report.
<board>_<rail>_ac_report_<date>_<time>.htmlAn AC rail's HTML report.
*.csvDC tables, or an AC rail's impedance.
*.vtmDC 3D results for ParaView.
KiPI's environmentStandalone only: the packages the launcher installed, in %LOCALAPPDATA%\KiPI\venv (Windows), ~/Library/Application Support/KiPI/venv (macOS) or ~/.local/share/kipi/venv (Linux), with the launcher's logs in logs beside it. python kipi_launcher.py --reset deletes it.
kipi-<user>.lock,
kipi-standalone-<user>.lock
In the temporary folder while the plugin, or standalone KiPI, is open, so a second one brings the first to the front. It names the owner's process, so one left behind by a crash is ignored.
<board>.kicad_prlKiCad's own local project settings. kicad-cli may create it next to the board the first time it exports part models, if the project has none yet.
kipi-<date>-<time>-<pid>.logThe session log, in kipi/ under the temporary folder, with a matching .crash.log. The last 15 sessions are kept.

Troubleshooting

The KiPI button does not appear in KiCad

Enable Preferences → Plugins → Enable KiCad API and restart the PCB editor. The first start builds a Python environment and downloads a few hundred MB, which can take several minutes. If the button never appears, right-click the action in Preferences → Plugins and choose Recreate Plugin Environment. On macOS, select a Python 3.10–3.13 interpreter there.

"KiPI works with one KiCad at a time"

More than one KiCad project manager or standalone PCB editor is open, and KiPI cannot tell which one holds your board. Close the others (the message lists them with their process IDs) and start KiPI again from the PCB editor of the board you want. If you know the check is wrong, set the environment variable KIPI_ALLOW_MULTIPLE_KICAD=1 to skip it. If the running programs cannot be listed, KiPI carries on.

Standalone KiPI does not set up or start
  • No suitable Python: the launcher needs Python 3.10 to 3.13 and names the ones it found. Install one from python.org (on Linux, also python3-venv).
  • The setup failed: the message says why, and the launcher's log (in logs next to KiPI's environment) has everything the installer printed. Check the network connection and free disk space, then start the launcher again; it picks up where it stopped. python kipi_launcher.py --repair starts over.
  • A message box says to use a terminal: that Python has no tkinter for the setup window. Run python kipi_launcher.py in a terminal and answer there.
A KiCad board file opens with copper missing, or not at all
  • Zones have no copper: they were saved unfilled, and KiPI does not fill zones. Fill them in KiCad (B), save, and Reload. The board summary lists unfilled zones under Placeholders.
  • Copper looks out of date: KiCad fills zones when asked, not on every edit. Refill and save in KiCad after moving copper.
  • "saved by KiCad 6 or older": open the board in KiCad 7 or later, save it, and open it again.
An ODB++ job opens with nets or copper missing
  • "not an ODB++ job": the archive has no matrix/matrix file, e.g. a zip of Gerbers. Export ODB++ from the design tool.
  • "no netlist": the job has no eda/data; export it with its netlist, or KiPI cannot tell which copper is which net.
  • A net from KiCad has a different name: KiCad's ODB++ export writes spaces in net names as underscores. Pick the net again in the setup.
  • A copper drawing carries no current: some exporters (KiCad among them) do not say which net drawn copper is on. KiPI gives it the net of the copper it touches; on its own it has none.
Clicking the KiPI button does not open a new window

KiPI is already open, perhaps minimized or behind KiCad; the button brings it to the front. If it is not open and still does not start, check the session log for a stale lock and delete kipi-<user>.lock (kipi-standalone-<user>.lock for standalone KiPI) from the temporary folder.

No part models are drawn
  • Check 3D Models is ticked in Display. Over results it starts unticked.
  • The log says why. KiPI needs KiCad's kicad-cli: it looks in the connected KiCad, the PATH, the usual install folders and a Flatpak KiCad. Otherwise set the environment variable KIPI_KICAD_CLI to its full path.
  • It also needs the board's .kicad_pcb on disk, next to the project or the snapshot. A snapshot opened on another machine usually has none.
  • A part whose model file KiCad cannot find is named in the log with the missing path; KiCad's own 3D viewer shows the same gap. Fix the path in the footprint's 3D model settings and save the board.
A net is missing from the pin pickers

Pickers only offer nets ticked in the Nets list. Tick it (untick Power & ground only or use the filter to find a signal net).

Loads not connected by copper

Before solving, KiPI checks that every load pin has a path to its VRM through copper or series links, and its ground pins to the ground reference. A pin without one draws nothing, and the Notes tab lists it:

  • Some pins of a load unconnected: its current is drawn through its other pins. A pin group with no pin connected draws nothing.
  • No supply pin, or no ground pin, connected: the load's current is left out of the solve and it shows as DISCONNECTED.
  • A rail where no load is connected at all: the solve stops with Cannot solve. So does an unconnected VRM pin.

The cause is usually unrouted copper, an unfilled zone (keep Refill zones on), or a part in series that needs a series link. Show the net in 3D and look for the gap.

The drop is larger than expected

Thermal reliefs, necked traces and too few vias dominate DC drop. Use Current density with Arrows, and the Vias table sorted by current. Compare the 3D copper with KiCad: KiPI only sees filled copper.

NOT CONVERGED

The iterative solver did not reach its tolerance on a very large group. Raise Max edge to shrink the problem, or install the optional PARDISO solver (see the README) for a direct solve of up to 1M unknowns.

Solves are slow

Raise Max edge, analyze fewer nets at once, and untick unneeded groups in the Solve tab. In AC, lower Field solves per decade or raise Min edge. Large planes are cheap; long fine traces are not. PARDISO helps a lot on large boards (Windows and Linux, x86-64).

An AC curve looks wrong
  • Check the notes for capacitors left out for having no model.
  • Check every model's ESL and ESR units (nH and mΩ).
  • Check the probe's ground pins are on the ground being simulated.
  • Remember the VRM is not modeled: the low-frequency rise is expected.
  • Raise Field solves per decade if resonances look jagged.
Reporting a bug

Open an issue at github.com/drewsum/KiPI/issues. Attach the session's .log and .crash.log, the text from About → Copy version info, and if you can, a board snapshot and setup file that show the problem.

Glossary

Terms used in KiPI
TermMeaning
PIPower integrity: delivering clean, correct supply voltage.
PDNPower distribution network: regulators, copper, vias and capacitors between a supply and its loads.
VRMVoltage regulator module: any regulator or supply.
IR dropVoltage lost to current flowing through copper resistance.
Net groupNets solved together because series links join them.
Remote senseA VRM regulating the voltage at a point other than its output.
PTHPlated through hole (pads with plated drills).
ESR / ESLEquivalent series resistance / inductance of a part.
DCRDC resistance of a series part.
Target impedanceThe highest PDN impedance that keeps supply ripple within tolerance for the expected load steps.
Anti-resonanceAn impedance peak where one capacitor bank's inductance resonates with another's capacitance.
TCRTemperature coefficient of resistance.

KiPI is free software under the GNU GPL v3 or later. Source and issues: github.com/drewsum/KiPI.