Приветствую, Хабр! Долго не мог решиться, стоит ли писать статью по разработке устройств на процессорах. Материала и опыта по этой теме очень много, а если описывать все этапы проектирования, то нужно делать целый цикл статей. Но по факту это все равно не будет инструкцией к действию, так как в процессе разработки возникает множество нюансов. И каждый раз они индивидуальны.

Я решил описать некий шаблон (скорее один из), который, возможно, кому-то поможет в проектировании многослойных плат. Если мы говорим конкретно о разработке, то она включает в себя несколько этапов. Я буду писать об одном цикле — от получения технического задания, до передачи герберов на производство печатных плат. Затрону подготовку задания на согласование импедансов, так как это важно с самого начала трассировки. Сознательно не буду говорить о выборе компонентов, выгрузке конструкторской документации, поиске и исправлении ошибок после сборки плат и т. д.

Статья получилась большая, но, как говорится, из песни слова не выкинешь. Если вам все еще не страшно — добро пожаловать под кат!


Техническое задание


Я не зря для статьи выбрал именно модуль SMARC. Техническое задание для такого устройства обычно включает себя одну страницу текста — при условии, что заказчик знаком с тематикой модульных систем и хочет что-то конкретное.

С формфактором все понятно. Процессор и память были прописаны в техзадании (RK3568/LPDDR4x). Температурный диапазон известен. Спецификация SMARC версии 2.1.1 имеет 109 страниц, вот там-то все подробно и описано. Модули данного формата имеют краевой разъем (контакты на плате) на 314 выводов, расположенных на Top и Bottom. На эти пины выведены различные интерфейсы, которые перечислены в таблице и помечены как «Should» и «May». То есть часть сигналов обязательных, часть — на усмотрение заказчика. В спецификации описано все, начиная от габаритов платы с вырезами, расположения крепежных отверстий, формы радиатора, заканчивая четкой распиновкой и логическими уровнями на всех выводах. То есть с позиции исполнителя – это лучшее техническое задание, из которого вы четко понимаете, что и как нужно делать.

Примечание: очень рекомендую ознакомиться с этим документом, возможно почерпнете для себя что-то новое, что поможет в дальнейших разработках.

Референс дизайн


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

Это не первый проект, который я разрабатываю на чипах китайских производителей (до этого, в основном, от ST). Первым был CPU от компании ALi Corporation, затем — Allwinner. И вот теперь линейка Rockchip. Если сказать, что многое изменилось в составе и качеств документации, – это не сказать ничего! ALi предоставляли все поэтапно и со скрипом, на вопросы отвечали неохотно, а то и вообще игнорили (это про аппаратную часть, с софтом все было еще хуже), но проект все же был успешно завершен.

Сейчас все кардинально поменялось. В своем распоряжении я имею:
  • Проект Evaluation Board с полным описанием. Его, правда, нужно конвертировать в Altium. В EVB выведены и задействованы все (или практически все) интерфейсы процессора. Даже этого бывает достаточно, чтобы разработать свой проект.
  • Набор даташитов не только на сам CPU, но и на всевозможные микросхемы, которые использовались в референсе. Это очень нужная документация и «нагуглить» в интернете ее не всегда можно. Особенно это касается ИС управления питанием (PMIC).
  • «Template». Шаблоны трассировки оперативной памяти. Это второй по значимости набор после EVB. Он содержит несколько вариантов разводки для разных стеков плат (Stackup – об этом позже), разного типа DDR и разного их количества. Для примера: я использовал Template для шести слоев платы и одной планки LPDDR4/4x. Разрабатывая прошлый модуль на RK3588, использовались проектные файлы для восьми слоев и двух планок памяти LPDDR4/4x/5.
  • Набор документов, описывающих шаблоны (Template). Я ниже приведу пример, почему важно иметь эти доки, когда, казалось бы, все нужное уже перечислено выше.
  • «Hardware Design Guide». Тут название говорит само за себя. Файлы включают в себя нюансы по схемотехнике и трассировке, рекомендации по согласованию интерфейсов, описание различных стеков плат и т. д. Этот документ очень поможет, например, если вы хотите самостоятельно выполнить трассировку DDR или сдвинуть микросхему относительно процессора, тем самым изменив длину и конфигурацию трасс.
  • Описание нюансов трассировки. Это выделено в отдельный гайд. Обычно касается High Speed интерфейсов, как правильно вести трассы, ставить переходные отверстия, правильно согласовывать длины и еще много чего интересного и познавательного.
  • Более подробная информация по процессору. Это уже экзотика. Тут содержатся, например, длины проводников внутри процессора, Test Report, структурные схемы и т. д. Читать сложно, но интересно.
  • Набор исходников и инструкций для сборки операционной системы. В эти дебри не будем пока лезть.


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

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


