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

в 17:32, , рубрики: iMX8, NXP, PLDDR4, модуль, Производство и разработка электроники, схемотехника, трассировка, электроника

Приветствую!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рис.6. pcb MIMX8MQ7DVAJZXA

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Bottom

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

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

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

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

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

Послесловие

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

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

Спасибо за внимание!

Автор: the_bat

Источник



https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js