Pull to refresh

Разработка модуля на iMX8 от NXP. Особенности переноса трассировки DDR

Reading time9 min
Views15K
Приветствую, Хабр!



Некоторое время назад, компания NXP представила линейку процессоров iMX8. Было бы странно упустить возможность и не разработать новый модуль. Кому интересны нюансы, прошу под кат (много легковесных картинок).

Введение (можно пропустить)


Мы давно уже «подсели» на продукцию NXP, в части процессоров, и всегда следим за новинками компании. При выходе нового продукта мы покупаем референс и через дистрибьютеров получаем семплы, чтобы программисты сразу начали освоение чипа, а аппаратчики, по завершении первой итерации, быстро получили макет изделия. Немаловажную роль во всем этом играет техническая поддержка, которая предоставляет SDK и HDK и отвечает на вопросы программистов и аппаратчиков. Пока первые запускают софт и начинают его адаптацию под наши задачи, вторые готовят вторую итерацию платы с исправленными ошибками, если таковые имеются (например, процессорный модуль на чипе iMX7, разработанный под заказчика был сдан с первой итерации, и вторая была чисто косметическая, модуль на iMX6UL/ULL, сначала разработанный под наши проекты, а позже ставший отдельным продуктом, тоже практически не изменился после первого выпуска). При разработке железа мы частично сохраняем схемотехнику референса (при условии, что это не вредит качеству продукта), чтобы стыковка программной и аппаратной частей прошла быстро и безболезненно. Каждая новая итерация ведет к новым тестам, которые не только приходится проходить заново, но и дополнять, с учетом всех изменений. Каждая новая выгрузка герберов из проекта требует проверки (изготовления образцов и их тестирование) перед запуском серии. Обычно разрабатываемый модуль является универсальным решением и используется в различных наших проектах. Также, некоторые заказчики просят кастомизации модуля, например, в части крепежных отверстий, типов разъемов, конфигурации или всего сразу, чтобы использовать в своих дальнейших разработках как готовое изделие.

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

С чего начать?


Не буду углубляться в подготовительную работу, которая предшествует началу проекта – это согласование ТЗ, составление план-графика работ, утверждение сметы и т.д. Я расскажу о нескольких первых шагах, которые помогут значительно сократить сроки разработки проектов, на примере iMX8 в Altium Designer. Это не будет что-то сверхъестественное и заумное, думаю так делают многие, но может быть не все.

Самым пугающим, пожалуй, когда я смотрю документацию на процессор или уже готовую схему, является перспектива трассировки оперативной памяти. Рано или поздно всем проходится с этим сталкиваться, но, как говорится, лучше позже, если такая возможность есть. Хорошо, если Вам достаточно использовать одну микросхему в устройстве, тогда бывает проще сделать трассировку самому. Ниже приведен пример трассировки DDR3L для Xilinx (плата на 4-х слоях). Разработана с нуля, нареканий нет.



Рис.1. Трассировка оперативной памяти DDR3L для Xilinx XC7A35T-1FTG256

А вот когда необходимо 4 планки, да еще и на разных сторонах платы, для уменьшения размеров. Ниже приведен пример модуля на iMX6Q.



Рис.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».



Рис.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 листов схем, соответственно, некоторые из элементов я объединил для удобства чтения.



Рис.4. Схематик MIMX8MQ7DVAJZXA

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



Рис.5. Схематик MIMX8MQ7DVAJZXA

Для разных компонентов количество параметров может быть разным, но некоторые поля должны совпадать для того, чтобы потом можно было выгружать перечень компонентов для заказа и сборки. Поля, приведенные слева импортировались из референса. Справа – которые необходимы мне для дальнейшей работы. У резисторов, например, параметров больше, у конденсаторов еще больше и т.д. В моем примере минимально необходимый набор параметров с нужными мне заголовками.

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

Самая простая часть работы проделана. Теперь можно приступить ко второму этапу – это перенос библиотечного pcb компонента.

Тут почти то же самое, что было ранее, но вместо параметров – слои. В своих компонентах я использую фиксированный набор слоев. Помимо стандартных «top», «top overlay», «top past» и т.д., например, в «mechanical 1» я рисую контур компонента, его 3D модель и помещаю «.Designator» — это сделано для того, чтобы потом было проще выгрузить сборочный чертеж (и др.). Все лишние поля, которые я не использую – удаляю. Таким образом у меня их осталось около 15, вместо 24, как это было после импорта. Часто для BGA и QFN необходимо менять вскрытие маски контактных площадок, делать другие корректировки под возможности производства и т.д.



Рис.6. pcb MIMX8MQ7DVAJZXA

Теперь в свойствах схематика необходимо связать компонент с pcb. Чтобы лучше понимать все написанное выше, можно посмотреть обучающие видео по созданию библиотеки для Altium.

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

Перенос трассировки


Третий этап самый сложный – это перенос части трассировки с платы референса в проект. Нужно быть очень внимательным. Обычно при импорте всплывают ошибки переноса (между средами разработки), поэтому «заимствовать» нужно только самое необходимое, то, на что было бы затрачено много времени и сил. Особенно я не рекомендую переносить переходные отверстия, полигоны, вырезы в полигонах и правила для DRC (Design -> Rules…).

