Введение

Локальная компьютерная шина для подключения аппаратных устройств

Периферийная компонентная взаимосвязь (PCI) — это локальная компьютерная шина для подключения аппаратных устройств в компьютере и является частью стандарта PCI Local Bus. Шина PCI поддерживает функции, присутствующие в процессорной шине, но в стандартизированном формате, независимом от системной шины конкретного процессора. Устройства, подключенные к шине PCI, для контроллера шины выглядят как подключенные непосредственно к его собственной шине и получают адреса в адресном пространстве процессора. Это параллельная шина, синхронизированная с одним тактовым сигналом шины. Подключенные устройства могут быть выполнены в виде интегральной схемы, установленной на материнской плате (в спецификации PCI называемой планарным устройством), или в виде платы расширения, устанавливаемой в слот. PCI Local Bus впервые была реализована в IBM PC-совместимых компьютерах, где она заменила комбинацию нескольких медленных слотов Industry Standard Architecture (ISA) и одного быстрого слота VESA Local Bus (VLB) в качестве конфигурации шины. Впоследствии она была принята для других типов компьютеров. Типичные платы PCI, используемые в ПК, включают: сетевые карты, звуковые карты, модемы, дополнительные порты, такие как универсальная последовательная шина (USB) или последовательный порт, платы ТВ-тюнеров и адаптеры для жестких дисков. Видеокарты PCI заменили карты ISA и VLB, пока растущие требования к пропускной способности не превысили возможности PCI. Предпочтительным интерфейсом для видеокарт стал Accelerated Graphics Port (AGP), расширение PCI, прежде чем он уступил место PCI Express. Первая версия PCI, используемая в розничных настольных компьютерах, представляла собой 32-битную шину с тактовой частотой 33 МГц и 5-вольтовой сигнализацией, хотя стандарт PCI 1.0 также предусматривал 64-битный вариант. На этих платах имеется один фиксирующий паз. Версия 2.0 стандарта PCI представила 3,3-вольтовые слоты, физически отличающиеся перевернутым разъемом для предотвращения случайной установки 5-вольтовых карт. Универсальные карты, работающие от любого напряжения, имеют два паза. Версия 2.1 стандарта PCI представила возможность работы на частоте 66 МГц. Серверная версия PCI, PCI Extended (PCI X), работала на частотах до 133 МГц для PCI X 1.0 и до 533 МГц для PCI X 2.0. В версии 2.2 спецификации PCI был представлен внутренний разъем для карт ноутбуков, называемый Mini PCI. Шина PCI также была принята для внешнего стандарта разъема для ноутбуков CardBus. Первая спецификация PCI была разработана Intel, но последующая разработка стандарта стала ответственностью Специальной группы по интересам PCI (PCI SIG). PCI и PCI X иногда называют параллельными PCI или традиционными PCI, чтобы технологически отличить их от их более позднего преемника PCI Express, который использует последовательную архитектуру, основанную на каналах. Наивысший период популярности PCI на рынке настольных компьютеров пришелся примерно на 1995–2005 годы. PCI и PCI X устарели для большинства целей и в значительной степени исчезли из многих современных материнских плат с 2013 года; однако они по-прежнему распространены на некоторых современных настольных компьютерах по состоянию на 2020 год для обеспечения обратной совместимости и относительно низкой стоимости производства. Другим распространенным современным применением параллельного PCI является использование в промышленных ПК, где многие специализированные платы расширения, используемые в них, так и не перешли на PCI Express, как и некоторые карты ISA. Многие типы устройств, ранее доступные на платах расширения PCI, теперь обычно интегрированы в материнские платы или доступны в версиях USB и PCI Express.

Перерывы

