Add PCB intra-pair skew only when the datasheet gives millimetres.

PS-SI-001 and decoupling skip without a numeric layout_rule. Tests use simple_project nets, not invented USBPHY boards.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-10 23:34:57 +02:00
co-authored by Cursor
parent be0fed7979
commit 45e820fabc
13 changed files with 201 additions and 149 deletions
+1 -1
View File
@@ -31,7 +31,7 @@ Rules for pin extraction:
Optional extras (omit if the PDF does not show them):
- `internal_features.pullup_pins` / `esd_clamp_pins` / `analog_switch` from the **block diagram** only.
- `layout_rules` from **PCB layout / typical application** pages. `kind` is only `decoupling_proximity`, `thermal_via`, or `keepout`. Set `max_distance_mm` only when the document states a number — do not invent JEDEC millimetres.
- `layout_rules` from **PCB layout / typical application** pages. `kind` is only `decoupling_proximity`, `thermal_via`, `keepout`, or `length_match` (intra-pair skew mm). Set `max_distance_mm` only when the document states a number — do not invent JEDEC or USB millimetres.
Rules for pin extraction:`
- If the datasheet has separate tables for different packages, extract for the package matching the MPN
+1 -1
View File
@@ -85,7 +85,7 @@ def validate(data: dict) -> list[str]:
if not isinstance(data["layout_rules"], list):
errors.append("layout_rules must be an array")
else:
kinds = {"decoupling_proximity", "thermal_via", "keepout"}
kinds = {"decoupling_proximity", "thermal_via", "keepout", "length_match"}
for i, row in enumerate(data["layout_rules"]):
if not isinstance(row, dict):
errors.append(f"layout_rules[{i}] must be an object")