Трассировка iMX8 выполнена на 10 слоях, соответственно я буду использовать тот же стек с той же очередностью слоев. Для удобства работы с проектом «MCIMX8M-EVK-DESIGNFILES», я скрою все полигоны.



Рис.7. Плата референса MCIMX8M-EVK-DESIGNFILES. PCB

Выглядит страшно. Очень страшно. Казалось бы, на этом уже можно закрывать Altium и идти плакать. Для удобства можно скрыть ненужные слои совсем, но кардинально это не поможет, а вот по слоям это буде выглядеть более или менее просто. DDR разведена на 4 слоях, но bottom я привел тоже не случайно (об этом ниже).



Рис.8. Трассировка LPDDR4 MCIMX8M-EVK-DESIGNFILES по слоям

Если в своем проекте Вы дошли до этого места, то половина работы по переносу, а может и по всему проекту уже сделана.

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

Первым делом я открываю плату референса и свою, с загруженными в нее компонентами из схемы на двух мониторах (этот вариант наиболее удобен при разработке). Копирую процессор и память из платы референса к себе (это необходимо для того, чтобы выставить эти компоненты с учетом имеющейся трассировки).



Рис.9. Взаимное расположение памяти и процессора (слева — референс)

После этого необходимо установить процессор и память нашей платы поверх правильно установленных, а после этого просто удалить скопированные из референса компоненты.



Рис.10. Правильное расположение процессора и памяти

Лишние линии связи можно временно скрыть и приступать к переносу непосредственно трассировки.

Необходимо будет воспользоваться двумя способами копирования проводников. Первый самый простой и самый долгий – это копирование проводников по одному. Не нужно так копировать все соединения – это займет много времени, но иногда бывает удобным. Для примера возьмем сигналы клоков на падах AE14, AD14, AE12 и AD12. Нажимаем ПКМ на проводнике, выбираем пункт меню Find Similar Objects …, в появившемся окне помечаем имя проводника и слой (можно выполнять копирование сразу из всех слоев, в т.ч. отверстий).



Рис.11. Копирование одного проводника в одном слое (top)

Далее жмем Ctrl+C и ставим мышкой привязку к паду процессора. Переходим на нашу плату и жмем Ctrl+V и вставляем. Повторяем для всех четырех проводников и ставим отверстия у падов памяти для перехода на bottom — там стоят резисторы. Если Вы выполнили копирование во всех слоях, то резисторы будет установить проще.



Рис.12. Копирование одного проводника

На рис.12. (справа) есть отдельный проводник (с крестиком мышки) – это пример копирования проводника во всех слоях с переходным отверстием. Суть метода состоит в том, что при копировании проводника и «установке его на пад», он принимает имя пада (нужно быть внимательным – если скопировать проводник на другой пад, он примет имя другого пада).

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



Рис.13. Копирование всех проводников с переходными отверстиями на top

Теперь у меня выведены с процессора все пады и их можно использовать на других слоях. То есть в другом слое я могу привязать проводники не боясь, что они станут NoNet (висящие «в воздухе» проводники, которые не подцепились). Следующим я перенесу 6 слой (третий, если смотреть рис.8.), чтобы показать еще один хак. Все то же самое, выделяем, копируем с привязкой в любому отверстию или паду и вставляем.



Рис.14. Копирование всех проводников с переходными отверстиями с 6 слоя

В чем состоит хак? Так вот, помимо трассировки оперативки я сумел вывести интерфейсы из-под процессора, которые уже будут сгруппированы в определенных частях платы. В чипе отдельные шины данных расположены в определенных местах. Например, в iMX8 слева внизу CSI, чуть выше NAND и т.д., то есть по-другому вывести их все равно не получится.

После того, как все нужные слои перенесены, необходимо удалить все переходные отверстия и проводники NoNet (при копировании пяти слоев, на нашей плате окажутся пять переходных отверстий на каждом месте). Затем я вручную расставляю via, заодно проверяя все связи. При определенной сноровке вся работа по переносу займет несколько часов.

Bottom


На рис.8. я показал слой bottom, который тоже хочу перенести. Но главное в нем не проводники (их не так много), а расстановка компонентов. Всего под чипом и оперативкой находятся 132 элемента. Обычно я не копирую этот слой, а просто устанавливаю пассив также как на референсе (открывая две платы на разных мониторах). Такой вариант подойдет, если Вы не меняли типоразмер компонентов на больший, в противном случае придется повозиться.



Рис.15. Компоненты на обратной стороне платы модуля



Рис.16. Итоговая трассировка под процессором и памятью сигнальных слоев

Послесловие


Подводя итоги, могу сказать, что данный способ переноса является довольно простым (я не исключаю, что есть и другие). Если начать с простых плат на 4 слоях, то можно быстро научиться переносить и более сложные трассировки, не затрачивая на это больших ресурсов. На этом, полагаю, статью можно закончить.

Для «затравки» скажу, что на получившейся плате 156 полигонов и, если кому-то интересно, могу написать статью о том, как на данном модуле они прокладывались, какие сложности возникали из-за небольших габаритов (размеры модуля 81мм*58мм) и что необходимо учитывать.

Спасибо за внимание!
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+34
Comments35

Articles

Change theme settings