Конвертирование схемы и трассировки


От этого этапа никуда не деться, если только вы не разрабатываете в Allegro. Рисовать с нуля 20-страничную схему — то еще удовольствие. Я стараюсь конвертить все, чтобы потом можно было посмотреть, как и что сделано, и сравнить, например, вывод интерфейсов с процессора для разных стеков плат. Об этом подробнее чуть позже.

После конвертации вы получите схему, но этого, к сожалению, мало. Для примера ниже картинка сразу после конвертации и после моего редактирования.


Рис 1. Схема после конвертирования и в рабочем проекте.

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


Рис 2. Свойства компонента после конвертации.

И это еще хороший вариант. Полей вообще может не быть или они могут содержать иероглифы. То есть первое, что необходимо сделать, — это перетащить из своей базы компоненты на схему. Чего не хватает — дорисовать. Обычно это контроллер питания и периферия. Наличие правильно заполненных полей необходимо для выгрузки комплекта КД, в том числе перечня элементов.

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

В процессе корректировки схемы я обычно делаю для себя пометки. Вы можете видеть подписи к питаниям процессора. Если что-то непонятно, то делаю отдельную пометку в виде «???». Это позволяет потом найти все пометки и разобраться.

После конвертирования pcb тоже не все гладко. 3D-модели выгружаются некорректно. Да и контактные площадки компонентов могут отличаться от вашей библиотеки. Правильно оформленный слой Мechanical в вашей базе поможет корректно выгрузить сборочный чертеж.

Примечание: для своего проекта я использовал именно Template, а не EVB. Мне нужна только разводка памяти, остальное не важно.


Рис 3. Конвертированная pcb из набора Template.

Если вы сделали все правильно в схеме и сохранили нумерацию компонентов, то при «Update PCB» в Altium все компоненты из Вашей PcbLib переедут на плату. Если связь компонентов SCH и PCB будет нарушена, то расставлять компоненты нужно будет вручную и ход этого этапа разработки будет совершенно другим. На эту тему у меня есть отдельная статья. Для примера покажу плату RK3588 с другой стороны, из которой станет понятно, почему важно сохранить расстановку пассива на bottom.

Примечание: перед выгрузкой компонентов на pcb не забудьте связать механические слои, чтобы компоненты с bottom на сборочнике попали именно на нижний слой.



Рис 4. Компоненты на bottom RK3588.

Согласитесь, ставить руками такое количество 0201 — это сложно. Но во многих прошлых проектах мне пришлось пройти через это. Под процессором RK3568 компонентов меньше, но все равно тратить на это время не хочется, ведь и так предстоит колоссальная работа.

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


Это был некий подготовительный этап, на котором я перенес проект из одного САПРа в другой, обновив компоненты платы и схемы. Не забываем сделать «Component Links» из pcb, чтобы убедиться, что нет нарушенных связей или отсутствующих компонентов.

Габариты платы


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


Рис 5. Процессор и память с контуром платы.

