agentee

Esquema e layout

Posicionamento automático

agentee place: conetores nas bordas, chips grandes ao centro, condensadores de desacoplamento nos respetivos pinos, depois legalizado e refinado.

agentee place NAME [--parts 'U*,C1?'] [--keep-placed] [--side F|B|both] [--seed N] [--dry-run] (MCP place) posiciona as peças do esquema do layout dentro do contorno da placa e escreve o at, rotation e side de cada uma na sua entrada [[footprints]] (adicionando entradas para peças novas, removendo o at de um rótulo movido), move os rótulos de referência que agora falham uma verificação de serigrafia, e depois atualiza os recheios guardados. É uma arrancada rápida para uma placa inteira: posicionar, olhar, e depois mover à mão o que importa e fixar. --parts posiciona apenas as peças correspondentes e deixa o resto onde está; --keep-placed deixa todas as peças que já têm uma posição; locked = true numa entrada [[footprints]] nunca é movido. --side both permite que condensadores de desacoplamento de um BGA fiquem por baixo dele na face traseira e que passivos transbordem para a face traseira quando a frente está cheia; por omissão, tudo fica na frente. O resultado depende apenas dos ficheiros e --seed, por isso uma semente diferente é uma arrancada diferente. Relata o comprimento de fio de semiperímetro (HPWL) das redes de sinal e de todas as redes, cruzamentos de ratsnest, sobreposições de courtyard e a distância média e pior de desacoplamento, para a posição de partida (quando todas as peças tinham uma) e para a própria, além dos clusters que construiu e a borda para onde cada conector foi. Pistas e vias já no ficheiro ficam onde estão; posicionar uma placa não roteada, ou route --reroute depois. Os rótulos são movidos com a mesma pesquisa de agentee silk (um lugar limpo ao lado da peça, até 8 passagens e 3 tentativas por rótulo), executada no layout posicionado em memória, por isso o projeto é carregado mais uma vez, não uma vez por passagem; labels_moved conta-os e labels_failing nomeia os que ficaram sem um lugar limpo, para agentee silk NAME --hide ou um movimento manual.

