agentee

Schaltplan und Layout

Automatische Platzierung

agentee place: Steckverbinder an den Rändern, große Chips in der Mitte, Entkopplungskondensatoren an ihren Pins, dann legalisiert und verfeinert.

agentee place NAME [--parts 'U*,C1?'] [--keep-placed] [--side F|B|both] [--seed N] [--dry-run] (MCP place) platziert die Bauteile des Schaltplans des Layouts innerhalb des Platinenrisses und schreibt für jedes at, rotation und side in seinen [[footprints]]-Eintrag (fügt Einträge für neue Bauteile hinzu, entfernt das at eines verschobenen Labels), verschiebt die Referenzlabels, die nun eine Bestückungsdruckprüfung nicht bestehen, und aktualisiert dann die gespeicherten Füllungen. Es ist ein schneller Start für eine ganze Platine: platzieren, ansehen, dann das Wichtige von Hand verschieben und sperren. --parts platziert nur die passenden Bauteile und lässt den Rest an seinem Ort; --keep-placed lässt jedes Bauteil, das bereits eine Platzierung hat; locked = true in einem [[footprints]]-Eintrag wird nie verschoben. --side both lässt Entkopplungskondensatoren einer BGA darunter auf der Rückseite und passive Bauteile auf die Rückseite überlaufen, wenn die Vorderseite voll ist; die Standardeinstellung platziert alles auf der Vorderseite. Das Ergebnis hängt nur von den Dateien und --seed ab, daher ist ein anderer Seed ein anderer Start. Es meldet die halbe Umfangsleiterbahnlänge (HPWL) der Signale und aller Netze, Ratsnest-Überschneidungen, Courtyard-Überlappungen und die mittlere und schlechteste Entkopplungsdistanz, für die Ausgangsplatzierung (wenn jedes Bauteil eine hatte) und für die eigene, plus die Cluster, die es baute, und die Kante, zu der jeder Connector ging. Leiterbahnen und Vias, die bereits in der Datei sind, bleiben an ihrem Ort; platziere eine ungeroutete Platine oder route --reroute danach. Die Labels werden mit derselben Suche verschoben wie agentee silk (ein freier Platz neben dem Bauteil, bis zu 8 Durchgänge und 3 Versuche pro Label), ausgeführt auf dem im Speicher platzierten Layout, sodass das Projekt nur noch einmal geladen wird, nicht pro Durchgang; labels_moved zählt sie und labels_failing nennt die, die ohne freien Platz bleiben, für agentee silk NAME --hide oder einen Handverschiebung.

