Печатная плата (авто)маршрутизация

Фон

Я работаю над довольно плотным смешанным дизайном печатной платы PTH / SMD (с покрытием через отверстие / поверхностный монтаж). Я использую Eagle CAD для схематического захвата / компоновки и использую функцию автоматической трассировки для трассировки. Это двухслойная плата, и я стараюсь размещать все SMD-компоненты на одной стороне платы для простоты изготовления.

Опыт

Я обычно размещаю свои компоненты в тех местах, которые, как мне кажется, являются разумными с точки зрения близости интерфейса, поворачиваю пакеты QFP на 45 градусов, где это может быть полезно, устанавливаю сетку маршрутизации на 1 мил (т.е. минимум?), устанавливаю DRC минимальная ширина трассы до минимума, разрешенного моим производителем, нажимаю Go, ловлю шутейку и смотрю, что получится утром (или что не получилось). В авто-маршрутизаторе и DRC есть много настроек, с которыми я, честно говоря, никогда не связываюсь, потому что не понимаю, как они влияют на маршрутизацию (это слово?), что может способствовать моему разочарованию.

Вопрос

На данный момент я много использовал Eagle, и я очень доволен им, но часто кажется, что заставить автоматическую трассировку завершиться очень сложно, а трассируемость, кажется, очень чувствительна к размещению компонентов. Часто он получает до 98+% маршрутизации, а затем сдается. Каковы некоторые практические правила/рекомендации/советы о том, как помочь автотрассировщику выполнить свою работу?

Ответы (5)

Автотрассировщик Eagle — достойный инструмент, и я часто им пользуюсь. Однако, как и любой инструмент, вы должны знать, как правильно его использовать, и понимать его ограничения. Если вы просто рассчитываете бросить все на автотрассировщик, вы будете разочарованы. Ни один современный автомаршрутизатор, и, вероятно, еще несколько лет, не сможет справиться с чем-либо, кроме надуманных или игрушечных проблем.

Вы говорите, что в автотрассировщике Eagle есть настройки, которые вы не понимаете и с которыми никогда не связываетесь. Это плохое отношение и, вероятно, хорошая часть вашей проблемы. Не существует набора параметров управления, который работает на всех платах. Даже внутри двухслойных плат существуют различные компромиссы. Вы обязательно должны прочитать руководство и настроить параметры для вашей конкретной ситуации.

Для двухслойных плат я часто стараюсь, чтобы большая часть нижнего слоя была заземлена. Поэтому я максимально использую верхний уровень для межсоединений, а нижний уровень — для коротких «перемычек», чтобы топология маршрутизации работала. В этом случае я установил высокую стоимость маршрутизации в нижнем слое.

Перед автотрассировкой вы должны посмотреть на плату и подумать о критических областях, которые вы не можете объяснить автотрассировщику. Например, вы хотите, чтобы контурные токи импульсного источника питания были локальными и не касались основного заземляющего слоя. То же самое относится и к токам высокой частоты, локальным для цифрового чипа, таким как шунтирующие заглушки и кристалл с заглушками. Если вы используете слой псевдоземли, как я описал выше, то вы хотите вручную соединить каждое соединение земли с землей своим собственным переходным отверстием. Это оставляет максимальное пространство на верхнем слое для маршрутизации всего остального.

Процесс трассировки платы, даже если автоматическая трассировка выполняет большую часть рутинной работы, выглядит следующим образом:

  1. Вручную маршрутизируйте критические пути, как я упоминал выше.

  2. Выполните базовую уборку перед автоматической маршрутизацией. Это включает, например, подключение всех заземляющих контактов непосредственно к плоскости заземления.

  3. Ищите проблемные области, где вы можете увидеть, что автотрассировщик может попасть в беду. Если есть короткие соединения в плотных районах, вы можете сделать некоторые из них. Это требует некоторого опыта и интуиции, поэтому, если вы новичок в конкретном автотрассировщике, пропустите этот шаг.

  4. Сохраните копию платы, затем запустите автомаршрутизатор. Если это первое сквозное здесь, просто сделайте минимум, чтобы найти решение. Цель первых нескольких раз — увидеть, где находятся проблемные области, чтобы вы могли соответствующим образом скорректировать макет и свой ручной предварительный маршрут.

  5. Посмотрите внимательно на получившийся маршрут. Посмотрите, где находятся проблемные зоны. Вернитесь к сохраненной копии с шага 4 и настройте макет и ручной предварительный маршрут в соответствии с тем, что сделал автоматический маршрут. Повторяйте обратно к шагу 4, пока результат не станет приемлемым. По мере того, как вы делаете больше итераций, вы запускаете оптимизацию автотрассировщика и другие параметры, чтобы сделать более окончательный маршрут. В начале вы просто пытаетесь увидеть, сможет ли он найти решение и в чем заключаются большие проблемы. В более поздних проходах вы сходитесь на реальном маршруте. Я начинаю без проходов оптимизации и использую 8 для финальных маршрутов. Я также настраиваю ранние проходы для поиска решения, а затем более поздние проходы для его оптимизации.

  6. Делайте ручную уборку на маршруте. В случае двухслойной платы, в основном с заземлением в нижней части, необходимо минимизировать максимальные размеры островков в плоскости заземления. Лучше иметь много маленьких островов, чем меньше больших. Иногда можно увидеть способы локальной перестановки сигналов, чтобы свести к минимуму перемычки на нижнем слое. На этом этапе вы уже позаботились об общей картине, и вы сосредоточены на ручной оптимизации небольших областей. Это похоже на глазок-оптимизатор компиляторов.

