agentee

Схема и топология платы

Автоматическая расстановка

agentee place: коннекторы на краях, крупные чипы по центру, конденсаторы развязки у их выводов, затем легализация и уточнение.

agentee place NAME [--parts 'U*,C1?'] [--keep-placed] [--side F|B|both] [--seed N] [--dry-run] (MCP place) размещает детали схемы топологии платы внутри контура платы и записывает для каждой at, rotation и side в её запись [[footprints]] (добавляя записи для новых деталей, удаляя at для перемеченного обозначения), перемещает обозначения, которые теперь не проходят проверку шелкографии, затем обновляет сохранённые полигоны. Это быстрый старт для всей платы: разместить, посмотреть, затем вручную переместить и зафиксировать важное. --parts размещает только совпадающие детали, остальные остаются на месте; --keep-placed оставляет на месте все детали, у которых уже есть размещение; locked = true в записи [[footprints]] никогда не перемещается. --side both позволяет конденсаторам развязки BGA располагаться под ним на задней стороне, а пассивным компонентам переноситься на заднюю сторону, если передняя заполнена; по умолчанию всё размещается на передней стороне. Результат зависит только от файлов и --seed, поэтому другой seed даёт другой старт. Сообщает полупериметр длины проводников (HPWL) для сигнальных цепей и для всех цепей, пересечения линий связей, наложения courtyards и среднее и худшее расстояние до развязки, для исходного размещения (если у всех деталей оно было) и для собственного, а также построенные кластеры и кромку, к которой направился каждый разъём. Проводники и переходные отверстия, уже присутствующие в файле, остаются на месте; размещайте неразмеченную плату или используйте route --reroute после. Обозначения перемещаются тем же поиском, что и agentee silk (свободное место рядом с деталью, до 8 проходов и 3 попыток на обозначение), выполняемым на размещённой топологии в памяти, поэтому проект загружается ещё раз, а не на каждый проход; labels_moved считает их, а labels_failing называет те, для которых не найдено свободного места, для agentee silk NAME --hide или ручного перемещения.

