agentee

Schéma et routage

Placement automatique

agentee place : connecteurs sur les bords, gros puces au centre, condensateurs de découplage sur leurs broches, puis légalisation et raffinement.

agentee place NAME [--parts 'U*,C1?'] [--keep-placed] [--side F|B|both] [--seed N] [--dry-run] (MCP place) positionne les composants du schéma du routage à l'intérieur du contour de la carte et écrit at, rotation et side de chacun dans sa entrée [[footprints]] (en ajoutant des entrées pour les nouveaux composants, en supprimant at d'une étiquette déplacée), déplace les étiquettes de référence qui échouent désormais à la vérification de la sérigraphie, puis actualise les remplissages stockés. C'est un démarrage rapide pour une carte entière : positionner, regarder, puis déplacer manuellement ce qui compte et le verrouiller. --parts ne positionne que les composants correspondants et laisse le reste en place ; --keep-placed laisse chaque composant qui a déjà un positionnement ; locked = true sur une entrée [[footprints]] n'est jamais déplacé. --side both permet aux condensateurs de découplage d'un BGA de passer dessous au dos et aux passifs de déborder au dos lorsque la face avant est pleine ; par défaut, tout est placé sur la face avant. Le résultat ne dépend que des fichiers et de --seed, donc une graine différente est un démarrage différent. Il signale la longueur de fil de demi-périmètre (HPWL) des nets de signal et de tous les nets, les croisements du chevelu, les chevauchements de zones d'encombrement et la distance moyenne et la pire distance de découplage, pour le positionnement de départ (lorsque chaque composant en avait un) et pour le sien, ainsi que les clusters qu'il a construits et le bord vers lequel chaque connecteur est allé. Les pistes et vias déjà présents dans le fichier restent en place ; positionnez une carte non routée, ou route --reroute ensuite. Les étiquettes sont déplacées avec la même recherche que agentee silk (un endroit libre à côté du composant, jusqu'à 8 passages et 3 tentatives par étiquette), exécutée sur le routage positionné en mémoire, donc le projet est chargé une fois de plus, et non une fois par passage ; labels_moved les compte et labels_failing nomme celles laissées sans endroit libre, pour agentee silk NAME --hide ou un déplacement manuel.

