![](https://habrastorage.org/webt/rm/kr/_i/rmkr_il0-ojszwbd_l7l1xjcays.png)
Как и обещал, выкладываю продолжение на тему разработки на процессорах. В этой статье хочу коснуться нескольких тем:
- выбор стека платы,
- документация от производителя процессора,
- трассировка полигонов питания,
- расчет волнового сопротивления.
Все, что хотел, снова не уместилось в статье, а комкать информацию не хочется, чтобы еще больше не запутать. В материале много картинок, но это позволит проще воспринимать и запоминать информацию.
Выбор стека платы
Как я уже писал в прошлой статье, для проектирования модуля использовался Template на шести слоях. Повторюсь, шаблон не имеет никаких интерфейсов, только голый процессор, память и их минимальная обвязка. Он содержит рекомендованную производителем CPU трассировку DDR (в моем случае LPDDR4x), а также трассировку основных цепей питания. Если разводку оперативной памяти нужно сохранить полностью, то по питанию придется многое переделывать (об этом было в прошлой статье). Далее вы сами дорабатываете схему в соответствии с необходимым набором интерфейсов.
Оперативная память для данного процессора разведена во внешних слоях (Top/Bottom). Под каждым из них обязательный опорный слой GND. Это необходимо для согласования волнового сопротивления. Полигоны в этих слоях желательно оставить цельными на всей площади платы (если не получается, то обязательно под CPU и DDR). Итого занято четыре слоя. Проанализировав все питающие цепи, пришел к выводу, что для их разводки мне потребуется еще два слоя. Основная сложность состоит в том, что плата довольно узкая и утыкана микросхемами выходных интерфейсов.
Почему не получится сделать на шести слоях как в шаблоне? Вывод всех пинов процессора сделан в двух внешних слоях. Они веером расходятся до микросхем и разъемов, не пересекаясь. При этом большие габариты печатной платы позволяют максимально отодвинуть переходные отверстия питающих цепей от процессора. Для примера приведу четвертый слой Template, который отведен для питания.
![](https://habrastorage.org/webt/ts/py/cq/tspycq24w5sj67r52krxqtjpaga.png)
Рис.1. Слой питания Template.
Мощные полигоны питания VCC_DDR, VDD_CPU, VDD_LOGIC, VDD_NPU и VDD_GPU полностью занимают еще один слой. То есть становится понятно, что ни в одном, кроме внешних слоев, ничего не вывести. Ниже показано, как это сделано на референсе.
![](https://habrastorage.org/webt/dl/1e/ia/dl1eiajdaxwpidgppemde6xi148.png)
Рис.2. Вывод интерфейсов на референсе RK3568 (DDR3).
Тут сложно разобраться без подсветки сигналов, но все равно видно, что в красном (Top) и синем (Bottom) слоях выводятся проводники целыми широкими шинами. Также оставлены «окна» для переходных отверстий от питаний процессора (Рис. 2.) к PMIC.
Примечание: если позволяют габариты платы и расположение интерфейсных разъемов не критично, то такой вывод будет оптимальным, так как можно выбрать стек платы из шести слоев.
Если взять для примера Top моего модуля, то видно, что ни одна шина (не считая памяти) не идет прямо в разъем или микросхему. Это происходит как раз из-за необходимости перемешивания проводников в разъеме (по стандарту SMARC).
![](https://habrastorage.org/webt/zo/pn/pf/zopnpftawaict98__l7570jc8mc.png)
Рис.3. Слой Top модуля SMARC RK3568.
Возвращаемся к стеку. Итак, мне нужно не менее шести слоев. Плюс два слоя для вывода и переворота интерфейсов. Так как на модуле много дифференциальных пар, для улучшения качества сигналов я добавил еще два опорных слоя.
Примечание: можно было остановиться на восьми слоях. Этого вполне достаточно для данного проекта. В качестве опорных для дифференциальных сигналов можно использовать слои питания, но их неоднородность может повлиять на качество сигналов.
Чтобы лучше понимать, как выглядит разрез платы, приведу фотографию ниже. С производства обычно приходит плата, из которой вырезан кусок и залит в эпоксидку. Разрез проходит по переходным отверстиям, чтобы показать, что сделана забивка смолой.
![](https://habrastorage.org/webt/fo/ax/3w/foax3wycaxg7qh2e8_dmzkyojbi.jpeg)
Рис.4. Восемь слоев платы в разрезе.
Документация от производителя
Я хотел бы уделить особое внимание документу «Hardware Design Guide». Он содержит множество схемотехнической информации. Если у вас есть проект Evaluation Board, то новой информации там не будет, разве что пояснения к конкретным решениям. На схемах показано, какие конденсаторы на шинах питания должны быть под процессором и памятью, какие могут быть вынесены. Приведены примеры подключения различной оперативной памяти с информацией о сигналах и согласующих компонентах. Описан принцип подключения сброса CPU (через PMIC либо отдельный супервизор питания). Сделан большой акцент на интерфейсы и их защиту от статики. Вторая часть документа — это PCB. Тут стоит задержаться, так как раздел содержит много полезной информации.
![](https://habrastorage.org/webt/oc/2p/7e/oc2p7egxfswgdcnzdsqi16jqtlq.png)
Отдельный подраздел посвящен дифференциальным сигналам. Выравнивание длины должно быть как между проводниками внутри дифференциальной пары, так и между парами в пределах одного интерфейса.
![](https://habrastorage.org/webt/vg/cc/fi/vgccfibes4nq8zukzsohy0hfgwc.png)
Рис.5. Согласования длин внутри пары и между парами.
Расстояние между проводниками и полигоном земли (того же слоя) должно быть, как минимум, в четыре раза больше ширины линии.
![](https://habrastorage.org/webt/jq/wi/oz/jqwiozpbv8aozr_mdt7bmjmluqu.png)
Рис.6. Зазор диффпара — полигон.
Расстояние от дифференциальной пары до края опорной плоскости должно быть не менее 40mil. Если сигналы не получается уместить внутри одного опорного полигона либо в качестве опорного используется слой питания (из нескольких полигонов), то сигнальные линии должны пересекать границу полигонов под углом 90 градусов. Нужно учитывать, что это может привести к ухудшению качественных показателей сигнала.
![](https://habrastorage.org/webt/k9/qc/i2/k9qci2l16l9y4ue2vut0z4th05i.png)
Рис.7. Диффпара и опорный слой.
При согласовании линий внутри дифференциальной пары рекомендуется использовать инструмент «Sawtooth». Картинка ниже поможет правильно подобрать параметры. Здесь w — ширина проводника, S — зазор между проводниками внутри пары. Если сегменты пилы будут высокими и/или короткими, это приведет к рассогласованию сигнала. При увеличении S1 будет теряться связь между проводниками. При значительном уменьшении ширины сегмента между ними начнет расти связь, при которой сигнал проходит не только через проводник, но и сквозь сегмент.
![](https://habrastorage.org/webt/vn/k6/el/vnk6elby-_rtflybhmicajrjukg.png)
Рис.8. Согласование длины внутри диффпары.
Корректировку длины следует выполнить в начале рассогласования линии. В данном случае расхождение длины начинается слева (нижний проводник короче верхнего на рисунке 9). В этом месте необходимо добавить сегменты увеличения длины.
![](https://habrastorage.org/webt/6x/ax/6b/6xax6bw6f_io2vek5a-oo3k7uby.png)
Рис.9. Место согласования диффпары.
Примечание: дифференциальные пары ведутся под углами, большими или равными 135 градусам.
Картинка ниже описывает, к чему нужно привести топологию. Тут вроде тоже все понятно. Дифференциальная пара должна быть максимально симметрична. В этом случае корректировки не будет либо она будет минимальна. Внутри диффпары не должно быть элементов топологии.
![](https://habrastorage.org/webt/nn/9j/o_/nn9jo_z9unpwsffiyzzkxzjg0vm.png)
Рис.10. Соседние элементы на плате и переходные отверстия.
При смене слоя (опорной плоскости) при трассировке дифференциальных пар необходимо рядом с сигнальными переходными отверстиями (на расстоянии не более 30mil) симметрично установить экранирующие Via.
![](https://habrastorage.org/webt/j8/2c/2j/j82c2jvi9fac-v5eur1gcwuqjxy.png)
Рис.11. Обеспечение возвратного тока сигнальных переходных отверстий.
После того, как выровнены все длины внутри каждой дифференциальной пары, необходимо произвести их выравнивание друг относительно друга (по каждому интерфейсу). Обычно для этого используется инструмент «Accordion», который тоже имеет несколько параметров.
![](https://habrastorage.org/webt/km/b4/2x/kmb42xms4w6lvtrk7o04de-j-u8.png)
Рис.12. Инструмент «Accordion» для выравнивания диффпар.
Здесь H — это высота подъема проводника над ближайшей опорной плоскостью. На рисунке 12: слева — одиночный проводник, справа — дифференциальная пара.
Примечание: контроль длин выполняется не только для интерфейсов с дифференциальными парами, но и для групп одиночных проводников, таких как: RGMII, SDIO, SPI, I2S и т.д.
Есть один неочевидный момент. Материал, который используется для диэлектрика в печатных платах, имеет неоднородную структуру. Он содержит волокна и эпоксидную смолу, которые имеют различную диэлектрическую проницаемость.
![](https://habrastorage.org/webt/ov/ko/va/ovkova8ifjfwks8dffkrw8xd7nk.png)
Рис.13. Неоднородность диэлектрика ПП.
При высоких скоростях и длинных линиях рекомендуется использовать один из способов снижения влияния эффекта плетения стекловолокна.
- Изменить угол наклона печатной платы на 10-35 градусов. Это могут сделать на производстве, повернув текстолит относительно топологии.
- Необходимо вести трассы под углом относительно платы.
Примечание: у Altium Designer есть хорошие вебинары, где описаны принципы трассировки и согласования дифференциальных сигналов и групп одиночных проводников.
Трассировка полигонов питания
Теперь перейдем к трассировке полигонов. Как я писал ранее, я начал с контроллера питания. «Hardware Design Guide» показывает, как сделать полигоны PMIC и какое должно быть количество переходных отверстий питания/земли. Также есть рекомендации по диаметрам отверстий и пояскам.
![](https://habrastorage.org/webt/q_/gp/fq/q_gpfqid3amsajpzmbju5xzx-pi.png)
Рис.14. Вывод питания из PMIC.
Очень важным моментом является правильный вывод feedback. Приведу пример части схемы питания VDD_GPU, на которой есть пояснение (картинка под схемой), где показано как должен проходить сигнал FB относительно полигона и где должен соединяться с питанием.
![](https://habrastorage.org/webt/5o/kt/ld/5oktldqph-3shgvsscy1zwyanqe.png)
Рис.15. Схема питания VDD_GPU.
Теперь как это выглядит на PCB. Левая часть картинки — это PMIC (пунктирный проводник на верхнем слое ныряет в слой полигонов). Правая — слой питания под процессором. Смысл заключается в том, чтобы взять сигнал feedback как можно ближе от точки входа полигона в CPU.
![](https://habrastorage.org/webt/dq/iy/yu/dqiyyubgwxlrpezkaup7xmhknpo.png)
Рис.16. Прохождение сигнала FB VDD_GPU.
Примечание: сигнал feedback не должен соединяться с полигоном на протяжении всей длины — соединение должно происходить в одной точке.
Для сохранения целостности полигона допускается прокладывание дополнительных трасс, чтобы убрать образовавшиеся разрывы.
![](https://habrastorage.org/webt/9b/un/zt/9bunztom-3rj6chuhr85jaas2dy.png)
Рис.17. Восстановление целостности полигона.
Для обеспечения наилучшего питания необходимо правильно расставить переходные отверстия и конденсаторы под процессором. Слева слой Top (не знаю, почему он у них синий), справа Bottom.
![](https://habrastorage.org/webt/ir/i-/lq/iri-lqufuelricoc8jwkr-xppse.png)
Рис.18. Расстановка переходных отверстий и конденсаторов.
Примечание: в слое Top под процессором сделан вырез в полигоне, поэтому соединение «пятаков» питания и земли выполнены проводниками.
В итоге у меня получилась примерно такая картина. Есть тонкие места (в прямом и переносном смысле), но я пока так и не придумал, как это улучшить.
![](https://habrastorage.org/webt/wo/z6/ou/woz6ouimtfp4risepfmuqrzakc8.png)
Рис.19. Распределение полигонов питания.
Расчет импедансов
Для высокоскоростных интерфейсов (дифференциальных) волновое сопротивление обычно варьируется от 85 до 100 Ом. Соблюдать его нужно в пределах 10%. Таким образом получается, если сделать все проводники 90 Ом, это удовлетворит требованиям, но где-то на пределе. Производитель печатных плат тоже закладывает зазор в 10% при контроле импедансов и может получиться так, что 100-омная линия из 90-омной станет 80-омной. Если учесть, что трассы не идеальны, а на пути появляются переходные отверстия из слоя в слой, ухудшающие параметры сигнала, может получиться так, что целостность сигнала будет нарушена. На высоких скоростях это может стать фатальным.
Для расчета волнового сопротивления есть отличная программа «PCB Controlled Impedance Si8000». Ниже пример расчета для 100-омной линии во внешних слоях.
![](https://habrastorage.org/webt/yn/ib/9b/ynib9b-hnwrgfndmfax4xoyxxva.png)
Рис.20. Расчет импедансов во внешних слоях.
Слева указана выбранная структура и расположение проводников диффпары на плате. Программа учитывает максимальное количество параметров проводников, начиная от расстояния до опорного слоя и заканчивая диэлектрической проницаемостью маски.
Примечание: нужно понимать, что H1 — это расстояние до ближайшего опорного полигона, а не толщина платы. На многослойных печатных платах это расстояние можно увеличить, сделав вырез в первом от топологии слое, тогда опорным станет следующий.
Для сигналов, идущих во внутренних слоях, есть своя структура. Для примера ниже вариант расчета 90-омной линии. Тут учитываются расстояния до верхнего и нижнего полигонов.
![](https://habrastorage.org/webt/t0/e0/7h/t0e07hkl6y3kxugajaqwvdcas-a.png)
Рис.21. Расчет импедансов во внутренних слоях.
Примечание: толщина линий трассы не должна совпадать с толщинами других проводников, не относящихся к интерфейсу с заданным волновым сопротивлением. Это условие упростит процесс согласования с производством.
В следующей, заключительной, статье (обещаю, что она будет попроще):
- задание на расчет импедансов и получение рабочего стека,
- процесс выравнивания дифференциальных пар,
- экранирование определенных сигналов,
- мультипликация платы для производства.
Спасибо за внимание и успехов!
Комментарии (20)
KuprikSar
08.08.2024 10:23В чем смысл использовать сторонний Si8000? Если в альте (автор судя по скринам пользуется именно им) есть хороший встроенный калькулятор импедансов который отлично встраивается в rules.
the_bat Автор
08.08.2024 10:23Честно скажу, привык к Si8000 со времен 14 альтиума. Не могу перейти на встроенный инструмент, но постепенно осваиваю.
JustMoose
08.08.2024 10:23+2Ничего не понятно, но ооочень красиво!
И где этим всем премудростям научиться?
Хочу!
ЗЫ: Я пока ничего сложнее ардуины развести не могу :(
the_bat Автор
08.08.2024 10:23+1Спасибо! Да, тема узкоспециализированная. У меня страсть к разработке. Начинал тоже с простых плат, постепенно осваивая новые и более сложные.
ahdenchik
08.08.2024 10:23Если плата однослойная (хобби-проект) то пускать линию GND между дифференциальной парой? Или лучше как-то по-другому поступить?
the_bat Автор
08.08.2024 10:23Внутри дифференциальной пары земли не должно быть. Между парами можно залить землю, но должен быть отступ. А вообще нужен опорный слой. Хотя есть пример расчета (если я правильно помню) и без опорного слоя.
Indemsys
08.08.2024 10:23+1Тут самое интерсеное было бы - это анализ перекрестный наводок.
Согласование дифференциальных пар конечно интересно, но не менее интересна защита от наведенных помех линий I2C (очень чувствительны), I2S, SPI, SDIO и других скоростных линий. Конечно пока пины чипа не смапированы на эти функции разработчик платы может себе позводить не думать об этом. Но если I2C начнет зависать просто потому что SCL и SDA слишком близко друг к другу или проходят под катушкой DC/DC или рядом с полигоном силового ключа.
Это к тому что при тассировке модуля надо думать и о конечном приложении. Сомнительно разрабатывать модуль не зная в какой схеме точно он будет применяться.the_bat Автор
08.08.2024 10:23Спасибо, напишу об этом. На примере этого конкретного модуля (SMARC) тут все интерфейсы регламентированы на разъеме. Если я правильно понял, Вы имеете ввиду тот вариант, когда были два обычных GPIO рядом, а их смапили в I2C. Я так скажу, что даже если распиновку я выбираю сам для разъема, то сразу предполагаю какие интерфейсы буду выводить. То есть я не буду при разработке матплаты из набора GPIO делать SDIO интерфейс, я его заложу заранее. Если модуль предполагается универсальный то выводится максимально возможный набор интерфейсов. Если потом вдруг потребуется еще один I2S - это может стать проблемой, конечно, но если их в чипе изначально два, то я выведу оба. Я лучше потом его использую как GPIO, если не понадобиться два кодека.
SelkupRus
08.08.2024 10:23+1На счёт неоднородности структуры текстолита - есть ли способ удостовериться в том, что на производстве послушали вас и повернули материал на 10-15 градусов относительно топологии без среза?
Благодарю за вторую часть и с нетерпением жду заключительную главу!!
the_bat Автор
08.08.2024 10:23Думаю, если производство добросовестное то все должно быть хорошо. Можно запросить отчет о производстве плат. Но я обычно делаю примерно так (минимальное количество вертикальных и горизонтальных линий на высокоскоростных диффпарах):
Спасибо! Я стараюсь, но для такого материала нужно много времени.
Radius777
08.08.2024 10:23Автору большое спасибо. Очень полезная статья. По вашей картинке я не понял как выравнивались длины цепей идущих к DDR. На первый взгляд цепи разной длины.
the_bat Автор
08.08.2024 10:23Спасибо! Если Вы хотите сами выполнить трассировку памяти, то точно нужен полный Hardware Design Guide. Я использовал готовый шаблон для LPDDR4x (в прошлой статье описано).
hw_store
Мне кажется, с фидбеком они чуток перемудрили, хотя тут не понять точно, схемы-то нет.
Не ясен смысл резистора 100 Ом и не понятно, что такое Power Coupper. Может, Coupler?
Также не понятно, то ли VDD GPU и VDD NPU - это отдельные выходы PMIC, то ли это один канал, а цепи просто развязаны между собой ВЧ дросселями. Или вообще на каждую из цепей по отдельной PMIC, ибо напряжения, возможно, разные. Неспроста же придумали POL-преобразователи. Память, предположительно, питается от чипа U4, и похоже где-то в том углу притулился чип, питающий CPU.
the_bat Автор
Не перемудрили) На всех подобных процессорах фидбек выводится именно так. "Power Coupper" - это полигон питания. VDD_GPU/VDD_NPU разные цепи питания - называются по-разному - разные выходы DC/DC из PMIC.
hw_store
ОК, пусть будет полигон. Тогда не понятно, почему на выходе из полигона стоит конь денсатор и дальше идёт линия в SOC. Также назначение резистора 100Ω от этого не сильно проясняется. К тому же на рис.14 наблюдается некая хрень, похожая на датчик тока, хотя возможно она находится в другом канале и в единственном числе.
...Гугл, кстати, не знает, что такое coupper. :-o
the_bat Автор
Думаю, что все-таки "Power Copper", просто ошибка.
Линия идет не в SOC, а от него и попадает в FB PMIC - обратная связь для DC/DC.
По поводу датчика тока Вы правы. По всем питаниям в референсе стоят шунты, сигналы с которых заходят в АЦП (20шт INA226). Можно посмотреть потребление по каждому потребителю.