Skip to content

feat: Altium PORT connectivity and multi-channel expansion#52

Merged
valentinozegna merged 4 commits into
mainfrom
feat/altium-multichannel-ports
Mar 10, 2026
Merged

feat: Altium PORT connectivity and multi-channel expansion#52
valentinozegna merged 4 commits into
mainfrom
feat/altium-multichannel-ports

Conversation

@valentinozegna
Copy link
Copy Markdown
Contributor

Summary

  • Add PORT (RECORD=18) as globally-named connectable device for cross-sheet signal connectivity
  • Add multi-channel expansion via PrjPCBStructure parsing: repeated sheets expanded into N channel instances with correctly classified nets (power/shared/per-channel)
  • Fix DSN parser 0x00 skip marker in LibraryPart SymbolPin parsing

Fixes #44.

Verified

  • 53/53 MCP spot-checks passed across all Altium fixtures (aberrant-sound-module, pca10056, LimeSDR, STM32)
  • aberrant-sound-module: 3x AY-3-8912 expanded (DD12_AY1/AY2/AY3), shared bus (AD0-AD7, BDIR) and per-channel nets (CS_AY1-3, L_AY1-3) correct
  • pca10056: SHIELD_DETECT properly resolved via PORT (was NetU7_10/NetR68_1)
  • Zero regressions on LimeSDR and STM32 fixtures
  • 403 tests pass

Test plan

  • npm run type-check && npm run lint && npm test (403 pass)
  • Golden files regenerated and diffed (only aberrant_sound_module and pca10056 changed, both improvements)
  • MCP tool spot-checks on all Altium fixtures

Match C++ reference behavior (StructLibraryPart.cpp:106-123) by
peeking for 0x00 before each SymbolPin. Prevents parse failures and
reader corruption on DSN files with convert-view pin placeholders.
…rser

Add PORT (RECORD=18) as a globally-named connectable device so cross-sheet
signals connect by name (like NET_LABEL/POWER_PORT). This fixes designs
where signals cross sheet boundaries via PORT records (e.g., SHIELD_DETECT
on pca10056).

Add multi-channel expansion via PrjPCBStructure parsing. Repeated sheets
(e.g., Repeat(AY,1,3)) are expanded into N channel instances with renamed
components ($Component_$RoomName) and correctly classified nets:
- Power nets: global (unchanged)
- Shared SHEET_ENTRY signals: global (bus notation expanded, e.g., AD[0..7])
- Repeat() SHEET_ENTRY signals: per-channel suffix (e.g., CS -> CS_AY1)
- Local nets: per-channel suffix

Fixes #44.
@valentinozegna valentinozegna merged commit de47405 into main Mar 10, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Parse Altium Multi-Channel designs

1 participant