agentee

Schema en layout

Automatische plaatsing

agentee place: connectoren op de randen, grote chips in het midden, ontkoppeling condensatoren aan hun pinnen, daarna gelegaliseerd en verfijnd.

agentee place NAME [--parts 'U*,C1?'] [--keep-placed] [--side F|B|both] [--seed N] [--dry-run] (MCP place) plaatst de onderdelen van het schema van de layout binnen de printplaatrand en schrijft voor elk at, rotation en side in zijn [[footprints]]-item (voegt items toe voor nieuwe onderdelen, verwijdert het at van een verplaatst label), verplaatst de referentielabels die nu een zeefdrukcheck niet halen, en vernieuwt daarna de opgeslagen kopervlakken. Het is een snelle start voor een hele printplaat: plaatsen, bekijken, en daarna wat belangrijk is handmatig verplaatsen en vastzetten. --parts plaatst alleen de overeenkomende onderdelen en laat de rest waar die staan; --keep-placed laat elk onderdeel dat al een plaatsing heeft; locked = true op een [[footprints]]-item wordt nooit verplaatst. --side both laat ontkoppelingscondensatoren van een BGA eronder op de achterkant gaan en passieve onderdelen naar de achterkant overlopen als de voorkant vol is; de standaard zet alles op de voorkant. Het resultaat hangt alleen af van de bestanden en --seed, dus een andere seed is een andere start. Het rapporteert de halve omtrek draadlengte (HPWL) van de signaalnetten en van elk net, ratsnest-kruispunten, courtyard-overlappingen en de gemiddelde en slechtste ontkoppelingafstand, voor de plaatsing waar het mee begon (als elk onderdeel er een had) en voor zijn eigen, plus de clusters die het bouwde en de rand waar elke connector naartoe ging. Sporen en vias die al in het bestand staan blijven waar ze zijn; plaats een ongerouteerde printplaat, of route --reroute daarna. De labels worden verplaatst met dezelfde zoekopdracht als agentee silk (een vrije plek naast het onderdeel, tot 8 passes en 3 pogingen per label), uitgevoerd op de geplaatste layout in het geheugen, zodat het project nog één keer wordt geladen, niet per pass; labels_moved telt ze en labels_failing noemt degenen zonder vrije plek, voor agentee silk NAME --hide of een handmatige verplaatsing.

