agentee

Esquema e layout

Roteamento automático

agentee route, tie, tune e neck: roteamento em grelha que mantém larguras de classe, distâncias e vias, ligações de plano, correspondência de comprimentos e reduções de pescoço.

agentee route NAME --nets 'FX_D*,SPI_*' --layers F.Cu,In2.Cu,B.Cu (MCP route) faz o roteamento do ratsnest das redes indicadas numa grelha (--grid, predefinição 0,05 mm) e acrescenta as pistas e vias ao ficheiro de layout como [[tracks]] e [[vias]] ordinários, para que as possa editar depois. Mantém a largura, o afastamento e as layers de cada classe de rede em relação a cada pad, pista, via, furo e à borda da placa, dimensiona o espaço para cada via de classe pelo seu próprio pad, furo e camadas (uma microvia cabe onde uma via atravessante não cabe, e uma microvia pode ficar junto a uma via enterrada noutras camadas), mantém as novas vias a min_hole_to_hole de todos os furos cujo alcance partilha um dielétrico com o delas e os seus furos a min_via_hole_to_copper dos pads, pistas e vias de outras redes, mantém-nas afastadas dos pads SMD de todas as redes, inclusive da própria (o cobre da via não pode tocar num pad, via-cuts-pad, e o furo fica a min_hole_to_smd_pad dele, hole-to-smd-pad, a menos que --via-in-pad, MCP via_in_pad, permita que fique totalmente dentro de um pad SMD da sua rede com um furo de no máximo max_filled_via_drill), usa as vias da classe para mudar de camada, a mais barata cujo alcance contenha ambas as camadas (--via uv-top,core ou MCP via para escolher a partir de outros nomes, --via-cost em mm de pista, predefinição 3, vezes o cost da via), cobra --bend-cost mm de pista por cada dobra de 45 graus (predefinição 0,1, três vezes isso para 90) e nunca move o que já está lá a menos que seja dado --reroute, que primeiro remove as pistas e vias das redes indicadas. Uma ligação que não encontra um caminho livre desfaz as redes roteadas que cruzaria ou cujos furos de via traria a menos de min_hole_to_hole dos seus (furos cujo alcance partilha um dielétrico), lembra o ponto como congestionado e essas redes voltam para a fila. A pesquisa avança em direções de 45 graus e cobra por cada dobra, pelo que os caminhos saem como retas com dobras de 45 graus; depois, as retas são apertadas com doglegs de dois segmentos a 45 graus e qualquer canto de 90 graus que reste é chanfrado onde houver espaço. Apenas o rabo para um centro de pad fora da grelha pode ficar a outro ângulo. Quando a largura da classe não cabe num pad de extremidade (mais larga que o lado menor do pad, ou demasiado perto dos pads vizinhos para manter o afastamento), o roteamento afina: a pista da largura da classe para antes do pad e uma entrada [[tracks]] separada com uma width explícita vai em linha reta para o centro do pad, com no máximo o neckdown da classe de comprimento e nunca mais estreita que min_track_width. A sua largura é a menor entre a largura da classe, o lado menor do pad e a mais larga que mantém o afastamento, arredondada para baixo a 0,01 mm (ou exatamente min_track_width se o arredondamento a fizesse cair abaixo e a largura não arredondada não o fizesse); a pista larga começa no primeiro ponto afastado do pad onde a sua largura total mantém o afastamento (e, para um pad mais estreito que a pista, fora do pad). Pads de uma rede que se tocam, como um pad térmico construído a partir de várias entradas de pad, contam como um único pad largo. Pares roteados com --pairs não afinam. Uma ligação de uma rede que já tem cobre novo começa desse cobre. Quando tudo está no lugar, cada ligação roteada que usa vias é tentada novamente numa camada de cada vez com o resto fixo, e o roteamento de uma camada substitui-a quando for no máximo 25% mais 1 mm mais longo. Depois, as vias de ligações paralelas vizinhas que mudam de camada perto umas das outras são deslizadas ao longo das suas próprias pistas para uma linha comum ou coluna na grelha, onde o ponto for legal e a ligação mantiver o seu comprimento (as pernas de par mantidas por --pairs e as redes com várias ligações ficam no lugar). Uma rede numa interface com max_vias mantém a trilha (todas as redes da via, através de componentes em série) dentro dela: um roteamento com demasiadas vias é tentado novamente com vias mais caras, depois numa camada, e falha com a razão se nenhum dos dois couber. A segunda rede de um par é atraída para o seu parceiro no intervalo do par; --pairs tenta primeiro rotear as duas metades juntas como uma única pista acoplada. Quando algumas ligações falham, roteie-as novamente juntas com as redes à volta e --reroute, para que o roteador possa desfazer e reordenar toda a área, ou desça para --grid 0.025. --dry-run relata sem escrever. Roteie primeiro à mão as redes que importam, depois deixe o roteador preencher o resto, uma classe de cada vez.

