PersCom — Компьютерная Энциклопедия Компьютерная Энциклопедия

PCI и PCI-X

Шины PCI и PCI-X

Маршрутизация по «плоскому» адресу

Для манипулирования с транзакциями обращения к памяти и портам ввода-вывода мосту нужны карты адресов, на которых отмечены области, принадлежащие устройствам вторичной и подчиненных шин. В системе с плоской уникальной адресацией этого достаточно. Для отмеченных областей мост должен отвечать в качестве целевого устройства на транзакции, «увиденные» им на первичном интерфейсе, и инициировать их в роли мастера на вторичном интерфейсе; остальные транзакции на первичном интерфейсе он игнорирует. Для адресов вне этих областей мост должен вести себя «зеркально»: отвечать в качестве целевого устройства на транзакции, «увиденные» им на вторичном интерфейсе, и инициировать их на первичном интерфейсе; остальные транзакции на вторичном интерфейсе он игнорирует. Каким образом мост транслирует транзакции, описано далее.

Каждый мост PCI-PCI имеет по одному описателю на каждый из трех типов ресурсов: ввода-вывода, «настоящей» памяти (допускающей предвыборку) и памяти, на которую отображены регистры ввода-вывода. В описателе указывается базовый адрес и размер области. Ресурсы одного типа для всех устройств, находящихся за мостом (на вторичной и всех подчиненных шинах), должны быть собраны в одну, по возможности компактную, область.

Область адресов вводавывода задается 8-битными регистрами I/O Base и I/O Limit с гранулярностью 4 Кбайт. Эти регистры своими старшими битами определяют только 4 старших бит 16-разрядного адреса начала и конца транслируемой области. Младшие 12 бит для I/O Base подразумеваются 000h, для I/O Limit — FFFh. Если на вторичной стороне моста нет портов ввода-вывода, то в I/O Limit записывается число меньшее, чем в I/O Base. Если мост не поддерживает карту адресов ввода-вывода, то оба регистра при чтении всегда возвращают нули; такой мост транзакции ввода-вывода с первичной на вторичную сторону не транслирует. Если мост поддерживает только 16-битную адресацию ввода-вывода, то при чтении в младших 4 бит обоих регистров всегда возвращает нули. При этом подразумевается, что старшие биты адресов AD[31:16] = 0, но они также подлежат декодированию. Если мост поддерживает 32-битную адресацию ввода-вывода, то при чтении в младших четырех битах обоих регистров возвращается 0001. При этом старшие 16 бит нижней и верхней границ находятся в регистрах I/O Base Upper 16 Bits и I/O Limit Upper 16 Bits.

Мост транслирует транзакции ввода-вывода указанной области с первичного интерфейса на вторичный только при установленном бите I/O Space Enable в регистре команд. Транзакции ввода-вывода со вторичного интерфейса на первичный транслируются только при установленном бите Bus Master Enable.

Вводвывод, отображенный на память, может использовать адреса в пределах первых 4 Гбайт (предел 32-битной адресации) с гранулярностью 1 Мбайт. Транслируемая область задается регистрами Memory Base (начальный адрес) и Memory Limit (конечный адрес), в которых задаются только старшие 12 бит адреса AD[31:20], младшие биты AD[19:0] подразумеваются равными 0 и FFFFFh соответственно. Кроме того, транслироваться может и область памяти VGA .

«Настоящая» память устройств PCI, допускающая предвыборку, может располагаться как в пределах 32-битной адресации (4 Гбайт), так и 64-битной, с гранулярностью 1 Мбайт. Транслируемая область задается регистрами Prefetchable Memory Base (начальный адрес) и Prefetchable Memory Limit (конечный адрес). Если в младших битах [3:0] этих регистров чтение возвращает 0001, то это признак поддержки 64-битной адресации. В этом случае старшая часть адресов находится в регистрах Prefetchable Base Upper 32 Bits и Prefetchable Limit Upper 32 Bits. Мост может и не иметь специальной поддержки предвыбираемой памяти, тогда вышеуказанные регистры будут при чтении возвращать нули.

