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

Рис 1. Топология управляющей шины на основе интерфейса I3C
Анализируя иерархию управляющей шины, нетрудно выделить три типа устройств: Host Controller, Hub и Device.
Host Controller расположен на материнской плате и находится в составе системной логики. Контроллер инициирует транзакции на шине SMBus. Его программная модель содержит регистры управления и состояния, адресуемые центральным процессором. Как правило, поддерживается механизм аппаратных прерываний, обновленный при переходе от интерфейса I2C к I3C. Это связано с появлением функциональности In-Band Interrupts, позволяющей устройствам сообщать об асинхронных событиях без привлечения внешних сигналов.
Как уже было сказано в статье «Модули DDR5 требуют новой управляющей шины: на смену I2C приходит I3C (SenseWire)», контроллер, появившийся более 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 модулей, платформа может использовать несколько хост-контроллеров, разветвленные топологии с одним хост контроллером, либо комбинировать оба подхода.

Рис 2. Набор адресуемых ресурсов одного сегмента управляющей шины,
содержащего 8 модулей DIMM0-DIMM7
(в качестве примера показана обработка транзакции с адресом 1011000b)
Вертикальное перемещение в таблице соответствует выбору одного из модулей DIMM, горизонтальное соответствует выбору одного из локальных устройств в каждом модуле. Как видно из таблицы, в результате сканирования SMBus программное обеспечение «увидит» регистровые блоки SPD Hub, а также блоки следующих устройств, подключенных к его локальной шине на каждом модуле DIMM.
- RCD (Registering Clock Driver), формирователь тактовых сигналов
- TS0, TS1 (Thermal Sensors), датчики температуры
- 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
(пример для Legacy-конфигурации для обслуживания нестандартного устройства)
Напряжение основного источника питания (Bulk Vin) в этом варианте составляет 12 вольт. Такое решение повышает КПД при передаче мощности, с другой стороны, возможные деструктивные последствия при случайном замыкании вследствие деформации контактов или попадания постороннего металлического предмета будут весьма существенны.
Линия +3.3V обеспечивает дополнительное питание. Она может быть использована для поддержания работоспособности управляющей шины в «дежурном» режиме под управлением автономных микроконтроллеров платформы, когда такие ресурсы, как CPU и микросхемы памяти DDR5, обесточены.
На системной плате расположен хост-контроллер SMBus, ответственный за формирование сигналов HSCL, HSDA и резистор, подключенный к линии HSA, обеспечивающий аналоговое задание адреса модуля (подробнее об этом в материале «Модули DDR5 требуют новой управляющей шины: на смену I2C приходит I3C (SenseWire)», ссылка на который есть в начале данной статьи). За интерфейс модуля и системной платы ответственен SPD5 Hub.
Регулятор PMIC формирует набор напряжений, необходимых для функционирования устройств, подключенных к управляющей шине, включая (в этом примере) опциональное нестандартное устройство. Дополнительными локальными устройствами могут быть датчики температуры (TS) и формирователь тактовых сигналов (RCD).
На схеме не показана линия питания микросхем DDR5, составляющих запоминающую матрицу. Для этой высоконагруженной цепи PMIC использует импульсный преобразователь с высоким КПД. Для питания чипов, обеспечивающих функционирование управляющей шины, в силу небольшой нагрузки, применяются аналоговые регуляторы.