Wat waar komt, sterkste eerst, en waarom:

  • Connectors (onderdelen met edge = true pads, overhang = true, of een J/P-referentie) komen op de randen van de printplaat, elke rand gelijkmatig verdeeld, met de matekant naar buiten: de randlijn is de Dwgs.User-lijn van de footprint naast een tekst die edge zegt (de PCB Edge-markering van KiCad), anders de buitenkant van zijn edge-pads, anders zijn pads plus min_part_to_edge voor een overhangend onderdeel, anders zijn courtyard plus min_body_to_edge. Een RF-connector (SMA, SMB, BNC, U.FL, MMCX, coax) en een USB-connector delen nooit een rand tenzij geen andere split past, omdat USB 3-ruis in het 2,4 GHz-band terechtkomt (Intel, "USB 3.0 Radio Frequency Interference Impact on 2.4 GHz Wireless Devices", 2012). [place] edges pindt een connector aan een rand. Montagegaten komen in de hoeken (diagonaal eerst), fiducials in de vrije hoeken met hun pads 3 mm of meer van de rand, vrij van de transportrails en klemmen (SMEMA Fiducial Mark Standard 3.1).
  • Een RF-pad wordt in een rechte lijn gelegd. Begin bij elke connector met een pad op een RF-net (een klasse met impedance en geen diff_gap), volgt de placer RF-netten door de onderdelen die twee of meer ervan dragen en maximaal 16 pinnen hebben (DC-blokkers, dempers, schakelaars, LNAs, baluns), en neemt de langste pad die eindigt bij een andere connector of bij een grotere chip met RF-pinnen; een schakelaar met een bypass gaat door de versterker, niet door de bypass. Als beide uiteinden connectors zijn, komen ze op tegenovergestelde randen van de lange as van de printplaat en glijden ze langs die randen op één lijn, door het midden van de printplaat waar beide passen. Elk onderdeel op de pad draait zodat zijn in- en uitgangspads op die lijn zitten, in volgorde, ingepakt richting de ingang met maximaal 1,5 mm extra ruimte per stuk, en de rest van de ruimte gaat naar de laatste run. Een twee- of driepins-onderdeel met één pad op een knoop van de pad (een ESD-klem, een bias-choke, een shunt-condensator) zit naast de lijn op die knoop, gedraaid zodat zijn andere pads naar buiten wijzen, dicht genoeg dat zijn RF-pad het spoor raakt en ver genoeg dat zijn andere pads de klasse-ruimte houden; twee shunts op één knoop nemen tegenovergestelde kanten. De pad is vastgesteld voordat de rest eromheen wordt geplaatst, en een onderdeel dat de printplaat zou verlaten of op een ander zou landen, wordt aan de algemene placer overgelaten.
  • Grote chips (BGA, 16+ pin packages groter dan 25 mm2, anders het onderdeel met de hoogste pincount) worden naar het midden van de printplaat getrokken en binnen off_centre daarvan gehouden, waar ze ruimte hebben om hun pinnen aan elke kant te ontsnappen (Xilinx UG1099, Recommended Design Rules and Strategies for BGA Devices) en ver weg van de randen en montagegaten, waar hantering en depaneling de printplaat buigen en BGA-solderverbindingen breken (IPC/JEDEC-9704A spanningsrichtlijnen).
  • Clusters komen uit de netlist: elke IC neemt de passieven die via signaalnetten alleen bij hem aankomen, de condensatoren tussen een voeding die hij gebruikt en massa (het dichtstbijzijnde IC in het schema als meerdere de voeding delen, verdeeld over zijn voedingpinnen) en zijn kristal. De decoupling-condensatoren van een cluster zitten naast de voedingpin die ze bedienen (Analog Devices MT-101, Decoupling Techniques; TI SCAA082, High-Speed Layout Guidelines), of eronder aan de achterkant met --side both (Xilinx UG483, 7 Series PCB Design Guide, plaatst de kleine condensatoren onder de BGA); het kristal zit naast zijn klokpinnen (ST AN2867, Oscillator design guide). Clusters worden geplaatst om gewogen HPWL te minimaliseren: netten van een impedantie- of paarklasse, [[pairs]] en [[interfaces]] tellen drie keer, voeding- en massanetten helemaal niet (die zijn vlakken).
  • Een schakelregelaar (een IC met een spoel op een van zijn pinnen waarvan de andere eind een voeding is) houdt zijn spoel en ingangscondensatoren strak tegen zich aan, en schakelregelaars houden 8 mm (midden tot midden) afstand van gevoelige onderdelen: kristallen en onderdelen op single-ended impedantie (RF) netten (TI SNVA021, AN-1149 Layout Guidelines for Switching Power Supplies; Linear Technology AN139, Power Supply Layout and EMI).
  • Hete onderdelen (bronnen van 0,25 W of meer in een thermische simulatie van dit layout, en grote packages groter dan 49 mm2) worden 10 mm uit elkaar geduwd zodat hun warmte niet opstapelt (TI SNVA419, AN-2020 Thermal Design by Insight, not Hindsight; IPC-2221B, thermal management). Als de hete onderdelen, elk vergroot met hot_distance, hooguit een kwart van één kant van de printplaat innemen, moeten hun courtyards ook hot_distance uit elkaar blijven, zoals placement-hot-parts-close dat meet (een onderdeel dat nergens anders past laat de regel vallen); op een strakkere printplaat wint draadlengte. hot_spread in de output geeft dat aandeel en of de regel van toepassing was.
  • Keramische condensatoren van 0805 of groter blijven buiten flex_zone, en kleinere daarbinnen liggen langs de rand, hoek of montagegat die ze het dichtst bij hebben (Murata en TDK MLCC montage-richtlijnen over printplaatbuiging; Knowles). De zone wordt gemeten zoals de mlcc-flex-zone checks dat meten, van de twee pads naar de omtrek, de uitsparingen van de printplaat en de boorgaten van de montagegaten; een laatste pass draait of verplaatst (tot 12 mm) elke condensator die nog op de verkeerde plek zit. Elk behoud houdt min_body_to_edge afstand van de omtrek en van elk [[outline.cutouts]] gat van het printplaatbestand, dat buiten de printplaat ligt, courtyards overlappen nooit aan een kant (doorgevoerde onderdelen blokkeren beide kanten), en niets komt een [place] keepouts polygon binnen (IPC-7351B courtyards: de courtyard is het minimale oppervlak dat een onderdeel en zijn land pattern nodig hebben).
  • Rotatie volgt de hoofdnetten: elk onderdeel neemt de kwartdraai die zijn pads het dichtst bij de andere eindpunten van zijn netten brengt, en de passieven van een cluster delen één as.