Мост транслирует транзакции памяти указанных областей с первичного интерфейса на вторичный только при установленном бите Memory Space Enable в регистре команд. Транзакции памяти со вторичного интерфейса на первичный транcлируются только при установленном бите Bus Master Enable.

С мостами связаны понятия позитивного и субтрактивного декодирования адресов. Рядовые агенты PCI (устройства и мосты) отзываются только на обращения по адресам, принадлежащим областям, описанным в их конфигурационном пространстве (через базовые адреса и диапазоны памяти или ввода-вывода). Такой способ декодирования называется позитивным. Мост с позитивным декодированием (positive decoding) пропускает через себя только обращения, принадлежащие определенному списку адресов, заданному в его конфигурационных регистрах. Мост с субтрактивным декодированием (subtractive decoding) пропускает через себя обращения, не относящиеся к другим устройствам. Его области прозрачности формируются как бы вычитанием (откуда и название) из общего пространства областей, описанных в конфигурационных пространствах других устройств. Физически субтрактивное декодирование устройством (мостом) выполняется проще: устройство отслеживает на шине все транзакции интересующего его типа (обычно обращения к портам или памяти), и если не видит на них ответа (сигнала DEVSEL# в тактах 1–3 после FRAME#) ни от одного из обычных устройств, считает эту транзакцию «своей» и само вводит DEVSEL#. Возможность субтрактивного декодирования имеется только у мостов определенного типа, и она является дополнением к позитивному декодированию. Субтрактивное декодирование приходится применять для старых устройств (ISA, EISA), чьи адреса разбросаны по пространству так, что их не собрать в область позитивного декодирования приемлемого размера. Субтрактивное декодирование применяется для мостов, подключающих старые шины расширения (ISA, EISA). Позитивное и субтрактивное декодирование относится только к обращениям, направленным в пространства памяти и ввода-вывода. Конфигурационные обращения маршрутизируются с помощью номера шины, передаваемого в циклах типа 1 (см. главу 2): каждый мост «знает» номера всех шин, его окружающих. На поддержку субтрактивного декодирования может указывать только специфический код класса 060401h, обнаруженный в заголовке конфигурационных регистров данного моста.



Специальные регистры устройств PCI-X

Устройства PCI-X имеют дополнительные регистры (см. рисунок ниже), положение которых определяется через список свойств (Capability ID = 07). Регистры для ECC-контроля появились только в версии PCI-X 2.0. 

Регистр PCI-X Command служит для управления новыми свойствами протокола PCI-X:

  • бит 0 (RW) — Uncorrectable Data Error Recovery Enable, разрешение попытки восстановления после обнаружения неисправимой ошибки. Если бит не установлен, по обнаружении ошибки четности будет формироваться сигнал SERR#;
  • бит 1 (RW) — Enable Relaxed Ordering, разрешение установки признака RO в атрибутах транзакции;
  • биты [3:2] (RW) — Maximum Memory Read Byte Count, предел для счетчика байтов в транзакциях чтения памяти: 0 — 512 байт, 1 — 1024, 2 — 2048, 3 — 4096;
  • биты [6:4] (RW) — Maximum Outstanding Split Transactions, предельное число незавершенных расщепленных транзакций: 0…7 — 1, 2, 3, 4, 8, 12, 16, 32 транзакции соответственно;
  • биты [11:7] — резерв;
  • биты [13:12] (RO) — версия возможностей PCI-X (поддержка ECC):
    ---00 — ECC не поддерживается;
    ---01 — ECC только в Mode 2;
    ---10 — ECC в Mode 1 и Mode 2.
  • биты [15:14] — резерв.

Регистр PCI-X Status содержит идентификатор функции — ее адрес в иерархии конфигурационного пространства, который устройство «подсматривает» на шине, при выполнении операции конфигурационной записи. Этот идентификатор требуется устройству для передачи его в фазе атрибутов. Кроме того, в регистре имеются признаки возможностей устройства, а также индикаторы ошибок, связанных с расщепленными транзакциями. Назначение битов регистра PCI-X Status:

  • биты [2:0] (RO) — Function Number, номер функции;
  • биты [7:3] (RO) — Device Number, номер устройства, который оно узнает по значению AD[15:11] в фазе адреса конфигурационной записи, обращенной к данному устройству, выбранному линией IDSEL (после сброса устанавливается 1F);
  • биты [15:8] (RO) — Bus Number, номер шины, который оно узнает по значению AD[7:0] в фазе атрибутов конфигурационной записи, обращенной к данному устройству (после сброса устанавливается FF);
  • бит 16 (RO) — 64-bit Device, признак 64-битной шины AD;
  • бит 17 (RO) — 133 MHz Capable, признак поддержки частоты 133 МГц (иначе 66 МГц);
  • бит 18 (RWC) — Split Completion Discarded, признак отброшенного завершения расщепленной транзакции (запросчик его отверг);
  • бит 19 (RWC) — Unexpected Split Completion, признак неожиданного получения завершения расщепленной транзакции;
  • бит 20 (RO) — Device Complexity, признак сложного устройства (моста);
  • биты [22:21] (RO) — Designed Maximum Memory Read Byte Count, максимальное число байт в последовательности, инициируемой устройством (его возможности): 0 — 512 байт, 1 — 1024, 2 — 2048, 3 — 4096;
  • биты [25:23] (RO) — Designed Maximum Outstanding Split Transactions, предельное число незавершенных расщепленных транзакций: 0…7 — 1, 2, 3, 4, 8, 12, 16, 32 транзакции;
  • биты [28:26] (RO) — Designed Maximum Cumulative Read Size, максимальный суммарный объем данных чтения памяти, ожидаемых устройством (запросы отправлены, ответы еще не получены): 0…7 — 8, 16, 32…1024 квантов ADQ;
  • бит 29 (RWC) — Received Split Completion Error Message, признак получения сообщения об ошибке завершения расщепленной транзакции;
  • бит 30 (RO) — PCI-X 266 Capable, поддержка режима PCI-X 266 (Mode 2);
  • бит 31 (RO) — PCI-X 533 Capable, поддержка режима PCIX 533 (Mode 2).

Регистры ECC-контроля служат для управления контролем и диагностики. Регистр ECC Control and Status Register служит для управления ECC-контролем: разрешает ECC в Mode 1 (в Mode 2 ECC обязателен) и разрешает исправление однократных ошибок. В этом же регистре сообщаются признаки обнаружения ошибки, команды и фазы шины, в которой обнаружена ошибка, а также значения синдрома ошибки и атрибутов транзакции. Регистры ECC First Address, ECC Second Address и ECC Attribute Register содержат адрес, при обращении по которому обнаружена ошибка ECC, и атрибуты транзакции.

Конструктивы Small PCI и Mini PCI

Small PCI (SPCI) — спецификация PCI в миниатюрном исполнении, прежде называвшаяся SFF PCI (Small Form-Factor). Эта спецификация, предназначенная в основном для портативных компьютеров, логически совпадает с обычной шиной PCI, разрядность 32 бита, частота 33/66 МГц. В дополнение к обычному набору сигналов появился новый CLKRUN#, с помощью которого хост и устройства могут управлять частотой синхронизации в интересах энергосбережения. Благодаря уменьшению размеров (длины проводников) понижены требования к мощности формирователей сигналов PCI. По размерам карты SPCI Style A и Style B совпадают с PC Card и Card Bus Type II и III соответственно, но специальные ключи предотвращают ошибки подключения. Карты SPCI могут быть трех видов: с питанием 5 В, 3,3 В и универсальные 5/3,3 В; ошибочная установка предотвращается механическими ключами — прорезями в направляющих на карте и выступами в направляющих сокета (рис. 6.2). Для подключения карт SPCI на системной плате устанавливается двухрядный 108-контактный штырьковый разъем (табл. 6.7) с шагом контактов 0,8 мм по горизонтали и 1 мм между рядами. На карте, соответственно, имеется ответная часть (гнезда с тем же шагом). На противоположной стороне карты для периферийных интерфейсов предусматривается два варианта разъемов (на рисунке они не показаны): аналогичный (гнезда с шагом 0,8×1 мм) или двусторонний печатный с шагом 2 мм. Периферийные цепи подключаются через ленточный кабель с соответствующим разъемом. В стандарте приводятся рекомендации назначения контактов периферийных разъемов для сетевых адаптеров (Ethernet, Token Ring) и графических адаптеров (интерфейс VGA). Шина SPCI является внутренней (карты расширения находятся под крышкой корпуса и устанавливаются изготовителем при выключенном питании) и поэтому не нацелена на замену Card Bus (шина для внешних подключений с возможностью «горячей» замены). Карты SPCI позволяют использовать преимущества модульных решений, обеспечивая высокую производительность обмена.

Mini PCI Specification — малогабаритный вариант карт расширения с шиной PCI, устанавливаемых внутрь блокнотного ПК изготовителем. Логически и электрически соответствует PCI 32 бит, частота 33/66 МГц. Основное питание и уровень сигналов — 3,3 В; питание +5 В для карты доступно, но с максимальным потребляемым током 100 мА; питание ±12 В не предусмотрено. Суммарная потребляемая мощность карты не должна превышать 2 Вт. На разъеме MiniPCI имеются дополнительные сигналы для подключения аудиокодека AC’97, аналоговых аудиосигналов, телефонной линии, интерфейса локальной сети, а также отдельная линия +5 В для питания аналоговых цепей. Назначение дополнительных сигналов Mini PCI приведено в следующей таблице. В отличие от карт Small PCI и PC Card (PCMCIA) карты Mini PCI не имеют защитного корпуса — их элементы открыты, как и на «больших» картах PCI. В спецификации имеется несколько вариантов конструктивных исполнений (Form Factor):

  • Type IA и Type IB (рис. а) — для карт, устанавливаемых не у края корпуса компьютера. Системный разъем — штырьковый двухрядный стековый (штырьки контактов перпендикулярны плоскости платы). Кроме системного разъема на них могут устанавливаться внутренние малогабаритные разъемы для подключения к телефонной линии и локальной сети (в любых сочетаниях, но на штатных местах), а также альтернативный разъем ввода-вывода для иных применений. Карта имеет размер 46×70 мм, она крепится на трех крепежных площадках с отверстиями 3 мм. Толщина печатной платы не должна превышать 1 мм. Type IB отличается меньшей допустимой высотой компонентов;
  • Type IIA и Type IIB (рис. б) — для карт, устанавливаемых у края корпуса компьютера. Здесь состав разъемов тот же, но плата увеличена до размера 46×78 мм (крепежные отверстия остались на прежних местах относительно системного разъема), а для подключения телефона и локальной сети предусмотрена установка гнезд RJ-11 и RJ-45 в экранированных корпусах. На карте Type IIA компоненты могут иметь большую высоту (до 13,5 мм) на большей части платы; на картах Type IIB такая высота допустима только для самих гнезд;
  • Type IIIA и Type IIIB (рис. в) — для карт, устанавливаемых не у края корпуса компьютера. Здесь применен иной системный разъем — двусторонний печатный с шагом контактов 0,8 мм, толщина платы — 1 мм. На плате определено место для внутренних малогабаритных разъемов подключения к телефонной линии и локальной сети. Карта крепится направляющими разъема и фиксируется защелками в прорезях. Карты Type IIIA и Type IIIB различаются размером (60×51 мм и 60×44,6 мм соответственно).

 

Таблица. Назначение дополнительных цепей Mini PCI

Сигнал Назначение
TIP, RING Цепи телефонной линии
8PMJ-1… 8PMJ-8 Контакты разъема RJ-45 для подключения к локальной сети

LED1_GRNP, LED1_GRNN, LED2_YELP, LED2_YELN

Выводы светодиодных индикаторов разъема локальной сети (желтого и зеленого)
CHSGND Заземление (корпус)
AC_SYNC, AC_SDATA_IN, AC_SDATA_OUT, AC_BIT_CLK, AC_CODEC_ID0#, AC_CODEC_ID1#, AC_RESET# Сигналы связи с аудиокодеком AC’97 (AClink)
MOD_AUDIO_MON Аудиомонитор модема
SYS_AUDIO_OUT, SYS_AUDIO_IN Аудиосигнал для телефона
SYS_AUDIO_OUT_GND, SYS_AUDIO_IN_GND, AUDIO_GND «Земля» для аудиосигналов
MPCIACT# Дополнительный сигнал управления энергопотреблением: карта активна и требует для обслуживания максимальной производительности систе

 

Таблица. Назначение контактов разъема Mini PCI



Шины, устройства, функции и хост

Каждое устройство PCI при установке в конкретную систему получает идентификатор, однозначно определяющий его положение на «дереве» шин PCI данного компьютера. Идентификатор имеет иерархическую структуру и состоит из номера шины (bus), номера устройства (device) и номера функции (function). Идентификатор задает положение блока конфигурационных регистров заданной функции выбранного устройства в общем конфигурационном пространстве данной системы. Идентификаторы фигурируют при обращениях к регистрам конфигурационного пространства, а также при обмене сообщениями между устройствами.

Шина PCI представляет собой набор сигнальных линий, непосредственно соединяющих интерфейсные выводы группы устройств (слотов, микросхем на плате). В системе может присутствовать несколько шин PCI, соединенных мостами PCI. Мосты электрически отделяют интерфейсные сигналы одной шины от другой, соединяя шины логически; главный мост соединяет главную шину PCI с хостом (процессором и памятью). Каждая шина имеет свой номер шины (PCI bus number). Шины нумеруются последовательно, начиная от хоста; шина PCI, подключенная к главному мосту, имеет нулевой номер. 

Устройством PCI называется микросхема или карта расширения, подключенная к одной из шин PCI и использующая для доступа к конфигурационным регистрам выделенную ей линию IDSEL, принадлежащую этой шине. Устройство может быть многофункциональным, то есть состоять из множества (от 1 до 8) так называемых функций. Каждой функции отводится конфигурационное пространство в 256 байт, в PCI-X оно расширено до 4096 байт. Многофункциональные устройства должны отзываться только на конфигурационные циклы с номерами функций, для которых имеется конфигурационное пространство. При этом функция с номером 0 должна присутствовать обязательно (по результатам обращения к ней определяется присутствие устройства), номера остальных функций назначаются разработчиком устройства произвольно (в диапазоне 1–7). Простые (однофункциональные) устройства, в зависимости от реализации, могут отзываться либо на любой номер функций, либо только на номер функции 0.

Нумерацией и конфигурированием всех устройств PCI занимается хост — «хозяин» шины PCI. Роль хоста, как правило, выполняет центральный процессор, связанный с шиной PCI главным мостом, от которого и начинается нумерация шин. Конфигурирование всех устройств шины возможно только со стороны хоста — в этом заключается его особая роль. Ни с одной из шин PCI ни один задатчик не имеет доступа к конфигурационным регистрам всех устройств PCI, без чего полное конфигурирование недоступно. Даже с нулевой шины PCI задатчику недоступны конфигурационные регистры главного моста, а без доступа к ним невозможно запрограммировать распределение адресов между хостом и устройствами PCI. С других шин PCI возможности доступа к конфигурационным регистрам еще скромнее.

Конфигурирование выполняется для каждой функции; полный идентификатор функции состоит из трех частей: номера шины, номера устройства и номера функции. Короткая форма идентификатора вида PCI0:1:2 (например, в сообщениях ОС Unix) означает функцию 2 устройства 1, подключенного к главной (0) шине PCI. Диспетчер устройств (конфигурационное ПО) должен оперировать списком всех функций всех устройств, обнаруженных на всех шинах PCI данной системы (компьютера).

В шине PCI принята географическая нумерация — номер устройства определяется местом его подключения. Номер устройства (device number или dev) определя-ется той линией шины AD, к которой подключена его линия сигнала IDSEL. В соседних слотах PCI, как правило, задействуются соседние номера устройств; их нумерация определяется разработчиком системной платы (или пассивной кросс-платы в промышленных компьютерах). Часто для слотов используются убывающие номера устройств, начиная с 20 или 15. Группы соседних слотов могут подключаться к разным шинам; на каждой шине PCI нумерация устройств независимая (могут быть и устройства с совпадающими номерами dev, но разными номерами шин). Устройства PCI, интегрированные в системную плату, используют ту же систему нумерации. Их номера «запаяны намертво», в то время как номера устройств на картах расширения можно изменять, переставляя их в разные слоты.

Одна карта PCI может содержать только одно устройство шины, к которой она подключается, поскольку ей в слоте выделяется только одна линия IDSEL. Если на карте размещают несколько устройств (например, 4-портовая карта Ethernet), то на ней приходится устанавливать мост — устройство PCI, к которому и обращаются по линии IDSEL, выделенной данной карте. Этот мост организует на карте дополнительную шину PCI, к которой можно подключить множество устройств. Каждое из этих устройств получит свою линию IDSEL, но относящуюся уже к дополнительной шине PCI данной карты.

С точки зрения обращения к пространствам памяти и ввода/вывода географический адрес (номер шины и номер устройства) в пределах одной шины безразличен. Однако номер устройства определяет номер линии запроса прерывания, которой может пользоваться устройство. Подробнее об этом рассказывается в главе 3, здесь же отметим, что на одной шине устройства с номерами, отличающимися друг от друга на 4, будут использовать одну и ту же линию прерывания. В системах с несколькими шинами PCI перестановка устройства в слоты разных шин может влиять на производительность, что связано с характеристиками данной шины и ее удаленностью от главного моста.

Разобраться с нумерацией устройств и полученных ими линий прерываний на конкретной плате можно, если устанавливать карту PCI поочередно в каждый из слотов (отключая питание) и смотреть на сообщения об обнаруженных устройствах PCI, выводимых на дисплей в конце теста POST. В этих сообщениях будут фигурировать и устройства PCI, установленные непосредственно на системной плате (не отключенные параметрами CMOS Setup). Но чтобы не возникло иллюзии простоты, отметим, что «особо умные» операционные системы (например, Windows) не довольствуются полученными назначениями номеров прерываний и изменяют их по своему усмотрению.



Адресация ввода/вывода

В командах обращения к портам ввода/вывода для адресации любого байта используются (декодируются) все линии AD[31:0]. При этом биты адреса AD[31:2] указывают на адрес двойного слова, к которому принадлежат передаваемые данные, а младшие биты адреса AD[1:0] определяют байты, которые могут быть разрешены сигналами C/BE[3:0]#. Для транзакций ввода/вывода на PCI правила несколько иные, чем для обращений к памяти: если передается хотя бы один байт, то всегда должен быть разрешен и тот байт, на который указывает адрес. При AD[1:0] = 00 допустимо C/BE[3:0]# = xxx0 или 1111, при AD[1:0] = 01 — C/BE[3:0]# = xx01 или 1111, при AD[1:0] = 10 — C/BE[3:0]# = x011 или 1111, при AD[1:0] = 11 — C/BE[3:0]# = = 0111 (передается лишь байт 3) или 1111 (ни один байт не разрешен). Эти циклы формально тоже могут быть пакетными, хотя реально эта возможность практически не используется. Для адресации портов на шине PCI доступны все 32 бита адреса, но процессоры x86 могут использовать только младшие 16 бит.

Для транзакций ввода/вывода на PCIX распространяются те же взаимосвязи сигналов C/BE[3:0]# и те же адреса, что и для одиночных (DWORD) транзакций с памятью, приведенные в предыдущем разделе. Эти транзакции всегда одиночные (DWORD). 



Подкатегории