Приветствую, Хабр!
![](https://habrastorage.org/r/w780q1/webt/xc/om/46/xcom46yvv9ipplm4kypjmquyguk.jpeg)
Некоторое время назад, компания NXP представила линейку процессоров iMX8. Было бы странно упустить возможность и не разработать новый модуль. Кому интересны нюансы, прошу под кат (много легковесных картинок).
Мы давно уже «подсели» на продукцию NXP, в части процессоров, и всегда следим за новинками компании. При выходе нового продукта мы покупаем референс и через дистрибьютеров получаем семплы, чтобы программисты сразу начали освоение чипа, а аппаратчики, по завершении первой итерации, быстро получили макет изделия. Немаловажную роль во всем этом играет техническая поддержка, которая предоставляет SDK и HDK и отвечает на вопросы программистов и аппаратчиков. Пока первые запускают софт и начинают его адаптацию под наши задачи, вторые готовят вторую итерацию платы с исправленными ошибками, если таковые имеются (например, процессорный модуль на чипе iMX7, разработанный под заказчика был сдан с первой итерации, и вторая была чисто косметическая, модуль на iMX6UL/ULL, сначала разработанный под наши проекты, а позже ставший отдельным продуктом, тоже практически не изменился после первого выпуска). При разработке железа мы частично сохраняем схемотехнику референса (при условии, что это не вредит качеству продукта), чтобы стыковка программной и аппаратной частей прошла быстро и безболезненно. Каждая новая итерация ведет к новым тестам, которые не только приходится проходить заново, но и дополнять, с учетом всех изменений. Каждая новая выгрузка герберов из проекта требует проверки (изготовления образцов и их тестирование) перед запуском серии. Обычно разрабатываемый модуль является универсальным решением и используется в различных наших проектах. Также, некоторые заказчики просят кастомизации модуля, например, в части крепежных отверстий, типов разъемов, конфигурации или всего сразу, чтобы использовать в своих дальнейших разработках как готовое изделие.
Это путь, который мы обычно проходим от выхода процессора до появления нового нашего продукта. Иногда он бывает простым и быстрым, но бывает так, что приходится в сжатые сроки делать серьезные доработки, которые всплывают во время тестирования.
Не буду углубляться в подготовительную работу, которая предшествует началу проекта – это согласование ТЗ, составление план-графика работ, утверждение сметы и т.д. Я расскажу о нескольких первых шагах, которые помогут значительно сократить сроки разработки проектов, на примере iMX8 в Altium Designer. Это не будет что-то сверхъестественное и заумное, думаю так делают многие, но может быть не все.
Самым пугающим, пожалуй, когда я смотрю документацию на процессор или уже готовую схему, является перспектива трассировки оперативной памяти. Рано или поздно всем проходится с этим сталкиваться, но, как говорится, лучше позже, если такая возможность есть. Хорошо, если Вам достаточно использовать одну микросхему в устройстве, тогда бывает проще сделать трассировку самому. Ниже приведен пример трассировки DDR3L для Xilinx (плата на 4-х слоях). Разработана с нуля, нареканий нет.
![](https://habrastorage.org/r/w1560/webt/li/t-/5a/lit-5ac_tweo0qjtrv-fmhkw_bg.png)
Рис.1. Трассировка оперативной памяти DDR3L для Xilinx XC7A35T-1FTG256
А вот когда необходимо 4 планки, да еще и на разных сторонах платы, для уменьшения размеров. Ниже приведен пример модуля на iMX6Q.
![](https://habrastorage.org/r/w1560/webt/yv/4r/da/yv4rda0fcbyba7kz9v4jxucx74o.png)
Рис.2. Трассировка 4 микросхем оперативной памяти DDR3 для NXP iMX6Q (2 на top, 2 на bottom – одна под другой)
Это тоже не непосильная задача, но я не вижу в ней смысла (повторюсь, так происходит, к сожалению, не всегда), если можно ее упростить, сохранив качество отлаженного и протестированного продукта (в нашем случае – это референс, который можно «пощупать»). На первой итерации главное чтобы завелся чип и работало как можно больше интерфейсов. Значит у нас, как минимум, работает память, поданы все необходимые питания и правильно выбран стек платы. Дальнейшая работа будет вестись в направлении улучшения параметров платы в части работоспособности периферии. Итак, первоочередной задачей для нас является память (оперативная и энергонезависимая) и питание.
Не для кого не секрет, что на процессор, который выпускается серийно и имеет поддержку от производителя, как правило, можно найти полный комплект документации (исключения составляют продукты под NDA, новинки без поддержки и т.д.). Меня, на первом этапе будет интересовать лишь несколько документов – это даташит, схема и трассировка платы референса. Дальше все зависит от того, в каком виде будет передана данная документация и в каком САПРе Вы работаете. Я работаю только в Altium Designer и поэтому не могу использовать схемы и pcb от производителей, так как они обычно бывают в иных форматах. Еще одна проблема конвертирования проектов из сторонних программ – это несоответствие полей базы компонентов, а как следствие, невозможность выгрузки перечня элементов. И, что совсем печально — это отсутствие связей между компонентами (не всегда, но чаще всего).
В этой статье я хочу рассказать о том, как можно частично перенести проект в Altium имея конвертированную схему и pcb.
Встроенный пакет Altium Designer, который называется Import Wizard, позволяет выполнять импортирование файлов из других САПР. Лично у меня это сопровождается постоянными танцами с бубном, так как помимо Altium, должен быть установлен, например, Allegro, но об этом я не буду. Этому посвящены отдельные ролики и статьи в интернете. Конвертация, обычно, но не всегда, не позволяет получить рабочий проект, чего мне и не требуется. Для нашей работы нам нужны файл pcb и желательно схематик. Для примера я буду использовать проект референса на iMX8 – «MCIMX8M-EVK-DESIGNFILES».
![](https://habrastorage.org/r/w780q1/webt/g1/o4/zh/g1o4zht-v-jicq0ifceg2h7olyw.jpeg)
Рис.3. Плата референса MCIMX8M-EVK-DESIGNFILES
Так как я планирую разработать модуль, то большинство интерфейсов мне не понадобятся – они будут реализованы на материнской плате. Даже по картинке видно, что придется сильно ужаться при расстановке компонентов и из pcb я смогу взять только трассировку LPDDR4 (MT53B768M32D4NQ-062) и PMIC (контроллер питания для процессора MC34PF4210A1ES). eMMC и SD карта стоят далеко от чипа, их нужно будет трассировать заново, но это не проблема.
Для своей библиотеки из проекта MCIMX8M-EVK-DESIGNFILES я взял всего несколько компонентов, в их числе процессор, память и PMIC.
Давайте рассмотрим компонент iMX8. Ниже приведен скриншот библиотеки. MIMX8MQ7DVAJZXA имеет 14 частей, объединенных в один компонент. Это разделение позволяет в дальнейшем распределить интерфейсы по разным листам (части схемы, которые объединены в один проект). Например, «PART A» — это все, что касается USB, «PART D» — MIPI DSI, «PART G» — все SAI и т.д. Забегая вперед, скажу, что мой проект имеет всего 12 листов схем, соответственно, некоторые из элементов я объединил для удобства чтения.
![](https://habrastorage.org/r/w1560/webt/j_/n7/3d/j_n73dmhc3ibc7fyly-neqt8jhk.png)
Рис.4. Схематик MIMX8MQ7DVAJZXA
Имея такой компонент после импорта, я избежал его создания с нуля, тем самым значительно уменьшил вероятность ошибок в схеме. Теперь о том, что придется поправить в параметрах компонента.
![](https://habrastorage.org/r/w1560/webt/wb/a7/cb/wba7cbrihuzgu1do1u-mkkz87ay.png)
Рис.5. Схематик MIMX8MQ7DVAJZXA
Для разных компонентов количество параметров может быть разным, но некоторые поля должны совпадать для того, чтобы потом можно было выгружать перечень компонентов для заказа и сборки. Поля, приведенные слева импортировались из референса. Справа – которые необходимы мне для дальнейшей работы. У резисторов, например, параметров больше, у конденсаторов еще больше и т.д. В моем примере минимально необходимый набор параметров с нужными мне заголовками.
Таким же образом я сконвертировал и подправил оперативку и контроллер питания. Дальше я создаю новый проект (примерно зная какое количество листов у меня будет), переношу туда части схем с обвязкой и заменяю импортированные компоненты своими. В итоге получаются куски схем, очень похожие на оригинал. В этой статье я не буду рассказывать про структуру проекта, связи между листами и т.д., так что идем дальше.
Самая простая часть работы проделана. Теперь можно приступить ко второму этапу – это перенос библиотечного pcb компонента.
Тут почти то же самое, что было ранее, но вместо параметров – слои. В своих компонентах я использую фиксированный набор слоев. Помимо стандартных «top», «top overlay», «top past» и т.д., например, в «mechanical 1» я рисую контур компонента, его 3D модель и помещаю «.Designator» — это сделано для того, чтобы потом было проще выгрузить сборочный чертеж (и др.). Все лишние поля, которые я не использую – удаляю. Таким образом у меня их осталось около 15, вместо 24, как это было после импорта. Часто для BGA и QFN необходимо менять вскрытие маски контактных площадок, делать другие корректировки под возможности производства и т.д.
![](https://habrastorage.org/r/w1560/webt/cu/sb/rz/cusbrzxl-r3lp5d4bq_avojzcam.png)
Рис.6. pcb MIMX8MQ7DVAJZXA
Теперь в свойствах схематика необходимо связать компонент с pcb. Чтобы лучше понимать все написанное выше, можно посмотреть обучающие видео по созданию библиотеки для Altium.
На первых двух подготовительных этапам мне удалось создать библиотечные компоненты, которые теперь можно будет использовать в проекте. Это заняло значительно меньше времени, чем если бы я делал это с нуля.
Третий этап самый сложный – это перенос части трассировки с платы референса в проект. Нужно быть очень внимательным. Обычно при импорте всплывают ошибки переноса (между средами разработки), поэтому «заимствовать» нужно только самое необходимое, то, на что было бы затрачено много времени и сил. Особенно я не рекомендую переносить переходные отверстия, полигоны, вырезы в полигонах и правила для DRC (Design -> Rules…).
Трассировка iMX8 выполнена на 10 слоях, соответственно я буду использовать тот же стек с той же очередностью слоев. Для удобства работы с проектом «MCIMX8M-EVK-DESIGNFILES», я скрою все полигоны.
![](https://habrastorage.org/r/w1560/webt/gc/s0/7u/gcs07ubjabshelmdwi0rbohn9yu.png)
Рис.7. Плата референса MCIMX8M-EVK-DESIGNFILES. PCB
Выглядит страшно. Очень страшно. Казалось бы, на этом уже можно закрывать Altium и идти плакать. Для удобства можно скрыть ненужные слои совсем, но кардинально это не поможет, а вот по слоям это буде выглядеть более или менее просто. DDR разведена на 4 слоях, но bottom я привел тоже не случайно (об этом ниже).
![](https://habrastorage.org/r/w1560/webt/td/sw/09/tdsw09yzzdpfszfxrexmslefeiu.png)
Рис.8. Трассировка LPDDR4 MCIMX8M-EVK-DESIGNFILES по слоям
Если в своем проекте Вы дошли до этого места, то половина работы по переносу, а может и по всему проекту уже сделана.
Наверное, Вы уже догадались что нужно сделать дальше? Да, осталось только правильно скопировать слой за слоем. Я расскажу, как это делаю я, чтобы избежать простых ошибок.
Первым делом я открываю плату референса и свою, с загруженными в нее компонентами из схемы на двух мониторах (этот вариант наиболее удобен при разработке). Копирую процессор и память из платы референса к себе (это необходимо для того, чтобы выставить эти компоненты с учетом имеющейся трассировки).
![](https://habrastorage.org/r/w1560/webt/1n/kv/w2/1nkvw2eo6eopax8rlh7qesujlme.png)
Рис.9. Взаимное расположение памяти и процессора (слева — референс)
После этого необходимо установить процессор и память нашей платы поверх правильно установленных, а после этого просто удалить скопированные из референса компоненты.
![](https://habrastorage.org/r/w1560/webt/em/4s/4j/em4s4jj62nxzn6yb57lw6rsbvsg.png)
Рис.10. Правильное расположение процессора и памяти
Лишние линии связи можно временно скрыть и приступать к переносу непосредственно трассировки.
Необходимо будет воспользоваться двумя способами копирования проводников. Первый самый простой и самый долгий – это копирование проводников по одному. Не нужно так копировать все соединения – это займет много времени, но иногда бывает удобным. Для примера возьмем сигналы клоков на падах AE14, AD14, AE12 и AD12. Нажимаем ПКМ на проводнике, выбираем пункт меню Find Similar Objects …, в появившемся окне помечаем имя проводника и слой (можно выполнять копирование сразу из всех слоев, в т.ч. отверстий).
![](https://habrastorage.org/r/w1560/webt/42/b1/in/42b1infelxqas5ubrynrhet_ea4.png)
Рис.11. Копирование одного проводника в одном слое (top)
Далее жмем Ctrl+C и ставим мышкой привязку к паду процессора. Переходим на нашу плату и жмем Ctrl+V и вставляем. Повторяем для всех четырех проводников и ставим отверстия у падов памяти для перехода на bottom — там стоят резисторы. Если Вы выполнили копирование во всех слоях, то резисторы будет установить проще.
![](https://habrastorage.org/r/w1560/webt/aq/vx/h_/aqvxh_ndep6hsbykktnuravjepk.png)
Рис.12. Копирование одного проводника
На рис.12. (справа) есть отдельный проводник (с крестиком мышки) – это пример копирования проводника во всех слоях с переходным отверстием. Суть метода состоит в том, что при копировании проводника и «установке его на пад», он принимает имя пада (нужно быть внимательным – если скопировать проводник на другой пад, он примет имя другого пада).
Даже сейчас Вы сможете самостоятельно перенести все проводники с референса на свою плату, но есть более простой способ (вообще их тоже несколько, но остановимся на одном), он отлично подходит для копирования групп проводников в одном слое. Для того, чтобы приступить к копированию проводников со второго (и следующих) слоя необходимо перенести top-проводники со всех падов процессора, в противном случае нарушится связь проводников (нам необходимо перенести переходные отверстия с top на другие слои, чтобы потом к ним привязывать проводники).
![](https://habrastorage.org/r/w1560/webt/gz/hk/uf/gzhkufhxa1h7s2i0uvzcvjww4om.png)
Рис.13. Копирование всех проводников с переходными отверстиями на top
Теперь у меня выведены с процессора все пады и их можно использовать на других слоях. То есть в другом слое я могу привязать проводники не боясь, что они станут NoNet (висящие «в воздухе» проводники, которые не подцепились). Следующим я перенесу 6 слой (третий, если смотреть рис.8.), чтобы показать еще один хак. Все то же самое, выделяем, копируем с привязкой в любому отверстию или паду и вставляем.
![](https://habrastorage.org/r/w1560/webt/po/dy/ey/podyey-wakjrku5d4fedwgxpc4q.png)
Рис.14. Копирование всех проводников с переходными отверстиями с 6 слоя
В чем состоит хак? Так вот, помимо трассировки оперативки я сумел вывести интерфейсы из-под процессора, которые уже будут сгруппированы в определенных частях платы. В чипе отдельные шины данных расположены в определенных местах. Например, в iMX8 слева внизу CSI, чуть выше NAND и т.д., то есть по-другому вывести их все равно не получится.
После того, как все нужные слои перенесены, необходимо удалить все переходные отверстия и проводники NoNet (при копировании пяти слоев, на нашей плате окажутся пять переходных отверстий на каждом месте). Затем я вручную расставляю via, заодно проверяя все связи. При определенной сноровке вся работа по переносу займет несколько часов.
На рис.8. я показал слой bottom, который тоже хочу перенести. Но главное в нем не проводники (их не так много), а расстановка компонентов. Всего под чипом и оперативкой находятся 132 элемента. Обычно я не копирую этот слой, а просто устанавливаю пассив также как на референсе (открывая две платы на разных мониторах). Такой вариант подойдет, если Вы не меняли типоразмер компонентов на больший, в противном случае придется повозиться.
![](https://habrastorage.org/r/w1560/webt/g2/up/1y/g2up1yai-nz9ogsadntj5nbagga.png)
Рис.15. Компоненты на обратной стороне платы модуля
![](https://habrastorage.org/r/w1560/webt/bu/vf/sh/buvfshfqz7becstk5a5hqxrzj0q.png)
Рис.16. Итоговая трассировка под процессором и памятью сигнальных слоев
Подводя итоги, могу сказать, что данный способ переноса является довольно простым (я не исключаю, что есть и другие). Если начать с простых плат на 4 слоях, то можно быстро научиться переносить и более сложные трассировки, не затрачивая на это больших ресурсов. На этом, полагаю, статью можно закончить.
Для «затравки» скажу, что на получившейся плате 156 полигонов и, если кому-то интересно, могу написать статью о том, как на данном модуле они прокладывались, какие сложности возникали из-за небольших габаритов (размеры модуля 81мм*58мм) и что необходимо учитывать.
Спасибо за внимание!
![](https://habrastorage.org/webt/xc/om/46/xcom46yvv9ipplm4kypjmquyguk.jpeg)
Некоторое время назад, компания NXP представила линейку процессоров iMX8. Было бы странно упустить возможность и не разработать новый модуль. Кому интересны нюансы, прошу под кат (много легковесных картинок).
Введение (можно пропустить)
Мы давно уже «подсели» на продукцию NXP, в части процессоров, и всегда следим за новинками компании. При выходе нового продукта мы покупаем референс и через дистрибьютеров получаем семплы, чтобы программисты сразу начали освоение чипа, а аппаратчики, по завершении первой итерации, быстро получили макет изделия. Немаловажную роль во всем этом играет техническая поддержка, которая предоставляет SDK и HDK и отвечает на вопросы программистов и аппаратчиков. Пока первые запускают софт и начинают его адаптацию под наши задачи, вторые готовят вторую итерацию платы с исправленными ошибками, если таковые имеются (например, процессорный модуль на чипе iMX7, разработанный под заказчика был сдан с первой итерации, и вторая была чисто косметическая, модуль на iMX6UL/ULL, сначала разработанный под наши проекты, а позже ставший отдельным продуктом, тоже практически не изменился после первого выпуска). При разработке железа мы частично сохраняем схемотехнику референса (при условии, что это не вредит качеству продукта), чтобы стыковка программной и аппаратной частей прошла быстро и безболезненно. Каждая новая итерация ведет к новым тестам, которые не только приходится проходить заново, но и дополнять, с учетом всех изменений. Каждая новая выгрузка герберов из проекта требует проверки (изготовления образцов и их тестирование) перед запуском серии. Обычно разрабатываемый модуль является универсальным решением и используется в различных наших проектах. Также, некоторые заказчики просят кастомизации модуля, например, в части крепежных отверстий, типов разъемов, конфигурации или всего сразу, чтобы использовать в своих дальнейших разработках как готовое изделие.
Это путь, который мы обычно проходим от выхода процессора до появления нового нашего продукта. Иногда он бывает простым и быстрым, но бывает так, что приходится в сжатые сроки делать серьезные доработки, которые всплывают во время тестирования.
С чего начать?
Не буду углубляться в подготовительную работу, которая предшествует началу проекта – это согласование ТЗ, составление план-графика работ, утверждение сметы и т.д. Я расскажу о нескольких первых шагах, которые помогут значительно сократить сроки разработки проектов, на примере iMX8 в Altium Designer. Это не будет что-то сверхъестественное и заумное, думаю так делают многие, но может быть не все.
Самым пугающим, пожалуй, когда я смотрю документацию на процессор или уже готовую схему, является перспектива трассировки оперативной памяти. Рано или поздно всем проходится с этим сталкиваться, но, как говорится, лучше позже, если такая возможность есть. Хорошо, если Вам достаточно использовать одну микросхему в устройстве, тогда бывает проще сделать трассировку самому. Ниже приведен пример трассировки DDR3L для Xilinx (плата на 4-х слоях). Разработана с нуля, нареканий нет.
![](https://habrastorage.org/webt/li/t-/5a/lit-5ac_tweo0qjtrv-fmhkw_bg.png)
Рис.1. Трассировка оперативной памяти DDR3L для Xilinx XC7A35T-1FTG256
А вот когда необходимо 4 планки, да еще и на разных сторонах платы, для уменьшения размеров. Ниже приведен пример модуля на iMX6Q.
![](https://habrastorage.org/webt/yv/4r/da/yv4rda0fcbyba7kz9v4jxucx74o.png)
Рис.2. Трассировка 4 микросхем оперативной памяти DDR3 для NXP iMX6Q (2 на top, 2 на bottom – одна под другой)
Это тоже не непосильная задача, но я не вижу в ней смысла (повторюсь, так происходит, к сожалению, не всегда), если можно ее упростить, сохранив качество отлаженного и протестированного продукта (в нашем случае – это референс, который можно «пощупать»). На первой итерации главное чтобы завелся чип и работало как можно больше интерфейсов. Значит у нас, как минимум, работает память, поданы все необходимые питания и правильно выбран стек платы. Дальнейшая работа будет вестись в направлении улучшения параметров платы в части работоспособности периферии. Итак, первоочередной задачей для нас является память (оперативная и энергонезависимая) и питание.
Не для кого не секрет, что на процессор, который выпускается серийно и имеет поддержку от производителя, как правило, можно найти полный комплект документации (исключения составляют продукты под NDA, новинки без поддержки и т.д.). Меня, на первом этапе будет интересовать лишь несколько документов – это даташит, схема и трассировка платы референса. Дальше все зависит от того, в каком виде будет передана данная документация и в каком САПРе Вы работаете. Я работаю только в Altium Designer и поэтому не могу использовать схемы и pcb от производителей, так как они обычно бывают в иных форматах. Еще одна проблема конвертирования проектов из сторонних программ – это несоответствие полей базы компонентов, а как следствие, невозможность выгрузки перечня элементов. И, что совсем печально — это отсутствие связей между компонентами (не всегда, но чаще всего).
В этой статье я хочу рассказать о том, как можно частично перенести проект в Altium имея конвертированную схему и pcb.
Встроенный пакет Altium Designer, который называется Import Wizard, позволяет выполнять импортирование файлов из других САПР. Лично у меня это сопровождается постоянными танцами с бубном, так как помимо Altium, должен быть установлен, например, Allegro, но об этом я не буду. Этому посвящены отдельные ролики и статьи в интернете. Конвертация, обычно, но не всегда, не позволяет получить рабочий проект, чего мне и не требуется. Для нашей работы нам нужны файл pcb и желательно схематик. Для примера я буду использовать проект референса на iMX8 – «MCIMX8M-EVK-DESIGNFILES».
![](https://habrastorage.org/webt/g1/o4/zh/g1o4zht-v-jicq0ifceg2h7olyw.jpeg)
Рис.3. Плата референса MCIMX8M-EVK-DESIGNFILES
Так как я планирую разработать модуль, то большинство интерфейсов мне не понадобятся – они будут реализованы на материнской плате. Даже по картинке видно, что придется сильно ужаться при расстановке компонентов и из pcb я смогу взять только трассировку LPDDR4 (MT53B768M32D4NQ-062) и PMIC (контроллер питания для процессора MC34PF4210A1ES). eMMC и SD карта стоят далеко от чипа, их нужно будет трассировать заново, но это не проблема.
Библиотека компонентов
Для своей библиотеки из проекта MCIMX8M-EVK-DESIGNFILES я взял всего несколько компонентов, в их числе процессор, память и PMIC.
Давайте рассмотрим компонент iMX8. Ниже приведен скриншот библиотеки. MIMX8MQ7DVAJZXA имеет 14 частей, объединенных в один компонент. Это разделение позволяет в дальнейшем распределить интерфейсы по разным листам (части схемы, которые объединены в один проект). Например, «PART A» — это все, что касается USB, «PART D» — MIPI DSI, «PART G» — все SAI и т.д. Забегая вперед, скажу, что мой проект имеет всего 12 листов схем, соответственно, некоторые из элементов я объединил для удобства чтения.
![](https://habrastorage.org/webt/j_/n7/3d/j_n73dmhc3ibc7fyly-neqt8jhk.png)
Рис.4. Схематик MIMX8MQ7DVAJZXA
Имея такой компонент после импорта, я избежал его создания с нуля, тем самым значительно уменьшил вероятность ошибок в схеме. Теперь о том, что придется поправить в параметрах компонента.
![](https://habrastorage.org/webt/wb/a7/cb/wba7cbrihuzgu1do1u-mkkz87ay.png)
Рис.5. Схематик MIMX8MQ7DVAJZXA
Для разных компонентов количество параметров может быть разным, но некоторые поля должны совпадать для того, чтобы потом можно было выгружать перечень компонентов для заказа и сборки. Поля, приведенные слева импортировались из референса. Справа – которые необходимы мне для дальнейшей работы. У резисторов, например, параметров больше, у конденсаторов еще больше и т.д. В моем примере минимально необходимый набор параметров с нужными мне заголовками.
Таким же образом я сконвертировал и подправил оперативку и контроллер питания. Дальше я создаю новый проект (примерно зная какое количество листов у меня будет), переношу туда части схем с обвязкой и заменяю импортированные компоненты своими. В итоге получаются куски схем, очень похожие на оригинал. В этой статье я не буду рассказывать про структуру проекта, связи между листами и т.д., так что идем дальше.
Самая простая часть работы проделана. Теперь можно приступить ко второму этапу – это перенос библиотечного pcb компонента.
Тут почти то же самое, что было ранее, но вместо параметров – слои. В своих компонентах я использую фиксированный набор слоев. Помимо стандартных «top», «top overlay», «top past» и т.д., например, в «mechanical 1» я рисую контур компонента, его 3D модель и помещаю «.Designator» — это сделано для того, чтобы потом было проще выгрузить сборочный чертеж (и др.). Все лишние поля, которые я не использую – удаляю. Таким образом у меня их осталось около 15, вместо 24, как это было после импорта. Часто для BGA и QFN необходимо менять вскрытие маски контактных площадок, делать другие корректировки под возможности производства и т.д.
![](https://habrastorage.org/webt/cu/sb/rz/cusbrzxl-r3lp5d4bq_avojzcam.png)
Рис.6. pcb MIMX8MQ7DVAJZXA
Теперь в свойствах схематика необходимо связать компонент с pcb. Чтобы лучше понимать все написанное выше, можно посмотреть обучающие видео по созданию библиотеки для Altium.
На первых двух подготовительных этапам мне удалось создать библиотечные компоненты, которые теперь можно будет использовать в проекте. Это заняло значительно меньше времени, чем если бы я делал это с нуля.
Перенос трассировки
Третий этап самый сложный – это перенос части трассировки с платы референса в проект. Нужно быть очень внимательным. Обычно при импорте всплывают ошибки переноса (между средами разработки), поэтому «заимствовать» нужно только самое необходимое, то, на что было бы затрачено много времени и сил. Особенно я не рекомендую переносить переходные отверстия, полигоны, вырезы в полигонах и правила для DRC (Design -> Rules…).
Трассировка iMX8 выполнена на 10 слоях, соответственно я буду использовать тот же стек с той же очередностью слоев. Для удобства работы с проектом «MCIMX8M-EVK-DESIGNFILES», я скрою все полигоны.
![](https://habrastorage.org/webt/gc/s0/7u/gcs07ubjabshelmdwi0rbohn9yu.png)
Рис.7. Плата референса MCIMX8M-EVK-DESIGNFILES. PCB
Выглядит страшно. Очень страшно. Казалось бы, на этом уже можно закрывать Altium и идти плакать. Для удобства можно скрыть ненужные слои совсем, но кардинально это не поможет, а вот по слоям это буде выглядеть более или менее просто. DDR разведена на 4 слоях, но bottom я привел тоже не случайно (об этом ниже).
![](https://habrastorage.org/webt/td/sw/09/tdsw09yzzdpfszfxrexmslefeiu.png)
Рис.8. Трассировка LPDDR4 MCIMX8M-EVK-DESIGNFILES по слоям
Если в своем проекте Вы дошли до этого места, то половина работы по переносу, а может и по всему проекту уже сделана.
Наверное, Вы уже догадались что нужно сделать дальше? Да, осталось только правильно скопировать слой за слоем. Я расскажу, как это делаю я, чтобы избежать простых ошибок.
Первым делом я открываю плату референса и свою, с загруженными в нее компонентами из схемы на двух мониторах (этот вариант наиболее удобен при разработке). Копирую процессор и память из платы референса к себе (это необходимо для того, чтобы выставить эти компоненты с учетом имеющейся трассировки).
![](https://habrastorage.org/webt/1n/kv/w2/1nkvw2eo6eopax8rlh7qesujlme.png)
Рис.9. Взаимное расположение памяти и процессора (слева — референс)
После этого необходимо установить процессор и память нашей платы поверх правильно установленных, а после этого просто удалить скопированные из референса компоненты.
![](https://habrastorage.org/webt/em/4s/4j/em4s4jj62nxzn6yb57lw6rsbvsg.png)
Рис.10. Правильное расположение процессора и памяти
Лишние линии связи можно временно скрыть и приступать к переносу непосредственно трассировки.
Необходимо будет воспользоваться двумя способами копирования проводников. Первый самый простой и самый долгий – это копирование проводников по одному. Не нужно так копировать все соединения – это займет много времени, но иногда бывает удобным. Для примера возьмем сигналы клоков на падах AE14, AD14, AE12 и AD12. Нажимаем ПКМ на проводнике, выбираем пункт меню Find Similar Objects …, в появившемся окне помечаем имя проводника и слой (можно выполнять копирование сразу из всех слоев, в т.ч. отверстий).
![](https://habrastorage.org/webt/42/b1/in/42b1infelxqas5ubrynrhet_ea4.png)
Рис.11. Копирование одного проводника в одном слое (top)
Далее жмем Ctrl+C и ставим мышкой привязку к паду процессора. Переходим на нашу плату и жмем Ctrl+V и вставляем. Повторяем для всех четырех проводников и ставим отверстия у падов памяти для перехода на bottom — там стоят резисторы. Если Вы выполнили копирование во всех слоях, то резисторы будет установить проще.
![](https://habrastorage.org/webt/aq/vx/h_/aqvxh_ndep6hsbykktnuravjepk.png)
Рис.12. Копирование одного проводника
На рис.12. (справа) есть отдельный проводник (с крестиком мышки) – это пример копирования проводника во всех слоях с переходным отверстием. Суть метода состоит в том, что при копировании проводника и «установке его на пад», он принимает имя пада (нужно быть внимательным – если скопировать проводник на другой пад, он примет имя другого пада).
Даже сейчас Вы сможете самостоятельно перенести все проводники с референса на свою плату, но есть более простой способ (вообще их тоже несколько, но остановимся на одном), он отлично подходит для копирования групп проводников в одном слое. Для того, чтобы приступить к копированию проводников со второго (и следующих) слоя необходимо перенести top-проводники со всех падов процессора, в противном случае нарушится связь проводников (нам необходимо перенести переходные отверстия с top на другие слои, чтобы потом к ним привязывать проводники).
![](https://habrastorage.org/webt/gz/hk/uf/gzhkufhxa1h7s2i0uvzcvjww4om.png)
Рис.13. Копирование всех проводников с переходными отверстиями на top
Теперь у меня выведены с процессора все пады и их можно использовать на других слоях. То есть в другом слое я могу привязать проводники не боясь, что они станут NoNet (висящие «в воздухе» проводники, которые не подцепились). Следующим я перенесу 6 слой (третий, если смотреть рис.8.), чтобы показать еще один хак. Все то же самое, выделяем, копируем с привязкой в любому отверстию или паду и вставляем.
![](https://habrastorage.org/webt/po/dy/ey/podyey-wakjrku5d4fedwgxpc4q.png)
Рис.14. Копирование всех проводников с переходными отверстиями с 6 слоя
В чем состоит хак? Так вот, помимо трассировки оперативки я сумел вывести интерфейсы из-под процессора, которые уже будут сгруппированы в определенных частях платы. В чипе отдельные шины данных расположены в определенных местах. Например, в iMX8 слева внизу CSI, чуть выше NAND и т.д., то есть по-другому вывести их все равно не получится.
После того, как все нужные слои перенесены, необходимо удалить все переходные отверстия и проводники NoNet (при копировании пяти слоев, на нашей плате окажутся пять переходных отверстий на каждом месте). Затем я вручную расставляю via, заодно проверяя все связи. При определенной сноровке вся работа по переносу займет несколько часов.
Bottom
На рис.8. я показал слой bottom, который тоже хочу перенести. Но главное в нем не проводники (их не так много), а расстановка компонентов. Всего под чипом и оперативкой находятся 132 элемента. Обычно я не копирую этот слой, а просто устанавливаю пассив также как на референсе (открывая две платы на разных мониторах). Такой вариант подойдет, если Вы не меняли типоразмер компонентов на больший, в противном случае придется повозиться.
![](https://habrastorage.org/webt/g2/up/1y/g2up1yai-nz9ogsadntj5nbagga.png)
Рис.15. Компоненты на обратной стороне платы модуля
![](https://habrastorage.org/webt/bu/vf/sh/buvfshfqz7becstk5a5hqxrzj0q.png)
Рис.16. Итоговая трассировка под процессором и памятью сигнальных слоев
Послесловие
Подводя итоги, могу сказать, что данный способ переноса является довольно простым (я не исключаю, что есть и другие). Если начать с простых плат на 4 слоях, то можно быстро научиться переносить и более сложные трассировки, не затрачивая на это больших ресурсов. На этом, полагаю, статью можно закончить.
Для «затравки» скажу, что на получившейся плате 156 полигонов и, если кому-то интересно, могу написать статью о том, как на данном модуле они прокладывались, какие сложности возникали из-за небольших габаритов (размеры модуля 81мм*58мм) и что необходимо учитывать.
Спасибо за внимание!