Устройства должны следовать протоколу, чтобы обеспечить совместное использование линий запроса прерывания (IRQ). Шина PCI включает в себя четыре линии прерывания, INTA# – INTD#, все из которых доступны каждому устройству. До восьми устройств PCI могут совместно использовать одну и ту же линию IRQ (LNKA – LNKH) в системах x86 с включенным APIC. Линии прерываний не подключены параллельно, как другие линии шины PCI. Положение линий прерываний меняется между слотами, поэтому для одного устройства линия INTA# может быть INTB# для следующего и INTC# для последующего. Однофункциональные устройства обычно используют INTA# для передачи сигналов прерывания, что обеспечивает более равномерное распределение нагрузки между четырьмя доступными линиями прерываний. Это снижает распространенную проблему совместного использования прерываний. Отображение линий прерываний PCI на системные линии прерываний через PCI-мост хоста зависит от реализации. Специализированное программное обеспечение платформы или код операционной системы должны знать об этом и устанавливать поле "линия прерывания" в конфигурационном пространстве каждого устройства, указывая, к какому IRQ оно подключено. Линии прерываний PCI активируются по уровню. Это было сделано вместо активации по фронту, чтобы получить преимущество при обслуживании общей линии прерывания и повысить надежность: прерывания, активируемые по фронту, легко пропустить. В более поздних версиях спецификации PCI добавлена поддержка прерываний, сигнализируемых сообщениями. В этой системе устройство сигнализирует о необходимости обслуживания, выполняя запись в память, а не устанавливая выделенную линию. Это решает проблему нехватки линий прерываний. Даже если векторы прерываний по-прежнему используются совместно, это не вызывает проблем, связанных с совместным использованием прерываний, активируемых по уровню. Это также решает проблему маршрутизации, поскольку запись в память не может быть непредсказуемо изменена между устройством и хостом. Наконец, поскольку сигнализация сообщений осуществляется в полосе, она решает некоторые проблемы синхронизации, которые могут возникать при использовании отложенных записей и внеполосных линий прерываний. PCI Express вообще не имеет физических линий прерываний. Он использует исключительно прерывания, сигнализируемые сообщениями.

Напряжение и клавиатура карты

Типичные карты PCI имеют одну или две ключевые прорези, в зависимости от их рабочего напряжения. Карты, требующие 3,3 вольта, имеют прорезь на расстоянии 56,21 мм от задней кромки; карты, требующие 5 вольт, имеют прорезь на расстоянии 104,41 мм от задней кромки. Это позволяет устанавливать карты только в слоты с поддерживаемым ими напряжением. "Универсальные карты", работающие от любого напряжения, имеют обе ключевые прорези.

Смешивание 32-битных и 64-битных PCI-карт в слотах разной ширины

Большинство 32-битных карт PCI будут нормально функционировать в 64-битных слотах PCI X, но частота шины будет ограничена частотой самой медленной карты, что является неотъемлемым ограничением общей шинной топологии PCI. Например, при установке периферийного устройства PCI 2.3, 66 МГц в шину PCI X, способную работать на частоте 133 МГц, вся шинная плата будет ограничена частотой 66 МГц. Чтобы обойти это ограничение, многие материнские платы имеют две или более шин PCI/PCI X, одна из которых предназначена для использования с высокоскоростными периферийными устройствами PCI X, а другая – для периферийных устройств общего назначения. Многие 64-битные карты PCI X разработаны для работы в 32-битном режиме при установке в более короткие 32-битные разъемы, что приводит к некоторой потере производительности. Примером является 64-битная SCSI-карта интерфейса Adaptec 29160. Однако некоторые 64-битные карты PCI X не работают в стандартных 32-битных слотах PCI. Ненадежный источник: дата=июль 2012

Установка 64-битной карты PCI X в 32-битный слот оставит 64-битную часть краевого разъема карты неподключенной и выступающей за пределы слота. Это требует, чтобы на материнской плате не было компонентов, расположенных таким образом, чтобы механически препятствовать выступающей части краевого разъема карты.

Мини-ПКИ

Mini PCI был добавлен в спецификацию PCI версии 2.2 для использования в ноутбуках и некоторых маршрутизаторах; он использует 32-битную шину с частотой 33 МГц, оснащенную разъемами питания (только 3,3 В; 5 В ограничено 100 мА) и поддерживает управление шиной и DMA. Стандартный размер карты Mini PCI составляет примерно четверть от размера полноразмерной карты. В отличие от настольных PCI-карт с пластмассовыми заглушками и разъемами, к карте Mini PCI нет доступа извне корпуса устройства, что ограничивает спектр ее функциональных возможностей. Было разработано множество устройств Mini PCI, включая модули Wi-Fi, Fast Ethernet, Bluetooth, модемы (часто Winmodems), звуковые карты, криптографические ускорители, контроллеры SCSI, IDE-ATA, SATA и комбинированные карты. Карты Mini PCI могут использоваться с обычным оборудованием, оснащенным PCI, с помощью преобразователей Mini PCI – PCI. Mini PCI был вытеснен гораздо более компактным стандартом PCI Express Mini Card.