Часть выводов разъема еще не занята, так как нет интерфейсных микросхем. В этот момент меня еще ничего не насторожило. Я, конечно, понимал, что все интерфейсы придется выводить на одну кромку платы, то есть вокруг процессора, но всю серьезность ситуации еще не осознал.

Логические уровни


Все сложные CPU обычно поделены на блоки. Блок может содержать либо отдельный интерфейс, например MIPI_DSI, либо группу GPIO, объединенную одним напряжением VCCIO.


Рис 6. VCCIO4 и VCCIO7 на RK3568.

Таких блоков в данном процессоре 17. Это позволяет наиболее гибко конфигурировать логические уровни (но не все) на GPIO и интерфейсах. Из схемы видно, что VCCIO данных групп может быть запитано от напряжений 1,8/3,3В. Теперь наступает первый важный момент. В верхней части схемы я задействую RGMII0 (GMAC0) и UART (SER0). В нижней — ESPI, I2C и GPIO управления.

Логические уровни GMAC0 я могу выбрать на свое усмотрение: физика Ethernet позволяет работать с обоими напряжениями, но это тоже нужно учесть в конфигурации самой микросхемы RTL8211FSI. А вот уровни выводов, идущих на краевой разъем описаны в стандарте. Если все VCCIO запитать от 3.3В — это значительно упростит трассировку питающих полигонов, но неизбежно приведет к установке на плате конвертеров уровней, а это снова лишнее место и стоимость компонентов.

Примечание: от того, насколько гармонично вы сгруппируете выводы интерфейсов, во многом зависит сложность прокладки трасс. Один и тот же вывод процессора может выполнять различные функции. Например, GPIO2_C6 может быть сконфигурирован как SPI1_CS1, UART8_RX или CLK32_OUT1.

Я обычно иду от обратного. Смотрю, какой интерфейс мне необходим. Допустим, два гигабитных Ethernet — значит, мне понадобится два RGMII. Подключаю физики к разъему, а потом к процессору. Сначала нужно подсоединять сложные (многовыводные) интерфейсы, так как они задействуют большую группу выводов. Затем — CAN, UART, I2C, SPI и т. д. В последнюю очередь — обычные GPIO.

После того, как схема обросла компонентами, переносим все на плату. Получается примерно такая картина:


Рис 7. Плата со всеми компонентами.

Слева расположены две RTL8211FSI с обвязкой. Справа — два PMIC и генератор клоков PCIE3.0, снизу — eMMC. Также рассыпаны различные сопутствующие компоненты. Следующий этап по сложности и ответственности является основным.

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

Расстановка компонентов


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

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

Начинаю обычно с микросхем питания. Template предлагает оптимальный вывод полигонов и трасс питания, но бывает, что его нужно менять. Если рассматривать референс, то можно обратить внимание, что все интерфейсы выводятся «по кругу», а плата имеет большие габариты. Попробую пояснить.


Рис 8. Сторона Top на EVB.

Видно, что трассы на Top расходятся по кругу. То есть не перекрещиваются. Если вы захотите поменять HDMI (сверху) и Ethernet (снизу) местами, то придется повозиться. А если учитывать габариты моей платы… каждый переход из слоя в слой будет ухудшать сигнал и «дырявить» полигоны.

Это было небольшое отступление. Для того, чтобы выбрать положение PMIC (относительно CPU и DDR), нужно учесть, как питание выходит из контроллера и заходит в процессор. Это трудоемкий процесс, с которым нужно быть аккуратнее. Потом переместить микросхему в другой угол будет очень проблематично. PMIC RK809 имеет корпус QFN68 7x7 мм. В него встроены пять понижающих DC/DC, девять LDO и — внимание — Audio Codec. В первый раз вижу, чтобы кодек был встроек в контроллер питания. Ниже, для наглядности, приведу один из слоев.


Рис 9. Вывод напряжений из PMIC (общий полигон скрыт).

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