Uma rede com uma entrada [[zones]] é uma rede de plano. Um glob em --nets nunca a corresponde, pelo que --nets '*' roteia todos os sinais e alimentações que não têm área de cobre e deixa a terra para os planos; indique o nome exato da rede para a rotear com pistas mesmo assim. As vias colocadas por regras [[stitching]] não são obstáculos para o roteador: a regra coloca-as novamente à volta do novo cobre.

agentee tie NAME [--nets GND] [--dry-run] (MCP tie) liga cada pad SMD de uma rede de plano à camada mais próxima que a sua zona cobre com um rabo curto e uma via junto ao pad, que é como os pads de terra e alimentação se juntam a um plano em vez de pistas entre eles. A via fica no lado do pad oposto ao centro do componente, o mais perto possível: o seu cobre afastado de todos os pads SMD (inclusive o seu, pelo que não há via-in-pad), o seu furo a min_hole_to_smd_pad deles, a min_hole_to_hole de outros furos, a min_via_hole_to_copper e o afastamento da classe de outras redes, a min_copper_to_edge da contornação, e o rabo afastado de outras redes na camada do pad. Tenta 16 direções, a mais próxima da exterior primeiro, até 1,2 mm para além do pad. Um pad que já tem uma via da sua rede a menos de 0,8 mm da sua borda fica como está, os pads atravessantes e as esferas BGA (escape trata desses) são ignorados, e um pad sem ponto legal é listado sob failed. Os rabos e vias são acrescentados como [[tracks]] e [[vias]] ordinários.

agentee neck NAME [--nets 'VBUS,RF_*'] [--taper] [--dry-run] (MCP neck) estreita o cobre que já existe. Examina as duas extremidades de cada pista das redes indicadas (por omissão, todas) que terminam dentro de um pad da respetiva rede na respetiva camada, e seleciona as que são mais largas que o lado menor do pad, ou cuja largura total viola a folga dentro do comprimento da classe neckdown (mais uma largura de pista) a partir do pad. Essa extremidade é cortada: a pista mantém a largura a partir do corte para fora e uma nova entrada [[tracks]] com width explícito corre do ponto antigo no pad até ao corte, seguindo o caminho antigo. A largura do estreitamento é o menor entre a largura da pista, o lado menor do pad e a largura máxima que mantém a folga ao longo do estreitamento, arredondado para baixo a 0,01 mm (ou exatamente min_track_width, como acima). O corte é o primeiro ponto, em passos de 0,01 mm, onde a largura total mantém a folga para o próximo neckdown mais uma largura de pista (e, para um pad mais estreito que a pista, fica fora do pad); um estreitamento nunca é mais longo que neckdown nem mais curto que min_track_width, caso contrário a extremidade é listada em failed com a razão e deixada como está. Um pad construído a partir de várias entradas de pad da mesma rede que se tocam conta como um único pad largo. --taper devolve a largura gradualmente através de uma cadeia curta em vez de um único estreitamento: após o estreitamento fino, seguem até duas entradas adicionais, cada uma a um terço do caminho da largura do estreitamento para a largura da pista, com comprimento total não superior a neckdown (três vezes o estreitamento, no máximo). O cobre só fica mais estreito, pelo que nenhum novo erro de folga pode surgir; o ficheiro é editado no local (todas as outras linhas são mantidas) e os preenchimentos de área guardados são atualizados. O relatório lista cada estreitamento (índice da pista, rede, pad, motivo, largura, comprimento, entradas) e conta as pistas alteradas e adicionadas.

Os pares e as regras de comprimento também estão no 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 member

A verificação relata o desfasamento de cada par em mm e ps (a partir da permissividade efetiva da camada), um trecho do par executado com a folga errada, e pares que passam menos de 80% do seu comprimento lado a lado. Os grupos de correspondência indicam qual a rede que está curta ou longa e em quanto. Um par que passa por componentes de dois pinos em série, como os condensadores AC numa faixa USB, é medido de ponta a ponta: o seu desfasamento é a soma de todos os pares que junta, reportado como FX_TX1_P+SS_TX1_P/FX_TX1_N+SS_TX1_N.

docs/format.md · Markdown para agentes