Was wohin kommt, stärkstes zuerst, und warum:

  • Connectors (Bauteile mit edge = true Pads, overhang = true, oder einem J/P Referenz) kommen an die Platinenkanten, jede Kante gleichmäßig verteilt, mit der Gegensteckseite nach außen: die Kantenlinie ist die Dwgs.User-Linie des Footprints neben einem Text, der edge sagt (KiCads PCB Edge-Markierung), sonst die äußere Seite seiner edge-Pads, sonst seine Pads plus min_part_to_edge für ein überhängendes Bauteil, sonst sein Courtyard plus min_body_to_edge. Ein RF-Connector (SMA, SMB, BNC, U.FL, MMCX, Koax) und ein USB-Connector teilen nie eine Kante, es sei denn, keine andere Aufteilung passt, da USB-3-Rauschen in das 2,4-GHz-Band fällt (Intel, "USB 3.0 Radio Frequency Interference Impact on 2.4 GHz Wireless Devices", 2012). [place] edges pinnt einen Connector an eine Kante. Montagebohrungen kommen in die Ecken (diagonal zuerst), Fiduzialmarken in die freien Ecken mit ihren Pads 3 mm oder mehr von der Kante, frei von Förderband-Schienen und Klemmen (SMEMA Fiducial Mark Standard 3.1).
  • Ein RF-Weg wird in einer geraden Linie verlegt. Beginnend an jedem Connector mit einem Pad auf einem RF-Netz (eine Klasse mit impedance und ohne diff_gap), folgt der Plazierer RF-Netzen durch die Bauteile, die zwei oder mehr davon tragen und höchstens 16 Pins haben (DC-Blocker, Dämpfer, Schalter, LNAs, Baluns), und nimmt den längsten Weg, der an einem anderen Connector oder an einem größeren Chip mit RF-Pins endet; ein Schalter mit Bypass geht durch den Verstärker, nicht durch den Bypass. Wenn beide Enden Connectors sind, kommen sie an gegenüberliegenden Kanten der langen Achse der Platine und rutschen entlang ihnen auf eine Linie, durch das Platinenzentrum, wo beide passen. Jedes Bauteil auf dem Weg dreht sich so, dass seine Eingangs- und Ausgangspads auf dieser Linie liegen, in der Reihenfolge, gepackt Richtung Eingang mit höchstens 1,5 mm zusätzlichem Abstand pro Bauteil, und der Rest des Raums geht an den letzten Lauf. Ein zwei- oder dreipoliges Bauteil mit einem Pad auf einem Knoten des Wegs (ein ESD-Clamp, eine Bias-Drossel, ein Shunt-Kondensator) sitzt neben der Linie an diesem Knoten, gedreht so, dass seine anderen Pads weg zeigen, nah genug, dass sein RF-Pad die Leiterbahn trifft, und weit genug, dass seine anderen Pads den Klassenzustand beibehalten; zwei Shunts an einem Knoten nehmen gegenüberliegende Seiten. Der Weg wird festgelegt, bevor der Rest um ihn herum platziert wird, und ein Bauteil, das die Platine verlassen oder auf ein anderes landen würde, bleibt dem allgemeinen Plazierer überlassen.
  • Große Bauelemente (BGA, 16+ Pin-Gehäuse über 25 mm2, sonst das Bauelement mit der höchsten Pinanzahl) werden in die Mitte der Platine gezogen und innerhalb von off_centre davon gehalten, wo sie auf jeder Seite Platz haben, ihre Pins zu entfliehen (Xilinx UG1099, Recommended Design Rules and Strategies for BGA Devices) und fern von den Rändern und Bohrungen, wo Handhabung und Entpanelung die Platine verbiegen und BGA-Verbindungen reißen (IPC/JEDEC-9704A Dehnungsgrenzwerte).
  • Cluster stammen aus der Netlist: Jedes IC nimmt die passiven Bauelemente, deren Signalnetze nur zu ihm führen, die Kondensatoren zwischen einer Versorgung, die es nutzt, und Masse (das nächste IC im Schaltplan, wenn mehrere die Versorgung teilen, verteilt über seine Versorgungspins) und seinen Oszillator. Die Entkopplungskondensatoren eines Clusters liegen neben dem Versorgungspin, den sie bedienen (Analog Devices MT-101, Decoupling Techniques; TI SCAA082, High-Speed Layout Guidelines), oder darunter auf der Rückseite mit --side both (Xilinx UG483, 7 Series PCB Design Guide, stellt die kleinen Kondensatoren unter das BGA); der Oszillator liegt neben seinen Taktpins (ST AN2867, Oscillator design guide). Cluster werden so platziert, dass das gewichtete HPWL minimiert wird: Netze einer Impedanz- oder Paar-Klasse, [[pairs]] und [[interfaces]] zählen dreifach, Versorgungs- und Massenetze gar nicht (sie sind Flächen).
  • Ein Schaltregler (ein IC mit einem Induktor an einem seiner Pins, dessen anderes Ende eine Versorgung ist) hält seinen Induktor und seine Eingangskondensatoren eng an sich, und Schaltregler halten 8 mm (Mittelpunkt zu Mittelpunkt) Abstand zu empfindlichen Bauelementen: Oszillatoren und Bauelemente auf einseitigen Impedanz- (RF-)Netzen (TI SNVA021, AN-1149 Layout Guidelines for Switching Power Supplies; Linear Technology AN139, Power Supply Layout and EMI).
  • Heiße Bauelemente (Quellen von 0,25 W oder mehr in einer thermischen Simulation dieses Layouts, und große Gehäuse über 49 mm2) werden 10 mm voneinander entfernt gehalten, damit sich ihre Wärme nicht aufstaut (TI SNVA419, AN-2020 Thermal Design by Insight, not Hindsight; IPC-2221B, thermal management). Wenn die heißen Bauelemente, jeweils um hot_distance vergrößert, höchstens ein Viertel einer Seite der Platine einnehmen, müssen auch ihre Courtyards hot_distance Abstand voneinander halten, wie placement-hot-parts-close es misst (ein Bauelement, das nirgendwo sonst passt, lässt die Regel fallen); auf einer engeren Platine gewinnt die Leiterbahnlänge. hot_spread in der Ausgabe gibt diesen Anteil und an, ob die Regel angewendet wurde.
  • Keramikkondensatoren von 0805 oder größer bleiben außerhalb von flex_zone, und kleinere darin liegen entlang des Randes, der Ecke oder der Bohrung, der sie am nächsten sind (Murata und TDK MLCC-Montagehinweise zur Platinenverbiegung; Knowles). Die Zone wird so gemessen, wie die mlcc-flex-zone-Prüfungen es tun, von den beiden Pads bis zum Umriss, den Ausschnitten der Platine und den Bohrungen der Befestigungsbohrungen; ein letzter Durchlauf dreht oder verschiebt (bis zu 12 mm) jeden Kondensator, der noch an der falschen Stelle ist. Jeder Körper hält min_body_to_edge Abstand zum Umriss und zu jedem [[outline.cutouts]]-Loch der Platinendatei, das außerhalb der Platine liegt, Courtyards überlappen nie auf einer Seite (Durchsteckbauelemente blockieren beide Seiten), und nichts betritt ein [place] keepouts-Polygon (IPC-7351B Courtyards: Der Courtyard ist die kleinste Fläche, die ein Bauelement und sein Land Pattern benötigt).
  • Die Rotation folgt den Hauptnetzen: Jedes Bauelement nimmt die Viertelumdrehung, die seine Pads den anderen Enden seiner Netze am nächsten bringt, und die passiven Bauelemente eines Clusters teilen sich eine Achse.