De methode: elk cluster (een IC en zijn leden) en elk los onderdeel wordt een blok met het oppervlak van zijn onderdelen. Een spectrale layout van de gewogen clique-graf van de blokken (zijn twee laagste niet-triviale eigenvectoren, per rang) ordent ze op de printplaat. Dan wisselen 24 rondes af tussen een kwadratische draadlengte-oplossing en een spreidingsstap: de oplossing trekt pinnen, geen middelpunten, voor chips, en kiest elke kwartdraai van elke chip elke ronde (op draadlengte, en in de latere rondes ook op de kruispunten van zijn twee-pinnen netten); connectoren worden getrokken naar hun dichtstbijzijnde rand en grote chips naar het midden; de spreidingsstap halveert het vrije printplaatoppervlak (binnen de omtrek en vrij van uitsparingen, keepouts en geplaatste onderdelen) om de beurt langs zijn langere kant, geeft elk blok een regio van de grootte van zijn oppervlak, en trekt de blokken elke ronde harder naar hun regio's. Connectoren worden dan toegewezen aan randen (elke toewijzing geprobeerd tot zeven connectoren, daaronder greedy) en langs die geschoven, strak tegen de omtrek waar die op dat punt loopt (een nok of een trap telt als rand), probeert eerst de andere dichtstbijzijnde randen als er geen plek vrij is op de toegewezen, en de oplossing wordt opnieuw uitgevoerd met ze vastgezet. Legalisatie plaatst elk cluster als geheel: zijn anker op elke kwartdraai (voor chips) en vijf duwtjes van een derde van de breedte van het cluster, zijn leden eromheen, houdt de goedkoopste op draadlengte en kruispunten; elk onderdeel gaat naar de dichtstbijzijnde plek op een 0,05 mm raster waar zijn courtyards alles vrijhouden en hij de randregels naleeft. Hele clusters worden dan opnieuw geplaatst gedraaid of geduwd, en paren van chip-clusters van vergelijkbare grootte verwisseld, als dat de kosten verlaagt. Een simulated annealing verfijning volgt (verschuivingen, kwartdraaien, verwisselingen van onderdelen van dezelfde grootte, hele clusterbewegingen, kantomkeringen met --side both; 1500 bewegingen per onderdeel, dan nog 500 bij een lage temperatuur), gescoord op gewogen HPWL, kruispunten van twee-pinnen netten (4 per kruispunt), en de regels hierboven als boetes. Acht starts (de acht reflecties van de spectrale layout) worden gelegaliseerd op parallelle threads, en de drie goedkoopste gaan door naar de clusterbewegingen en de annealing, zodat het resultaat alleen afhangt van de bestanden en --seed, niet van het aantal threads.

Onderdelen blijven van de eigen zeefdruk van de printplaat: [[graphics]] lijnen op een zeefdruklager, zeefdrukt tekst met locked = true en zeefdruk [[artwork]] blokkeren de courtyards aan hun kant (een onderdeel dat nergens anders past mag ze nog steeds bedekken). Zeefdrukt tekst die niet is vergrendeld blokkeert geen onderdelen: na het plaatsen verplaatst elke dergelijke tekst die een onderdeel (of zijn gereserveerde label) bedekt naar de dichtstbijzijnde vrije plek op de printplaat binnen 10 mm, vrij van onderdelen, labels, vergrendelde zeefdruk en de andere teksten; texts_moved lijst de verplaatsingen op die teruggeschreven worden in [[graphics]] en texts_stuck de teksten zonder vrije plek. Connectoren, montagegaten en fiducials reserveren ook een label, aan de buitenkant van het onderdeel of gedraaid naar de binnenkant, en gaan er zonder mee als er op de plek die het onderdeel inneemt geen van beide past. Het referentielabel van elk onderdeel heeft ook ruimte nodig: als de labels hooguit een kwart van het vrije printplaatoppervlak innemen, wordt een doos van de grootte van de referentie-tekst (0,2 mm eromheen, op de referentieplek van de footprint geduwd vrij van zijn eigen pads en zeefdruk) vrijgehouden als een courtyard, en schrijft place die plek als label.at; op een vollere printplaat met nog ruimte is de overlap van die dozen met andere onderdelen en labels een kleine kostenpost in de annealing, en op een volle printplaat worden labels overgelaten aan de labelpass (agentee silk --hide voor degenen zonder plek).

Op een kopie van examples/sdr zonder sporen en vias (251 onderdelen, 65 x 45 mm), alleen bovenkant, geven seeds 1 tot 4 een signaal-HPWL van 3276 tot 3436 mm en 261 tot 293 kruispunten, in ongeveer 2 s oplossen op 4 cores (ongeveer 6 s CPU) plus laden en de labelpass. Met --side both geven ze ongeveer 1955 tot 2025 mm en 150 tot 165 kruispunten.

docs/format.md · Markdown voor agents