Плата
Проверки правил проектирования
Все правила топологии с их id, уровнем серьёзности и условием запуска: медь, сверла, маска, шелкография, сборка, полигоны, сигналы, доступ для тестирования и размещение.
Проверки топологии выполняются из реестра правил, каждое из которых имеет стабильный id, категорию (copper, drill, mask, silk, assembly, zone, signal, test, placement), уровень серьёзности по умолчанию и условие для платы: правило для внутренних слоёв выполняется только при наличии 4 и более медных слоёв, правило о заполнении переходных отверстий только когда переходные отверстия находятся в контактных площадках, правило для BGA только при наличии BGA. Каждое сообщение правила начинается с его id в квадратных скобках, например [via-cuts-pad]. agentee drc NAME --list (MCP drc с list = true) выводит все правила с их категорией, уровнем серьёзности и тем, применяется ли правило к этой плате и почему; agentee drc NAME выводит только сообщения о нарушениях правил топологии.
[drc] # in the board file
disable = ["silk-width"] # rule ids to skip; their checks are not computed, so with silk-text
# and silk-hidden off `agentee silk` has nothing to move
severity = { "starved-thermal" = "error", "via-in-pad" = "warning" } # info | warning | error
tombstone_ratio = 3 # copper or feed width one chip pad may have over the other| id | уровень серьёзности | выполняется, когда | проверки |
|---|---|---|---|
via-cuts-pad | ошибка | всегда | переходное отверстие, медь которого перекрывается или касается SMD-площадки, при этом сверло не полностью находится внутри площадки: припой стекает по стенке отверстия и повреждает край площадки. Переходное отверстие другой цепи, касающееся площадки, сообщается как short |
via-annulus-past-pad | предупреждение | переходные отверстия в площадках | сверло находится в площадке, но изоляционное кольцо переходного отверстия выходит за край площадки под паяльную маску |
via-in-pad | информация | переходные отверстия в площадках | подсчитывает переходные отверстия в SMD-площадках собственной цепи (сверло внутри площадки); fab-notes.txt просит завод заполнить и закрыть именно эти отверстия (тип VII по IPC-4761) |
via-in-pad-fill | ошибка | переходные отверстия в площадках | переходное отверстие в площадке со сверлом шире max_filled_via_drill, либо тип переходного отверстия задаёт fill, отличный от filled_capped (тип VII по IPC-4761) |
hole-to-smd-pad | предупреждение | всегда | отверстие переходного отверстия ближе, чем min_hole_to_smd_pad, к SMD-площадке собственной цепи (или без цепи), которую оно не касается; паста и припой могут затечь внутрь |
drill-size | ошибка | всегда | отверстия в площадках меньше min_drill (гальванизированные) или min_npth_drill (негальванизированные), либо больше max_drill (большие отверстия маршрутизируются, рисуйте их как вырезы). Размеры переходных отверстий проверяются по [[vias]] платы |
slot-size | ошибка | слотовые отверстия | слоты уже, чем min_plated_slot_width или min_npth_slot_width, либо короче, чем вдвое их ширина |
aspect-ratio | ошибка | всегда | гальванизированные отверстия, у которых отношение глубины (медь и диэлектрик, которые они проходят) к диаметру сверла превышает max_aspect_ratio |
hole-to-copper | ошибка | всегда | стенка отверстия переходного или гальванизированного SMD-отверстия ближе, чем min_via_hole_to_copper или min_pth_hole_to_copper, к меди другой цепи на слое, который проходит отверстие: проводники, площадки, переходные отверстия, полигоны |
inner-hole-to-copper | ошибка | 4 и более медных слоёв | стенка гальванизированного SMD-отверстия ближе, чем min_inner_pth_hole_to_copper, к меди другой цепи на внутреннем слое |
npth-to-copper | ошибка | негальванизированные отверстия | стенка негальванизированного отверстия ближе, чем min_npth_to_copper, к любой меди, включая полигон собственной цепи |
hole-to-edge | ошибка | негальванизированные отверстия | стенка негальванизированного отверстия ближе, чем min_copper_to_edge, к контуру платы или вырезу, либо проходит через него |
smd-pad-gap | ошибка | всегда | SMD-площадки разных цепей ближе, чем min_smd_pad_gap, одна строка на пару компонентов с ближайшими площадками |
pad-to-edge | ошибка | всегда | медь площадки ближе, чем min_copper_to_edge, к контуру платы или вырезу; площадки с edge = true не проверяются |
edge-pad-reach | предупреждение | всегда | площадка с edge = true, которая не доходит до контура платы |
starved-thermal | предупреждение | полигоны | площадка, соединённая с полигоном собственной цепи менее чем на половину контура, менее чем двумя спицами шириной не меньше min_track_width, и с общим количеством меди меньше, чем собственная ширина площадки |
part-to-edge | предупреждение | компоненты | SMD-площадки ближе, чем min_part_to_edge, к контуру или вырезу платы, где напряжение от разделения трескается; пропускает реперные точки, отверстия для крепления и компоненты с площадками edge |
part-body-to-edge | информация | компоненты | корпус компонента ближе, чем min_body_to_edge, к контуру или вырезу платы, либо выходит за него (выход за вырез считается выходом) (руководства DFM сборки: компонент не ближе 1 мм к краю). Корпус: контур завода, иначе courtyard, иначе медь площадки, и в сообщении указывается какой; пропускает реперные точки, отверстия для крепления, компоненты с площадками edge и посадочные места с overhang = true |
fiducials | информация | компоненты | на плате нет посадочного места с именем, похожим на Fiducial |
tooling-holes | информация | компоненты | нет негальванизированного отверстия 1,5 мм или больше |
bga-pad | ошибка | наличие BGA | SMD-площадки BGA (16 и более круглых SMD-площадок) меньше min_bga_pad |
bga-pitch | ошибка | наличие BGA | шаг шариков мельче, чем min_bga_pitch |
bga-pad-ratio | предупреждение | наличие BGA | диаметр площадки вне диапазона 40% до 65% шага (размеры площадок по IPC-7351) |
paste-without-mask | предупреждение | компоненты | медная площадка с пастой, но без окна в маске на этой стороне, поэтому трафарет наносит пасту на маску |
mlcc-flex-zone-case | информация | керамические конденсаторы | керамический конденсатор корпуса 0805 (2012 метрический) или больше в пределах flex_zone от контура, угла платы, выреза, отверстия для крепления (посадочное место MountingHole*) или негальванизированного отверстия 2 мм или больше (Knowles: зона напряжения обычно в пределах 5 мм от края платы или точек крепления); чем длиннее чип, тем больше деформация на его концах |
mlcc-flex-zone | информация | керамические конденсаторы | более мелкий керамический конденсатор в пределах flex_zone, у которого длинная ось направлена на ближайший край, угол или отверстие (FAQ Murata: ориентируйте чип перпендикулярно направлению напряжения, чтобы длинная ось шла вдоль края) |
mlcc-flex-zone-info | информация | керамические конденсаторы | подсчитывает более мелкие керамические конденсаторы в пределах flex_zone, которые уже лежат вдоль края |
tombstone-risk | информация | чипы 0603 или мельче | двухплощадочный SMD-компонент 0603 (1608 метрический) или мельче, у которого площадки различаются по размеру или форме, в одной из которых есть переходное отверстие, а в другой нет, либо у которого медь в пределах 0,3 мм от одной площадки на её слое (проводники, переходные отверстия, полигоны собственной цепи) превышает tombstone_ratio (по умолчанию 3) от другой; площадка, соединённая с полигоном через тепловое соединение, взвешивается по ширине спицы против ширины проводника на другой площадке, а площадка без проводника, переходного отверстия или полигона не сравнивается; конец, который нагревается первым, смачивается первым и поднимает компонент (руководства DFM EMS: симметричные площадки и сбалансированная медь на обоих концах) |
tall-part-shadow | информация | высота компонентов более 3 мм | двухплощадочный чип 0603 или мельче ближе к компоненту высотой более 3 мм, чем высота этого компонента, измеренная от площадок чипа до корпуса высокого компонента (эмпирическое правило EMS 1:1: затенение при оплавлении и инспекции); высоты берутся из height посадочного места, иначе из корпуса, который 3D-просмотрщик рисует без модели: значение по умолчанию семейства (SOIC, QFN, разъёмы, экраны) или часть имени _h1.25mm |
test-access | информация | компоненты | цепи, которые запрашивает секция [test], но у которых нет доступа зонда со стороны зонда: нет контактной площадки тестовой точки (обозначение TP1... или посадочное место с именем TestPoint*), нет открытого медного сквозного отверстия (through_holes), нет переходного отверстия без паяльной маски (vias). Цепи в классах с целевым импедансом и цепи пар исключаются и указываются по имени, так как отвод им вредит |
test-pad-geometry | информация | тестовые точки | контактная площадка тестовой точки меньше min_test_pad, ближе к другому центру, чем min_test_pad_pitch, ближе к корпусу другого компонента со стороны зонда, чем min_test_pad_to_body, ближе к краю платы или технологическому отверстию (немедные отверстия и отверстия для крепления), чем min_test_pad_to_edge, или не находится со стороны зонда |
placement-decoupling-distance | информация | компоненты | конденсатор между шиной питания и землёй, у которого контактная площадка шины питания дальше, чем decoupling_distance (3 мм), от ближайшего вывода ИС на этой шине; для накопительных конденсаторов свыше 1 мкФ - в 2,5 раза больше |
placement-crystal-distance | информация | компоненты | кварцевый резонатор или генератор (обозначение Y или посадочное место с именем кварца или генератора), у которого сигнальная контактная площадка дальше, чем crystal_distance (5 мм), от вывода ИС на его цепи |
placement-large-part-off-centre | информация | компоненты | большая микросхема (BGA, корпус с 16 и более выводами и площадью свыше 25 мм2, иначе компоненты с наибольшим числом выводов), у которой центр courtyard дальше, чем off_centre (0,6) от центра платы к краю |
placement-hot-parts-close | информация | компоненты | два горячих компонента, у которых courtyard ближе, чем hot_distance (5 мм): это [[sources]] тепловых симуляций данной топологии с мощностью 0,25 Вт и более, а также большие корпуса (courtyard 49 мм2 и более), которые эти симуляции не указывают |
placement-cluster-spread | информация | компоненты | двухвыводной пассивный компонент, у которого сигнальные цепи идут только к одной ИС и никуда больше, и который дальше, чем cluster_spread (10 мм), от вывода этой ИС |
placement-connector-not-at-edge | информация | компоненты | разъём (краевые контактные площадки, overhang = true или обозначение J/P, которое не является Tag-Connect, U.FL или тестовой площадкой), у которого courtyard дальше, чем connector_edge (3 мм), от контура платы |
short | ошибка | всегда | медь двух разных цепей соприкасается |
clearance | ошибка | всегда | медь двух цепей ближе, чем наибольшее из допусков их классов (у посадочного места clearance заменяет их для его площадок), или медь входит в неметаллизированное отверстие |
unrouted | ошибка | всегда | цепь, у которой не все контактные площадки соединены проводниками, переходными отверстиями и полигонами; указываются группы, которые не соединены |
dangling-track | предупреждение | всегда | конец проводника, который не касается меди своей цепи и не касается полигона |
track-grazes-pad | предупреждение | всегда | проводники, которые касаются контактной площадки только краем; проведите центральную линию до площадки |
copper-to-edge | ошибка | всегда | проводник или переходное отверстие ближе, чем min_copper_to_edge, к контуру платы или вырезу, или за пределами платы (проводник через вырез выходит за пределы платы) |
pad-off-board | ошибка | всегда | контактные площадки за контуром или в вырезе платы; площадки с edge = true исключаются |
stitching | информация | всегда | подсчитывает переходные отверстия, размещённые каждой записью [[stitching]] |
stitching-empty | предупреждение | всегда | запись [[stitching]], которая не разместила ни одного переходного отверстия |
fanout-empty | предупреждение | всегда | запись [[fanouts]], которая не разместила ни одного переходного отверстия |
hole-to-hole | ошибка | всегда | отверстия разных компонентов или переходные отверстия ближе, чем min_hole_to_hole, от стенки до стенки; подсчитывается с первой парой; учитываются только отверстия, у которых диапазоны слоев пересекаются с диэлектриком, поэтому микровыступ рядом со скрытым переходным отверстием не считается парой |
stacked-via | ошибка | всегда | переходное отверстие в том же месте, что и другое переходное отверстие той же цепи через тот же диэлектрик (сверлено дважды), наложенное на другое переходное отверстие на одном слое, когда stacked_microvias выключено или нарушен порядок сборки ламината (переходное отверстие под стеком сверлится на более позднем этапе, чем верхнее), или наложенное на переходное отверстие с контролируемой глубиной вообще |
via-lamination | ошибка | всегда | переходные отверстия, у которых диапазон слоев и тип сверла не соответствуют ни одному этапу сверления ламината (см. Ламинат), по типу и диапазону переходного отверстия; сообщение указывает запись [[vias]] платы и перечисляет все диапазоны, которые сверлит ламинат, по типу сверла. Проверка платы оставляет тип переходного отверстия, размещённый топологией, на этом правиле |
neckdown | информация | всегда | проводник уже ширины своего класса, но не меньше min_track_width, на участке до длины neckdown класса (по умолчанию 0,5 мм) |
class-width | ошибка | всегда | проводник уже ширины своего класса, который не является сужением |
impedance-width | предупреждение | классы импеданса | проводник класса импеданса с другой шириной; его импеданс меняется |
impedance-trace | ошибка | классы импеданса | проводник класса импеданса, у которого ширина (включая сужения) или медь рядом с ним на внешнем слое выводят импеданс за пределы допуска класса; зазор не проверяется в пределах длины сужения у контактной площадки или соединения |
track-overlap | ошибка | всегда | проводники одной цепи, идущие друг над другом; медь удваивается |
acute-turn | предупреждение | всегда | проводник, разворачивающийся более чем на 90 градусов; ловушка для кислоты |
zone-overlap | ошибка | полигоны | полигоны двух цепей на одном слое пересекаются; короткое замыкание |
zone-to-zone | ошибка | полигоны | полигоны двух цепей на одном слое ближе, чем их допуск |
zone-clearance | ошибка | полигоны | полигон, который накрывает или подходит слишком близко к меди другой цепи |
zone-tips | предупреждение | полигоны | кончики полигона острее 30 градусов; увеличьте min_width полигона |
copper-neck | предупреждение | полигоны | перешейки в полигоне уже 90% от min_width полигона, которые полигон должен был открыть; подсчитываются по месту с самым узким |
zone-islands | информация | всегда | острова полигона, которые не касаются цепи полигона и были удалены |
courtyard-overlap | ошибка | компоненты | courtyard двух компонентов на одной стороне пересекаются по контуру |
courtyard-hole | ошибка | компоненты | courtyard, который накрывает отверстие для крепления или неметаллизированное отверстие другого компонента |
mask-web | ошибка | всегда | контактные площадки разных цепей, у которых окна паяльной маски оставляют меньше, чем min_mask_web; одна строка на пару компонентов; площадки одного посадочного места с mask_web = false пропускаются между собой |
silk-text | ошибка | всегда | текст шелкографии, который теснит другой текст, находится на контактных площадках, печатается поверх переходных отверстий, пересекает контур шелкографии или выходит за пределы платы; обозначение получает свободное место (agentee silk перемещает его туда) |
silk-hidden | предупреждение | всегда | текст шелкографии, скрытый только под корпусом другого компонента |
silk-text-height | предупреждение | всегда | текст шелкографии ниже min_silk_text_height |
silk-artwork | ошибка | всегда | графика шелкографии на контактных площадках, поверх текста шелкографии или за пределами платы |
watermark | ошибка | всегда | водяной знак agentee vX.Y.Z-HASH не имеет свободного места на шелкографии, или место [watermark] не свободно; производитель плат отклонит плату без места, и отключение правила не удаляет водяной знак |
silk-width | предупреждение | всегда | линии шелкографии платы (графика [[graphics]] топологии, не текст) тоньше, чем min_silk_width; подсчитываются с самой тонкой; шелкография посадочных мест проверяется вместе с посадочным местом |
pair-skew | ошибка | пары | пара, у которой превышен max_skew или max_skew класса, с указанием цепи, которую нужно удлинить |
pair-skew-info | информация | пары | рассогласование длин каждой пары в пределах допустимого |
pair-gap | ошибка | пары | пара, идущая параллельно с зазором, отличным от diff_gap класса, на расстоянии больше max_uncoupled |
pair-coupling | предупреждение | пары | менее 80 % длины пары идёт параллельно с зазором пары |
match-length | ошибка | группы согласования длин | элемент группы согласования длин, отклонение от целевой длины больше допустимого |
interface-pair | ошибка | интерфейсы | цепь дифференциального интерфейса без пары |
interface-impedance | ошибка | интерфейсы | цепь интерфейса, у класса которой нет целевого импеданса, импеданс вне допустимого диапазона или нет зазора пары в дифференциальном интерфейсе |
interface-skew | ошибка | интерфейсы | пара с рассогласованием длин, превышающим max_skew интерфейса |
interface-bus-skew | ошибка | интерфейсы | рассогласование длин сигнальных линий шины больше max_bus_skew |
interface-clock-window | ошибка | интерфейсы | сигнальная линия, приходящая вне clock_window относительно тактовой линии |
interface-vias | ошибка | интерфейсы | линия с переходными отверстиями больше max_vias |
interface-stub | ошибка | интерфейсы | отвод переходного отверстия длиннее max_stub |
interface-return-via | ошибка | интерфейсы | сигнальное переходное отверстие без опорного отверстия в пределах return_via |
interface-length | ошибка | интерфейсы | линия длиннее max_length |
interface-reference | ошибка | интерфейсы | линия, идущая больше max_unreferenced без опорной плоскости рядом |
Правила размещения указывают, где должны находиться компоненты; по умолчанию это уведомления. Повысьте их уровень с помощью [drc] severity. Пороговые значения задаются в файле платы:
[drc.placement]
decoupling_distance = "3mm" # supply pad of a decoupling cap to the IC pin
crystal_distance = "5mm"
cluster_spread = "10mm" # a passive to the only IC it serves
hot_distance = "5mm" # courtyard gap between large packages
connector_edge = "3mm" # connector courtyard to the outline
off_centre = 0.6 # fraction of the half width or height from the centreМеханические правила (part-body-to-edge, правила mlcc-flex-zone, tombstone-risk, tall-part-shadow) носят рекомендательный характер и по умолчанию имеют уровень info. Повысьте их уровень с помощью [drc] severity. Керамический конденсатор определяется как компонент с ровно двумя SMD-площадками, у которого посадочное место называется C_* или содержит Capacitor, либо обозначение начинается с C и цифры, если в имени посадочного места нет CP_, Tantal, Elec или Polymer; ключ mlcc в посадочном месте или в размещении переопределяет автоматическое определение. Габарит берётся из имени посадочного места (1608Metric, иначе дюймовый код, например 0603), а если его нет, из расстояния между центрами двух площадок, которое близко к длине корпуса.
Идентификатор, не соответствующий ни одному правилу, выдаёт предупреждение. Ошибки в самих файлах (цепь, которой нет в схеме, слой, который не медь, неверный пресет) не являются правилами и не отключаются.