Ce qui va où, du plus fort au plus faible, et pourquoi :

  • Les connecteurs (composants avec des pastilles edge = true, overhang = true, ou une référence J/P) vont sur les bords de la carte, chaque bord réparti uniformément, avec le côté d'assemblage vers l'extérieur : la ligne de bord est la ligne Dwgs.User de l'empreinte à côté d'un texte disant edge (le marquage PCB Edge de KiCad), sinon le côté extérieur de ses pastilles edge, sinon ses pastilles plus min_part_to_edge pour un composant débordant, sinon sa zone d'encombrement plus min_body_to_edge. Un connecteur RF (SMA, SMB, BNC, U.FL, MMCX, coaxial) et un connecteur USB ne partagent jamais un bord sauf si aucune autre répartition ne convient, car le bruit USB 3 tombe dans la bande 2,4 GHz (Intel, « USB 3.0 Radio Frequency Interference Impact on 2.4 GHz Wireless Devices », 2012). [place] edges fixe un connecteur à un bord. Les trous de fixation vont dans les coins (diagonale en premier), les repères dans les coins libres avec leurs pastilles à 3 mm ou plus du bord, loin des rails de convoyeur et des pinces (SMEMA Fiducial Mark Standard 3.1).
  • Un chemin RF est disposé en ligne droite. En partant de chaque connecteur avec une pastille sur un net RF (une classe avec impedance et sans diff_gap), le positionneur suit les nets RF à travers les composants qui en portent deux ou plus et ont au plus 16 broches (blocs de DC, atténuateurs, commutateurs, LNA, baluns), et prend le plus long chemin qui se termine à un autre connecteur ou à une puce plus grande avec des broches RF ; un commutateur avec un pont passe par l'amplificateur, pas par le pont. Lorsque les deux extrémités sont des connecteurs, ils vont sur des bords opposés de l'axe long de la carte et glissent le long d'eux sur une ligne, à travers le centre de la carte lorsque les deux y tiennent. Chaque composant sur le chemin tourne pour que ses pastilles d'entrée et de sortie soient sur cette ligne, dans l'ordre, tassées vers l'entrée avec au plus 1,5 mm d'écart supplémentaire chacune, et le reste de l'espace va à la dernière course. Un composant à deux ou trois broches avec une pastille sur un nœud du chemin (une pince ESD, une self de polarisation, un condensateur de fuite) se place à côté de la ligne à ce nœud, tourné pour que ses autres pastilles pointent vers l'extérieur, assez près pour que sa pastille RF rencontre la piste et assez loin pour que ses autres pastilles respectent l'écartement de la classe ; deux fuites sur un même nœud prennent des côtés opposés. Le chemin est fixé avant que le reste ne soit positionné autour, et un composant qui sortirait de la carte ou atterrirait sur un autre est laissé au positionneur général.
  • Les puces de grande taille (BGA, boîtiers de 16 broches ou plus sur plus de 25 mm2, sinon la pièce avec le plus grand nombre de broches) sont attirées vers le centre de la carte et maintenues à moins de off_centre de celui-ci, où elles disposent de l'espace pour faire sortir leurs broches de chaque côté (Xilinx UG1099, Recommended Design Rules and Strategies for BGA Devices) et sont éloignées des bords et des trous de fixation, où la manipulation et le dépannage plient la carte et fissurent les joints BGA (directives de contrainte IPC/JEDEC-9704A).
  • Les grappes proviennent de la liste de nets : chaque circuit intégré prend les composants passifs dont les nets de signal ne le rejoignent qu'eux, les condensateurs entre une alimentation qu'il utilise et la masse (le circuit intégré le plus proche dans le schéma si plusieurs partagent l'alimentation, répartis sur ses broches d'alimentation) et son cristal. Les condensateurs de découplage d'une grappe sont placés à côté de la broche d'alimentation qu'ils servent (Analog Devices MT-101, Decoupling Techniques ; TI SCAA082, High-Speed Layout Guidelines), ou en dessous sur la face arrière avec --side both (Xilinx UG483, 7 Series PCB Design Guide, place les petits condensateurs sous le BGA) ; le cristal est placé à côté de ses broches d'horloge (ST AN2867, Oscillator design guide). Les grappes sont placées pour minimiser le HPWL pondéré : les nets d'une classe d'impédance ou de paire, [[pairs]] et [[interfaces]] comptent trois fois, les nets d'alimentation et de masse ne comptent pas du tout (ce sont des plans).
  • Un convertisseur (un circuit intégré avec un inducteur sur l'une de ses broches dont l'autre extrémité est une alimentation) maintient son inducteur et ses condensateurs d'entrée serrés contre lui, et les convertisseurs gardent 8 mm (centre à centre) des pièces sensibles : les cristaux et les pièces sur des nets à impédance simple (RF) (TI SNVA021, AN-1149 Layout Guidelines for Switching Power Supplies ; Linear Technology AN139, Power Supply Layout and EMI).
  • Les pièces chaudes (sources de 0,25 W ou plus dans une simulation thermique de ce routage, et les boîtiers de plus de 49 mm2) sont écartées de 10 mm pour que leur chaleur ne s'accumule pas (TI SNVA419, AN-2020 Thermal Design by Insight, not Hindsight ; IPC-2221B, thermal management). Lorsque les pièces chaudes, chacune agrandie de hot_distance, occupent au plus un quart d'un côté de la carte, leurs zones d'encombrement doivent aussi garder hot_distance entre elles, comme le mesure placement-hot-parts-close (une pièce qui ne tient nulle part ailleurs abandonne la règle) ; sur une carte plus serrée, la longueur de piste l'emporte. hot_spread dans la sortie donne cette part et si la règle s'est appliquée.
  • Les condensateurs céramiques de 0805 ou plus restent hors de flex_zone, et les plus petits à l'intérieur sont alignés le long du bord, du coin ou du trou de fixation le plus proche (directives de montage MLCC de Murata et TDK sur la flexion de la carte ; Knowles). La zone est mesurée comme le mesurent les vérifications mlcc-flex-zone, des deux pastilles au contour, aux découpes de la carte et aux perçages des trous de fixation ; une dernière passe fait pivoter ou déplace (jusqu'à 12 mm) tout condensateur encore mal placé. Chaque corps garde min_body_to_edge du contour et de chaque trou de [[outline.cutouts]] du fichier de carte, qui est hors de la carte, les zones d'encombrement ne se chevauchent jamais sur un côté (les pièces traversantes bloquent les deux côtés), et rien n'entre dans un polygone [place] keepouts (zones d'encombrement IPC-7351B : la zone d'encombrement est la surface minimale dont une pièce et son motif de pose ont besoin).
  • La rotation suit les nets principaux : chaque pièce prend le quart de tour qui amène ses pastilles le plus près des autres extrémités de ses nets, et les passifs d'une grappe partagent un même axe.