Die Methode: Jedes Cluster (ein IC und seine Mitglieder) und jedes lose Bauelement wird zu einem Block mit der Fläche seiner Bauelemente. Ein spektrales Layout des gewichteten Clique-Graphen der Blöcke (seine zwei niedrigsten nicht-trivialen Eigenvektoren, nach Rang) ordnet sie auf der Platine an. Dann wechseln sich 24 Runden zwischen einer quadratischen Leiterbahnlängen-Lösung und einem Ausbreitungsschritt ab: Die Lösung zieht Pins, nicht Mittelpunkte, für Chips, und wählt die Viertelumdrehung jedes Chips in jeder Runde (nach Leiterbahnlänge, und in den späteren Runden auch nach den Kreuzungen seiner Zwei-Pin-Netze); Steckverbinder werden auf ihren nächsten Rand gezogen und große Chips in die Mitte; der Ausbreitungsschritt halbiert die freie Platinenfläche (innerhalb des Umrisses und frei von Ausschnitten, Ausschlusszonen und platzierten Bauelementen) abwechselnd entlang seiner längeren Seite, gibt jedem Block eine Region der Größe seiner Fläche, und jede Runde zieht die Blöcke stärker zu ihren Regionen. Steckverbinder werden dann auf Ränder zugewiesen (jede Zuweisung wird bis zu sieben Steckverbindern ausprobiert, danach gierig) und entlang dieser geschoben, bündig mit dem Umriss, wo er an dieser Stelle verläuft (eine Ausbuchtung oder ein Schritt zählt als Rand), wobei zuerst die anderen nächsten Ränder ausprobiert werden, wenn kein Platz auf dem zugewiesenen frei ist, und die Lösung wird mit ihnen fixiert erneut ausgeführt. Die Legalisierung platziert jedes Cluster als Ganzes: sein Anker bei jeder Viertelumdrehung (für Chips) und fünf Schubs von einem Drittel der Cluster-Breite, seine Mitglieder darum herum, wobei das günstigste nach Leiterbahnlänge und Kreuzungen behalten wird; jedes Bauelement geht an den nächsten Platz auf einem 0,05-mm-Raster, wo seine Courtyards alles frei halten und die Randregeln eingehalten werden. Ganze Cluster werden dann erneut gedreht oder geschoben platziert, und Paare von Chip-Clustern ähnlicher Größe getauscht, wenn das die Kosten senkt. Eine Simulated-Annealing-Verfeinerung folgt (Verschiebungen, Viertelumdrehungen, Tausche gleichgroßer Bauelemente, ganze Cluster-Bewegungen, Seitenumkehrungen mit --side both; 1500 Bewegungen pro Bauelement, dann 500 weitere bei niedriger Temperatur), bewertet nach gewichtetem HPWL, Kreuzungen von Zwei-Pin-Netzen (4 pro Kreuzung) und den obigen Regeln als Strafen. Acht Starts (die acht Spiegelungen des spektralen Layouts) werden auf parallelen Threads legalisiert, und die drei günstigsten gehen zu den Cluster-Bewegungen und der Annealing weiter, so dass das Ergebnis nur von den Dateien und --seed abhängt, nicht von der Anzahl der Threads.

