Ensuring PCB Readiness for Specctra-compatible Routers in Altium Designer
Altium Designer's Specctra Exporter offers translation of specifically formatted width and clearance design rules, enabling a smoother transition and greater success when using Specctra-compatible routing products with Altium Designer.
Background
Specctra design rules and Altium Designer design rules are quite different, in terms of their nature and implementation. The following conceptual differences set the scene for the challenge to successfully transfer a design from Altium Designer to Specctra:
- Specctra has fixed (hard-coded) scoping hierarchy, which also determines the order in which rules are applied (e.g. Net-level rules are always applied before Net Class rules). Altium Designer has a more powerful, and flexible, rule system. Neither precedence (priority) nor scoping is fixed. You can freely define a rule's scope using expressions, then set that rule's priority as required. You could therefore have a Net Class scoped rule that is executed before Net scoped rules.
- In Specctra, a scope can be seen to have associated rules – a collection of rules are applicable to an instance of a scope. In Altium Designer, this is not the case. Apart from the default "All" scope, all other scopes across all defined rules for a design might be different.
- Specctra rules can be evaluated to an attribute at the primitive level, for example a track in net A requires 8mil clearance against all other objects. Some of Altium Designer's rules (binary rules to be specific) can never be evaluated to a primitives attribute level. For example, the clearance between tracks in nets A and B can be different from the clearance applicable between tracks in nets A and C – resulting in no single unified value for tracks in net A.
In summary, it can be a fair appraisal that Altium Designer's scoping system is more expressive than the Specctra rule system and, in general, is a superset of the Specctra scoping system.
Defining the Rules in Altium Designer
If you plan to route your Altium Designer PCB design using Specctra, it is highly recommended that you follow the Specctra scoping hierarchy, to maximize translation correctness and routing results. The following table provides a rule-definition guideline. It summarizes the various fixed scopes on the Specctra side and, where supported by the exporter, the required scoping on the Altium Designer side, along with priority. These 'mappings' if you like, aim to make the rule export process more streamlined and avoid the need to manually hand-craft the required rules, post-export, on the Specctra side.
Specctra Scope
|
Altium Designer Scope
|
Altium Designer Priority
|
|
---|---|---|---|
1st Object Query
|
2nd Object Query
|
||
PCB Design | All | All |
12
|
Layer | OnLayer('LayerName') | All |
11
|
Net Class | InNetClass('NetClassName') | All |
10
|
Net Class on Layer | InNetClass('NetClassName') And OnLayer('LayerName') | All |
9
|
Group Set |
Not Supported in Altium Designer
|
||
Group Set on Layer |
Not Supported in Altium Designer
|
||
Net | InNet('NetName') | All |
8
|
Net on Layer | InNet('NetName') And OnLayer('LayerName') | All |
7
|
Group | Emulated using From To Class:
InFromToClass('FromToClassName') |
All |
6
|
Group on Layer | Emulated using From To Class:
InFromToClass('FromToClassName') And OnLayer('LayerName') |
All |
5
|
FromTo | InFromTo('NetName (FromPad : ToPad)') | All |
4
|
FromTo on Layer | InFromTo(NetName (FromPad : ToPad)') And OnLayer('LayerName') | All |
3
|
Class vs. Class | InNetClass - InNetClass currently not supported by Exporter |
2
|
|
Class vs. Class on Layer |
Currently Not Supported by Exporter
|
||
Padstack |
Not Supported in Altium Designer
|
||
Region | WithinRoom('RoomName') | WithinRoom('RoomName') |
1
|
Net Class in Region |
Currently Not Supported by Exporter
|
||
Net in Region |
Currently Not Supported by Exporter
|
||
Class vs. Class in Region |
Currently Not Supported by Exporter
|
Notes
- Multiple expressions can be combined within a single Altium Designer rule using the
OR
operator – reducing the overall number of rules in the design. For example:
InNet('N1') OR InNet('N2') OR InNet('N3')
– making the rule applicable to any of the netsN1
,N2
, orN3
.OnLayer('L1') OR OnLayer('L2')
– making the rule applicable to an object on either layerL1
or layerL2
.
- For the rule priority in Altium Designer,
1
is the highest priority and will be applied first.
Primitive-based Scope Modifiers
The following expressions are supported as scope modifiers:
IsPad
IsThruPin
IsSMDPad
IsVia
IsTrack
IsFill
IsPolyRegion
IsTestPoint
TestPoint
These modifiers are useful for a clearance rule, where you might want to define different clearance values between, for example, via and pad, compared to via and track. The following example scopes show how these modifiers can be used in clearance rule definitions:
- Pad to via clearance for net N1:
InNet('N1') AND IsVia vs IsPad
- Track to track clearance on top layer for net N1:
InNet('N1') AND IsTrack vs IsTrack AND OnTopLayer
Scope Aliases
As with spoken languages, when defining rule scopes, the same meaning can often be achieved in different ways. The following aliases are supported for layer-based scopes:
OnTop
orOnTopLayer
– aliases forOnLayer('TopLayerName')
OnBottom
orOnBottomLayer
– aliases forOnLayer('BottomLayerName')
OnMid
– alias used for layers Mid Layer 1 to Mid Layer 30 (i.e. signal layers excluding top and bottom)
OnSignal
– alias used for all signal layers
TestPoint
andIsTestPoint
are aliases of each other.