What this error means

ERC groups every placed symbol whose library symbol has more than one unit by reference designator, across all sheets of the hierarchy. Within each group it takes the first unit that has a non-empty Footprint field as the reference value, then compares every other unit's non-empty Footprint field against it as an exact string. Any difference produces one error per disagreeing unit, with the message Different footprints assigned to U1A and U1B.

Units with an empty Footprint field are skipped, so one assigned unit next to blank ones is fine. Single-unit symbols and unannotated units (reference still ending in ?) are never part of this check. The comparison is textual: KiCad does not look up either footprint, it only checks that the strings match.

Common causes

1. The units' Footprint fields drifted apart

Each placed unit stores its own copy of the Footprint field in the schematic file. A unit pasted in from another design, a duplicate of an older copy, or an edit that touched only one unit leaves the others holding the previous assignment. The part was one package all along; the field copies just stopped agreeing.

2. Two different parts ended up sharing one reference

Grouping is by reference text across the whole hierarchy. If manual renumbering or a reset annotation gave two physically separate chips the same reference, ERC now sees them as units of one package and compares their footprints. The mismatch is real, but the bug is the reference collision, not the footprint.

3. You are trying to give each unit its own package

Units of one symbol are gates of one physical part: one reference, one footprint, one set of pads on the board. If you actually want an SOIC-8 here and a DIP-8 there, those are two components, and they need separate references (and usually single-unit symbols).

How to fix it

Assign one footprint to the whole part

  1. Read the error message: `U1A` and `U1B` are units A and B of U1, and their Footprint fields disagree. Decide which footprint is the right one.
  2. Open **Tools → Assign Footprints…** — the tool shows one row per reference, so assigning the footprint there writes the same value to every unit. Alternatively, open each flagged unit's properties (select it, press E) and make the Footprint fields identical.
  3. Re-run ERC (Inspect → Electrical Rules Checker).

Use when: The units are one physical package and one of them carries a stale assignment — the common case. Clearing the stray field also works: units with an empty Footprint are skipped by the check.

Split the reference if they are really two parts

  1. Check where the flagged reference appears (highlight it, or search with the reference in the find dialog). If two separate chips share it, the annotation is wrong.
  2. Change the Reference field of the wrong symbol by hand (select it, press E), or re-run **Tools → Annotate Schematic…** over the affected scope.
  3. Assign each part its own footprint, then re-run ERC.

Use when: The two units should never have been one symbol — a reference collision merged two components into one group.

When it’s safe to exclude

Almost never. One reference becomes one footprint on the board, and while the fields disagree the schematic does not say which package you meant. That ambiguity does not go away by hiding the marker.

Excluding the marker (right-click → Exclude this violation) or downgrading the check in Schematic Setup → Electrical Rules → Violation Severity only postpones the same choice to layout, where it resurfaces as the wrong package on the board. The fix costs one footprint assignment; make it in the schematic.

Gotchas

  • The comparison is an exact string match. Lib_A:SOIC-8 and Lib_B:SOIC-8 are the same copper but a different string, so they still error. So does stray whitespace.
  • The "reference" footprint is just the first non-empty one ERC finds, not the correct one. Read the message as "these two disagree", not "the first one wins."
  • Blank fields never trip this check, so it will not tell you that a part has no footprint at all — that complaint arrives later, when you update the PCB from the schematic.
  • Units on different sheets are still one group. Spreading U1's gates across the hierarchy is normal practice and changes nothing here.
Minimal reproduction

Place both units of any multi-unit symbol (a dual op-amp works), let them annotate as one reference (U1A, U1B), then set a different Footprint on each unit: select a unit, press E, and edit the Footprint field. Run ERC:

[different_unit_footprint]: Different footprints assigned to U1A and U1B
    ; error

The checked-in file data/erc/samples/different_unit_footprint.kicad_sch reproduces this with an embedded two-unit symbol placed as U1A (SOIC-8) and U1B (DIP-8). Because the file embeds its own symbols, ERC also emits two lib_symbol_issues warnings about the missing repro library; those are an artifact of the self-contained repro, not part of this error. Making the two Footprint fields identical — or clearing one of them — drops the error count to zero.

FAQ

Do I assign a footprint to each unit of a multi-unit symbol separately?

No. All units that share a reference (U1A, U1B, …) are one component with one footprint field. Assign it once — the Footprint Assignment Tool shows exactly one row per reference, which is the easiest way to keep the units consistent.

Can two units of the same symbol have different footprints?

No. Units are sections of one physical package, so they share a reference and a footprint by definition. If the circuit needs the sections in two packages, use two components with separate references — for example the single-unit variant of the symbol twice.

My symbol's units are on different schematic sheets. Why does ERC compare them at all?

Units are grouped by reference designator across the whole hierarchy, not per sheet. U1A on the analog sheet and U1B on the power sheet are one package, so their Footprint fields must match. Placing units on different sheets is fine and common; only the field values matter.

Sources