Schema en layout
Autorouting
agentee route, tie, tune en neck: raster routing die klassen breedtes, afstanden en vias behoudt, vlak verbindingen, lengte matching en neck-downs.
agentee route NAME --nets 'FX_D*,SPI_*' --layers F.Cu,In2.Cu,B.Cu (MCP route) routeert het ratsnest van de genoemde nets op een raster (--grid, standaard 0,05 mm) en voegt de sporen en vias toe aan het layoutbestand als gewone [[tracks]] en [[vias]], zodat je ze daarna zelf kunt bewerken. Het houdt de breedte, clearance en layers van elke netklasse aan voor elk pad, spoor, via, gat en de rand van de printplaat. Het dimensioneert de ruimte voor elke klasse via op basis van het eigen pad, boor en layers (een microvia past waar een doorvia niet past, en een microvia mag naast een begraven via op andere layers staan). Het houdt nieuwe vias op min_hole_to_hole afstand van elke boor waarvan de span een dielektricum deelt met die van de via, en de gaten op min_via_hole_to_copper afstand van pads, sporen en vias van andere nets. Het houdt ze uit de SMD-pads van elke net, ook van de eigen net (de koper van de via mag er niet tegen aan, via-cuts-pad, en het gat blijft op min_hole_to_smd_pad afstand, hole-to-smd-pad, tenzij --via-in-pad, MCP via_in_pad, het volledig binnen een SMD-pad van de eigen net laat staan met een boor van hooguit max_filled_via_drill). Het gebruikt de vias van de klasse om van layer te wisselen, de goedkoopste waarvan de span beide layers dekt (--via uv-top,core of MCP via om uit andere namen te kiezen, --via-cost in mm spoor, standaard 3, vermenigvuldigd met de cost van de via). Het rekent --bend-cost mm spoor voor elke bocht van 45 graden (standaard 0,1, drie keer zoveel voor 90 graden) en verplaatst nooit wat er al is, tenzij --reroute is opgegeven, wat eerst de sporen en vias van de genoemde nets verwijdert. Een verbinding die geen vrij pad vindt, haalt de gerouteerde nets op die hij zou kruisen of waarvan hij de via-gaten binnen min_hole_to_hole van zijn eigen gaten zou brengen (gaten waarvan de span een dielektricum delen), onthoudt de plek als overvol en die nets gaan terug in de wachtrij. Het zoekproces gaat in richtingen van 45 graden en rekent voor elke bocht, zodat paden als rechte stukken met bochten van 45 graden uitkomen. Daarna worden rechte stukken strak getrokken met tweesegment-doglegs van 45 graden en elke overgebleven hoek van 90 graden wordt afgeschuind waar dat past. Alleen de stub naar een padcentrum buiten het raster mag onder een andere hoek staan. Waar de breedte van de klasse niet in een eindpad past (breder dan de kleinere zijde van het pad, of te dicht bij de buurliggende pads om de clearance te houden), loopt de route taps toe: het spoor met de breedte van de klasse stopt kort voor het pad en een apart [[tracks]]-item met een expliciete width loopt recht naar het padcentrum, hooguit de neckdown van de klasse lang en niet smaller dan min_track_width. De breedte is de kleinste van de breedte van de klasse, de kleinere zijde van het pad en de breedste die de clearance houdt, afgerond naar beneden tot 0,01 mm (of exact min_track_width waar afronding eronder zou vallen en de onafgeronde breedte dat niet doet). Het brede spoor begint op de eerste plek buiten het pad waar de volledige breedte de clearance houdt (en, voor een pad smaller dan het spoor, buiten het pad). Pads van één net die elkaar raken, zoals een thermisch pad opgebouwd uit meerdere pad-items, tellen als één breed pad. Paren gerouteerd met --pairs lopen niet taps toe. Een verbinding van een net dat al vers koper heeft, start vanaf dat koper. Zodra alles erin zit, wordt elke gerouteerde verbinding die vias gebruikt, opnieuw geprobeerd op één layer tegelijk met de rest vastgehouden, en de route op één layer vervangt hem als hij hooguit 25% plus 1 mm langer is. Daarna worden de vias van naburige parallelle verbindingen die van layer wisselen in de buurt van elkaar, langs hun eigen sporen verschoven naar een gemeenschappelijke rij of kolom op het raster, waar de plek legaal is en de verbinding zijn lengte behoudt (paarbenen vastgehouden door --pairs en nets met meerdere verbindingen blijven staan). Een net in een interface met max_vias houdt de trace (elk net van de lane, door series-onderdelen) binnen die limiet: een route met te veel vias wordt opnieuw geprobeerd met duurdere vias, dan op één layer, en faalt met de reden als niets past. Het tweede net van een paar wordt naar zijn partner getrokken op de paar-afstand; --pairs probeert eerst beide helften samen als één gekoppeld spoor te routeeren. Als een paar verbindingen faalt, routeer ze dan opnieuw samen met de nets eromheen en --reroute, zodat de router het hele gebied kan opruimen en herordenen, of ga over op --grid 0.025. --dry-run rapporteert zonder te schrijven. Routeer eerst de nets die ertoe doen met de hand, en laat de router dan de rest invullen, klasse voor klasse.
Een net met een [[zones]]-item is een vlaknet. Een glob in --nets matcht het nooit, dus --nets '*' routeert elk signaal en voeding die geen kopervlak heeft en laat ground aan de vlakken; noem het net exact om het toch met sporen te routeeren. Vias geplaatst door [[stitching]]-regels zijn geen obstakels voor de router: de regel plaatst ze opnieuw rond het nieuwe koper.
agentee tie NAME [--nets GND] [--dry-run] (MCP tie) verbindt elk SMD-pad van een vlaknet met de dichtstbijzijnde layer die zijn zone dekt, met een korte stub en een via naast het pad. Zo sluiten ground- en voedingpads aan op een vlak in plaats van met sporen ertussen. De via komt aan de kant van het pad weg van het centrum van het onderdeel, zo dicht mogelijk bij: de koper op afstand van elk SMD-pad (ook het eigen, dus geen via-in-pad), het gat op min_hole_to_smd_pad afstand van die pads, op min_hole_to_hole afstand van andere gaten, op min_via_hole_to_copper en de clearance van de klasse afstand van andere nets, en op min_copper_to_edge afstand van de omtrek, en de stub op afstand van andere nets op de layer van het pad. Het probeert 16 richtingen, eerst de dichtstbijzijnde naar buiten, tot 1,2 mm voorbij het pad. Een pad dat al een via van zijn net heeft binnen 0,8 mm van de rand wordt niet aangepakt, door-gaten en BGA-ballen (escape behandelt die) worden overgeslagen, en een pad zonder legale plek staat onder failed. De stubs en vias worden toegevoegd als gewone [[tracks]] en [[vias]].
agentee neck NAME [--nets 'VBUS,RF_*'] [--taper] [--dry-run] (MCP neck) maakt koper dat al aanwezig is smaller. Het kijkt naar beide uiteinden van elk spoor van de genoemde nets (standaard alle) die eindigen binnen een pad van hun net op hun laag, en pakt de uiteinden die breder zijn dan de kleinere zijde van het pad, of waarvan de volledige breedte de clearance binnen de lengte van de klasse neckdown (plus één spoorbreedte) van het pad schendt. Een dergelijk uiteinde wordt ingesneden: het spoor behoudt zijn breedte vanaf de snede naar buiten toe, en een nieuwe [[tracks]]-vermelding met een expliciete width loopt van het oude eindpunt in het pad naar de snede, langs het oude pad. De nekbreedte is de kleinste van de spoorbreedte, de kleinere zijde van het pad en de breedste die de clearance langs de nek behoudt, afgerond naar beneden tot 0,01 mm (of exact min_track_width zoals hierboven). De snede is de eerste plek, in stappen van 0,01 mm, waar de volledige breedte de clearance behoudt voor de volgende neckdown plus één spoorbreedte (en, voor een pad dat smaller is dan het spoor, buiten het pad ligt); een nek is nooit langer dan neckdown en nooit smaller dan min_track_width, anders wordt het uiteinde onder failed opgesomd met de reden en ongewijzigd gelaten. Een pad dat is opgebouwd uit meerdere padvermeldingen van hetzelfde net die elkaar raken, telt als één breed pad. --taper brengt de breedte in stappen terug via een korte keten in plaats van één nek: na de smalle nek volgen er tot twee extra vermeldingen, elk een derde van de weg van de nekbreedte naar de spoorbreedte, samen niet langer dan neckdown (drie keer de nek, maximaal). Het koper wordt alleen smaller, dus er kan geen nieuwe clearance-fout ontstaan; het bestand wordt op zijn plek bewerkt (elke andere regel blijft behouden) en opgeslagen kopervlak-vullingen worden vernieuwd. Het rapport somt elke nek op (spoorindex, net, pad, waarom, breedte, lengte, vermeldingen) en telt de gewijzigde en toegevoegde sporen.
Paren en lengteregels zitten ook in het 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 memberDe controle rapporteert de skew van elk paar in mm en ps (afgeleid van de effectieve permittiviteit van de laag), een stuk van het paar dat met de verkeerde afstand loopt, en paren die minder dan 80% van hun lengte naast elkaar lopen. Match groups geven aan welk net te kort of te lang is en met hoeveel. Een paar dat door serieschakelaars met twee pinnen loopt, zoals de AC-condensatoren op een USB-lane, wordt van begin tot eind gemeten: de skew is de som over alle paren die het verbindt, gerapporteerd als FX_TX1_P+SS_TX1_P/FX_TX1_N+SS_TX1_N.