Технические детали Mini PCI

Мини-карты PCI имеют максимальное энергопотребление 2 Вт, что ограничивает функциональность, которую можно реализовать в этом форм-факторе. Они также должны поддерживать сигнал CLKRUN# PCI, используемый для запуска и остановки тактовой частоты PCI в целях управления питанием. Существует три форм-фактора карт: Тип I, Тип II и Тип III. Разъемы, используемые для каждого типа, следующие: Типы I и II используют 100-контактный коннектор для соединения, а Тип III – 124-контактный коннектор на краю платы, то есть коннектор для Типов I и II отличается от коннектора для Типа III, где коннектор расположен на краю карты, как в случае с SO DIMM. Дополнительные 24 контакта обеспечивают дополнительные сигналы, необходимые для маршрутизации ввода/вывода через системный коннектор (аудио, AC Link, LAN, телефонный интерфейс). Карты Типа II имеют предустановленные разъемы RJ11 и RJ45. Эти карты должны располагаться на краю компьютера или док-станции, чтобы порты RJ11 и RJ45 могли быть установлены для внешнего доступа.

Тип карты | Расположение на внешнем краю хост-системы | Коннектор | Размер (мм × мм × мм) | Примечания
---|---|---|---|---
IA | Нет | 100-контактный коннектор для соединения | 7.5 × 70 × 45 | Большая высота (7.5 мм)
IB | | | 5.5 × 70 × 45 | Меньшая высота (5.5 мм)
IIA | Да | | 17.44 × 70 × 45 | Большая высота (17.44 мм)
IIB | | | 5.5 × 78 × 45 | Меньшая высота (5.5 мм)
IIIA | Нет | 124-контактный коннектор на краю платы | 2.4 × 59.6 × 50.95 | Большая ширина (50.95 мм)
IIIB | | | 2.4 × 59.6 × 44.6 | Меньшая ширина (44.6 мм)

Mini PCI отличается от 144-контактного Micro PCI.

Транзакции на шине PCI

Трафик шины PCI состоит из серии транзакций шины PCI. Каждая транзакция состоит из фазы адреса, за которой следует одна или несколько фаз данных. Направление фаз данных может быть от инициатора к целевому устройству (транзакция записи) или наоборот (транзакция чтения), но все фазы данных должны быть в одном направлении. Любая из сторон может приостановить или прервать фазы передачи данных в любой момент. (Типичный пример – малопроизводительное PCI-устройство, не поддерживающее пакетный режим передачи и прерывающее транзакцию после первой фазы данных.) Любое PCI-устройство может инициировать транзакцию. Сначала оно должно запросить разрешение у арбитра шины PCI на материнской плате. Арбитр предоставляет разрешение одному из запрашивающих устройств. Инициатор начинает фазу адреса, транслируя 32-битный адрес и 4-битный код команды, а затем ожидает ответа от целевого устройства. Все остальные устройства анализируют этот адрес, и одно из них отвечает через несколько циклов. 64-битная адресация выполняется в два этапа. Инициатор транслирует младшие 32 бита адреса вместе со специальным кодом команды "двойной цикл адреса". Устройства, не поддерживающие 64-битную адресацию, просто не реагируют на этот код команды. На следующем цикле инициатор передает старшие 32 бита адреса и фактический код команды. С этого момента транзакция выполняется аналогичным образом. Для обеспечения совместимости с 32-битными PCI-устройствами запрещено использовать двойной цикл адреса, если в этом нет необходимости, то есть если старшие биты адреса равны нулю. В то время как шина PCI передает 32 бита за фазу передачи данных, инициатор передает 4 активных сигнала разрешения байтов с низким уровнем, указывающие, какие 8-битные байты следует считать значимыми. В частности, запись должна влиять только на разрешенные байты в целевом PCI-устройстве. Они не имеют большого значения для чтения памяти, но операции чтения ввода-вывода могут иметь побочные эффекты. Стандарт PCI явно разрешает фазу данных без разрешенных байтов, которая должна выполняться без каких-либо действий.