Вот файл управления автотрассировщиком Eagle, который я использовал в двухслойном проекте с нижним слоем, насколько это возможно:

; Файл управления автотрассировщиком EAGLE

[По умолчанию]

  Маршрутная сетка = 4 мил

  ; Параметры трассировки:

  tpViaShape = Круглый

  ; Предпочтительные направления:

  PrefDir.1 = *
  PrefDir.2 = 0
  PrefDir.3 = 0
  PrefDir.4 = 0
  PrefDir.5 = 0
  PrefDir.6 = 0
  PrefDir.7 = 0
  PrefDir.8 = 0
  PrefDir.9 = 0
  PrefDir.10 = 0
  PrefDir.11 = 0
  PrefDir.12 = 0
  PrefDir.13 = 0
  PrefDir.14 = 0
  PrefDir.15 = 0
  PrefDir.16 = *

  Активный = 1
  ; Факторы стоимости:

  cfVia = 50
  cfNonPref = 5
  cfChangeDir = 2
  cfOrthStep = 2
  cfDiagStep = 3
  cfExtdStep = 0
  cfBonusStep = 1
  cfMalusStep = 1
  cfPadImpact = 4
  cfSmdImpact = 4
  cfBusImpact = 0
  cfHugging = 3
  cfAvoid = 4
  cfPolygon = 10

  cfBase.1 = 0
  cfBase.2 = 1
  cfBase.3 = 1
  cfBase.4 = 1
  cfBase.5 = 1
  cfBase.6 = 1
  cfBase.7 = 1
  cfBase.8 = 1
  cfBase.9 = 1
  cfBase.10 = 1
  cfBase.11 = 1
  cfBase.12 = 1
  cfBase.13 = 1
  cfBase.14 = 1
  cfBase.15 = 1
  cfBase.16 = 5

  ; Максимальное количество...:

  мнвиас = 20
  мнсегментов = 9999
  mnExtdSteps = 9999
  mnRipupLevel = 50
  mnRipupSteps = 300
  mnRipupTotal = 500

[Автобусы]

  @Маршрут

  Активный = 1
  cfVia = 10
  cfChangeDir = 5
  cfBusImpact = 4
  cfPolygon = 25
  cfBase.16 = 10
  мнВиас = 0
  mnRipupLevel = 10
  mnRipupSteps = 100
  mnRipupTotal = 100

[Маршрут]

  @По умолчанию

  Активный = 1

[Оптимизировать1]

  @Маршрут

  Активный = 1
  cfVia = 99
  cfNonPref = 4
  cfChangeDir = 4
  cfExtdStep = 1
  cfHugging = 1
  cfPolygon = 30
  cfBase.16 = 10
  mnExtdSteps = 20
  mnRipupLevel = 0
  mnRipupSteps = 100
  mnRipupTotal = 100

[Оптимизировать2]

  @Оптимизировать1

  Активный = 1
  cfNonPref = 3
  cfChangeDir = 3
  cfBonusStep = 2
  cfMalusStep = 2
  cfPadImpact = 2
  cfSmdImpact = 2
  cfHugging = 0
  cfPolygon = 40
  mnExtdSteps = 15

[Оптимизировать3]

  @Оптимизировать2

  Активный = 1
  cfVia = 80
  cfNonPref = 2
  cfChangeDir = 2
  cfPadImpact = 0
  cfSmdImpact = 0
  cfPolygon = 50
  mnExtdSteps = 10

[Оптимизировать4]

  @Оптимизировать3

  Активный = 1
  cfVia = 60
  cfNonPref = 1
  cfPolygon = 60
  cfBase.16 = 12

[Оптимизировать5]

  @Оптимизировать4

  Активный = 1
  cfVia = 40
  cfNonPref = 0
  cfPolygon = 70
  cfBase.16 = 14
  mnExtdSteps = 5

[Оптимизировать6]

  @Оптимизировать5

  Активный = 1
  cfVia = 20
  cfBase.16 = 16

[Оптимизировать7]

  @Оптимизировать6

  Активный = 1
  cfBase.16 = 18

[Оптимизировать8]

  @Оптимизировать7

  Активный = 1
  cfBase.16 = 20
Я не хотел столкнуться с плохим отношением...