Bauelemente halten Abstand zur eigenen Seide der Platine: [[graphics]]-Linien auf einer Seidenschicht, Seidentext mit locked = true und Seide [[artwork]] blockieren die Courtyards auf ihrer Seite (ein Bauelement, das nirgendwo sonst passt, darf sie trotzdem überdecken). Seidentext, der nicht gesperrt ist, blockiert keine Bauelemente: Nach der Platzierung wird jeder solche Text, den ein Bauelement (oder sein reserviertes Label) überdeckt, an den nächsten freien Platz auf der Platine innerhalb von 10 mm verschoben, frei von Bauelementen, Labels, gesperrter Seide und den anderen Texten; texts_moved listet die Bewegungen, die zurück in [[graphics]] geschrieben werden, und texts_stuck die Texte ohne freien Platz. Steckverbinder, Befestigungsbohrungen und Fiduzialpunkte reservieren auch ein Label, auf der äußeren Seite des Bauelements oder zur inneren Seite gedreht, und gehen ohne eines, wenn an der Stelle, die das Bauelement einnimmt, keines passt. Das Referenzlabel jedes Bauelements braucht auch Platz: Wenn die Labels höchstens ein Viertel der freien Platinenfläche einnehmen, wird eine Box der Größe des Referenztextes (0,2 mm darum, am Referenzpunkt des Footprints, weggeschoben von seinen eigenen Pads und Seide) wie ein Courtyard frei gehalten, und place schreibt diesen Platz als label.at; auf einer voller Platine mit übrigem Platz ist die Überlappung dieser Boxen mit anderen Bauelementen und Labels eine kleine Kosten im Annealing, und auf einer vollen Platine werden die Labels dem Label-Durchlauf überlassen (agentee silk --hide für die ohne Platz).

Auf einer Kopie von examples/sdr ohne Leiterbahnen und Vias (251 Bauteile, 65 x 45 mm), nur obere Seite, liefern die Seeds 1 bis 4 3276 bis 3436 mm Signal-HPWL und 261 bis 293 Kreuzungen, bei etwa 2 s Lösezeit auf 4 Kernen (etwa 6 s CPU) plus Laden und Label-Pass. Mit --side both liefern sie etwa 1955 bis 2025 mm und 150 bis 165 Kreuzungen.

docs/format.md · Markdown für Agenten