Что куда помещается, от самого сильного к слабому, и почему:

  • Разъёмы (детали с площадками edge = true, overhang = true или обозначением J/P) размещаются на кромках платы, каждая кромка заполняется равномерно, со стороной сопряжения наружу: линия кромки это линия Dwgs.User посадочного места рядом с текстом edge (метка PCB Edge в KiCad), иначе внешняя сторона его площадок edge, иначе его площадки плюс min_part_to_edge для нависающей детали, иначе его courtyard плюс min_body_to_edge. RF-разъём (SMA, SMB, BNC, U.FL, MMCX, коаксиальный) и USB-разъём никогда не размещаются на одной кромке, если не подходит другое разделение, поскольку шум USB 3 попадает в диапазон 2,4 ГГц (Intel, "USB 3.0 Radio Frequency Interference Impact on 2.4 GHz Wireless Devices", 2012). [place] edges закрепляет разъём на кромке. Отверстия для крепления размещаются в углах (сначала по диагонали), реперные метки в свободных углах с площадками на расстоянии 3 мм или более от кромки, вдали от конвейерных направляющих и зажимов (SMEMA Fiducial Mark Standard 3.1).
  • RF-тракт размещается по прямой. Начиная с каждого разъёма с площадкой на RF-цепи (класс с impedance и без diff_gap), размещатель следует по RF-цепям через детали, несущие две или более таких цепи и имеющие не более 16 выводов (блоки постоянного тока, аттенюаторы, переключатели, УВЧ, балансные трансформаторы), и выбирает самый длинный путь, заканчивающийся другим разъёмом или более крупным чипом с RF-выводами; переключатель с обходом идёт через усилитель, а не через обход. Если оба конца это разъёмы, они размещаются на противоположных кромках длинной оси платы и сдвигаются вдоль них на одну линию, через центр платы, если оба помещаются. Каждая деталь на повороте так, чтобы её входные и выходные площадки лежали на этой линии, по порядку, с упаковкой к входу с дополнительным зазором не более 1,5 мм на каждую, а остальное пространство уходит на последний отрезок. Деталь с двумя или тремя выводами, имеющая одну площадку на узле тракта (защита от ЭСР, дроссель смещения, шунтирующий конденсатор), размещается рядом с линией на этом узле, повёрнутая так, чтобы её другие площадки смотрели в сторону, достаточно близко, чтобы её RF-площадка соприкасалась с проводником, и достаточно далеко, чтобы её другие площадки сохраняли допуск класса; два шунта на одном узле берут противоположные стороны. Тракт фиксируется до размещения остальных деталей вокруг него, а деталь, которая выходит за пределы платы или попадает на другую, оставляется общему размещателю.
  • Крупные микросхемы (BGA, корпуса с 16 и более выводами площадью более 25 мм2, либо компонент с наибольшим числом выводов) размещаются в центре платы и удерживаются в пределах off_centre от него, где есть место для вывода выводов со всех сторон (Xilinx UG1099, Recommended Design Rules and Strategies for BGA Devices) и подальше от краёв и отверстий крепления, где при обработке и разделке плата изгибается и трескаются соединения BGA (рекомендации IPC/JEDEC-9704A по деформациям).
  • Кластеры формируются из списка цепей: каждая микросхема забирает пассивные компоненты, цепи которых доходят только до неё, конденсаторы между источником питания, который она использует, и землёй (ближайшая микросхема на схеме, если несколько микросхем используют один источник, распределённые по её выводам питания), и её кварцевый резонатор. Конденсаторы развязки кластера размещаются рядом с выводом питания, который они обслуживают (Analog Devices MT-101, Decoupling Techniques; TI SCAA082, High-Speed Layout Guidelines), или под ним на обратной стороне при --side both (Xilinx UG483, 7 Series PCB Design Guide, размещает малые конденсаторы под BGA); кварцевый резонатор размещается рядом с его выводами тактового сигнала (ST AN2867, Oscillator design guide). Кластеры размещаются так, чтобы минимизировать взвешенный HPWL: цепи класса импеданса или пары, [[pairs]] и [[interfaces]] учитываются с тройным весом, цепи питания и земли не учитываются вовсе (это плоскости).
  • Преобразователь (микросхема с индуктивностью на одном из выводов, другой конец которой подключён к источнику питания) удерживает свою индуктивность и входные конденсаторы вблизи себя, а преобразователи держат 8 мм (от центра до центра) от чувствительных компонентов: кварцевых резонаторов и компонентов на однополярных цепях импеданса (RF) (TI SNVA021, AN-1149 Layout Guidelines for Switching Power Supplies; Linear Technology AN139, Power Supply Layout and EMI).
  • Горячие компоненты (источники 0,25 Вт и более в тепловом моделировании этой топологии платы, и крупные корпуса площадью более 49 мм2) раздвигаются на 10 мм, чтобы их тепло не накапливалось (TI SNVA419, AN-2020 Thermal Design by Insight, not Hindsight; IPC-2221B, thermal management). Если горячие компоненты, каждый увеличенный на hot_distance, занимают не более четверти одной стороны платы, их courtyards также должны быть разнесены на hot_distance, как измеряет placement-hot-parts-close (компонент, который не помещается нигде, отменяет правило); на более плотной плате побеждает длина проводников. hot_spread в выводе указывает эту долю и применилось ли правило.
  • Керамические конденсаторы 0805 и крупнее не размещаются в flex_zone, а более мелкие внутри неё выстраиваются вдоль ближайшего к ним края, угла или отверстия крепления (рекомендации Murata и TDK по монтажу MLCC при изгибе платы; Knowles). Зона измеряется так же, как проверки mlcc-flex-zone, от двух контактных площадок до контура, вырезов платы и отверстий крепления; на последнем проходе любой конденсатор, оставшийся в неверном месте, поворачивается или перемещается (до 12 мм). Каждый корпус держит min_body_to_edge от контура и от каждого отверстия [[outline.cutouts]] файла платы, которое находится за пределами платы, courtyards никогда не перекрываются с одной стороны (компоненты с проходом через плату блокируют обе стороны), и ничего не входит в полигон [place] keepouts (courtyards по IPC-7351B: courtyard это минимальная площадь, необходимая компоненту и его посадочному месту).
  • Поворот следует за основными цепями: каждый компонент получает четверть оборота, которая приближает его контактные площадки к другим концам его цепей, а пассивные компоненты кластера разделяют одну ось.

