I3C для DDR5: что осталось за кадром?

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

Архитектура и топология управляющей шины

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

Топология управляющей шины на основе интерфейса I3C

Рис 1. Топология управляющей шины на основе интерфейса I3C

Анализируя иерархию уп­рав­ля­ю­щей шины, нетрудно выделить три типа устройств: Host Controller, Hub и Device.

Host Controller расположен на ма­те­рин­ской плате и находится в составе системной логики. Контроллер ини­ци­и­ру­ет транз­­а­к­ции на ши­не SMBus. Его программная модель содержит регистры управления и состояния, ад­ре­су­е­мые цен­т­раль­ным про­цес­со­ром. Как правило, поддерживается механизм аппаратных прерываний, об­нов­лен­ный при переходе от интерфейса I2C к I3C. Это связано с появлением функциональности In-Band Interrupts, позволяющей устройствам сообщать об асинхронных событиях без привлечения внешних сиг­на­лов.

Как уже было сказано в статье «Модули DDR5 требуют новой управляющей шины: на смену I2C приходит I3C (Sense­Wire)», кон­т­рол­лер, по­я­вив­ший­ся более 20 лет назад в составе Intel PIIX4, аппаратно реализует про­то­кол SMBus. Его ар­хи­тек­ту­ра легла в основу многих последующих решений. Контроллер в составе VIA VT82C586B обес­пе­чи­ва­ет фор­ми­ро­ва­ние сиг­на­лов Clock и Data с применением программно-управляемых ли­ний GPIO1, GPIO2. В по­сле­ду­ю­щих чип­се­тах VIA так­же реализовала аппаратный контроллер SMBus, набор ре­гист­ров которого совместим с Intel PIIX4.

SoC-дизайн с интеграцией функциональности в процессор коснулся и управляющей шины. К примеру, Intel Xeon вклю­ча­ет под­сис­те­му SMBus, что достаточно актуально для муль­ти­со­кет­ных платформ, количество DIMM в ко­то­рых мо­жет пре­вы­шать 8. А в случаях, когда оно превышает 8 в пересчете на каждый контроллер SMBus, потребуются осо­бые ме­ры, которые рассмотрим ниже. Мы намеренно избегаем формулировки «8 в пе­ре­сче­те на каждый сокет», по­сколь­ку про­цес­сор мо­жет содержать более одного хост-контроллера.

Для со­вре­мен­ных платформ характерно применение встроенных мик­ро­кон­т­рол­ле­ров. Отличием таких под­сис­тем от CPU яв­ля­ет­ся сохранение функциональности в «дежурном» режиме блока питания, что рас­ши­ря­ет воз­мож­но­с­ти уда­лен­но­го мо­ни­то­рин­га и управления платформой. Таким образом, требуются дополнительные аппаратные ресурсы, по­зво­ля­ю­щие ав­то­ном­но­му мик­ро­кон­т­рол­ле­ру ини­ци­и­ро­вать транзакции на уп­рав­ля­ю­щей шине и под­дер­жи­ва­ю­щие ее фун­к­ци­о­ни­ро­ва­ние в ре­жи­ме «дежурного» питания.

Конфликты и решения

Если системная логика и встроенные управляющие процессоры оборудованы собственными хост-кон­т­рол­ле­ра­ми SMBus, мо­жет иметь место ситуация, при которой два и более хост-контроллера претендуют на доступ к одному сег­мен­ту уп­рав­ля­ю­щей ши­ны. Один из вариантов решения — установка мультиплексора 2:1 Renesas IMX3102.

Другой тип конфликта — наличие на шине устройств с совпадающими адресами, что может иметь место при ис­поль­зо­ва­нии бо­лее 8 модулей DIMM в пересчете на один хост-контроллер. Решение — мультиплексор (точ­нее, де­муль­ти­плек­сор) 1:2 Renesas IMX3112.

Оба коммутатора от Renesas оборудованы дополнительным датчиком температуры. Чтобы воспользоваться столь по­лез­ным бонусом, располагать эти чипы желательно в точках, актуальных для мониторинга, если это не про­ти­во­ре­чит бо­лее важ­ным критериям проектирования.

Программная модель

Таблица ниже иллюстрирует адресацию устройств в пределах одного сегмента управляющей шины, со­дер­жа­ще­го 8 мо­ду­лей DIMM0-DIMM7. Как было уже сказано, для адресации более 8 модулей, платформа может ис­поль­зо­вать не­сколь­ко хост-контроллеров, разветвленные топологии с одним хост контроллером, либо ком­би­ни­ро­вать оба под­хо­да.

Набор адресуемых ресурсов одного сегмента управляющей шины, содержащего 8 модулей DIMM0-DIMM7

Рис 2. Набор адресуемых ресурсов одного сегмента управляющей шины,
содержащего 8 модулей DIMM0-DIMM7
(в качестве примера показана обработка транзакции с адресом 1011000b)

Вертикальное перемещение в таблице соответствует выбору одного из модулей DIMM, горизонтальное со­от­вет­ст­ву­ет вы­бо­ру од­но­го из локальных устройств в каждом модуле. Как видно из таблицы, в результате ска­ни­ро­ва­ния SMBus про­г­рам­мное обес­пе­че­ние «увидит» регистровые блоки SPD Hub, а также блоки сле­ду­ю­щих устройств, под­клю­чен­ных к его ло­каль­ной шине на каждом модуле DIMM.

  1. RCD (Registering Clock Driver), формирователь тактовых сигналов
  2. TS0, TS1 (Thermal Sensors), датчики температуры
  3. PMIC0, PMIC1, PMIC2 (Power Management IC), регуляторы напряжений:
  • Чип PM8900 допускает входные напряжения от 4.25V до 15.0V
  • Чип PM8911 допускает входные напряжения от 4.25V до 5.5V

Разберем содержимое таблицы детальнее. Желтые строки содержат числа, соответствующие адресам уст­ройств на уп­рав­ля­ю­щей шине. При этом левая вертикальная колонка Hub SPD содержит адреса микросхем SPD Hub, со­от­вет­ст­ву­ю­щие модулям DIMM0-DIMM7, — это числа 50h-57h.

Как видно из таблицы, адреса внутренних устройств каждого из модулей, подключенных к локальной шине SPD Hub (RCD, PMIC, TS), в отличие от адресов SPD Hub не зависят от номера модуля. Каждое из этих уст­ройств име­ет фик­си­ро­ван­ный адрес в пределах локальной шины модуля (5Fh, 4Fh, 47h, 67h, 17h, 37h), уни­каль­ность их ад­ре­сов на хост-ши­не достигается за счет обработки адреса транзакции в микросхемах SPD Hub:

  • Строка Host Sends отображает адрес, сгенерированный хост-контроллером при выполнении транзакции;
    в данном примере — это 58h (этот адрес в неизменном виде поступает на все модули).
  • Строка Hub Sends отображает адрес, выданный микросхемой SPD Hub на локальную шину, он различен для каждого из модулей; в данном случае, например, для DIMM0 — это 5Fh.

Поскольку адреса одноименных внутренних адресуемых устройств каждого из модулей одинаковы, мик­ро­схе­ма SPD Hub для до­сти­же­ния уникальности должна выполнить следующую трансляцию: три младших бита ад­ре­са транз­ак­ции под­вер­га­ют­ся опе­ра­ции XOR с маской, формируемой как инверсное значение трех млад­ших битов адреса SPD Hub. Для DIMM0 — это 000b, инверсное значение 111b = 7h.

58h XOR 07h = 5Fh

Для модулей DIMM1-DIMM7, результат операции XOR будет иным, поскольку отличается адрес модуля. Как вид­но из та­бли­цы, это числа 5Eh,5D,5Ch,5Bh,5Ah,59h,58h.

В данном примере хост-контроллер сформировал адрес 58h, при этом адрес, совпадающий с адресом внут­рен­не­го ре­сур­са (5Fh), бу­дет сформирован в модуле DIMM0. В этом примере адресуется устройство RCD мо­ду­ля DIMM0.

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

Очевидно, в нормативном документе JEDEC рассмотрен «правильный» модуль. Датчиков температуры в нем мо­жет быть це­лых три: один в составе SPD5 Hub SPD5118 плюс два внешних TS0, TS1. Логично ожидать, что по­доб­ная таб­ли­ца, по­ст­ро­ен­ная по ре­зуль­та­там сканирования noname модулей, будет содержать немало про­­бе­­лов.

Схемотехника

На иллюстрации ниже пунктирной линией показана граница между ресурсами системной платы (Motherboard) и мо­ду­ля па­мя­ти (Memory Module).

Блок-схема управляющей шины модуля DDR5

Блок-схема управляющей шины модуля DDR5
(пример для Legacy-конфигурации для обслуживания нестандартного устройства)

Напряжение основного источника питания (Bulk Vin) в этом варианте составляет 12 вольт. Такое решение по­вы­ша­ет КПД при пе­ре­да­че мощности, с другой стороны, возможные деструктивные последствия при слу­чай­ном за­мы­ка­нии вслед­ст­вие де­фор­ма­ции контактов или попадания постороннего металлического предмета бу­дут весь­ма су­щест­вен­ны.

Линия +3.3V обеспечивает дополнительное питание. Она может быть использована для поддержания ра­бо­то­спо­соб­нос­ти уп­рав­ля­ю­щей ши­ны в «дежурном» режиме под управлением автономных микроконтроллеров плат­фор­мы, ко­гда та­кие ре­сур­сы, как CPU и микросхемы памяти DDR5, обесточены.

На системной плате расположен хост-контроллер SMBus, ответственный за формирование сигналов HSCL, HSDA и ре­зис­тор, под­клю­чен­ный к линии HSA, обеспечивающий аналоговое задание адреса модуля (под­роб­нее об этом в ма­те­ри­а­ле «Модули DDR5 требуют новой управляющей шины: на смену I2C приходит I3C (Sense­Wire)», ссыл­ка на ко­то­рый есть в начале данной статьи). За интерфейс модуля и системной платы от­вет­ст­ве­нен SPD5 Hub.

Регулятор PMIC формирует набор напряжений, необходимых для функционирования устройств, под­клю­чен­ных к уп­рав­ля­ю­щей ши­не, включая (в этом примере) опциональное нестандартное устройство. До­пол­ни­тель­ны­ми ло­каль­ны­ми уст­рой­ст­ва­ми мо­гут быть датчики температуры (TS) и формирователь тактовых сигналов (RCD).

На схеме не показана линия питания микросхем DDR5, составляющих запоминающую матрицу. Для этой вы­со­ко­на­гру­жен­ной це­пи PMIC использует импульсный преобразователь с высоким КПД. Для питания чипов, обес­пе­чи­ва­ю­щих фун­к­ци­о­ни­ро­ва­ние уп­рав­ля­ю­щей шины, в силу небольшой нагрузки, применяются ана­ло­го­вые ре­гу­ля­то­ры.