Schaltplan und Layout
Automatisches Routing
agentee route, tie, tune und neck: Gitterrouting, das Klassengrößen, Abstände und Vias beibehält, Ebenenverbindungen, Längengleichung und Halsverjüngungen.
agentee route NAME --nets 'FX_D*,SPI_*' --layers F.Cu,In2.Cu,B.Cu (MCP route) routet das Ratsnest der benannten Netze auf einem Raster (--grid, Standard 0,05 mm) und hängt die Leiterbahnen und Vias als gewöhnliche [[tracks]] und [[vias]] an die Layout-Datei an, sodass du sie danach selbst bearbeiten kannst. Es hält die Breite, den Freiraum und layers jeder Netzklasse gegenüber jedem Pad, jeder Leiterbahn, jedem Via, jedem Loch und dem Platinenrand ein, dimensioniert den Raum für jedes Via einer Klasse anhand seines eigenen Pads, Bohrers und seiner Lagen (ein Mikrovia passt, wo ein Durchgangsvia nicht passt, und ein Mikrovia darf neben einem vergrabenen Via auf anderen Lagen sitzen), hält neue Vias min_hole_to_hole von jedem Bohrer, dessen Spannweite ein Dielektrikum mit ihren teilt, und ihre Löcher min_via_hole_to_copper von Pads, Leiterbahnen und Vias anderer Netze, hält sie von SMD-Pads aller Netze fern, auch der eigenen (das Via-Kupfer darf eines nicht berühren, via-cuts-pad, und das Loch bleibt min_hole_to_smd_pad davon entfernt, hole-to-smd-pad, es sei denn, --via-in-pad, MCP via_in_pad, lässt es vollständig innerhalb eines SMD-Pads seines Netzes sitzen, mit einem Bohrer von höchstens max_filled_via_drill), nutzt die Vias der Klasse zum Lagewechsel, die günstigsten, deren Spannweite beide Lagen hält (--via uv-top,core oder MCP via, um andere Namen zu wählen, --via-cost in mm Leiterbahn, Standard 3, mal dem cost des Vias), berechnet --bend-cost mm Leiterbahn für jede 45-Grad-Knickung (Standard 0,1, dreimal so viel für 90 Grad) und bewegt nie etwas, das schon da ist, es sei denn, --reroute ist angegeben, was zuerst die Leiterbahnen und Vias der benannten Netze löscht. Eine Verbindung, die keinen freien Pfad findet, reißt die gerouteten Netze auf, die sie kreuzen würde oder deren Via-Löcher sie innerhalb von min_hole_to_hole von ihren eigenen bringen würde (Löcher, deren Spannweiten ein Dielektrikum teilen), merkt sich die Stelle als beengt, und diese Netze kommen wieder in die Warteschlange. Die Suche schreitet in 45-Grad-Richtungen voran und berechnet für jede Knickung, sodass Pfade als gerade Abschnitte mit 45-Grad-Knickungen herauskommen; danach werden Abschnitte mit zwei Segmenten und 45-Grad-Doglegs straffgezogen und jeder verbleibende 90-Grad-Eck wird abgerundet, wo es freihält. Nur der Stumpf in ein außerhalb des Rasters liegendes Pad-Zentrum darf in einem anderen Winkel sitzen. Wo die Klassenbreite nicht in ein Endpad passt (breiter als die kleinere Seite des Pads oder zu nah an den benachbarten Pads, um den Freiraum zu halten), verjüngt sich die Route: die Leiterbahn der Klassenbreite endet kurz vor dem Pad, und ein separater [[tracks]]-Eintrag mit expliziter width läuft gerade ins Pad-Zentrum, höchstens so lang wie das Klassen-neckdown und nicht schmaler als min_track_width. Ihre Breite ist das Minimum aus Klassenbreite, kleinerer Seite des Pads und der breitesten, die den Freiraum hält, abgerundet auf 0,01 mm (oder exakt min_track_width, wo das Abrunden darunter fallen würde und die nicht abgerundete Breite es nicht tut); die breite Leiterbahn beginnt an der ersten Stelle vom Pad weg, wo ihre volle Breite den Freiraum hält (und, bei einem schmaleren Pad als der Leiterbahn, außerhalb des Pads). Pads eines Netzes, die sich berühren, wie ein thermisches Pad aus mehreren Pad-Einträgen, zählen als ein breites Pad. Paare, die mit --pairs geroutet werden, verjüngen sich nicht. Eine Verbindung eines Netzes, das bereits frisches Kupfer hat, startet von diesem Kupfer aus. Sobald alles drin ist, wird jede geroutete Verbindung, die Vias nutzt, nacheinander auf einer Lage mit dem Rest fixiert erneut versucht, und die Ein-Lagen-Route ersetzt sie, wenn sie höchstens 25 % plus 1 mm länger ist. Dann werden die Vias benachbarter paralleler Verbindungen, die in der Nähe zueinander die Lage wechseln, entlang ihrer eigenen Leiterbahnen auf eine gemeinsame Zeile oder Spalte im Raster geschoben, wo die Stelle legal ist und die Verbindung ihre Länge behält (Paar-Beine, die von --pairs gehalten werden, und Netze mit mehreren Verbindungen bleiben an ihrem Platz). Ein Netz in einer Schnittstelle mit max_vias hält die Spur (jedes Netz der Spur, durch Serienbauteile) innerhalb davon: eine Route mit zu vielen Vias wird mit teureren Vias erneut versucht, dann auf einer Lage, und schlägt fehl mit dem Grund, wenn keine passt. Das zweite Netz eines Paares wird mit dem Paarabstand zu seinem Partner gezogen; --pairs versucht zuerst, beide Hälften zusammen als eine gekoppelte Leiterbahn zu routen. Wenn wenige Verbindungen fehlschlagen, routiere sie erneut zusammen mit den Netzen in ihrer Umgebung und --reroute, damit der Router den ganzen Bereich aufreißen und neu ordnen kann, oder weiche auf --grid 0.025 aus. --dry-run meldet, ohne zu schreiben. Routiere zuerst die Netze, die wichtig sind, von Hand, und lass dann den Router den Rest füllen, eine Klasse nach der anderen.
Ein Netz mit einem [[zones]]-Eintrag ist ein Ebenennetz. Ein Glob in --nets trifft es nie, also routet --nets '*' jedes Signal und jede Versorgung, die keine Kupferfläche hat, und lässt Masse an den Ebenen; benenne das Netz exakt, um es trotzdem mit Leiterbahnen zu routen. Vias, die von [[stitching]]-Regeln platziert werden, sind keine Hindernisse für den Router: die Regel platziert sie erneut um das neue Kupfer herum.
agentee tie NAME [--nets GND] [--dry-run] (MCP tie) verbindet jedes SMD-Pad eines Ebenennetzes mit der nächsten Lage, die seine Kupferfläche abdeckt, mit einem kurzen Stumpf und einem Via neben dem Pad, so schließen Masse- und Versorgungspads an eine Ebene an, statt mit Leiterbahnen dazwischen. Das Via sitzt auf der Seite des Pads weg vom Bauteilzentrum, so nah wie möglich: sein Kupfer frei von jedem SMD-Pad (auch dem eigenen, also kein via-in-pad), sein Loch min_hole_to_smd_pad davon entfernt, min_hole_to_hole von anderen Löchern, min_via_hole_to_copper und der Klassenfreiraum von anderen Netzen, min_copper_to_edge vom Umriss entfernt, und der Stumpf frei von anderen Netzen auf der Pad-Lage. Es probiert 16 Richtungen, zuerst die nächstgelegene nach außen, bis 1,2 mm über das Pad hinaus. Ein Pad, das bereits ein Via seines Netzes innerhalb von 0,8 mm von seinem Rand hat, bleibt unangetastet, Durchgangs-Pads und BGA-Bälle (escape behandelt die) werden übersprungen, und ein Pad ohne legale Stelle wird unter failed aufgelistet. Die Stümpfe und Vias werden als gewöhnliche [[tracks]] und [[vias]] angehängt.
agentee neck NAME [--nets 'VBUS,RF_*'] [--taper] [--dry-run] (MCP neck) verengt Kupfer, das bereits vorhanden ist. Es betrachtet beide Enden jeder Leiterbahn der benannten Netze (Standard: alle), die innerhalb eines Pads ihres Netzes auf ihrer Ebene enden, und nimmt diejenigen, die breiter als die kleinere Seite des Pads sind oder deren volle Breite innerhalb der Länge neckdown (plus eine Leiterbahnbreite) des Pads den Abstand in der Klasse verletzt. Ein solches Ende wird abgeschnitten: Die Leiterbahn behält ihre Breite vom Schnitt nach außen, und ein neuer [[tracks]]-Eintrag mit expliziter width verläuft vom alten Endpunkt im Pad zum Schnitt entlang des alten Pfads. Die Halsbreite ist der kleinste Wert aus der Leiterbahnbreite, der kleineren Seite des Pads und der größten Breite, die den Abstand entlang des Halses einhält, abgerundet auf 0,01 mm (oder exakt min_track_width wie oben). Der Schnitt ist der erste Punkt, in 0,01-mm-Schritten, an dem die volle Breite den Abstand für die nächste neckdown-Länge plus eine Leiterbahnbreite einhält (und, bei einem schmaleren Pad als der Leiterbahn, außerhalb des Pads liegt). Ein Hals ist nie länger als neckdown und nie schmaler als min_track_width, sonst wird das Ende unter failed mit dem Grund aufgelistet und unverändert gelassen. Ein Pad, das aus mehreren Pad-Einträgen desselben Netzes besteht, die sich berühren, zählt als ein breites Pad. --taper steigert die Breite über eine kurze Kette anstatt eines einzelnen Halses: Nach dem schmalen Hals folgen bis zu zwei weitere Einträge, jeweils ein Drittel des Weges von der Halsbreite zur Leiterbahnbreite, zusammen nicht länger als neckdown (dreimal der Hals, maximal). Das Kupfer wird nur schmaler, daher kann kein neuer Abstandsfehler auftreten; die Datei wird an Ort und Stelle bearbeitet (jede andere Zeile bleibt erhalten) und gespeicherte Kupferflächen-Ausfüllungen werden aktualisiert. Der Bericht listet jeden Hals auf (Leiterbahn-Index, Netz, Pad, Grund, Breite, Länge, Einträge) und zählt die geänderten und hinzugefügten Leiterbahnen.
Paare und Längenregeln befinden sich ebenfalls im Layout:
[[pairs]] # optional: nets ending _P/_N, _DP/_DN, +/-, P/N in a class
p = "USB_DP" # with diff_gap are paired on their own
n = "USB_DN"
max_skew = "0.1mm" # or `max_skew` on the net class
[[match_groups]]
name = "ddr-dq0"
nets = ["DQ?", "DQS0_*"] # * and ? globs
tolerance = "0.5mm"
# target = "42mm" # default the longest memberDie Prüfung meldet den Skew jedes Pairs in mm und ps (aus der effektiven Permittivität der Ebene), einen Abschnitt des Pairs mit falschem Abstand und Paare, die weniger als 80 % ihrer Länge nebeneinander verlaufen. Match-Gruppen zeigen an, welches Netz zu kurz oder zu lang ist und um wie viel. Ein Pair, das durch zweipolige Bauteile in Reihe verläuft, wie die AC-Kondensatoren auf einer USB-Leitung, wird von Ende zu Ende gemessen: Sein Skew ist die Summe über alle Paare, die es verbindet, gemeldet als FX_TX1_P+SS_TX1_P/FX_TX1_N+SS_TX1_N.