Метод: каждый кластер (микросхема и её участники) и каждый свободный компонент становится блоком с площадью его компонентов. Спектральная раскладка взвешенного графа кликов блоков (его два наименьших нетривиальных собственных вектора, по рангу) упорядочивает их на плате. Затем 24 раунда чередуют решение квадратичной длины проводников и шаг разнесения: решение тянет выводы, а не центры, для микросхем, и выбирает четверть оборота каждой микросхемы каждый раунд (по длине проводников, а в поздних раундах также по пересечениям её цепей с двумя выводами); коннекторы тянутся к ближайшему краю, а крупные микросхемы к центру; шаг разнесения делит свободную область платы (внутри контура и вдали от вырезов, keepouts и размещённых компонентов) по очереди вдоль её длинной стороны, давая каждому блоку область размером с его площадь, и каждый раунд сильнее тянет блоки к их областям. Затем коннекторы назначаются краям (все назначения пробуются до семи коннекторов, жадно после этого) и сдвигаются вдоль них, встык с контуром там, где он проходит в этой точке (вырез или ступенька считаются краем), пробуя сначала другие ближайшие края, если на назначенном нет места, и решение запускается снова с ними зафиксированными. Легализация размещает каждый кластер целиком: его якорь на каждой четверти оборота (для микросхем) и пять сдвигов на треть ширины кластера, его участники вокруг него, сохраняя наименее затратные по длине проводников и пересечениям; каждый компонент переходит в ближайшее место на сетке 0,05 мм, где его courtyards не пересекаются с ничем и он соблюдает правила краёв. Затем целые кластеры размещаются снова с поворотом или сдвигом, и пары кластеров микросхем похожего размера меняются местами, если это снижает затраты. За этим следует уточнение методом имитации отжига (сдвиги, четверти оборота, замены компонентов одного размера, перемещения целых кластеров, перевороты сторон при --side both; 1500 ходов на компонент, затем ещё 500 при низкой температуре), оцениваемое взвешенным HPWL, пересечениями цепей с двумя выводами (4 за пересечение) и правилами выше как штрафами. Восемь стартов (восемь отражений спектральной раскладки) легализуются на параллельных потоках, и три наименее затратные проходят к перемещениям кластеров и отжигу, так что результат зависит только от файлов и --seed, а не от числа потоков.

Компоненты держатся подальше от собственной шелкографии платы: линии [[graphics]] на слое шелкографии, текст шелкографии с locked = true и [[artwork]] шелкографии блокируют courtyards на своей стороне (компонент, который не помещается нигде, всё же может их перекрывать). Текст шелкографии, не зафиксированный, не блокирует компоненты: после размещения каждый такой текст, который перекрывает компонент (или его зарезервированная метка), перемещается в ближайшее свободное место на плате в пределах 10 мм, вдали от компонентов, меток, зафиксированной шелкографии и других текстов; texts_moved перечисляет перемещения, записанные обратно в [[graphics]], а texts_stuck тексты без свободного места. Коннекторы, отверстия крепления и фидусиальные метки также резервируют метку, на внешней стороне компонента или повёрнутую к внутренней стороне, и остаются без неё, если ни одна не помещается в месте, которое занимает компонент. Метке каждого компонента также нужно место: если метки занимают не более четверти свободной области платы, коробка размером с текст метки (0,2 мм вокруг него, в месте метки посадочного места, отодвинутая от собственных контактных площадок и шелкографии) держится свободной, как courtyard, и place записывает это место как label.at; на более заполненной плате с оставшимся местом пересечение этих коробок с другими компонентами и метками является небольшой затратой в отжиге, а на полностью заполненной плате метки оставляются на проход меток (agentee silk --hide для тех, у которых нет места).

На копии examples/sdr без проводников и переходных отверстий (251 компонент, 65 x 45 мм), только верхний слой, семена 1-4 дают 3276-3436 мм HPWL сигналов и 261-293 пересечений, за примерно 2 с решения на 4 ядрах (около 6 с CPU) плюс загрузка и проход разметки. С --side both они дают около 1955-2025 мм и 150-165 пересечений.

docs/format.md · Markdown для агентов