Erstellen Sie für ein einfaches zweiseitiges Board zunächst ein Grundpolygon auf der gesamten unteren Ebene. Der Trick besteht dann darin, Eagle dazu zu bringen, die meisten Verbindungen auf der obersten Ebene zu routen. Machen Sie dazu die Routing-Kosten innerhalb eines Polygons hoch und die Via-Kosten niedrig. Eigentlich möchten Sie mit Parametern beginnen, die eher eine Lösung finden, und dann die Anforderungen über mehrere Optimierungsdurchläufe hinweg verschärfen.
Verlegen Sie vor dem automatischen Routing die kritischen Spuren manuell und verbinden Sie alle möglichen Erdungen direkt am Pad mit der Erdungsschicht. Dadurch wird kein Routing-Platz verschwendet, der das Gelände verbindet.
Natürlich muss dies alles mit einem guten Layout beginnen, das versucht, verbundene Dinge nahe beieinander zu platzieren und sich darauf auszurichten, so wenig Überkreuzungen wie möglich zu haben.
Nach dem automatischen Routing müssen Sie einige manuelle Bereinigungen durchführen. Das Maß einer Grundebene ist, wie klein die maximale Abmessung einer Insel ist. Viele kleine Inseln sind besser als einige große. Dies bedeutet, dass Sie möchten, dass die Grundebene nach Möglichkeit um jede Durchkontaktierung fließt. Leider neigt Eagle dazu, Durchkontaktierungen zu verklumpen, selbst wenn der Umarmungsparameter auf 0 gesetzt ist. Sie können ihn nicht negativ einstellen, habe ich versucht. Dies bedeutet, dass Sie sehen müssen, was der Auto-Router getan hat, und die Dinge ein wenig bewegen müssen, um zu versuchen, Klumpen von Durchkontaktierungen aufzubrechen.
Es geht hauptsächlich darum, den Auto-Router richtig zu verwenden und zu erkennen, dass es sich um ein Werkzeug handelt, das Ihr eigenes Gehirn nicht ersetzt. Wenn Sie Feuer erwarten und vergessen, werden Sie keine guten Bretter bekommen.
Wie auch immer, hier ist eine Auto-Router-Steuerdatei von einem meiner 2-Layer-Boards, wobei die unterste Ebene eine Grundebene ist:
[Standard]
RoutingGrid = 4mil
;; Trace-Parameter:
tpViaShape = Rund
;; Bevorzugte Richtungen:
PrefDir.1 = *
PrefDir.2 = 0
PrefDir.3 = 0
PrefDir.4 = 0
PrefDir.5 = 0
PrefDir.6 = 0
PrefDir.7 = 0
PrefDir.8 = 0
PrefDir.9 = 0
PrefDir.10 = 0
PrefDir.11 = 0
PrefDir.12 = 0
PrefDir.13 = 0
PrefDir.14 = 0
PrefDir.15 = 0
PrefDir.16 = *
Aktiv = 1
;; Kostenfaktoren:
cfVia = 50
cfNonPref = 5
cfChangeDir = 2
cfOrthStep = 2
cfDiagStep = 3
cfExtdStep = 0
cfBonusStep = 1
cfMalusStep = 1
cfPadImpact = 4
cfSmdImpact = 4
cfBusImpact = 0
cfHugging = 3
cfAvoid = 4
cfPolygon = 10
cfBase.1 = 0
cfBase.2 = 1
cfBase.3 = 1
cfBase.4 = 1
cfBase.5 = 1
cfBase.6 = 1
cfBase.7 = 1
cfBase.8 = 1
cfBase.9 = 1
cfBase.10 = 1
cfBase.11 = 1
cfBase.12 = 1
cfBase.13 = 1
cfBase.14 = 1
cfBase.15 = 1
cfBase.16 = 5
;; Maximale Anzahl von ...:
mnVias = 20
mnSegments = 9999
mnExtdSteps = 9999
mnRipupLevel = 50
mnRipupSteps = 300
mnRipupTotal = 500
[Folge mir]
@Route
Aktiv = 1
cfVia = 8
cfBase.16 = 0
mnRipupLevel = 10
mnRipupSteps = 100
mnRipupTotal = 100
[Busse]
@Route
Aktiv = 1
cfVia = 10
cfChangeDir = 5
cfBusImpact = 4
cfPolygon = 25
cfBase.16 = 10
mnVias = 0
mnRipupLevel = 10
mnRipupSteps = 100
mnRipupTotal = 100
[Route]
@Standard
Aktiv = 1
[Optimize1]
@Route
Aktiv = 1
cfVia = 99
cfNonPref = 4
cfChangeDir = 4
cfExtdStep = 1
cfHugging = 1
cfPolygon = 30
cfBase.16 = 10
mnExtdSteps = 20
mnRipupLevel = 0
mnRipupSteps = 100
mnRipupTotal = 100
[Optimize2]
@ Optimize1
Aktiv = 1
cfNonPref = 3
cfChangeDir = 3
cfBonusStep = 2
cfMalusStep = 2
cfPadImpact = 2
cfSmdImpact = 2
cfHugging = 0
cfPolygon = 40
mnExtdSteps = 15
[Optimize3]
@ Optimize2
Aktiv = 1
cfVia = 80
cfNonPref = 2
cfChangeDir = 2
cfPadImpact = 0
cfSmdImpact = 0
cfPolygon = 50
mnExtdSteps = 10
[Optimize4]
@ Optimize3
Aktiv = 1
cfVia = 60
cfNonPref = 1
cfPolygon = 60
cfBase.16 = 12
[Optimize5]
@ Optimize4
Aktiv = 1
cfVia = 40
cfNonPref = 0
cfPolygon = 70
cfBase.16 = 14
mnExtdSteps = 5
[Optimize6]
@ Optimize5
Aktiv = 1
cfVia = 20
cfBase.16 = 16
[Optimize7]
@ Optimize6
Aktiv = 1
cfBase.16 = 18
[Optimize8]
@ Optimize7
Aktiv = 1
cfBase.16 = 20