Автомаршрутизация, в общем, доставляет больше хлопот, чем пользы. Даже с супердорогими роутерами. Моя компания использует Cadence Allegro (70 000 долларов США за одно рабочее место), и я считаю, что требуется больше времени, чтобы объяснить автотрассировщику, как сделать хорошую работу, чем просто выполнить трассировку вручную. И конечный результат всегда лучше. Это верно для каждого автотрассировщика, который я пробовал, и не зависит от сложности платы. Платы, которые я делаю, варьируются от простых двухслойных вещей, состоящих всего из пары деталей, до 14-слойных монстров с 16 BGA и более чем 2000 цепей.

Вы пробовали ТопоР ? У меня нет личного опыта с этим, но я всегда думал, что обычные маршрутизаторы глупы, и этот не выглядит глупо, судя по маркетинговым материалам.
@romkyns Я не пробовал TopoR. Это не выглядит таким уж полезным для моих целей. Он не поддерживает более сложные правила о дифференциальных трассах, согласованных трассах импеданса, согласованных длинах трасс, классах цепей с разными правилами для каждого класса и т. д. Возможно, у него есть эти вещи, но я не видел упоминания об этом на их веб-сайте.
Мне сказали, что все это можно сделать. Смотрите ответ Елены. У меня всегда было хорошее предчувствие об этом автотрассировщике... :)

Я хотел бы предложить TopoR . TopoR очень эффективен на двухслойных платах (но он также успешно трассирует как однослойные, так и многослойные платы высокой плотности). Я могу сказать вам, что на двухслойной плате это даст вам лучший результат (по сравнению с другими САПР).

Если вам интересно, я могу сделать образец маршрутизации вашего проекта (мне нужен файл .brd) -> diztempa{at}gmail.com

См. комментарий Дэвида Кесснера в ответ на мое предложение TopoR — поддерживает ли он какие-либо из упомянутых функций?
@romkyns В TopoR можно установить множество правил. Говоря о высокоскоростных правилах, TopoR позволяет: - Создавать дифференциальные пары - Задавать параметры дифференциальной пары: импеданс, ширину провода и зазор для каждого сигнального слоя. - Сопоставьте задержку сигнала в группах цепей и установите отношение задержки между группой цепей и т. д. PS, так как не рекомендуется размещать здесь потерянные ссылки, если вы заинтересованы, напишите мне на мой почтовый ящик, и я дам вам подробный ответ :)

Я обнаружил, что автотрассировщик Eagle не подходит. Многие здесь скажут, что автотрассировка — это плохо, и ее следует избегать, но я склонен не согласиться. Я добился больших успехов в фрироутинге, и я обнаружил, что он обычно дает гораздо лучшие маршруты, чем орел, с меньшим количеством переходных отверстий и меньшей общей длиной трассы. У них есть сценарии для простого импорта и экспорта из орла, и в целом они просты в использовании.

Поэтому, если кто-то использует FreeRouting с Eagle, я предполагаю, что вам нужно купить только модули схемы и макета у CadSoft.

Автотрассировщики могут быть очень суетливыми, а алгоритмы различаются, поэтому то, что хорошо работает для одного, может не работать для другого.
Хотя большую часть трассировки я выполняю вручную, я не из тех, кто считает, что их следует полностью избегать. Это такой же инструмент, как и любой другой, и если он работает и облегчает вашу работу, используйте его. Тем не менее, лично я никогда не сталкивался с маршрутизатором, который может работать лучше, чем вручную, поэтому я бы не стал пытаться использовать его исключительно.

Однако, если плата очень сложная или трассировка чувствительна (т. е. имеет ограничения, о которых маршрутизатор не знает, и у вас нет достойного способа «сообщить» об этом), то часто лучше трассировать хотя бы часть из них вручную. Если он выполнен, например, на 98%, вы часто можете просто завершить его самостоятельно, поскольку вы можете решить, где вы можете ослабить ограничения (или сообщить автотрассировщику и повторить попытку для определенных цепей).

Сетка размещения и маршрутизации очень важна. Также используйте любые правила, которые вы можете оптимизировать, чтобы оптимизировать его производительность - это может иметь большое значение, потратив некоторое время на его правильную настройку, а не просто нажимая «маршрут».

Иногда просто невозможно развести плату и придерживаться установленных вами правил проектирования. Существуют формулы для определения «маршрутизации» платы, основанные на размере платы, количестве контактных площадок, ширине дорожки и т. д. Google будет знать больше.

Я не использовал маршрутизатор eagle, поэтому не могу конкретно посоветовать, но внимательно прочитайте документацию и постарайтесь узнать, что делает каждый отдельный параметр. Возможно, сделайте это на тестовой доске, чтобы увидеть, что лучше всего работает в разных ситуациях.
Я согласен с CMP на Freerouter. Это на самом деле лучше, чем большинство родных автотрассировщиков, которые я использовал для маршрутизации, поэтому стоит попробовать посмотреть, получите ли вы лучшие результаты, чем Eagle.