APPENDIX — Anatomy of PDK Mismatches (sky130 / gf180)

This appendix explains why PDK mismatches are the single most destructive failure mode in OpenLane-based flows.

PDK mismatches do not usually fail loudly. They fail silently, inconsistently, and waste enormous amounts of time.

This document exists so you can identify, avoid, and permanently eliminate this class of failure.


What “PDK mismatch” actually means

A PDK mismatch does not mean:

It means:

Different tools are unknowingly using different PDK contents or versions.

This can happen even when:


Why PDK mismatches are so dangerous

PDK mismatches cause failures that appear as:

These are not random bugs.
They are deterministic consequences of inconsistency.


The three PDK identity layers

A PDK has three independent identities:

1. File-system identity

2. Content identity

3. Tool binding identity

A mismatch in any of these layers breaks consistency.


Common PDK mismatch patterns

Pattern 1: Windows / WSL split-brain

Symptom

Root cause

Rule

Never place PDKs under /mnt/c. Ever.


Pattern 2: Partial PDK copy

Symptom

Root cause

Rule

A partially copied PDK is worse than no PDK.


Pattern 3: Mixed PDK generations

Symptom

Root cause

Rule

“Latest” is not a version. It is a liability.


Pattern 4: Docker vs host PDK mismatch

Symptom

Root cause

Rule

Docker and host must see the same PDK, or be fully isolated.


The only safe PDK strategy

Golden rules

  1. One PDK location
  2. One PDK version
  3. One ownership model
  4. No rebuilds
  5. No partial copies

Recommended:

~/pdk/
 ├── sky130A/
 └── gf180mcuC/

And nowhere else.


Why rebuilding PDKs is almost always wrong

Rebuilding a PDK:

Unless you are developing the PDK itself:

Rebuilding is regression, not progress.


Detection checklist

If something feels “off”, check:

If the answer is “maybe”: assume PDK mismatch until proven otherwise.


The export/import advantage

WSL export/import works because:

This is why export/import is not a backup.

It is version control for environments.


Final principle

PDKs are not dependencies.
They are assets.

Treat them accordingly, and OpenLane becomes stable.

Ignore this, and no amount of debugging will save you.