O que vai para onde, do mais forte para o mais fraco, e porquê:

  • Conectores (peças com pads edge = true, overhang = true, ou uma referência J/P) ficam nas bordas da placa, cada borda distribuída uniformemente, com o lado de acoplamento para fora: a linha da borda é a linha Dwgs.User do footprint junto a um texto que diz edge (a marca PCB Edge do KiCad), senão o lado exterior dos seus pads edge, senão os seus pads mais min_part_to_edge para uma peça sobreposta, senão o seu courtyard mais min_body_to_edge. Um conector RF (SMA, SMB, BNC, U.FL, MMCX, coaxial) e um conector USB nunca partilham uma borda a menos que nenhuma outra divisão caiba, porque o ruído USB 3 cai na banda de 2,4 GHz (Intel, "USB 3.0 Radio Frequency Interference Impact on 2.4 GHz Wireless Devices", 2012). [place] edges fixa um conector numa borda. Furos de montagem ficam nos cantos (diagonal primeiro), fiduciais nos cantos livres com os seus pads a 3 mm ou mais da borda, livres das carris de transporte e pinças (SMEMA Fiducial Mark Standard 3.1).
  • Um caminho RF é disposto em linha reta. A partir de cada conector com um pad numa rede RF (uma classe com impedance e sem diff_gap), o posicionador segue redes RF através das peças que transportam duas ou mais delas e têm no máximo 16 pinos (blocos de CC, atenuadores, comutadores, LNAs, baluns), e toma o caminho mais longo que termina noutro conector ou num chip maior com pinos RF; um comutador com um bypass passa pelo amplificador, não pelo bypass. Quando ambas as extremidades são conectores, ficam em bordas opostas do eixo longo da placa e deslizam ao longo delas para uma linha, através do centro da placa onde ambos cabem. Cada peça no caminho gira para que os seus pads de entrada e saída fiquem nessa linha, em ordem, empacotados em direção à entrada com no máximo 1,5 mm de separação extra cada, e o resto do espaço vai para a última secção. Uma peça de dois ou três pinos com um pad num nó do caminho (um clamp ESD, um choke de polarização, um condensador em shunt) fica ao lado da linha nesse nó, girada para que os seus outros pads apontem para fora, perto o suficiente para que o seu pad RF encontre a pista e longe o suficiente para que os seus outros pads mantenham a separação da classe; dois shunts num nó tomam lados opostos. O caminho é fixado antes do resto ser posicionado à volta dele, e uma peça que sairia da placa ou cairia sobre outra é deixada para o posicionador geral.
  • Os chips grandes (BGA, pacotes com 16 ou mais pinos e área superior a 25 mm2, ou, caso contrário, a peça com o maior número de pinos) são puxados para o centro da placa e mantidos a uma distância de off_centre desse centro, onde têm espaço para escapar dos pinos em todos os lados (Xilinx UG1099, Recommended Design Rules and Strategies for BGA Devices) e afastados das bordas e dos furos de montagem, onde o manuseamento e o depaneling flexionam a placa e partem as juntas BGA (diretrizes de deformação IPC/JEDEC-9704A).
  • Os clusters provêm da netlist: cada CI toma os passivos cujas redes de sinal o alcançam em exclusivo, os condensadores entre uma fonte de alimentação que utiliza e a massa (o CI mais próximo no esquema quando vários partilham a fonte, distribuídos pelos seus pinos de alimentação) e o seu cristal. Os condensadores de desacoplamento de um cluster ficam junto ao pino de alimentação que servem (Analog Devices MT-101, Decoupling Techniques; TI SCAA082, High-Speed Layout Guidelines) ou por baixo, no verso, com --side both (Xilinx UG483, 7 Series PCB Design Guide, coloca os condensadores pequenos por baixo do BGA); o cristal fica junto aos seus pinos de clock (ST AN2867, Oscillator design guide). Os clusters são posicionados para minimizar o HPWL ponderado: as redes de uma classe de impedância ou par, [[pairs]] e [[interfaces]] contam três vezes, as redes de alimentação e massa não contam nada (são planos).
  • Um conversor (um CI com um indutor num dos seus pinos cuja outra extremidade é uma fonte de alimentação) mantém o seu indutor e os condensadores de entrada bem colados a ele, e os conversores mantêm 8 mm (centro a centro) de distância de peças sensíveis: cristais e peças em redes de impedância de extremidade única (RF) (TI SNVA021, AN-1149 Layout Guidelines for Switching Power Supplies; Linear Technology AN139, Power Supply Layout and EMI).
  • As peças quentes (fontes de 0,25 W ou mais numa simulação térmica deste layout, e pacotes grandes com área superior a 49 mm2) são afastadas 10 mm umas das outras para que o seu calor não se acumule (TI SNVA419, AN-2020 Thermal Design by Insight, not Hindsight; IPC-2221B, thermal management). Quando as peças quentes, cada uma alargada por hot_distance, ocupam no máximo um quarto de um lado da placa, os seus courtyards também devem manter hot_distance de separação, tal como mede placement-hot-parts-close (uma peça que não cabe em lado nenhum descarta a regra); numa placa mais apertada, o comprimento de fiação prevalece. hot_spread na saída dá essa fração e se a regra foi aplicada.
  • Os condensadores cerâmicos de 0805 ou maiores ficam fora de flex_zone, e os mais pequenos dentro dela alinham-se pela borda, canto ou furo de montagem a que estão mais próximos (orientação de montagem de MLCC da Murata e TDK sobre flexão da placa; Knowles). A zona é medida tal como as verificações mlcc-flex-zone a medem, dos dois pads ao contorno, aos recortes da placa e aos furos de montagem; uma última passagem gira ou move (até 12 mm) qualquer condensador que ainda esteja no sítio errado. Cada corpo mantém min_body_to_edge de distância do contorno e de cada furo de [[outline.cutouts]] do ficheiro da placa, que fica fora da placa, os courtyards nunca se sobrepõem num lado (peças through-hole bloqueiam os dois lados) e nada entra num polígono de [place] keepouts (courtyards IPC-7351B: o courtyard é a área mínima que uma peça e o seu land pattern necessitam).
  • A rotação segue as redes principais: cada peça toma o quarto de volta que aproxima os seus pads das outras extremidades das suas redes, e os passivos de um cluster partilham um eixo.