La méthode : chaque grappe (un circuit intégré et ses membres) et chaque pièce isolée devient un bloc avec la surface de ses pièces. Un routage spectral du graphe de clique pondéré des blocs (ses deux plus petits vecteurs propres non triviaux, par rang) les ordonne sur la carte. Puis 24 tours alternent une résolution de longueur de piste quadratique et une étape de dispersion : la résolution attire les broches, pas les centres, pour les puces, et choisit le quart de tour de chaque puce à chaque tour (par longueur de piste, et dans les tours ultérieurs aussi par les croisements de ses nets à deux broches) ; les connecteurs sont attirés vers leur bord le plus proche et les grandes puces vers le centre ; l'étape de dispersion divise la zone libre de la carte (à l'intérieur du contour et à l'écart des découpes, des zones de garde et des pièces placées) successivement le long de son côté le plus long, donnant à chaque bloc une région de la taille de sa surface, et chaque tour attire les blocs plus fort vers leurs régions. Les connecteurs sont ensuite assignés aux bords (toutes les assignments sont essayées jusqu'à sept connecteurs, glouton au-delà) et glissés le long d'eux, à fleur du contour là où il passe à cet endroit (une encoche ou un escalon compte comme bord), en essayant d'abord les autres bords les plus proches si aucun endroit sur l'assigné n'est libre, et la résolution tourne à nouveau avec eux fixés. La légalisation place chaque grappe en entier : son ancre à chaque quart de tour (pour les puces) et cinq ajustements d'un tiers de la largeur de la grappe, ses membres autour, en gardant le moins coûteux par longueur de piste et croisements ; chaque pièce va à l'endroit le plus proche sur une grille de 0,05 mm où ses zones d'encombrement sont libres de tout et où elle garde les règles de bord. Les grappes entières sont alors replacées tournées ou ajustées, et des paires de grappes de puces de taille similaire sont échangées, si cela abaisse le coût. Un affinage par recuit simulé suit (déplacements, quarts de tour, échanges de pièces de même taille, déplacements de grappes entières, retournements de face avec --side both ; 1500 mouvements par pièce, puis 500 de plus à basse température), noté par HPWL pondéré, croisements de nets à deux broches (4 par croisement) et les règles ci-dessus comme pénalités. Huit départs (les huit réflexions du routage spectral) sont légalisés sur des threads parallèles, et les trois moins coûteux passent aux mouvements de grappes et au recuit, de sorte que le résultat dépend des fichiers et de --seed seulement, pas du nombre de threads.

Les pièces restent à l'écart de la sérigraphie propre de la carte : les lignes [[graphics]] sur une couche de sérigraphie, le texte de sérigraphie avec locked = true et le [[artwork]] de sérigraphie bloquent les zones d'encombrement sur leur côté (une pièce qui ne tient nulle part ailleurs peut encore les couvrir). Le texte de sérigraphie non verrouillé ne bloque pas les pièces : après placement, chaque tel texte qu'une pièce (ou son étiquette réservée) couvre est déplacé à l'endroit libre le plus proche sur la carte dans un rayon de 10 mm, à l'écart des pièces, des étiquettes, de la sérigraphie verrouillée et des autres textes ; texts_moved liste les déplacements écrits en retour dans [[graphics]] et texts_stuck les textes sans endroit libre. Les connecteurs, les trous de fixation et les fiducials réservent aussi une étiquette, sur le côté extérieur de la pièce ou tournée vers le côté intérieur, et vont sans étiquette si aucune ne tient à l'endroit que la pièce occupe. L'étiquette de référence de chaque pièce a aussi besoin d'espace : lorsque les étiquettes occupent au plus un quart de la zone libre de la carte, une boîte de la taille du texte de référence (0,2 mm autour, à l'endroit de référence de l'empreinte poussé à l'écart de ses propres pastilles et de la sérigraphie) est gardée libre comme une zone d'encombrement, et place écrit cet endroit comme label.at ; sur une carte plus pleine avec de l'espace restant, le chevauchement de ces boîtes avec d'autres pièces et étiquettes est un petit coût dans le recuit, et sur une carte pleine, les étiquettes sont laissées au passage des étiquettes (agentee silk --hide pour celles sans endroit).

Sur une copie de examples/sdr dont les pistes et les vias ont été retirées (251 composants, 65 x 45 mm), face supérieure uniquement, les graines 1 à 4 donnent 3276 à 3436 mm de HPWL de signal et 261 à 293 croisements, en environ 2 s de résolution sur 4 cœurs (environ 6 s de CPU) plus le chargement et le passage d'étiquetage. Avec --side both, elles donnent environ 1955 à 2025 mm et 150 à 165 croisements.

docs/format.md · Markdown pour agents