Последнее изменение файла: 2010.02.05
Скопировано с www.bog.pp.ru: 2022.03.18
Bog BOS: hardware: RapidIO
Открытый стандарт RapidIO предложен Motorola и Mercury Computer Systems,
(в дальнейшем развитием занималась RapidIO Trade Association, RTA)
в качестве внутриплатного коммутируемого межсоединения
для встроенных систем на замену шине VME.
Параллельный вариант RapidIO обеспечивает
минимальные задержки передачи (100 ns на узел, на одном уровне с HyperTransport, быстрее PCI Express и InfiniBand).
Последовательный RapidIO позволяет соединять платы и системы.
Задержки больше, чем у PRIO на 20% (на уровне PCI Express?).
Особенности:
объединение равноправных устройств (peer-to-peer), возможность нескольких управляющих хостов,
произвольная топология, исследование сети и настройка узлов
коммутация пакетов
физические каналы один-к-одному (узлы соединяются через сеть коммутаторов)
коммутаторы не интерпретируют пакеты, что позволяет расширять архитектуру
поддерживается до 256 (адрес - 8 бит) или 64K устройств (адрес - 16 бит), комутатор может не иметь адреса,
при обследовании сети (discovery) адрес игнорируется
протокол вида запрос-ответ (инициатор выдаёт пакет запроса и получает подтверждение от соседнего узла,
пакет доходит до получателя с подтверждением на каждом шаге (транзакция запроса);
исполнитель выдаёт пакет с результатом и получает подтверждение от соседнего узла
пакет доходит до получателя с подтверждением на каждом шаге (транзакция ответа))
модель ввода/вывода: обращение к адресному пространству устройства (memory mapped)
размер адресного пространства - 34, 50 или 66 бит - согласуется при инициализации устройства
и не указывается в пакете!
регистры возможностей (CAR) и состояния (CSR) образуют отдельное адресное пространство (своё для каждого устройства)
для подтверждения, управления потоком и обслуживания используются
управляющие символы: подтверждение, пауза, сброс устройства (флажок в заголовке пакета)
горячее подключение узлов и генерация маршрутов
средства обнаружения ошибок и восстановления на аппаратном (кодировка, подтверждение, watchdog) и программном уровне
может быть использован как прозрачный (с точки зрения программиста) мост к сегментам PCI/PCI-X
(при использовании ввода/вывода в модели отображения памяти)
не требует отдельной микросхемы PHY
Основные участники и реализации: Motorolla (Freescale Semiconducter) (SoC MPC8540, MPC8560),
Applied Micro Circuits, EMC, Tundra Semiconductor (коммутатор Tsi500), Xilinx.
логический уровень (протокол передачи транзакций, формат пакета,
управление потоком от отправителя до получателя)
транспортный уровень (маршруты)
физический уровень (электрические характеристики, обработка ошибок (повторение),
управление потоком между соседними узлами (повторение, удушение (throttle, управляющий символ "idle"), кредиты))
параллельное соединение: ширина 8 (40 проводников) или 16 бит (76 проводников),
LP-LVDS (IEEE 1596.3, терминатор в приёмнике, опциональный терминатор в источнике,
100 Ом, 2 проводника на бит), частота - от 250 MHz до 1 GHz (DDR),
2 независимых однонаправленных канала (до 4GBps в каждую сторону),
дополнительные сигналы для каждого канала - синхронизация по источнику (2 штуки для 16 битного варианта) и начало пакета
последовательное соединение: Differential Current Mode Logic
(CML, differential current steering driver, 802.3 XAUI), 1.0V,
2 независимых однонаправленных канала,
частота - 1.25 GHz, 2.5 GHz или 3.15 GHz,
различная физическая реализация для коротких (внутри платы и к мезанинным платам) и длинных линий (между платами),
можно группировать каналы по 4 (4x),
подуровень физического кодирования (Physical Coding Sublayer, PCS, кодирование 8B/10B, генерация "idle",
сборка/разборка групп каналов и выравнивание),
подуровень физического присоединения (Physical Media Attachment, PMA, сериализация, выравнивание 10-битных групп),
границы пакетов и управляющие сиволы кодируются резервными 10-битовыми комбинациями
Данные и поля протоколов всех 3 уровней пакуются в один пакет вперемешку
(накладные расходы - от 14 до 28 байт, включая все поля, подтверждения, ответы и пр.):
логический уровень: Ftype (формат пакета, 4 бита), транзакция (тип транзакции, 4 бита),
размер полезных данных или статус (4 бита, размер данных для транзакции RESPONSE и SWRITE надо определить самостоятельно!
как это может сделать коммутатор без буферизации?!),
идентификатор транзакции (8 бит, до 256 транзакций между конечными узлами одновременно),
смещение в памяти устройства для модели отображения памяти (32 бита, выравнивание до 8 байт, 2 дополнительных бита;
размер и смещение хитроумно пакуются на 25%),
полезные данные (от 8 до 256 байт, выравнивание до 8 байт)
транспортный уровень: механизм адресации устройств (TT, 2 бита), адрес отправителя, адрес получателя
физический уровень: флаг управляющего символа, AckId (3 бита,
до 15 транзакций могут идти одновременно между соседними узлами),
приоритет (2 бита), контрольная сумма (весь пакет, кроме первых 6 бит; CCITT16, 16 бит)
Операции ввода/вывода формируются из отдельных транзакций на программном уровне,
например, операции чтения состоит из транзакции NREAD и транзакции RESPONSE.
Подсистема RapidIO не отслеживает взаимосвязь между транзакцией запроса и транзакцией ответа на запрос,
этим должен заниматься инициатор по идентификатору транзакции.
Этот же идентификатор транзакции может быть использован для упорядочивания запросов на приёмном конце.
Типы транзакций:
ввод/вывод без обеспечения когерентности (отображение памяти, memory mapped, MMIO,
совместимость с PCI): NREAD (чтение из неразделяемой памяти),
NWRITE (запись в неразделяемую память без ожидания ответа, Ack всё же есть),
NWRITE_R (запись в неразделяемую память с ожиданием ответа),
SWRITE (потоковая запись без ожидания ответа, Ack всё же есть, заголовок сокращён до 10 байт),
ATOMIC (чтение-изменение-запись в неразделяемую память: test-and-swap, increment, decrement, set, clear)
RESPONSE (ответ на запрос)
передача сообщений: DOORBELL (генерация прерывания, 16 бит),
MESSAGE (запись в порт, mailbox, от 0 до 4096 байт, от 1 до 4 очередей)
системные функции: MAINTENANCE (чтение или запись конфигурации,
регистры управления (watchdog, сброс, выключение) и состояния)
функции пользователя (для локальных расширений)
распределённая разделяемая память с поддержкой когерентности: READ (чтение кеша), READ_TO_OWN (это запись в кеш!),
CASTOUT (передача владения), IKILL (сбросить кеш инструкций), DKILL (сбросить кеш данных),
FLUSH (записать кеш в память), IO_READ
поддержка ОС: TLBIE (сброс TLB), TLBSYNC (завершить сброс TLB)
Расширение для поддержки глобально распределённой
разделяемой памяти с поддержкой когерентности использует схему каталога когерентности:
каждый контроллер памяти должен помнить где лежит самая свежая версия данных в пределах домена когерентности.
В процессе исследования сети (discovery) устройства выдают информацию о своей конфигурации
невзирая на адрес устройства в команде. Коммутатор отвечает на команду исследования, если счётчик хопов
в команде равен нулю, иначе счётчик хопов уменьшается на 1 и команда пересылается дальше.
Обход сети производится в порядке "сначала вглубь". При обнаружении нового устройства ему присваивается
уникальный адрес, адрес записывается в соответствующий регистр устройства.
Дальнейшее открытие устройства другим хостом блокируется записью в регистр Host Device ID Lock Register.
При обнаружении нового коммутатора процесс повторяется для каждого его активного порта.