OSDev Wiki
Регистрация
Advertisement

PCI Local Bus (Peripheral Component Interconnect, межсоединение периферийных компонентов) — синхронная параллельная шина, предназначенная для соединения различных контроллеров, находящихся на системной плате компьютера или установленных в гнёзда расширения, друг с другом и с так называемым «центральным ресурсом» (central resource), т.е. с процессорами и памятью. Эта шина порядка 10 лет была основой ПК, полностью вытеснив другие шины (ISA, EISA, MicroChannel, VLB). Сейчас ей на смену пришла PCI Express, хотя гнёзда для установки плат расширения стандарта PCI имеются пока на практически всех системных платах.

Помимо шины PCI, на ПК ранее широко применялась её специализированная версия AGP, однако с появлением шины PCI Express AGP была полностью вытеснена. Другой вариант PCI, шина PCI-X, используется в некоторых серверах и промышленных компьютерах. В отличие от обычной PCI, она поддерживает частоту до 133 МГц, что обеспечивает пиковую пропускную способность до 1064 МБайт/с. Ещё одним промышленным вариантом является шина CompactPCI.

История[]

Развитием стандарта PCI занимается организация PCI Special Interest Group. Спецификации официально доступны лишь за плату, хотя на просторах Интернета их можно найти и бесплатно.

Прототип шины PCI был разработан фирмой Intel весной 1991 г. Новая шина должна была обладать высокой пропускной способностью, необходимой для эффективной работы процессоров 80486 и Pentium, а также поддерживать программное конфигурирование подключенных к ней устройств. Кроме того, от PCI требовалась достаточно высокая нагрузочная способность, чтобы к ней можно было подключить значительное число контроллеров без применения различных ухищрений.

В 1992 г. была создана PCI Special Interest Group (PCI SIG) и опубликована первая версия стандарта шины PCI Local Bus. Шина обеспечивала передачу 32- и 64-разрядных данных, использовала 32- и 64-разрядные адреса и поддерживала напряжения питания 5 и 3,3 В, но не была привязана к архитектуре конкретного процессора. Пиковая пропускная способность 32-разрядной шины, работавшей на частоте 33 МГц, достигала 132 Мбайт/с, у 64-разрядной она была вдвое больше.

В следующем году появилась вторая версия стандарта, а ещё через два года, в 1995-м — версия 2.1, важнейшим отличием которой от предыдущих версий стала поддержка частоты 66 МГц. Именно ей удалось полностью вытеснить другие шины аналогичного назначения. Она нашла применение как в ПК на базе процессоров IA-32, так и в компьютерах на процессорах других архитектур — DEC Alpha, IBM PowerPC, Sun SPARC, MIPS и др.

На этом развитие шины PCI не остановилось (например, в 2002 г. вышла сначала версия 2.3, а затем и 3.0), однако вносимые изменения были не слишком существенны. Так, в версии 3.0 упразднили поддержку плат расширения с напряжением питания 5 В.

Основные особенности[]

Шина PCI предназначена для подключения достаточно большого количества устройств одновременно, однако на практике их число довольно мало — ограничителями являются нагрузочная способность электронных схем и паразитная ёмкость цепей, растущая по мере увеличения количества устройств и длины линий шины. Кроме того, под номер устройства на шине, используемый в процессе конфигурирования, отведено 5 бит, что не позволяет подключить более 32 устройств. Чтобы увеличить их общее число, была предусмотрена организация шины PCI в виде дерева. «Корнем» этого дерева является специальный мост Host–PCI, с помощью которого «ствол» — основная шина PCI — подключается к процессору. «Ветви» — дополнительные шины PCI — подключаются к «стволу» с помощью мостов PCI–PCI. К «ветвям» с помощью таких же мостов могут подключаться следующие «ветви» и так далее. Практическим ограничением «ветвистости» шины являются ограничение на общее число шин PCI (под номер шины отводится один байт) и дополнительная задержка, вносимая в обмен данными каждым новым мостом.