Примечание: во время расстановки компонентов лучше скрывать некоторые из Net: GND, общее питание и питание для больших полигонов. Это немного разгрузит плату.


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


Рис 10. PMIC (все Net скрыты).

Тут можно делать все по наитию, сверяясь с референсом. Долго, кропотливо, но не очень сложно.

В какой-то момент я решил, что на bottom будут только пассив. По прикидкам места должно хватить. Некоторые компоненты сразу установить не получилось, так как пока не понятно, как будут проходить широкие интерфейсы (с большим количеством дифференциальных пар). Ими особо не поныряешь из слоя в слой.


Рис 11. Расставлены почти все компоненты.

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


Разглядывая картинку выше, становится понятно, что трассировка будет сложной. Во-первых, все интерфейсы должны идти на одну сторону (в том числе и вокруг процессора). Во-вторых, краевые контакты находятся с двух сторон платы (Top/Bottom). Если поставить переходное отверстие от верхнего вывода рядом с падом, оно не даст вывести проводник на нижнем слое (от пада). В-третьих, все интерфейсы в разъеме перемешаны. Именно поэтому не получится развести плату на шести слоях как на EVB.

Стек платы


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


Рис 12. Специфика вывода интерфейсов (LPDDR4 слева).

Все, что находится в желтой зоне, теоретически можно вывести на Top (как раз на это нам намекает шаблон). Но из-за конфигурации платы мне не хватит места, чтобы развернуть сигналы (сверху) и их все равно придется перекрещивать, так как по стандарту SMARC каждому интерфейсу строго отведено свое место в разъеме. Область внутри синей зоны нам пока не интересна, так как там питания и GND. Все, что находится между этими зонами, выводится только через переходные отверстия.

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

Итак, что же такое стек платы (Stackup)? Это все слои, из которых она состоит. Если вы будете изготавливать плату сами с помощью принтера и утюга, она будет состоять из трех слоев: фольга-текстолит-фольга. Многослойная ПП для такого процессора имеет намного больше слоев. Ниже — пример стека печатной платы для прошлого модуля (на RK3588), согласованного с производителем ПП.


Рис 13. Stackup платы восемь слоев для RK3588.

Плата состоит из восьми проводящих слоев финальной толщиной 1,6 мм. Между всеми слоями проложены диэлектрики в виде препрегов (PP) и ядер (Core). Препрег — это, по сути, тонкий текстолит с определенными диэлектрическими свойствами. Ядро же, помимо всего прочего, формирует жесткость платы.

Примечание: если Вы решите сформировать свой стек только из препрегов, то у вас может получиться гибкая плата. Проверено на практике.


Рис 14. Другой Stackup платы восемь слоев для RK3588.

На втором стеке кроме толщин прописаны материалы. Мы делаем платы разными партиями — от макетов две-четыре штуки до мелких серий по 200-500 штук. Но интересно, что от партии к партии, а тем более от макета к партии, стек может меняться. Производитель будет выбирать компоненты стека таким образом, чтобы не нарушить структуру, исходя их доступных материалов.

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

Что обсудим в следующей статье

  • На что влияет выбор стека и как выводить высокоскоростные интерфейсы.
  • Из чего состоит процесс выравнивания дифференциальных пар и какие нюансы при этом нужно учитывать.
  • Как сделать расчет импедансов.
  • Нюансы в документации от производителя.
  • Задание для производства на расчет импедансов: для чего это нужно и почему об этом стоит задуматься до начала трассировки.
  • Для чего нужна мультипликация плат и как правильно ее делать.
  • Полигоны.

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


Спасибо за внимание и успехов в сложных проектах!

