Система Protel DXP имеет две встроенных программы авторазмещения компонентов Cluster Placer и Statistical Placer. Первая рекомендуется для работы с платами с числом компонентов не более 100. Вторая программа использует более мощный алгоритм, анализирующий длины цепей и обрабатывающий большее число компонентов. Но в общем случае обе программы дают неудовлетворительный результат и могут рекомендоваться только как вспомогательный инструмент при интерактивном размещении, когда часть компонентов предварительно размещается вручную и блокируется. Рассмотрим работу этих программ.
1. Сделаем копию разработанной нами печатной платы для последующих экспериментов, для чего откроем в редакторе печатных плат документ Multivibrator.PcbDoc и выполним команду меню File | Save Copy As и укажем имя файла Multivibrator1.PcbDoc.
2. С помощью команды File | Open откроем файл Multivibrator1.PcbDoc как свободный документ.
Удалим все существующие на плате проводники, чтобы они нам не мешали.
3. Выполним щелчок правой кнопкой мыши в любом пустом месте печатной платы и в появившемся контекстном меню выберем команду Build Query (горячие клавиши SHIFT+B). Откроется диалоговое окно Building Query From Board (рис. 1).
4. Здесь в столбце Condition Type/Operator в выпадающим списке Add First Condition выберем опцию Belongs to Net Class, что означает выбор всех объектов, принадлежащих данному классу цепей.
На нашей плате имеется только один назначаемый по умолчанию класс цепей All Nets, который отобразится в столбце Condition Value. В правой части окна в столбце Query Preview отобразится текстовое описание выполняемого запроса InNetClass("All Nets").
5. Проверим, что включен флаг Select Matching.
6. Нажмем кнопку OK или клавишу Enter.
В редакторе печатных плат будут выделены все проводники.
7. Удалим все проводники нажатием клавиши Delete.
Авторазмещение с помощью программы Cluster Placer
Зададим правила проектирования, определяющие минимально допустимые зазоры между компонентами на плате и учитываемые программой Cluster Placer в процессе работы.
8. Выполним команду меню Design | Rules (горячие клавиши D, R). Откроется уже знакомое нам диалоговое окно PCB Rules and Constraints Editor, в котором задаются правила проектирования.
Заметим, что в категории Placement при создании заготовки платы были автоматически заданы два правила Height и Component Clearance. Первое правило регламентирует высоту компонентов и сейчас для нас не очень важно, а второе определяет расстояние между компонентами на плате.
9. Выполним щелчок левой кнопкой мыши на правиле ComponentClearance. В правой части окна откроется описание данного правила (рис. 2).
10. Введем в поле Name новое имя правила: "Общее".
Далее следует указать область действия данного правила. Областью действия называется подмножество объектов на печатной плате, на которое распространяется данное правило. По способу задания области действия правила делятся на унарные и бинарные. Примером унарного правила может служить рассмотренное нами ранее ограничение на ширину проводника. При описании бинарного правила указываются два подмножества объектов, поэтому в нашем случае (рис. 2) область действия описывается как "между всеми компонентами и всеми компонентами". На первый взгляд, такая система выглядит излишне запутанной, но она позволяет указать редактору печатных плат четкие логические критерии верификации процесса проектирования. Не будем изменять эти настройки.
11. В нижней части окна в поле Gap зададим новое значение зазора 2mm.
Далее в выпадающем списке Check Mode следует указать режим проверки правила. Режим Quick Check (быстрая проверка) не допускает наложение компонентов, на каком бы слое они ни находились, а в качестве границы компонента использует прямоугольник, охватывающий все примитивы компонента (без учета текста). Режим Multi Layer Check также ограничивает компонент прямоугольником, но учитывает слой, на котором компонент расположен и допускает случай показанный на рисунке 3. Третий режим Full Check проверяет наложение компонентов друг на друга с точным учетом все составляющих их графических примитивов. Однако он работает только в режиме пакетной проверки правил проектирования (DRC).
12. Так как все компоненты на нашей плате будут располагаться только с одной (верхней) стороны, выберем режим Quick Check.
Создадим новое правило, регламентирующее расстояние между транзисторами.
13. Выполним щелчок правой кнопкой мыши на типе правил Component Clearance и в появившемся контекстном меню выберем команду New Rule.
14. Щелкнем левой кнопкой мыши на только что созданном правиле. В правой части окна откроется его описание.
15. В окошке Name зададим имя правила "Между Транзисторами".
16. Далее в поле Where the First object matches (первое подмножество объектов) выберем опцию Advanced (Query) и нажмем кнопку Query Builder. Появится окно Building Query From Board (рис. 4).
17. Здесь в столбце Condition Type/Operator в выпадающим списке Add First Condition выберем опцию Belongs to Component (является компонентом).
18. В столбце Condition Value появится список всех компонентов, из которого следует выбрать транзистор VT1. В правой части окна в столбце Query Preview отобразится текстовое описание выполняемого запроса InComponent('VT1'). Для сохранения результатов нажмем кнопку OK.
19. Далее в поле Where the Second object matches (второе подмножество объектов) также выберем опцию Advanced (Query), нажмем кнопку Query Builder и в появившемся окне мастера запросов укажем транзистор VT2. В правой части окна в столбце Query Preview отобразится текстовое описание выполняемого запроса InComponent('VT2'). Нажмем кнопку OK.
20. В нижней части окна описания правила в поле Gap зададим новое значение зазора 5mm.
21. В выпадающем списке Check Mode выберем режим Quick Check.
Только что созданное нами правило предписывает размещать транзисторы не ближе чем 5 мм друг к другу. Создадим еще одно правило этого типа, регламентирующее зазоры между транзисторами и всеми остальными компонентами.
22. Выполним щелчок правой кнопкой мыши на типе правил Component Clearance и в появившемся контекстном меню выберем команду New Rule.
23. Щелкнем левой кнопкой мыши на только что созданном правиле. В правой части окна откроется его описание.
24. В окошке Name зададим имя правила "Между Транзисторами и всеми остальными".
25. Далее в поле Where the First object matches (первое подмножество объектов) выберем опцию Advanced (Query) и нажмем кнопку Query Helper. Появится знакомое нам по предыдущему уроку окно Query Helper.
26. Очистим поле Query, для чего щелкнем в нем левой кнопкой мыши, выделим все его содержимое нажатием комбинации клавиш CTRL+A и нажмем клавишу Delete.
27. В списке слева внизу щелкнем на категории действий Membership Check (проверка принадлежности). В поле справа откроется список доступных функций проверки принадлежности.
28. Дважды щелкнем левой кнопкой мыши на операторе InComponent. В поле конструктора запросов появится функция InComponent с выпадающим списком, предлагающим выбрать нужный компонент. Выберем транзистор VT1.
29. Нажмем кнопку Or (Или).
30. Еще раз щелкнем на категории действий Membership Check.
31. Дважды щелкнем левой кнопкой мыши на операторе InComponent. В поле конструктора запросов после оператора Or появится функция InComponent с выпадающим списком, предлагающим выбрать нужный компонент. Выберем транзистор VT2.
32. Нажмем кнопку Check Syntax, чтобы проверить правильность составления запроса.
33. Закроем конструктор запросов нажатием на кнопку OK.
Таким образом, первое подмножество компонентов будет описано запросом InComponent(VT1) Or InComponent(VT2). Второе подмножество оставим без изменения - All (все компоненты).
34. В нижней части окна описания правила в поле Gap зададим новое значение зазора 3mm.
35. В выпадающем списке Check Mode выберем режим Quick Check.
Только что созданное нами правило предписывает размещать транзисторы VT1 или VT2 на расстояние не ближе чем 3 мм от любых других компонентов. Заметим, что если бы у нас было десять или сто транзисторов, строить запрос было бы утомительно, поэтому в системе Protel DXP используется понятие классов объектов, позволяющих группировать их по определенным признакам (например, классов компонентов или цепей) и тем самым значительно упрощать управление процессом проектирования. Позднее мы рассмотрим вопрос создания классов объектов более подробно.
36. Нажатием на кнопку Close закроем диалоговое окно PCB Rules and Constraints Editor.
37. Сохраним изменения в документе нажатием горячих клавиш F, S.
Теперь мы полностью готовы к выполнению авторазмещения компонентов. Здесь читатель может задаться вопросом: а зачем мы все это делали, если плата и так очень простая? Ответ очевиден: мы делали это, чтобы понять основные принципы управления инструментами авторазмещения, что в дальнейшем поможет нам обрабатывать более сложные платы.
Традиционно считается, что автоматическое размещение с помощью большинства программ выполняется плохо. Однако, в ряде случаем в этом виноваты сами пользователи, которые уделяют недостаточное внимание подготовительному этапу. Чем хуже (или никак) пользователь опишет критерии, которые должна использовать в работе программа расстановки, тем худший (или никакой) будет получен результат.
38. Выполним команду меню Tools | Auto Placement | Auto Placer…
39. В открывшемся окне Auto Place выберем опцию Cluster Placer и переключателем Quick Component Placement включим режим быстрого размещения (рис 5).
40. Нажатием кнопки OK запустим процесс размещения.
Программа выполнит "быстрое" размещение компонентов, начиная с левого нижнего угла платы с учетом контура на слое Keep-Out. Заметим, что несколько компонентов подсвечены зеленым цветом, что говорит о наличии нарушений правил проектирования (рис. 6).
41. Перейдем на панель управления редактором печатных плат и в выпадающем списке выберем тип просматриваемых объектов Rules.
42. В нижней части панели будет показан список выявленных нарушений, два из которых относятся к правилам типа Component Clearance, а остальные с малым зазором между контактными площадками и линиями на слое Keep-Out. Щелчок левой кнопкой мыши по любому из нарушений в списке, позволяет просмотреть его суть. По окончании просмотра нарушений щелкнем левой кнопкой мыши в любом месте платы, нажатием SHIFT+C сбросим маскирование объектов и вернем оптимальный масштаб просмотра нажатием горячих клавиш V, F.
Выполним расталкивание близкорасположенных компонентов с помощью специального инструмента Shove, но перед этим настроим его.
43. Выполним команду меню Tools | Auto Placement | Set Shove Depth.
44. В появившемся окне Shove Depth зададим значение глубины расталкивания 5. Под этим понятием здесь подразумевается максимальное число отталкиваемых компонентов при соблюдении правил контроля зазоров. Это число может лежать в пределах от 1 до 1000, но на практике для относительно простых плат рекомендуется задавать его не большим 5-10, чтобы было легко отслеживать вносимые изменения. Закроем окно.
45. Выполним команду меню Tools | Auto Placement | Shove.
46. Наведем указатель мыши, принявший вид перекрестия, на один из компонентов, подсвеченных зеленым цветом индикации нарушения, например резистор R3, и выполним один щелчок левой кнопкой мыши.
Все компоненты, расположенные вокруг резистора R3, будут отодвинуты в разные стороны так, чтобы выполнялось правило контроля зазоров между ними (рис. 7).
47. Выйдем из режима расталкивания, для чего нажмем клавишу ESC или щелкнем правой кнопкой мыши в любом месте чертежа.
48. Сохраним изменения в документе нажатием горячих клавиш F, S.
Рассмотрим другой режим работы программы авторазмещения Cluster Placer.
49. Выполним команду меню Tools | Auto Placement | Auto Placer…
50. В открывшемся окне Auto Place выберем опцию Cluster Placer и переключателем Quick Component Placement выключим режим быстрого размещения.
40. Нажатием кнопки OK запустим процесс размещения.
Программа выполнит "медленное" размещение компонентов, при котором анализируется список соединений на предмет оптимизации длин связей, а также учитывается большее число правил проектирования. Результат работы программы в этом режиме показан на рисунке 8. Обратите внимание, что в этом случае крайние компоненты отстоят от контура на слое Keep-Out настолько, что не вызывают наблюдавшихся ранее нарушений зазоров между контактными площадками и контуром Keep-Out.
Отметим, что в данном режиме программа работает тем медленнее, чем больше компонентов на плате, а при их числе свыше 100 возможно полное зависание системы Protel DXP, связанное с нехваткой оперативной памяти. Ход выполнения размещения можно отслеживать по линейке в строке состояния, расположенной в левом нижнем углу экрана.
Большое влияние на скорость размещения компонентов оказывает сложность связей между ними, поэтому рекомендуется исключать из анализа наиболее длинные цепи, какими, как правило, являются цепи питания и земли. Данная операция выполняется с помощью специального типа правил проектирования Nets to Ignore категории Placement и рекомендуется для многослойных плат с внутренними слоями питания и заземления. На нашей двусторонней плате цепи питания и заземления являются основными и определяют всю топологию, поэтому исключение их нежелательно.
Помимо описанных выше правил проектирования Component Clearance и Nets to Ignore программа Cluster Placer отслеживает еще четыре типа правил: Component Orientations (ориентация компонентов), Permitted Layers (разрешенные слои), Height (высота компонентов) и Room Definition (области размещения). Назначение первых трех правил очевидно, и их определение можно выполнить самостоятельно в качестве тренировки, а вот последнее правило Room Definitions требует особого рассмотрения.
Авторазмещение с использованием областей Room Definition
Чтобы понять, как работают области размещения Room Definition, выполним следующее упражнение.
1. Очистим заготовку платы, для чего окном охвата выделим все компоненты на плате и удерживая левую кнопку мыши переместим их вправо за пределы платы.
2. Выполним команду меню Design | Rooms | Place Rectangular Rooms. Указатель мыши примет вид крестика с красным квадратом в центре.
3. Нажмем клавишу Tab, чем вызовем окно редактирования правила Room Definition (рис. 9).
4. В поле Name укажем имя области "Транзисторы".
5. Далее в поле Where the First object matches (первое подмножество объектов) выберем опцию Advanced (Query).
6. Введем в поле Full Query уже знакомый нам текст запроса выбора транзисторов InComponent(VT1) Or InComponent(VT2) или воспользуемся для его построения конструктором запросов Query Helper.
7. В выпадающем списке, расположенном в нижней части окна Edit Room Definition зададим условие обработки компонентов Keep Object Inside (объекты должны быть внутри).
8. В выпадающем списке чуть выше зададим слой размещения TopLayer.
9. Сохраним сделанные настройки и закроем данное окно нажатием кнопки OK. Система вернется в режим рисования.
10. Выполним щелчок левой кнопкой мыши недалеко от левого верхнего угла платы, чем зададим первый угол прямоугольника.
11. Сдвинем мышь вправо вниз примерно на треть платы и еще раз щелкнем левой кнопкой мыши.
На экране появится заштрихованный прямоугольник, подсвеченный зеленым цветом, что говорит о наличии нарушений. Легко догадаться, что нарушение заключается в том, что транзисторы находятся вне определенной для них области размещения. Проверить догадку можно на вкладке PCB панели управления редактором печатных плат.
Зададим вторую область.
12. Нажмем клавишу Tab, чем вызовем окно редактирования правила Room Definition.
13. В поле Name укажем имя области "ВсеОстальные" (обязательно без пробела!).
14. Оставим область действия правила как All (все). Позднее мы ее изменим.
15. В выпадающем списке, расположенном в нижней части окна Edit Room Definition зададим условие обработки компонентов Keep Object Inside (объекты должны быть внутри).
16. В выпадающем списке чуть выше зададим слой размещения TopLayer.
17. Сохраним сделанные настройки и закроем данное окно нажатием кнопки OK. Система вернется в режим рисования.
18. Выполним щелчок левой кнопкой мыши чуть ниже первой области, чем зададим первый угол прямоугольника.
19. Сдвинем мышь в правый нижний угол платы и еще раз щелкнем левой кнопкой мыши.
Вторая область размещения займет оставшиеся две трети площади платы (рис. 10).
Описать область действия второго правила "все, кроме транзисторов" мы могли бы и с помощью сложного запроса, однако, более правильно будет создать соответствующий класс компонентов.
20. Выполним команду меню Design | Classes. Появится диалоговое окно Object Class Explorer, в котором перечислены все возможные классы объектов. Легко видеть, что в классы могут быть сгруппированы цепи (Net Classes), компоненты (Component Classes), слои (Layer Classes), контактные площадки (Pad Classes), маршруты (From-To Classes) и каналы (Design Channel Classes).
21. Выполним щелчок правой кнопкой мыши на категории классов Component Classes и в появившемся контекстном меню выберем команду Add Class (добавить класс). В списке появится новый класс компонентов New Class.
22. Щелкнем на нем левой кнопкой мыши.
В правой части окна появятся два списка объектов. В первом столбце Non-Members будут перечислены компоненты, не входящие в данный класс. Второй столбец Members пока пустой.
23. Последовательными щелчками левой кнопки мыши при удерживаемой клавише CTRL выделим в первом столбце все компоненты, кроме транзисторов VT1 и VT2.
24. Нажмем кнопку со значком >, расположенную между столбцами. Выбранные компоненты будут перенесены во второй столбец.
25. В заключение переименуем только что созданный класс, для чего нажмем клавишу F2 и введем новое имя "Не транзисторы" (рис. 11).
26. Закроем окно Object Class Explorer начатием кнопки Close.
27. Вернемся к определению второй области размещения ВсеОстальные, для чего выполним на ней двойной щелчок левой кнопкой мыши.
28. Далее в поле Where the First object matches (первое подмножество объектов) выберем опцию Advanced (Query) и нажмем кнопку Query Builder. Появится окно Building Query From Board.
29. Здесь в столбце Condition Type/Operator в выпадающим списке Add First Condition выберем опцию Belongs to Component Class (входит в класс компонентов).
30. В столбце Condition Value появится список всех описанных в проекте классов компонентов ( нашем случае двух), из которого следует выбрать класс "Не транзисторы". Для сохранения результатов нажмем кнопку OK. Запрос примет вид (InComponentClass('Не транзисторы')).
31. Сохраним сделанные настройки и закроем данное окно нажатием кнопки OK.
32. Сохраним изменения в документе нажатием горячих клавиш F, S.
Теперь вы полностью готовы к выполнению авторазмещения.
33. Выполним команду меню Tools | Auto Placement | Auto Placer…
34. В открывшемся окне Auto Place выберем опцию Cluster Placer и переключателем Quick Component Placement выключим режим быстрого размещения.
40. Нажатием кнопки OK запустим процесс размещения.
Результат работы программы Cluster Placer будет резко отличаться от полученных ранее (рис. 12). Транзисторы будут размещены исключительно в пределах своей области размещения, все остальные компоненты - во второй области. Таким образом области Room Definition представляют собой инструмент осмысленного управления программой размещения Cluster Placer. Если учесть, что эти области и классы компонентов можно создавать автоматически при передаче данных из принципиальной схемы в проект печатной платы, то это значительно упрощает труд разработчика. Более подробно мы рассмотрим этот вопрос при изучении инструментов для многоканального проектирования.
Заметим также, что в общем случае результат работы программы авторазмещения Cluster Placer может быть далек от совершенства, поэтому рекомендуется запустить его последовательно несколько раз, сохраняя промежуточные варианты.
Авторазмещение с помощью программы Statistical Placer
Вторая программа автоматического размещения предназначена для обработки плат с большим числом компонентов (свыше ста). Она работает по принципиально другим алгоритмам и не учитывает никакие из выше перечисленных правил проектирования. Главным критерием правильного размещения компонентов здесь считается равномерное распределение компонентов на плате при оптимальной плотности связей.
Программа Statistical Placer никак не взаимодействует с областями Room Definition, поэтому их можно удалить.
1. Удерживая нажатой клавишу SHIFT, последовательно щелкнем на каждой из областей левой кнопкой мыши и нажмем клавишу Delete.
2. Выполним команду меню Tools | Auto Placement | Auto Placer…
3. В открывшемся окне Auto Place выберем опцию Statistical Placer. В нижней части окна будут расположены органы настройки этой программы (рис.13).
4. Включим опцию Group Components (группировать компоненты).
5. Включим опцию Rotate Components (поворачивать компоненты).
6. Обязательно включим опцию Automatic PCB Update (автоматически обновлять плату), чтобы не потерять полученные программой размещения результаты.
Для облегчения анализа длин связей на многослойных платах в внутренними слоями питания и заземления, имена этих цепей можно указать в текстовых полях Power Nets и Ground Nets. Для нашей платы этого делать не нужно.
7. Нажатием кнопки OK запустим процесс размещения.
В отличие от программы Cluster Placer, которая полностью интегрирована в редактор печатных плат системы Protel DXP, программа Statistical имеет свое окно, в котором отображается ход процесса авторазмещения. Для нашей простой платы авторазмещение будет выполнено почти мгновенно, но для сложных плат он может занять десятки минут. Процент завершения оптимизации отображается в строке состояния. Плотность размещения компонентов отображается цветными квадратиками разного размера. Например, вид одной из поставляемых в качестве примера плат во время авторазмещения показан на рис. 14.
8. Нажмем кнопку OK в окне с сообщением о завершении процесса размещения. Система вернется в редактор печатных плат, где позиции компонентов на плате будут автоматически обновлены.
9. Чтобы обновить связи выделим все объекты платы нажатием комбинации клавиш CTRL+A, щелкнем левой кнопкой мыши на любом из них и сбросим выделение щелчком левой кнопкой мыши в пустом месте платы.
Блокировка компонентов
В завершение данного урока, рассмотрим, как выполняется блокировка компонентов на плате.
1. Выполним двойной щелчок левой кнопкой мыши на любом из компонентов. Откроется окно редактирования параметров компонента.
2. Включим опцию Locked в поле Component Properties.
3. Закроем окно нажатием кнопки OK.
Теперь компонент будет заблокирован от перемещения с помощью мыши, а при попытке его перемещения в составе сложного выделения группы компонентов (например, окном охвата) будет выдаваться соответствующее предупреждение.
Одновременная блокировка (разблокировка) нескольких компонентов выполняется несколько иначе.
1. Окном охвата или щелкая левой кнопкой мыши и удерживая клавишу SHIFT выделим группу компонентов.
2. Вызовем панель Inspector нажатием на кнопку Inspect в нижней части экрана.
3. Включим (выключим) опцию в строке Locked на панели Inspector.
4. Нажмем клавишу Enter.
Теперь в случае запуска любой из программ авторазмещения блокированные компоненты сохранят свое положение.
Итак, мы рассмотрели работу двух программ авторазмещения. Результаты, полученные с их помощью, далеки от идеальных и требуют ручной корректировки. В общем случае наилучший результат дают смешанные итерационное циклы, когда наиболее критические компоненты размещаются вручную или с помощью интерактивных средств и блокируются, после чего запускается автоматическое размещение. Аналогичная методика рекомендуется и для трассировки платы, которую мы рассмотрим на следующем занятии.