The drc.py module#

Summary#

MinLineWidth

Minimum trace width constraint rule.

MinClearance

Minimum spacing constraint between nets.

MinAnnularRing

Minimum annular ring constraint for drilled holes.

DiffPair

Differential pair net definition.

DiffPairLengthMatch

Length matching constraint for differential pairs.

BackDrillStubLength

Maximum back-drill stub length constraint.

CopperBalance

Copper density balance constraint.

Rules

Centralized container for all design rule categories.

Drc

High-performance DRC engine for PyEDB.

Description#

Design Rule Check (DRC) engine for PyEDB.

This module provides a high-performance, multi-threaded design-rule checker that runs inside an open PyEDB session and validates industry-standard rules including geometry, spacing, manufacturing, high-speed, and test constraints.

The DRC engine features:

  • Multi-threaded rule checking using ThreadPoolExecutor

  • R-tree spatial indexing for fast geometry queries

  • Impedance checks via analytical formulas (Wheeler, Cohn, Hammerstad-Jensen)

  • Copper balance verification by layer or zone polygons

  • Back-drill stub and depth verification

  • IPC-D-356A netlist export with DRC annotations

Examples#

Basic DRC workflow:

>>> import pyedb
>>> from pyedb.workflows.drc.drc import Drc, Rules
>>> edb = pyedb.Edb(edbpath="my_board.aedb")
>>> rules = Rules.parse_file("rules.json")
>>> drc = Drc(edb)
>>> violations = drc.check(rules)
>>> print(f"Found {len(violations)} violations")

Build rules programmatically:

>>> rules = (
...     Rules()
...     .add_min_line_width("trace_width", "3.5mil")
...     .add_min_clearance("clk2data", "4mil", "CLK*", "DATA*")
...     .add_copper_balance("top_balance", max_percent=10, layers=["TOP"])
... )
>>> drc = Drc(edb)
>>> violations = drc.check(rules)

Export results for fabrication review:

>>> drc.to_ipc356a("fab_review.ipc")