Комментарии (19)


  1. kenomimi
    22.07.2024 14:02
    +5

    Ох, тут просто жирненький STM32/ATMega разводишь - уже ощущаешь прямо резкий дефицит внимания - ошибка на ошибке... Завидую тем, кто может зафигачить плату как в статье, и не сделать в ней 9000 ошибок разной степени глупости.


    1. the_bat Автор
      22.07.2024 14:02

      Просто нужно привыкнуть)


    1. anonymous
      22.07.2024 14:02

      НЛО прилетело и опубликовало эту надпись здесь


      1. kenomimi
        22.07.2024 14:02

        а Вы соблюдаете правила?

        Обязательно. В современных редакторах нет выбора :)

        Кстати, в чём работаете?

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

        а можете привести примеры ошибок?

        Тупейшие. Поставить не на ту сторону разьем/модуль - запросто. Или влепить не тот номинал резистора. Ноги в группе перепутать у чипа. Причем кажется, что сто раз проверил - через пару дней смотришь - "да ты бухой что-ли был?" В последее время перед заказом любой платы отклыдваю готовое на 2-3 дня, потом еще раз проверяю - обязательно парочку косяков найдешь.


        1. anonymous
          22.07.2024 14:02

          НЛО прилетело и опубликовало эту надпись здесь


          1. kenomimi
            22.07.2024 14:02

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

            И вот когда рисуешь схему - там обязательно накосячишь :)


    1. nafikovr
      22.07.2024 14:02

      Тут вопрос в терпении и усидчивости. ИМХО, это свойство, которое не каждый может развить. Я так не умею, но знаю людей, которые вполне могут по 5-10 итераций с полной переразводкой даже относительно простых плат.


  1. almaz1c
    22.07.2024 14:02

    референсы тоже с csdn качали?)


    1. the_bat Автор
      22.07.2024 14:02
      +1

      Нет, получаем официально от мт-систем.


  1. mark_ablov
    22.07.2024 14:02
    +1

    Начинаю обычно с микросхем питания

    Почему? Я не очень шарю, но когда разрабатываю платы, то сначала расставляю взаимодействющие инетрфейсные компоненты поближе друг к другу (скажем, микроконтроллер и USB-разьём), а потом уже где место осталось втыкаю контроллеры питания и менее важные компоненты. Есть ли что-то плохое в том, чтоб провести линии питания через всю плату на отдельном слое?


    1. the_bat Автор
      22.07.2024 14:02
      +1

      Я как раз написал в статье, что PMIC будет потом очень сложно перемещать по плате. Микросхемы интерфейсов обычно меньше по габаритам, их проще двигать, у них нет выходов с полигонами на TOP и с переходными отверстиями для передачи питания во внутренние слои. Фраза "Начинаю обычно с микросхем питания" появилась в статье уже после того как у меня установлен чип, память и краевой разъем.

      В таких процессорах очень много питаний (на этой плате два PMIC (один простой), и 3 DC/DC (один их которых основной входной)). У меня два слоя сделаны для питания. Ниже второй из них. Просто физически не получается вывести все VCC в одном слое, чтобы полигоны были нормальными.


  1. Limansky
    22.07.2024 14:02
    +1

    Спасибо за прекрасную и полезную статью, было очень интересно читать. Узнать что-то новое, сам я только простенькие платы разводил в своей жизни, а тут уровень сложности, внимательности и вовлечения повышается. Успехов Вам.


    1. the_bat Автор
      22.07.2024 14:02

      Спасибо! Рад, что понравилась статья.


  1. sdy
    22.07.2024 14:02

    Надо было сразу с ECC делать


    1. the_bat Автор
      22.07.2024 14:02

      С ними, естественно, и делал, но они не помогут оптимизировать трассировку и полигоны)


      1. sdy
        22.07.2024 14:02

        Что то не видно на модуле


        1. the_bat Автор
          22.07.2024 14:02

          А, Вы про память? Нужно именно на LPDDR4x.


  1. Fesc
    22.07.2024 14:02
    +1

    Отличная железячная статья! Всегда было интересно, как проектируют платы такого уровня сложности) буду ждать продолжения!


    1. the_bat Автор
      22.07.2024 14:02

      Спасибо!