O método: cada cluster (um CI e os seus membros) e cada peça solta torna-se num bloco com a área das suas peças. Um layout espectral do grafo de cliques ponderado dos blocos (os seus dois auto-vetores não triviais mais baixos, por ordem) ordena-os na placa. Depois, 24 rondas alternam uma resolução de comprimento de fiação quadrática e um passo de dispersão: a resolução puxa pinos, não centros, para os chips, e escolhe o quarto de volta de cada chip a cada ronda (por comprimento de fiação, e nas rondas posteriores também pelas interseções das suas redes de dois pinos); os conectores são puxados para a sua borda mais próxima e os chips grandes para o centro; o passo de dispersão biseca a área livre da placa (dentro do contorno e ao largo de recortes, keepouts e peças posicionadas) alternadamente ao longo do seu lado mais longo, dando a cada bloco uma região do tamanho da sua área, e cada ronda puxa os blocos com mais força para as suas regiões. Os conectores são depois atribuídos a bordas (toda a atribuição é tentada até sete conectores, gulosa além disso) e deslizados ao longo delas, alinhados com o contorno onde este corre nesse ponto (um entalhe ou um degrau conta como borda), tentando primeiro as outras bordas mais próximas quando nenhum lugar na atribuída está livre, e a resolução corre novamente com eles fixos. A legalização posiciona cada cluster como um todo: a sua âncora em cada quarto de volta (para chips) e cinco empurrões de um terço da largura do cluster, os seus membros à volta, mantendo o mais barato por comprimento de fiação e interseções; cada peça vai para o lugar mais próximo numa grelha de 0,05 mm onde os seus courtyards ficam livres de tudo e mantêm as regras de borda. Os clusters inteiros são depois posicionados novamente girados ou empurrados, e pares de clusters de chips de tamanho semelhante são trocados, quando isso reduz o custo. Segue-se um refinamento por recocimento simulado (deslocações, quartos de volta, trocas de peças do mesmo tamanho, movimentos de cluster inteiro, inversões de lado com --side both; 1500 movimentos por peça, depois mais 500 a uma temperatura baixa), pontuado por HPWL ponderado, interseções de redes de dois pinos (4 por interseção) e as regras acima como penalizações. Oito inícios (as oito reflexões do layout espectral) são legalizados em threads paralelos, e os três mais baratos seguem para os movimentos de cluster e o recocimento, pelo que o resultado depende apenas dos ficheiros e de --seed, não do número de threads.

As peças mantêm-se afastadas da própria serigrafia da placa: linhas de [[graphics]] numa camada de serigrafia, texto de serigrafia com locked = true e [[artwork]] de serigrafia bloqueiam os courtyards no seu lado (uma peça que não cabe em lado nenhum ainda pode cobri-los). O texto de serigrafia que não está bloqueado não impede peças: depois de posicionar, cada tal texto que uma peça (ou a sua etiqueta reservada) cobre move-se para o lugar livre mais próximo na placa, dentro de 10 mm, ao largo de peças, etiquetas, serigrafia bloqueada e outros textos; texts_moved lista os movimentos escritos de volta em [[graphics]] e texts_stuck os textos sem lugar livre. Conectores, furos de montagem e fiduciais reservam também uma etiqueta, no lado exterior da peça ou virada para o lado interior, e ficam sem uma quando nenhuma cabe no lugar que a peça ocupa. A etiqueta de referência de cada peça também precisa de espaço: quando as etiquetas ocupam no máximo um quarto da área livre da placa, uma caixa do tamanho do texto de referência (0,2 mm à volta, no ponto de referência do footprint, afastada dos seus próprios pads e serigrafia) é mantida livre como um courtyard, e o place escreve esse ponto como label.at; numa placa mais cheia com espaço restante, a sobreposição dessas caixas com outras peças e etiquetas é um pequeno custo no recocimento, e numa placa cheia as etiquetas ficam para a passagem de etiquetas (agentee silk --hide para as que não têm lugar).

Numa cópia de examples/sdr com as pistas e vias removidas (251 componentes, 65 x 45 mm), apenas na face superior, as sementes 1 a 4 dão 3276 a 3436 mm de HPWL de sinal e 261 a 293 cruzamentos, em cerca de 2 s de resolução em 4 núcleos (cerca de 6 s de CPU) mais a carga e a passagem de rotulagem. Com --side both, dão cerca de 1955 a 2025 mm e 150 a 165 cruzamentos.

docs/format.md · Markdown para agentes