[Перевод] PCIe для электронщиков: анатомия канала передачи
В предыдущий раз мы разбирали дифпары, их основы, правила разводки и известные допуски PCIe в этом отношении. Сегодня же мы поговорим о конкретных сигналах, на которых работает PCIe, а также узнаем, какие разъёмы применимы к этому интерфейсу.
Я делю разъёмы PCIe на две категории. Первые — это десктопные, которые обычно имеют ширину канала х1, х16 или х4 и встречаются на десктопных материнских платах. Вторая категория — это мобильные разъёмы, а именно mPCIe и M.2. Также существуют модели вроде ExpressCard, которые до сих пор встречаются в некоторых стареньких ноутбуках, но уже определённо утратили свою актуальность. Что касается мобильной сферы, то M.2 в отношении PCIe идёт значительно впереди — если интересно, у меня есть короткая серия статей, в которых я подробно разбираю данный стандарт.
В этих разъёмах большинство сигналов будут необязательными, а некоторые специфичными для самого разъёма, но в любом устройстве PCIe есть и необходимые. Естественно, первую группу таких необходимых сигналов представляют сами дифпары PCIe.
▍ PCIe — это просто изощрённый UART
В любом интерфейсе PCIe присутствует два вида дифпар — TX и RX. Для канала х1 у вас будет по одной дифпаре TX и RX, а каналу х16 их потребуется уже по 16. Как вы наверняка понимаете, RX на одном конце подключается к TX на другом и наоборот — всё как в UART, только более изощрённо. Конечно, если вы собираете расширитель PCIe или переходник между разъёмами, то такое перекрещивание делать не нужно. Если же вы проектируете плату для одного из стандартов расширения с поддержкой PCIe, то обычно маркировка соответствует стороне хоста. Предположим, что вы добавляете микросхему Ethernet-контроллера PCIe на плату, которая устанавливается в десктопный разъём PCIe — подключите TX и RX платы к RX и TX вашей микросхемы Ethernet соответственно.
Перекрещивание TX и RX не сработает — проверено на собственном горьком опыте
Если есть отчётливый признак того, что это правило было нарушено, не беспокойтесь — просто проведите сравнение с имеющимся хостом или устройством и попробуйте определить, соответствует маркировка линий ожидаемой или же действительно была перевёрнута. Опять же, всё как в UART. Тем не менее на обоих линиях TX и RX также последовательно установлены конденсаторы связи по переменному току. Говоря конкретнее, в случае карт расширения PCIe, будь то M.2 или десктопные PCIe, по соглашению на плате устройства они размещаются на линиях TX (RX хоста), а на плате хоста — на стороне TX (RX устройства). Одно только это является приятным отличием от UART, когда речь идёт о проектировании и реверс-инжиниринге.
Третий вид дифпар, который присутствует всегда — это REFCLK — дифпара тактового генератора 100 МГц. Это быстрый генератор, и я не уверена, каково его полное назначение. Тем не менее он, по-видимому, участвует в декодировании передаваемых по TX и RX данных, в частности, в восстановлении тактовой частоты — оставаясь жизненно важным, несмотря на значительно более низкую скорость в сравнении с гигабитной пропускной способностью дифпар RX и TX. В отличие от RX и TX, полярность REFCLK поменять местами на своё усмотрение не получится. С другой стороны, не возникнет особых проблем, если провести REFCLK через серию отверстий в случае, если вам потребуется этот сигнал перевернуть — его частота всего 100 МГц. Главное, не забывайте относиться к дифпарам с уважением, и всё будет в порядке.
REFCLK необходим, хотя теоретически есть случаи, в которых его можно опустить. Для этого потребуется, чтобы оба конца канала PCIe поддерживали его восстановление из данных, передаваемых через дифпары RX и TX, либо генерировали свой собственный сигнал REFCLK. Звучит реалистично, но лишённые REFCLK реализации PCIe в жизни встретить вряд ли удастся. Даже SD-Express, новый стандарт, который переносит возможности PCIe на SD-карты для значительного повышения их скорости, не пошёл по этому пути. Единственная доступная для потребителей реализация без REFCLK — это SATA-Express, стандарт, который был замещён M.2 практически сразу после того, как материнские платы с портами SATA-Express попали на витрины магазинов. Так что на данный момент, если вы хотите, чтобы ваш канал PCIe работал, REFCLK вам определённо нужен.
Линия Connector представляет коннектор с поддержкой PCIe — если у вас есть такой в проекте
Скажу ещё немного про конденсаторы. Для работы канала они потребуются вам и на линиях TX, и на линиях RX. Ёмкость должна быть от 75 нФ до 265 нФ, в зависимости от поколения PCIe: в качестве хорошего универсального выбора подойдёт 200 нФ, а вот 100 нФ сгодится лишь в крайних случаях. Также рекомендую выбирать корпуса 0402 или 0201. На этом, собственно, всё.
REFCLK обычно не нуждается в конденсаторах, но они не повредят, и в определённых устройствах могут оказаться необходимы. Кроме того, здесь есть повод задуматься — известен как минимум один задокументированный случай дешёвых массово производимых SSD от Western Digital, в которых, по всей видимости, отсутствовали конденсаторы на стороне TX. Эти накопители не инициализировались кастомными платами хостов с PCIe до тех пор, пока на стороне материнской платы не добавляли дополнительные конденсаторы. Это определённо не относится к типичным решениям — просто особенность, которую один производитель имел наглость реализовать.
▍ Обязательные сигналы
Далее, есть ещё три однонаправленных управляющих сигнала — CLKREQ, PEWAKE и PERST. CLKREQ используется для экономии энергии — устройство обычно устанавливает его на низкий уровень для начала получения REFCLK и может отключать (устанавливая на высокий уровень), сигнализируя хосту, что можно перестать обеспечивать REFCLK с целью экономии энергии. Сигнал CLKREQ является специфичным — он присутствует в мобильных устройствах, но не в десктопных, где изначально в гнёздах PCIe даже не имелось выделенного для него пина. В результате майнерские райзеры для видеокарт с кабелем USB3 не проводят CLKREQ — только PEWAKE и PERST. Если у вашего хоста вывод CLKREQ есть, а у устройства отсутствует, заземлите его. Если же, наоборот, в устройстве он есть, а на хосте нет, то просто проигнорируйте его. В противном случае соедините эти линии.
Схемы материнских плат для ноутбуков и настольных ПК представляют собой отличные справочники по схематике PCIe. Однако в некоторых случаях это может оказаться нарушением авторских прав, и я бы не советовала использовать их в таком качестве.
Что ж, если ищущих простых путей майнеров волнует передача сигналов PEWAKE и PERST, значит, эти сигналы важны, не так ли? Давайте разберёмся. PERST — это вывод сброса канала PCIe, и хост удерживает его на нижнем уровне, пока все тактовые генераторы (включая REFCLK) и шины питания стабильны, а также выполняются прочие требования, позволяющие хосту начать взаимодействие по PCIe. Помимо этого, он используется для управления режимом пониженного питания.
PEWAKE, как и CLKREQ, служит для управления питанием и, по-видимому, тоже необходим — при этом он контролируется на стороне устройства. Я затрудняюсь сказать, как можно опустить эти два сигнала, поэтому просто рекомендую оставлять их оба подключёнными, если только они не оказываются недоступны на одной из сторон.
Ещё в гнёздах настольных ПК также есть сигналы PRSNT — в зависимости от ширины канала вам нужно замкнуть PRSNT#1 с одним из сигналов PRSNT#2. Не то, чтобы это необходимо — PCIe и так вполне способен корректно обнаруживать ширину канала. Тем не менее десктопные материнские платы зачастую в этом нуждаются. Похоже, что эти сигналы используются для горячего подключения — такая возможность технически присуща PCIe и будет работать даже при использовании систем вроде Linux. Windows же может отказываться обрабатывать горячее подключение по PCIe без дополнительных плясок с бубном.
В гнёздах десктопных и мобильных устройств вроде mPCIe или M.2 присутствуют сигналы I2C. Однако к материнской плате они подключаются редко — если же такое происходит, то лишь по прихоти производителя или ради предоставления таких возможностей, как VPro. На серверных платах они подключены, что вызывает забавные явления, например, отказ серверных SAS-контроллеров работать на определённых десктопных платах, где I2C подключены к гнёздам десктопного размера.
Если вы монтируете гнездо PCIe на стороне хоста, то вам не обязательно подключать I2C. Если же вы устанавливаете устройство, то не ожидайте, что линии I2C обязательно будут в гнезде подключены. То же касается сигналов JTAG — они используются для отладки или в серверных средах, и лучше оставлять их неподключенными, если только вы не уверены, что по предполагаемому месту применения их реализация обеспечит определённые преимущества.
Мобильные устройства с PCIe обычно работают от 3,3 В, в то время как десктопные могут питаться от 3,3 В или 12 В, в зависимости от своей мощности. В результате если вы добавляете гнездо PCIe десктопного размера, и у вас под рукой нет 12 В, некоторые десктопные карты могут не работать. Предполагается, что гнёзда х1 обеспечивают меньшую мощность при 12 В, чем гнёзда большего размера, и производители десктопных материнских плат зачастую этим пользуются. Так что, если вы проектируете карту под х1, не ожидайте, что это гнездо обеспечит полноценные 75 Вт (66 Вт при 12 В). Плюс же здесь в том, что при разработке материнской платы с гнездом х1 вам не обязательно обеспечивать полноценные 75 Вт.
▍ Различия в ширине канала
На стороне хоста и на стороне устройства могут использоваться каналы разной ширины — х1, х2, х4 и х16, где число указывает количество задействованных дифпар. Ввиду технических особенностей функционирования каналов PCIe на нижнем уровне ширина должна быть кратна 2. Так что не ждите, что канал х3 будет полноценно работать, если вы как-то проведёте от хоста к устройству три линии — он понизится до х2. PCIe довольно гибок в отношении ширины канала — хост и устройство будут взаимодействовать на доступной обоим максимальной скорости.
К примеру, если на хосте используется канал х4, а на устройстве — х16, будет использована ширина х4 с четырьмя дифпарами — и не важно, что на другой стороне останется 12 неиспользуемых. Хотя здесь есть очень редкие исключения, а именно некоторые карты для серверов. Тем не менее даже в этом случае речь идёт о том, что «карта х8 не будет работать при подключении к х4», хотя канал х1 продолжит функционировать в качестве резервного варианта.
Это гнездо разработано с возможностью расширения, то есть от него можно ожидать поддержку бюджета питания для карт х16. Фото Hans Haase, CC BY SA 4.0
И это добавляет гибкости — если на одной из сторон нет достаточного числа линий для соответствия второй, всегда можно ожидать функционирование как минимум в режиме х1. К примеру, вы можете установить видеокарту х16 в десктопное гнездо х1, надрезав это гнездо и, возможно, замкнув контакты PRSNT. Только убедитесь, что ваша видеокарта не требует больше питания, чем может обеспечить гнездо х1, как вполне может оказаться, если вы подключаете дополнительную видеокарту в подрезанный слот х1 напрямую.
Что касается гнёзд и карт PCIe, то вы будете встречать физическую ширину каналов х1, х4 и х16. При этом гнёзда и карты х8 чаще используются в серверах. Существуют некоторые бюджетные видеокарты, которые по факту имеют ширину канала х8, но используют гнёзда х16. То же касается карт х2 — они устанавливаются в гнёзда х4. Очень редко можно встретить карты или гнёзда, физически имеющие ширину канала х2 или х8.
При реализации многолинейного канала необходимо убедиться в том, что вы подключаете линию 0 к линии 0, линию 1 к линии 1 и так далее. Несомненно, можно переиграть сочетание линий, если это поможет в проектировании схемы — скажем, в случае канала х4 можно подключить линию 0 к линии 3, 1 к 2 и так далее. Но тут уже неизвестно, насколько широко такое решение поддерживается — оно, скорее, опционально и где-то наверняка работать не будет.
▍ Будет работать по любому
Аналогично Ethernet, быстродействие PCIe с каждым поколением возрастало за счёт постепенного увеличения скорости передачи данных, улучшения кодирования и прочих доработок. Здесь та же история, что и с шириной каналов — существует прекрасная прямая и обратная совместимость. Устройство Gen1 будет работать в гнезде Gen5, а устройство Gen5 — в гнезде Gen1, опять же, на доступной обоим сторонам максимальной скорости. Естественно, канал может отклоняться от ожидаемых показателей — если вы подключите контроллер USB3 в гнездо PCIe х1 на старой материнской плате, пропускная способность порта USB3 упадёт (то же касается подключения видеокарт через канал х1). Однако это также говорит о том, что обычно вам не стоит беспокоиться о поколении PCIe, если только вас не интересует достижение конкретной скорости.
К счастью, если у вас есть более углублённые вопросы по теме PCIe, то в сети полно соответствующей информации, и можно без проблем найти спецификации даже для последнего поколения PCIe 5.0. Этот материал может оказаться сложнее в сравнении с текущей статьёй, но при погружении в тему он определённо поможет. В следующий раз мы дорисуем вашу ментальную карту стандарта PCIe, чтобы вы без проблем могли найти нужный подход при его реализации и расширении возможностей.
Telegram-канал с розыгрышами призов, новостями IT и постами о ретроиграх