Адресные пространства PCI

PCI имеет три адресных пространства: память, ввод/вывод и конфигурация. Адреса памяти имеют размер 32 бита (опционально 64 бита), поддерживают кэширование и могут использоваться для пакетных (burst) транзакций. Адреса ввода/вывода предназначены для совместимости с адресным пространством портов ввода/вывода архитектуры Intel x86. Хотя спецификация шины PCI допускает пакетные транзакции в любом адресном пространстве, большинство устройств поддерживают их только для адресов памяти, но не для ввода/вывода. Наконец, пространство конфигурации PCI обеспечивает доступ к 256 байтам специальных регистров конфигурации для каждого устройства PCI. Каждый слот PCI получает свой собственный диапазон адресов пространства конфигурации. Эти регистры используются для настройки диапазонов адресов памяти и ввода/вывода, на которые устройства должны реагировать на запросы от инициаторов транзакций. При первом включении компьютера все устройства PCI реагируют только на обращения к своему пространству конфигурации. BIOS компьютера сканирует устройства и назначает им диапазоны адресов памяти и ввода/вывода. Если адрес не запрошен ни одним устройством, фаза адреса инициатора транзакции завершится с тайм-аутом, что приведет к прерыванию операции инициатором. В случае чтения обычно возвращается значение, состоящее из всех единиц (0xFFFFFFFF). Поэтому устройства PCI обычно стараются избегать использования значения, состоящего из всех единиц, в важных регистрах состояния, чтобы такую ошибку можно было легко обнаружить программным обеспечением.

Задержка шины PCI

Вскоре после публикации спецификации PCI было обнаружено, что длительные транзакции, выполняемые некоторыми устройствами из-за медленных подтверждений, продолжительных пакетов данных или их комбинации, могут приводить к недостаточному заполнению или переполнению буфера в других устройствах. Рекомендации по времени выполнения отдельных фаз в редакции 2.0 стали обязательными в редакции 2.1:

Целевое устройство должно завершать начальную фазу передачи данных (активировать TRDY# и/или STOP#) в течение 16 циклов с момента начала транзакции. Инициатор должен завершать каждую фазу передачи данных (активировать IRDY#) в течение 8 циклов. Кроме того, начиная с редакции 2.1, все инициаторы, способные выполнять передачу более чем в двух фазах данных, должны реализовывать программируемый таймер задержки. Таймер начинает отсчет тактовых циклов при начале транзакции (инициатор активирует FRAME#). Если таймер истек, а арбитр снял сигнал GNT#, инициатор должен завершить транзакцию при первой же возможной законной возможности. Обычно это следующая фаза передачи данных, но транзакции "Запись в память" и "Аннулирование" должны продолжаться до конца линии кэша.

Задержанные сделки

Устройства, не способные соответствовать этим временным ограничениям, должны использовать комбинацию подтвержденных записей (для записи в память) и отложенных транзакций (для других записей и всех чтений). В отложенной транзакции целевое устройство регистрирует транзакцию (включая данные записи) внутренне и прерывает (активирует STOP#, а не TRDY#) первую фазу передачи данных. Инициатор должен повторить точно такую же транзакцию позже. В это время целевое устройство внутренне выполняет транзакцию и ожидает повторной транзакции. Когда повторная транзакция будет обнаружена, буферизированный результат будет передан. Устройство может быть целью других транзакций во время завершения одной отложенной транзакции; оно должно запоминать тип транзакции, адрес, выбор байтов и (в случае записи) значение данных, и завершать только корректную транзакцию. Если целевое устройство имеет ограничение на количество отложенных транзакций, которые оно может регистрировать внутренне (простые устройства могут установить ограничение в 1), оно вынудит эти транзакции к повтору без их регистрации. Они будут обработаны после завершения текущей отложенной транзакции. Если два инициатора попытаются выполнить одну и ту же транзакцию, результат отложенной транзакции, начатой одним из них, может быть доставлен другому; это не нанесет вреда. Целевое устройство отказывается от отложенной транзакции, когда повторная попытка успешно доставляет буферизированный результат, шина сбрасывается или когда проходит 215 = 32768 тактовых циклов (приблизительно 1 мс) без обнаружения повторной попытки. Последнее не должно происходить в нормальных условиях, но это предотвращает блокировку всей шины, если один из инициаторов сброшен или неисправен.

Мосты шины PCI

Стандарт PCI допускает соединение нескольких независимых шин PCI посредством шинных мостов, которые перенаправляют операции с одной шины на другую по мере необходимости. Хотя в PCI обычно не используется большое количество шинных мостов, системы PCI Express используют множество мостов PCI-to-PCI, обычно называемых PCI Express Root Port; каждый слот PCI Express выглядит как отдельная шина, соединенная мостом с остальными. PCI-хост-мост (обычно северный мост на платформах x86) обеспечивает связь между процессором, основной памятью и шиной PCI.

Опубликованные записи

Как правило, когда шинный мост обнаруживает транзакцию на одной шине, которую необходимо переслать на другую, исходная транзакция должна ожидать завершения пересланной транзакции, прежде чем будет получен результат. Однако существует одно важное исключение – операции записи в память. В этом случае мост может сохранить данные записи во внутренней памяти (если там достаточно места) и сообщить о завершении записи до того, как пересланная запись будет завершена. Или даже до того, как она начнётся. Такие записи, "отправленные, но ещё не полученные", называются "отложенными записями", по аналогии с почтовым отправлением. Хотя они предоставляют значительные возможности для повышения производительности, правила, определяющие допустимые операции, довольно сложны.

Объединение, слияние и разрушение

Стандарт PCI допускает преобразование нескольких транзакций шины в одну более крупную транзакцию в определенных ситуациях с помощью автобусных мостов. Это может повысить эффективность шины PCI.

Комбинирование

Операции записи в последовательные адреса могут быть объединены в более длительную серию записи, при условии, что порядок доступа в этой серии соответствует порядку исходных записей. Разрешается вставлять дополнительные фазы данных с отключенными всеми сигналами разрешения байтов, если записи почти последовательны.

Слияние

Множественные записи в различные области одного и того же слова могут быть объединены в одну запись с одновременной активацией нескольких каналов записи. В этом случае записи, представленные на шинный мост в определенном порядке, объединяются таким образом, чтобы они выполнялись одновременно при пересылке.

Колапс

Нельзя объединять множественные записи в один и тот же байт или группу байтов, например, выполняя только последнюю запись и игнорируя предыдущие, которые были перезаписаны. Это связано с тем, что спецификация PCI допускает наличие побочных эффектов при записи.

Сигналы шины PCI

Транзакции шины PCI контролируются пятью основными сигналами управления, два из которых генерируются инициатором транзакции (FRAME# и IRDY#), а три – устройством-целью (DEVSEL#, TRDY# и STOP#). Существуют два дополнительных сигнала арбитража (REQ# и GNT#), используемые для получения разрешения на начало транзакции. Все они имеют активный низкий уровень, то есть активное или утвержденное состояние соответствует низкому напряжению. Резисторы подтяжки на материнской плате обеспечивают поддержание высокого (неактивного) уровня, если сигнал не управляется каким-либо устройством, однако шина PCI не полагается на эти резисторы для изменения уровня сигнала; все устройства устанавливают сигналы в высокий уровень на один цикл перед тем, как прекратить их управление.

Время сигнала

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

Арбитражный процесс

Любое устройство на шине PCI, способное выступать в роли мастера шины, может инициировать транзакцию с любым другим устройством. Для обеспечения того, чтобы в единицу времени инициировалась только одна транзакция, каждый мастер должен сначала дождаться сигнала запроса шины, GNT#, от арбитра, расположенного на материнской плате. Каждое устройство имеет отдельную линию запроса REQ#, которая запрашивает шину, однако арбитр может "зарезервировать" сигнал запроса шины для любого устройства, если нет текущих запросов. Арбитр может отозвать GNT# в любой момент времени. Устройство, потерявшее GNT#, может завершить текущую транзакцию, но не может начать новую (активируя FRAME#), если не обнаружит утверждение GNT# в цикле, предшествующем началу транзакции. Арбитр также может предоставить GNT# в любой момент времени, включая период транзакции другого мастера. Во время транзакции утверждаются FRAME# и/или IRDY#. Когда оба сигнала снимаются, шина находится в неактивном состоянии. Устройство может инициировать транзакцию в любой момент, когда GNT# утверждено и шина неактивна.

Фаза адреса

Транзакция шины PCI начинается с фазы адреса. Инициатор (обычно чипсет), убедившись, что у него есть сигнал GNT# и шина свободна, выводит целевой адрес на линии AD[31:0], соответствующую команду (например, чтение из памяти или запись во ввод/вывод) на линии C/BE[3:0]# и устанавливает сигнал FRAME# в низкий уровень. Каждое другое устройство анализирует адрес и команду и решает, отвечать ли в качестве цели, активируя сигнал DEVSEL#. Устройство должно ответить, установив DEVSEL# в течение 3 циклов. Устройства, гарантирующие ответ в течение 1 или 2 циклов, называются устройствами с "быстрым DEVSEL" или "средним DEVSEL" соответственно. (Фактически, время отклика составляет 2,5 цикла, поскольку устройства PCI должны передавать все сигналы на полцикла раньше, чтобы они могли быть приняты через три цикла.) Устройство должно зафиксировать адрес на первом цикле; инициатор обязан снять адрес и команду с шины на следующем цикле, даже до получения ответа DEVSEL#. Дополнительное время доступно только для интерпретации адреса и команды после его захвата. На пятом цикле фазы адреса (или раньше, если все остальные устройства имеют средний DEVSEL или быстрее) для некоторых диапазонов адресов допускается "вычитающее декодирование". Обычно это используется ISA-шиной для адресов в пределах ее диапазона (24 бита для памяти и 16 битов для ввода/вывода). На шестом цикле, если ответа не последовало, инициатор может прервать транзакцию, снимая сигнал FRAME#. Это называется завершением с отменой мастером, и обычно мосты шины PCI в этом случае возвращают данные, состоящие из всех единиц (0xFFFFFFFF). Поэтому устройства PCI обычно разрабатываются таким образом, чтобы избегать использования значения, состоящего из всех единиц, в важных регистрах состояния, чтобы такую ошибку можно было легко обнаружить программным обеспечением.

Доступ к конфигурации

Адреса для доступа к пространству конфигурации PCI используют специальное декодирование. В этом случае младшие адресные линии указывают смещение нужного регистра конфигурации PCI, а старшие адресные линии игнорируются. Вместо этого, перед тем как устройство может активировать сигнал DEVSEL#, дополнительный адресный сигнал, вход IDSEL, должен быть установлен в высокое состояние. Каждый слот подключает различную старшую адресную линию к контакту IDSEL и выбирается посредством одноходового кодирования на старших адресных линиях.

Быстрый ДЕВСЕЛ# на чтении

Цель, поддерживающая быстрый DEVSEL, теоретически может начать отвечать на запрос чтения уже в следующем цикле после подачи адреса. Однако этот цикл зарезервирован для разворота шины AD. Таким образом, цель не может выдавать данные на шину AD (и, следовательно, не может установить сигнал TRDY#) во втором цикле транзакции. Большинство целей не будут настолько быстрыми и не потребуют специальной логики для соблюдения этого требования.

Завершение операций

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

Завершение пуска всплеска

Инициатор может пометить любую фазу данных как завершающую в транзакции, снимая сигнал FRAME# одновременно с установкой сигнала IRDY#. Цикл после того, как целевое устройство устанавливает сигнал TRDY#, окончательный перенос данных завершается, обе стороны снимают соответствующие сигналы RDY#, и шина снова становится свободной. Инициатор не может снять сигнал FRAME# до установки сигнала IRDY#, а также не может снимать сигнал FRAME# в ожидании, когда IRDY# установлен, ответа целевого устройства сигналом TRDY#. Единственное незначительное исключение – прерывание передачи инициатором без ответа целевого устройства сигналом DEVSEL#. Очевидно, в таком случае ожидать сигнал TRDY# бессмысленно. Однако даже в этом случае инициатор должен установить сигнал IRDY# как минимум на один цикл после снятия сигнала FRAME#. (Как правило, инициатор устанавливает сигнал IRDY# до получения сигнала DEVSEL#, поэтому ему достаточно удерживать сигнал IRDY# установленным на один цикл дольше.) Это необходимо для обеспечения соблюдения требований к времени разворота шины на линии FRAME#.

Адресация всплесков

Для доступа к пространству памяти слова в пакете могут быть доступны в нескольких порядках. Незначимые биты адреса низкого порядка AD[1:0] используются для передачи запрошенного порядка инициатором. Устройство, не поддерживающее определенный порядок, должно прервать пакет после первого слова. Некоторые из этих порядков зависят от размера кэш-линии, который можно настроить на всех устройствах PCI. +PCI burst ordering A[1] A[0] Порядок пакета (при размере кэш-линии 16 байт) 0 0 Линейное увеличение (0x0C, 0x10, 0x14, 0x18, 0x1C, ) 0 1 Переключение кэш-линии (0x0C, 0x08, 0x04, 0x00, 0x1C, 0x18, ) 1 0 Зацикливание кэш-линии (0x0C, 0x00, 0x04, 0x08, 0x1C, 0x10, ) 1 1 Зарезервировано (отключение после первой передачи)

Если начальный сдвиг внутри кэш-линии равен нулю, все эти режимы сводятся к одному и тому же порядку. Режимы переключения и зацикливания кэш-линии – это две формы приоритетного чтения первой кэш-линии. Режим переключения выполняет операцию XOR между предоставленным адресом и инкрементируемым счетчиком. Это родной порядок для процессоров Intel 486 и Pentium. Его преимущество заключается в том, что для его реализации не требуется знать размер кэш-линии. PCI версии 2.1 упразднил режим переключения и добавил режим зацикливания кэш-линии, при котором чтение происходит линейно, с зацикливанием в конце каждой кэш-линии. Когда одна кэш-линия полностью прочитана, чтение переходит к начальному сдвигу в следующей кэш-линии. Большинство устройств PCI поддерживают только ограниченный диапазон типичных размеров кэш-линии; если размер кэш-линии запрограммирован на неожиданное значение, они принудительно используют доступ к одному слову. PCI также поддерживает пакетный доступ к I/O и пространству конфигурации, но поддерживается только линейный режим. (Это используется редко и может быть некорректным в некоторых устройствах; они могут не поддерживать его, но и не принудительно использовать доступ к одному слову.)

Паритет

Автобус PCI обнаруживает ошибки четности, но не пытается их исправить повторными операциями; это лишь индикация отказа. В связи с этим нет необходимости обнаруживать ошибку четности до ее возникновения, и шина PCI фактически обнаруживает ее через несколько тактов. В фазе передачи данных устройство, управляющее линиями AD[31:0], вычисляет четность по ним и линиям C/BE[3:0]# и отправляет результат по линии PAR на следующий такт. Все правила доступа и циклы разворота для шины AD применяются к линии PAR, но с задержкой в один такт. Устройство, принимающее данные по шине AD, проверяет полученную четность и активирует линию PERR# (ошибка четности) на такт позже. Это обычно вызывает прерывание процессора, который может выполнить поиск по шине PCI устройства, обнаружившего ошибку. Линия PERR# используется только во время фаз передачи данных после выбора целевого устройства. Если ошибка четности обнаружена во время фазы адреса (или фазы передачи данных специального цикла), устройства, ее обнаружившие, активируют линию SERR# (системная ошибка). Даже если некоторые байты замаскированы линиями C/BE# и не используются, они все равно должны иметь определенное значение, которое необходимо учитывать при вычислении четности.

64-битный PCI

Начиная с версии 2.1, спецификация PCI включает опциональную поддержку 64-битных систем. Это обеспечивается расширенным разъемом, который предоставляет 64-битные расширения шины AD[63:32], C/BE[7:4]# и PAR64, а также ряд дополнительных контактов питания и заземления. 64-битный разъем PCI можно отличить от 32-битного разъема по дополнительному 64-битному сегменту. Транзакции с памятью между 64-битными устройствами могут использовать все 64 бита для удвоения скорости передачи данных. Транзакции, не связанные с памятью (включая доступ к конфигурационному пространству и пространству ввода-вывода), могут не использовать 64-битное расширение. Во время 64-битного пакета передач, адресная обработка пакета передач работает так же, как и при 32-битной передаче, но адрес увеличивается вдвое на каждой фазе передачи данных. Начальный адрес должен быть выровнен по границе 64 бит, то есть AD2 должен быть равен 0. Данные, соответствующие промежуточным адресам (при AD2 = 1), передаются по старшей половине шины AD. Для инициирования 64-битной транзакции инициатор устанавливает начальный адрес на шине AD и одновременно активирует сигналы REQ64# и FRAME#. Если выбранное целевое устройство может поддерживать 64-битную передачу для данной транзакции, оно отвечает активацией сигналов ACK64# и DEVSEL#. Целевое устройство может решать, разрешать или не разрешать 64-битную передачу для каждой транзакции в отдельности. Если REQ64# активирован во время фазы адреса, инициатор также устанавливает старшие 32 бита адреса и копию команды шины на старшую половину шины. Если для адреса требуется 64 бита, все равно необходим двойной цикл адреса, но старшая половина шины несет старшую половину адреса и финальный код команды во время обоих циклов фазы адреса; это позволяет 64-битному целевому устройству видеть полный адрес и начать отвечать раньше. Если инициатор видит, что DEVSEL# активирован без ACK64#, он выполняет 32-битные фазы данных. Данные, которые должны были быть переданы по старшей половине шины во время первой фазы передачи данных, вместо этого передаются во время второй фазы передачи данных. Обычно инициатор устанавливает все 64 бита данных до получения сигнала DEVSEL#. Если ACK64# отсутствует, он может прекратить управление старшей половиной шины данных. Сигналы REQ64# и ACK64# остаются активными на протяжении всей транзакции, за исключением последней фазы данных, и деактивируются одновременно с сигналами FRAME# и DEVSEL# соответственно. Линия PAR64 работает аналогично линии PAR, но обеспечивает четность по AD[63:32] и C/BE[7:4]#. Она действительна только для фаз адреса, если активирован REQ64#. PAR64 действительна только для фаз данных, если активированы оба сигнала REQ64# и ACK64#.

Просмотр кэша (устаревший)

Изначально PCI включал в себя необязательную поддержку когерентности кэша с обратной записью. Это требовало поддержки со стороны кешируемых целей памяти, которые должны были отслеживать два сигнала от кэша на шине: SDONE (завершение прослушивания) и SBO# (отказ от прослушивания). Поскольку эта функция редко реализовывалась на практике, она была удалена из версии 2.2 спецификации PCI, а сигналы были повторно использованы для доступа к SMBus в версии 2.3. Кэш отслеживал все обращения к памяти, не устанавливая сигнал DEVSEL#. Если он обнаруживал обращение, которое могло быть закэшировано, он опускал сигнал SDONE (прослушивание не завершено). Цель, поддерживающая когерентность, не завершала бы фазу передачи данных (устанавливая TRDY#), пока не обнаруживала бы высокий уровень сигнала SDONE. В случае записи в данные, которые были чистыми в кэше, кэшу требовалось только аннулировать свою копию и установить сигнал SDONE, как только это было сделано. Однако, если кэш содержал измененные данные, кэш должен был записать их обратно в память, прежде чем обращение могло быть продолжено, поэтому он устанавливал сигнал SBO# при повышении сигнала SDONE. Это сигнализировало активной цели установить сигнал STOP# вместо TRDY#, что приводило к отключению инициатора и повторной попытке операции позже. В это время кэш запрашивал доступ к шине и записывал свои данные обратно в память. Цели, поддерживающие когерентность кэша, также должны прерывать пакеты передачи данных до того, как они пересекут границы кэш-линий.

Инструменты развития

При разработке и/или отладке шины PCI изучение аппаратных сигналов может быть очень важным. Логические анализаторы и анализаторы шин — это инструменты, которые собирают, анализируют и декодируют сигналы, предоставляя пользователям возможность их просмотра в удобном формате.