На практике шина PCI не обязательно связана с процессором напрямую. Например, в ПК на базе чипсета Intel P45 процессор посредством шины FSB связан с микросхемой северного моста — собственно кристаллом P45. Внутри последнего имеется мост Host–DMI, связывающий шину FSB с шиной DMI, которая, в свою очередь, является связующим элементом северного и южного мостов (в роли последнего обычно выступает микросхема ICH10). В состав южного моста входит мост DMI–PCI, он и будет реальным «корнем» шины PCI.

К шине PCI с помощью специальных мостов могут подключаться другие шины. Например, в каждом ПК на ранних процессорах Pentium имелся мост PCI–ISA.

Чтобы правильно маршрутизировать трафик, каждая шина PCI имеет свой номер, используемый в процессе конфигурирования мостов и других устройств, подключенных к шине, а также выделенные ей диапазоны адресов памяти и ввода-вывода. Когда некоторый мост «видит» запрос, обращённый к его шине, он транслирует его на эту шину. Естественно, не допускается дублирование номеров мостов (а значит, и шин), а также перекрытие диапазонов адресов. Для программного обеспечения, за исключением конфигурационного, иерархическая организация шины PCI и достаточно сложная цепочка, соединяющая её с процессором и памятью, абсолютно прозрачна.

Каждое устройство PCI включает одну или несколько функций (до 8 — под номер функции, используемый в процессе конфигурирования, отведено 3 бита). Функция — это логически независимая часть устройства. Например, в состав микросхемы южного моста обычно входят контроллеры SATA, Ethernet, USB и другие устройства. Каждый из них с точки зрения шины PCI может быть отдельным устройством или же одной из функций одного и того же устройства. Многофункциональные устройства обязательно должны иметь функцию с номером 0, однофункциональные могут в процессе конфигурирования игнорировать номер функции или же «откликаться» только на обращение к функции 0.

Шина PCI имеет три независимых адресных пространства: памяти, ввода-вывода и конфигурационное. Разрядность адреса памяти и ввода-вывода составляет 32 или 64 бита (причём 64-разрядный адрес может использоваться и на 32-разрядной шине); на практике его разрядность определяется процессором (так, у современных процессоров ПК адреса портов ввода-вывода имеют длину 16 бит, а физические адреса памяти — обычно 36). Пространство ввода-вывода может отсутствовать, если шина применяется в вычислительной системе, процессор которой не имеет отдельного адресного пространства ввода-вывода. По этой причине устройства, не ориентированные на использование с конкретной процессорной архитектурой, должны иметь возможность работать исключительно с адресным пространством памяти. Для нормальной работы каждая функция каждого устройства должна иметь собственный диапазон адресов в необходимых ей адресных пространствах.

Конфигурационное адресное пространство имеется у каждой реализованной функции всех устройств шины PCI, кроме, возможно, моста Host–PCI. Адреса регистров конфигурации состоят из четырёх полей: номера шины (8 бит), номера устройства (5 бит), номера функции (3 бита) и номера регистра (6 бит). Все конфигурационные регистры 32-разрядные. Используя их, программное обеспечение определяет тип, конкретную модель устройства и его требования к диапазонам адресов памяти и ввода-вывода, после чего по возможности выделяет запрашиваемые ресурсы и загружает драйвер, обеспечивающий работу с этим устройством.

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

Устройства могут иметь порты ввода-вывода, расположенные по строго определённым адресам. Такие устройства называются унаследованными (legacy). Фиксированные порты применяются для обеспечения совместимости со старым оборудованием, не имевшим возможности программного конфигурирования. Например, современные видеоконтроллеры эмулируют видеоконтроллер VGA, для чего используют несколько стандартных портов ввода-вывода, однако для использования их в современных режимах они должны быть правильно настроены как «настоящие» устройства PCI.

Передача данных обычно ведётся пакетами (burst), что позволяет повысить пропускную способность, поскольку в каждом пакете адрес передаётся лишь один раз независимо от количества передаваемых данных. Тем не менее, поддерживаются устройства, не обладающие способностью пакетной передачи.

Из-за очень большого объёма информации подробные сведения о принципах работы и использовании шины PCI приведены в отдельных статьях:

Источники[]

  • PCI Local Bus Specification. Revision 3.0. August 12, 2002
  • Гук М. Аппаратные интерфейсы ПК. Энциклопедия. — СПб.: Питер, 2002
Advertisement