|
Bog BOS: hardware: RapidIO
|
Последнее изменение файла: 2010.02.05
Скопировано с www.bog.pp.ru: 2024.11.23
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.
При обнаружении нового коммутатора процесс повторяется для каждого его активного порта.
- RapidIO. The Embedded System Interconnect. Sam Fuller (ed). 2005. John Wiley & Sons Ltd
- RapidIO for Linux. Proceedings of the Linux Symposium. 2005 (введение подсистемы RapidIO в ядро и реализация сетевого драйвера)
- описание использования RapidIO в ядре Linux
|
Bog BOS: hardware: RapidIO
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru