Соединение периферийных компонентов - Википедия - Peripheral Component Interconnect
Локальная шина PCI | |
Три 5-вольтовых 32-битный Слоты расширения PCI на материнская плата (Кронштейн ПК с левой стороны) | |
Год создания | 22 июня 1992 г.[1] |
---|---|
Сделано | Intel |
Заменяет | ЭТО, EISA, MCA, VLB |
Заменено | PCI Express (2004) |
Ширина в битах | 32 или 64 |
Скорость | Полудуплекс:[2] 133 МБ / с (32-бит на 33 МГц - стандартная конфигурация) 266 МБ / с (32-бит на 66 МГц) 266 МБ / с (64-бит, 33 МГц) 533 МБ / с (64-бит на 66 МГц) |
Стиль | Параллельный |
Интерфейс горячего подключения | Необязательный |
Интернет сайт | www |
Подключение периферийных компонентов (PCI)[3] это местный компьютер автобус для крепления аппаратное обеспечение устройства в компьютер и является частью стандарта локальной шины PCI. Шина PCI поддерживает функции, имеющиеся на шина процессора но в стандартизированном формате, который не зависит от каких-либо конкретных процессор родной автобус. Устройства, подключенные к шине PCI, отображаются автобусный мастер подключаются непосредственно к собственной шине, и им назначаются адреса в процессорах адресное пространство.[4] Это параллельно автобус синхронный к одному автобусные часы Прикрепленные устройства могут иметь форму Интегральная схема установлен на материнская плата сам (называется планарное устройство в спецификации PCI) или карта расширения который помещается в слот. Локальная шина PCI была впервые реализована в Совместимость с IBM PC, где он вытеснил комбинацию нескольких медленных Стандартная отраслевая архитектура (ISA) слоты и один быстрый Местный автобус VESA слот в качестве конфигурации шины. Впоследствии он был принят для других типов компьютеров. Типичные карты PCI, используемые в ПК, включают: сетевые карты, звуковые карты, модемы, дополнительные порты, такие как USB или же серийный, Карты ТВ-тюнера и привод жесткого диска хост-адаптеры. PCI видеокарты заменил ISA и VESA карты до роста пропускная способность Требования переросли возможности PCI. Тогда предпочтительным интерфейсом для видеокарт стал AGP, которая сама по себе является надмножеством PCI, прежде чем уступить место PCI Express.[5]
Первой версией PCI, обнаруженной в розничных настольных компьютерах, была 32-битный автобус на 33МГц тактовая частота шины и сигнализация 5 В, хотя стандарт PCI 1.0 предусматривал 64-битный вариант.[требуется разъяснение ] У них есть одна фиксирующая выемка на карте. Версия 2.0 стандарта PCI представила слоты на 3,3 В, физически отличающиеся перевернутым физическим разъемом для предотвращения случайной вставки карт 5 В. Универсальные карты, которые могут работать от любого напряжения, имеют две выемки. Версия 2.1 стандарта PCI представила опциональную работу на частоте 66 МГц. Серверно-ориентированный вариант PCI, PCI-X (PCI Extended) работал на частотах до 133 МГц для PCI-X 1.0 и до 533 МГц для PCI-X 2.0. Внутренний разъем для карт ноутбуков, называемый Мини PCI, был представлен в версии 2.2 спецификации PCI. Шина PCI также была адаптирована для стандарта внешних разъемов портативных компьютеров - CardBus.[6] Первая спецификация PCI была разработана Intel, но последующая разработка стандарта стала обязанностью Специальная группа по интересам PCI (PCI-SIG).[7]
PCI и PCI-X иногда называют Параллельный PCI или же Обычный PCI[8] чтобы технологически отличить их от их более поздних преемников PCI Express, который принял серийный, линейная архитектура.[9][10] Расцвет PCI на рынке настольных компьютеров пришелся примерно на 1995–2005 годы.[9] PCI и PCI-X устарели для большинства целей; однако в 2020 году они по-прежнему распространены на современных настольных компьютерах для целей Обратная совместимость и низкая относительная стоимость производства. Еще одно распространенное современное применение параллельной шины PCI - промышленные ПК, где многие специализированные карты расширения, используемые здесь, никогда не передаются на PCI Express, как и некоторые карты ISA. Многие типы устройств, ранее доступные на картах расширения PCI, теперь обычно интегрируются в материнские платы или доступны в версиях USB и PCI Express.
История
Работа над PCI началась в Intel с Лаборатория разработки архитектуры (IAL) c. 1990. Команда, состоящая в основном из инженеров IAL, определила архитектуру и разработала доказательство концепции набора микросхем и платформы (Saturn) в партнерстве с командами компании, занимающимися системами настольных ПК, и организациями, производящими основные логические продукты.
PCI сразу же начали использовать в серверах, заменив MCA и EISA в качестве предпочтительной шины расширения сервера. В обычных ПК замена PCI шла медленнее. Местный автобус VESA (VLB), и до конца 1994 года во втором поколении Pentium ПК. К 1996 году VLB практически исчез, и производители приняли PCI даже для 486 компьютеры.[11] EISA продолжала использоваться вместе с PCI до 2000 года. Компьютер Apple принял PCI для профессиональных Power Macintosh компьютеры (замена NuBus ) в середине 1995 г., а потребитель Performa продуктовая линейка (заменяющая LC PDS ) в середине 1996 года.
Однако 64-битная версия простого PCI на практике оставалась редкостью,[12] хотя его использовали, например, все (после iMac) G3 и Компьютеры G4 Power Macintosh.[13]
Более поздние версии PCI добавили новые функции и улучшения производительности, в том числе 66МГц 3.3 V стандарт и 133 МГц PCI-X и адаптация сигнализации PCI к другим форм-факторам. И PCI-X 1.0b, и PCI-X 2.0 обратно совместимы с некоторыми стандартами PCI. Эти версии использовались в серверном оборудовании, но почти все оборудование потребительских ПК оставалось 32-битным, 33 МГц и 5 вольт.
PCI-SIG представил серийный PCI Express в c. 2004. С тех пор производители материнских плат добавили все меньше разъемов PCI в пользу нового стандарта. По состоянию на конец 2013 года многие новые материнские платы вообще не имеют слотов PCI.[нужна цитата ]
Спецификация | Год | Сводка изменений[15] |
---|---|---|
PCI 1.0 | 1992 | Оригинальный выпуск |
PCI 2.0 | 1993 | Спецификация встроенного разъема и дополнительной карты |
PCI 2.1 | 1995 | Включены пояснения и добавлена глава о 66 МГц. |
PCI 2.2 | 1998 | Зарегистрировано ECN, и улучшенная читаемость |
PCI 2.3 | 2002 | Включены ECN, исправления и удаленные надстройки с ключом только на 5 В |
PCI 3.0 | 2004 | Удалена поддержка разъема системной платы с ключом на 5,0 В |
Автоматическая настройка
PCI обеспечивает отдельную память и Адресные пространства портов ввода / вывода для x86 семейство процессоров, 64 и 32 бит, соответственно. Адреса в этих адресные пространства назначаются программным обеспечением. Третье адресное пространство, называемое Пространство конфигурации PCI, который использует фиксированную схему адресации, позволяет программному обеспечению определять объем памяти и адресного пространства ввода-вывода, необходимые для каждого устройства. Каждое устройство может запрашивать до шести областей памяти или Ввод / вывод пространство порта через его регистры пространства конфигурации.
В типичной системе прошивка (или же Операционная система ) запрашивает все шины PCI во время запуска (через Пространство конфигурации PCI ), чтобы узнать, какие устройства присутствуют и какие системные ресурсы (пространство памяти, пространство ввода-вывода, линии прерывания и т. д.) необходимы каждому. Затем он выделяет ресурсы и сообщает каждому устройству, каково их распределение.
Пространство конфигурации PCI также содержит небольшой объем информации о типе устройства, которая помогает операционной системе выбирать для нее драйверы устройств или, по крайней мере, вести диалог с пользователем о конфигурации системы.
Устройства могут иметь на борту ПЗУ содержащий исполняемый код для x86 или PA-RISC процессоры, Открытая прошивка водитель, или Дополнительное ПЗУ. Обычно они необходимы для устройств, используемых во время запуска системы, до того, как драйверы устройств будут загружены операционной системой.
Кроме того, есть Таймеры задержки PCI это механизм для Мастеринг шины PCI устройства для справедливого совместного использования шины PCI. «Удовлетворительно» в этом случае означает, что устройства не будут использовать такую большую часть доступной полосы пропускания шины PCI, чтобы другие устройства не могли выполнять необходимую работу. Обратите внимание, это не относится к PCI Express.
Это работает так: каждое устройство PCI, которое может работать в режиме шины-ведущего, должно иметь таймер, называемый таймером задержки, который ограничивает время, в течение которого устройство может удерживать шину PCI. Таймер запускается, когда устройство становится владельцем шины, и ведет обратный отсчет со скоростью тактовой частоты PCI. Когда счетчик достигает нуля, устройству требуется освободить шину. Если никакие другие устройства не ждут владения шиной, они могут просто снова захватить шину и передать больше данных.[16]
Прерывания
От устройств требуется соблюдение протокола, чтобы прерывать линии можно разделить. Шина PCI включает четыре линии прерывания, каждая из которых доступна каждому устройству. Однако они не подключены параллельно, как другие линии шины PCI. Позиции линий прерывания меняются между слотами, поэтому то, что кажется одному устройству строкой INTA #, является INTB # для следующего и INTC # для следующего. Однофункциональные устройства используют свой INTA # для сигнализации прерывания, поэтому нагрузка на устройство распределяется довольно равномерно по четырем доступным линиям прерывания. Это устраняет общую проблему с разделением прерываний.
Отображение линий прерывания PCI на линии прерывания системы через мост хоста PCI зависит от реализации. Код BIOS, зависящий от платформы, должен знать это и устанавливать поле «прерывание» в пространстве конфигурации каждого устройства, указывающее, к какому IRQ оно подключено.
Линии прерывания PCI срабатывает по уровню. Это было выбрано срабатывание по краю чтобы получить преимущество при обслуживании общей линии прерывания и для надежности: прерывания, запускаемые фронтом, легко пропустить.
В более поздних версиях спецификации PCI добавлена поддержка сигнальные прерывания. В этой системе устройство сигнализирует о своей потребности в обслуживании, выполняя запись в память, а не утверждая выделенную линию. Это снимает проблему нехватки линий прерывания. Даже если векторы прерываний по-прежнему используются совместно, он не страдает от проблем разделения прерываний, запускаемых по уровню. Это также решает проблему маршрутизации, потому что запись в память не изменяется непредсказуемо между устройством и хостом. Наконец, поскольку сигнализация сообщения внутриполосный, он решает некоторые проблемы синхронизации, которые могут возникнуть при опубликованных записях и из группы линии прерывания.
PCI Express вообще не имеет линий физического прерывания. Он использует исключительно прерывания, сигнализируемые сообщениями.
Стандартные технические характеристики оборудования
Эти спецификации представляют собой наиболее распространенную версию PCI, используемую в обычных ПК:
- 33,33 МГц Часы с синхронный переводы
- Пиковая скорость передачи 133МБ / с (133 мегабайты в секунду) для 32-разрядной шины (33,33 МГц × 32 бита ÷ 8 бит / байт = 133 МБ / с)
- 32-битный ширина автобуса
- 32- или 64-битное адресное пространство памяти (4ГиБ или 16EiB )
- 32-битное пространство порта ввода / вывода
- 256-байт (на устройство) пространство конфигурации
- 5-вольтовая сигнализация
- Переключение отраженной волны
Спецификация PCI также предоставляет опции для передачи сигналов 3,3 В, 64-битный ширина шины и частота 66 МГц, но они обычно не встречаются вне поддержки PCI-X на материнских платах серверов.
Арбитр шины PCI выполняет арбитраж шины между несколькими мастерами на шине PCI. На шине PCI может находиться любое количество мастеров шины, а также запросы к шине. Каждому мастеру шины выделена одна пара сигналов запроса и разрешения.
Напряжение карты и ключ
Типичные карты PCI имеют одну или две ключевые выемки, в зависимости от их сигнального напряжения. Карты, требующие 3,3 В, имеют выемку на расстоянии 56,21 мм от задней панели карты; Те, для которых требуется 5 В, имеют выемку на расстоянии 104,47 мм от задней панели. Это позволяет вставлять карты только в слоты с поддерживаемым ими напряжением. «Универсальные карты», принимающие любое напряжение, имеют оба ключевых паза.
Распиновка разъема
Разъем PCI определяется как имеющий 62 контакта на каждой стороне краевой соединитель, но два или четыре из них заменены ключевыми выемками, поэтому карта имеет 60 или 58 контактов с каждой стороны. Сторона A относится к «стороне припоя», а сторона B относится к «стороне компонента»: если карта удерживается коннектором вниз, на виде стороны A задняя панель будет справа, а на виде стороны B. будет иметь заднюю панель слева. Распиновка сторон B и A выглядит следующим образом, если смотреть вниз в разъем материнской платы (контакты A1 и B1 находятся ближе всего к задней панели).[15][17][18]
Штырь | Сторона B | Сторона А | Комментарии | ||
---|---|---|---|---|---|
1 | −12 В | TRST № | JTAG контакты порта (необязательно) | ||
2 | TCK | +12 В | |||
3 | Земля | ТМС | |||
4 | TDO | TDI | |||
5 | +5 В | +5 В | |||
6 | +5 В | INTA # | Линии прерывания (открытый сток) | ||
7 | INTB # | INTC # | |||
8 | INTD # | +5 В | |||
9 | PRSNT1 # | Зарезервированный | Низкий уровень означает, что требуется мощность 7,5 или 25 Вт | ||
10 | Зарезервированный | IOPWR | +5 В или +3,3 В | ||
11 | PRSNT2 # | Зарезервированный | Низкий уровень означает, что требуется мощность 7,5 или 15 Вт | ||
12 | Земля | Земля | Ключевой вырез для карт с поддержкой 3.3 В | ||
13 | Земля | Земля | |||
14 | Зарезервированный | 3.3 В доп. | Резервная мощность (необязательный) | ||
15 | Земля | RST # | Сброс автобуса | ||
16 | CLK | IOPWR | Частота 33/66 МГц | ||
17 | Земля | GNT # | Грант автобуса с материнской платы на карту | ||
18 | REQ # | Земля | Запрос шины с карты на материнскую плату | ||
19 | IOPWR | PME # | Событие управления питанием (опционально) 3,3 В, открытый сток, активный низкий уровень.[19] | ||
20 | AD [31] | AD [30] | Шина адреса / данных (верхняя половина) | ||
21 | AD [29] | +3,3 В | |||
22 | Земля | AD [28] | |||
23 | AD [27] | AD [26] | |||
24 | AD [25] | Земля | |||
25 | +3,3 В | AD [24] | |||
26 | C / BE [3] # | IDSEL | |||
27 | AD [23] | +3,3 В | |||
28 | Земля | AD [22] | |||
29 | AD [21] | AD [20] | |||
30 | AD [19] | Земля | |||
31 | +3,3 В | AD [18] | |||
32 | Нашей эры [17] | AD [16] | |||
33 | C / BE [2] # | +3,3 В | |||
34 | Земля | РАМКА# | Идет трансфер на автобусе | ||
35 | IRDY # | Земля | Инициатор готов | ||
36 | +3,3 В | TRDY # | Цель готова | ||
37 | DEVSEL # | Земля | Цель выбрана | ||
38 | PCIXCAP | Земля | ОСТАНОВКА# | PCI-X способный; Остановка целевых запросов | |
39 | ЗАМОК# | +3,3 В | Заблокированная транзакция | ||
40 | PERR # | SMBCLK | SDONE | Ошибка четности; SMBus часы или Snoop done (устарело) | |
41 | +3,3 В | SMBDAT | SBO # | Данные SMBus или Snoop backoff (устарело) | |
42 | SERR № | Земля | Системная ошибка | ||
43 | +3,3 В | PAR | Четность по AD [31:00] и C / BE [3: 0] # | ||
44 | C / BE [1] # | AD [15] | Шина адреса / данных (верхняя половина) | ||
45 | AD [14] | +3,3 В | |||
46 | Земля | AD [13] | |||
47 | AD [12] | AD [11] | |||
48 | AD [10] | Земля | |||
49 | M66EN | Земля | AD [09] | ||
50 | Земля | Земля | Ключевой вырез для карт с поддержкой 5 V | ||
51 | Земля | Земля | |||
52 | AD [08] | C / BE [0] # | Шина адреса / данных (нижняя половина) | ||
53 | AD [07] | +3,3 В | |||
54 | +3,3 В | AD [06] | |||
55 | AD [05] | AD [04] | |||
56 | AD [03] | Земля | |||
57 | Земля | AD [02] | |||
58 | AD [01] | AD [00] | |||
59 | IOPWR | IOPWR | |||
60 | ACK64 # | REQ64 # | Для 64-битного расширения; нет подключения для 32-битных устройств. | ||
61 | +5 В | +5 В | |||
62 | +5 В | +5 В |
64-битный PCI расширяет это дополнительными 32 контактами на каждой стороне, которые обеспечивают AD [63:32], C / BE [7: 4] #, сигнал четности PAR64 и несколько контактов питания и заземления.
Контакт заземления | Опорный сигнал нулевого напряжения |
---|---|
Контакт питания | Подает питание на карту PCI |
Выходной контакт | Управляется картой PCI, полученной материнской платой |
Выход инициатора | Управляется мастером / инициатором, получено целью |
Сигнал ввода / вывода | Может управляться инициатором или целью, в зависимости от операции |
Целевой выход | Управляется целью, получено инициатором / мастером |
Вход | Управляется материнской платой, полученной картой PCI |
Открытый сток | Может быть опущен и / или обнаружен несколькими картами |
Зарезервированный | В настоящее время не используется, не подключайтесь |
Большинство линий подключаются к каждому слоту параллельно. Исключения составляют:
- Каждый слот имеет свой собственный выход REQ # и вход GNT # от арбитра материнской платы.
- Каждый слот имеет свою собственную линию IDSEL, обычно подключенную к определенной линии AD.
- TDO подключается шлейфом к TDI следующего слота. Карты без JTAG суппорт должен подключить TDI к TDO, чтобы не порвать цепь.
- PRSNT1 # и PRSNT2 # для каждого слота имеют свои собственные подтягивающие резисторы на материнской плате. Материнская плата может (но не обязана) распознавать эти контакты для определения наличия плат PCI и их требований к питанию.
- REQ64 # и ACK64 # по отдельности загружаются только в 32-битные слоты.
- Линии прерывания с INTA # по INTD # подключены ко всем слотам в разном порядке. (INTA # в одном слоте - INTB # в следующем и INTC # в следующем.)
Примечания:
- IOPWR составляет +3,3 В или +5 В, в зависимости от объединительной платы. Слоты также имеют выступ в одном из двух мест, который предотвращает вставку карт, не имеющих соответствующей ключевой выемки, что указывает на поддержку этого стандарта напряжения. Универсальные карты имеют оба ключевых паза и используют IOPWR для определения уровней сигналов ввода-вывода.
- PCI SIG настоятельно поддерживает сигнализацию 3,3 В PCI,[15] требует поддержки, начиная со стандартной версии 2.3,[17] но большинство материнских плат ПК используют вариант 5 В. Таким образом, хотя многие доступные в настоящее время карты PCI поддерживают обе карты и имеют две ключевые отметки, указывающие на это, на рынке все еще существует большое количество карт только для 5 V.
- Контакт M66EN является дополнительным заземлением на шинах PCI 5 В, имеющихся в большинстве материнских плат ПК. Карты и материнские платы, которые не поддерживают работу на частоте 66 МГц, также заземляют этот контакт. Если все участники поддерживают работу на частоте 66 МГц, подтягивающий резистор на материнской плате поднимает этот сигнал до высокого уровня, и разрешается работа на частоте 66 МГц. Контакт все еще подключен к земле через конденсаторы связи на каждой карте, чтобы сохранить ее AC функция защиты.
- Вывод PCIXCAP - это дополнительное заземление на шинах и картах PCI. Если все карты и материнская плата поддерживают PCI-X По протоколу подтягивающий резистор на материнской плате поднимает этот сигнал до высокого уровня, и включается работа PCI-X. Вывод по-прежнему соединен с землей через разделительные конденсаторы на каждой карте, чтобы сохранить функцию экранирования переменного тока.
- По крайней мере, один из PRSNT1 # и PRSNT2 # должен быть заземлен картой. Выбранная комбинация указывает общую требуемую мощность карты (25 Вт, 15 Вт или 7,5 Вт).
- SBO # и SDONE - это сигналы от контроллера кеша к текущей цели. Они не являются выходами инициатора, но окрашены таким образом, потому что являются целевыми входами.
- PME # (19 А) - Событие управления питанием (необязательно), которое поддерживается в PCI версия 2.2 и выше. Это 3,3 В, открытый сток, активный низкий сигнал.[19] Карты PCI могут использовать этот сигнал для отправки и приема PME напрямую через разъем PCI, что устраняет необходимость в специальной Кабель Wake-on-LAN.[20]
Сочетание 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-битные разъемы с некоторой потерей производительности.[21][22] Примером этого является Adaptec 29160 64-бит. SCSI интерфейсная карта.[23] Однако некоторые 64-битные карты PCI-X не работают в стандартных 32-битных слотах PCI.[24]
Установка 64-разрядной карты PCI-X в 32-разрядный слот оставит 64-разрядную часть краевого разъема карты неподключенной и свисающей. Для этого необходимо, чтобы компоненты материнской платы не располагались так, чтобы механически блокировать выступающую часть краевого разъема карты.
Физические размеры
Высота кронштейнов PCI:
Длины карты PCI (стандартный кронштейн и 3,3 В):[27]
- Короткая карта: 169,52 мм;
- Длинная карта: 313,78 мм.
Длины карт PCI (низкопрофильный кронштейн и 3,3 В):[28]
- MD1: 121,79 мм;
- MD2: 169,52 мм;
- MD3: 243,18 мм.
Кронштейн в полный рост
Низкопрофильный
Мини PCI
Мини PCI был добавлен в PCI версии 2.2 для использования в ноутбуки; он использует 32-битную шину 33 МГц с подключениями с питанием (только 3,3 В; 5 В ограничено до 100 мА) и поддерживает автобусный мастеринг и DMA. Стандартный размер карт Mini PCI составляет примерно четверть от их полноразмерных аналогов. Доступа к карте снаружи нет, в отличие от настольных PCI-карт с планками для крепления разъемов. Это ограничивает виды функций, которые может выполнять карта Mini PCI.
Были разработаны многие устройства Mini PCI, такие как Вай фай, Fast Ethernet, Bluetooth, модемы (довольно часто Winmodems ), звуковые карты, криптографические ускорители, SCSI, IDE –ATA, SATA контроллеры и комбинированные карты. Карты Mini PCI могут использоваться с обычным оборудованием, оборудованным PCI, с использованием Mini PCI-to-PCI. конвертеры. Mini PCI был заменен гораздо более узким Мини-карта PCI Express
Технические подробности Mini PCI
Карты Mini 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 можно было установить для внешнего доступа.
Тип | Карта на внешний край хост-система | Коннектор | Размер (мм × мм × мм) | Комментарии |
---|---|---|---|---|
Я | Нет | 100-контактный штабелирование | 7.5 × 70 × 45 | Большой размер Z (7,5 мм) |
IB | 5.5 × 70 × 45 | Меньший размер Z (5,5 мм) | ||
IIA | да | 17.44 × 70 | × 45Большой размер Z (17,44 мм) | |
МИБ | 5.5 × 78 × 45 | Меньший размер Z (5,5 мм) | ||
IIIA | Нет | 124-контактный край карты | 2.4 × 59.6 × 50.95 | Большой размер Y (50,95 мм) |
IIIB | 2.4 × 59.6 × 44.6 | Меньший размер Y (44,6 мм) |
Mini PCI отличается от 144-контактного Micro PCI.[29]
Транзакции шины PCI
Трафик шины PCI состоит из серии транзакций шины PCI. Каждая транзакция состоит из адресная фаза за которым следует один или несколько фазы данных. Направление фаз данных может быть от инициатора к цели (транзакция записи) или наоборот (транзакция чтения), но все фазы данных должны быть в одном направлении. Любая из сторон может в любой момент приостановить или остановить этапы обработки данных. (Один из распространенных примеров - низкопроизводительное устройство PCI, которое не поддерживает всплеск транзакций, и всегда останавливает транзакцию после первой фазы данных.)
Любое устройство PCI может инициировать транзакцию. Во-первых, он должен запросить разрешение у арбитра шины PCI на материнской плате. Арбитр предоставляет разрешение одному из запрашивающих устройств. Инициатор начинает фазу адресации с широковещательной передачи 32-битного адреса плюс 4-битный код команды, затем ожидает ответа от цели. Все остальные устройства проверяют этот адрес, и через несколько циклов одно из них отвечает.
64-битная адресация выполняется с использованием двухэтапной адресной фазы. Инициатор передает в широковещательном режиме 32 младших адресных бита в сопровождении специального командного кода "цикла двойного адреса". Устройства, не поддерживающие 64-битную адресацию, могут просто не отвечать на этот код команды. В следующем цикле инициатор передает старшие 32 адресных бита плюс реальный код команды. С этого момента транзакция работает идентично. Чтобы обеспечить совместимость с 32-битными устройствами PCI, запрещено использовать двойной адресный цикл, если это не необходимо, то есть если все биты адреса высокого порядка равны нулю.
В то время как шина PCI передает 32 бита на фазу данных, инициатор передает 4 сигнала разрешения активного младшего байта, указывающие, какой 8 бит байты считаются важными. В частности, запись должна затрагивать только разрешенные байты в целевом устройстве PCI. Они не имеют большого значения для чтения из памяти, но чтение ввода-вывода может иметь побочные эффекты. Стандарт PCI явно разрешает фазу данных без включенных байтов, которая должна вести себя как бездействие.
Адресные пространства PCI
PCI имеет три адресных пространства: память, адрес ввода-вывода и конфигурация.
Адреса памяти имеют размер 32 бита (опционально 64 бита), поддержка кеширование и могут быть разорванные транзакции.
Адреса ввода-вывода предназначены для совместимости с Intel архитектура x86 адресное пространство порта ввода / вывода. Хотя спецификация шины PCI допускает пакетные транзакции в любом адресном пространстве, большинство устройств поддерживают ее только для адресов памяти, но не для ввода-вывода.
Ну наконец то, Конфигурационное пространство PCI обеспечивает доступ к 256 байтам специальных регистров конфигурации на каждое устройство PCI. Каждый слот PCI получает свой собственный диапазон адресов пространства конфигурации. Регистры используются для настройки памяти устройств и диапазонов адресов ввода-вывода, на которые они должны отвечать от инициаторов транзакций. При первом включении компьютера все устройства PCI реагируют только на доступ к их пространству конфигурации. BIOS компьютера сканирует устройства и назначает им диапазоны адресов памяти и ввода-вывода.
Если адрес не запрашивается каким-либо устройством, фаза адресации инициатора транзакции истекает по тайм-ауту, в результате чего инициатор прерывает операцию. В случае чтения обычно для считываемого значения данных (0xFFFFFFFF) обычно указываются все единицы. Поэтому устройства PCI обычно стараются избегать использования значения «все единицы» в важных регистрах состояния, чтобы такая ошибка могла быть легко обнаружена программным обеспечением.
Коды команд PCI
Существует 16 возможных 4-битных кодов команд, и 12 из них назначены. За исключением уникального цикла двойного адреса, младший бит кода команды указывает, являются ли следующие фазы данных чтением (данные, отправленные от цели к инициатору) или записью (данные, отправленные от инициатора к цели). Цели PCI должны проверять код команды, а также адрес и не отвечать на этапы адресации, которые определяют неподдерживаемый код команды.
Команды, относящиеся к строкам кеша, зависят от Конфигурационное пространство PCI правильно настроен регистр размера строки кэша; их нельзя использовать, пока это не будет сделано.
- 0000: подтверждение прерывания
- Это особая форма цикла чтения, неявно адресованная контроллеру прерываний, который возвращает вектор прерывания. 32-битное адресное поле игнорируется. Одна из возможных реализаций - создание цикла подтверждения прерывания на шине ISA с использованием моста шины PCI / ISA. Эта команда предназначена для Совместимость с IBM PC; если нет Intel 8259 в стиле контроллера прерываний на шине PCI, этот цикл никогда не нужно использовать.
- 0001: Специальный цикл
- Этот цикл представляет собой специальную широковещательную запись системных событий, в которых может быть интересна карта PCI. Поле адреса специального цикла игнорируется, но за ним следует фаза данных, содержащая сообщение полезной нагрузки. Определенные в настоящее время сообщения сообщают, что процессор по какой-то причине останавливается (например, для экономии энергии). Ни одно устройство никогда не реагирует на этот цикл; он всегда завершается прерыванием мастера после того, как данные остаются на шине не менее 4 циклов.
- 0010: Чтение ввода-вывода
- Это выполняет чтение из области ввода-вывода. Предоставляются все 32 бита адреса чтения, поэтому устройство может (по соображениям совместимости) реализовать регистры ввода-вывода размером менее 4 байтов. Если байт разрешает запрашивать данные вне диапазона адресов, поддерживаемого устройством PCI (например, 4-байтовое чтение из устройства, которое поддерживает только 2 байта адресного пространства ввода-вывода), он должен быть завершен с помощью прерывания цели. Допускается несколько циклов данных с использованием линейного (простого увеличения) упорядочения пакетов.
- Стандарт PCI не поощряет использование пространства ввода-вывода в новых устройствах, предпочитая, чтобы как можно больше делалось через отображение основной памяти.
- 0011: Запись ввода / вывода
- Это выполняет запись в пространство ввода-вывода.
- 010Икс: Зарезервированный
- Устройство PCI не должно отвечать на адресный цикл этими кодами команд.
- 0110: чтение из памяти
- Это выполняет цикл чтения из области памяти. Поскольку наименьшее пространство памяти, которое разрешено реализовать устройству PCI, составляет 16 байт,[17][15]:§6.5.2.1 два младших бита адреса не нужны на этапе адресации; Эквивалентная информация будет поступать на этапах передачи данных в виде сигналов выбора байта. Вместо этого они определяют порядок, в котором должны быть возвращены пакетные данные.[17][15]:§3.2.2.2 Если устройство не поддерживает запрошенный порядок, оно должно предоставить первое слово и затем отключиться.
- Если область памяти помечена как «доступная для предварительной выборки», то целевое устройство должно игнорировать сигналы выбора байта при чтении из памяти и всегда возвращать 32 действительных бита.
- 0111: Запись в память
- Это работает аналогично чтению из памяти. Сигналы выбора байта более важны при записи, так как невыбранные байты не должны записываться в память.
- Как правило, операции записи PCI выполняются быстрее, чем операции чтения PCI, поскольку устройство может буферизовать входящие данные записи и быстрее освобождать шину. Для чтения он должен отложить фазу данных до тех пор, пока данные не будут получены.
- 100Икс: Зарезервированный
- Устройство PCI не должно отвечать на адресный цикл этими кодами команд.
- 1010: чтение конфигурации
- Это похоже на чтение ввода-вывода, но чтение из пространства конфигурации PCI. Устройство должно отвечать только в том случае, если младшие 11 бит адреса определяют функцию и регистр, которые оно реализует, и если заявлен специальный сигнал IDSEL. Он должен игнорировать старший 21 бит. Пакетные чтения (с использованием линейного увеличения) разрешены в пространстве конфигурации PCI.
- В отличие от пространства ввода-вывода, стандартные регистры конфигурации PCI определены таким образом, что чтение никогда не нарушает состояние устройства. Устройство может иметь регистры пространства конфигурации, превышающие стандартные 64 байта, которые имеют побочные эффекты чтения, но это редко.[30]
- Доступ к пространству конфигурации часто имеет несколько циклов задержки, чтобы позволить линиям IDSEL стабилизироваться, что делает их медленнее, чем другие формы доступа. Кроме того, для доступа к пространству конфигурации требуется многоэтапная операция, а не одна машинная команда. Таким образом, их лучше избегать во время обычной работы устройства PCI.
- 1011: Запись конфигурации
- Это работает аналогично чтению конфигурации.
- 1100: чтение из памяти несколько раз
- Эта команда идентична обычному чтению из памяти, но включает подсказку, что длинный пакет чтения будет продолжаться после конца текущей строки кэша, и цель должна внутренне предварительная выборка большой объем данных. Целевому объекту всегда разрешается рассматривать это как синоним общего чтения из памяти.
- 1101: Цикл двойного адреса
- При доступе к адресу памяти, для представления которого требуется более 32 битов, фаза адресации начинается с этой команды и младших 32 бит адреса, за которым следует второй цикл с фактической командой и старшими 32 битами адреса. Цели PCI, которые не поддерживают 64-битную адресацию, могут просто рассматривать это как другой зарезервированный код команды и не отвечать на него. Этот код команды может использоваться только с ненулевым старшим адресным словом; Запрещается использовать этот цикл без необходимости.
- 1110: строка чтения из памяти
- Эта команда идентична обычному чтению из памяти, но включает подсказку, что чтение будет продолжаться до конца строки кэша. Целевому объекту всегда разрешается рассматривать это как синоним общего чтения из памяти.
- 1111: Запись в память и недействительность
- Эта команда идентична обычной записи в память, но дает гарантию, что одна или несколько целых строк кэша будут записаны с включенным выбором всех байтов. Это оптимизация для кешей обратной записи, отслеживающих шину. Обычно кэш с обратной записью, содержащий грязные данные, должен прервать операцию записи на достаточно долгое время, чтобы сначала записать свои собственные грязные данные. Если запись выполняется с помощью этой команды, данные, которые должны быть записаны обратно, гарантированно не имеют отношения к делу и могут быть просто признаны недействительными в кэше обратной записи.
- Эта оптимизация влияет только на кэш отслеживания и не влияет на цель, которая может рассматривать это как синоним команды записи в память.
Задержка шины PCI
Вскоре после обнародования спецификации PCI было обнаружено, что длительные транзакции некоторых устройств из-за медленных подтверждений, длинных пакетов данных или некоторой комбинации могут вызвать опустошение буфера или переполнение в других устройствах. Рекомендации по срокам отдельных фаз в версии 2.0 стали обязательными в версии 2.1:[31]:3
- Цель должна быть в состоянии завершить фазу начальных данных (подтвердить TRDY # и / или STOP #) в течение 16 циклов после начала транзакции.
- Инициатор должен завершить каждую фазу данных (подтвердить IRDY #) в течение 8 циклов.
Кроме того, начиная с версии 2.1, все инициаторы, способные передавать более двух фаз данных, должны реализовывать программируемый таймер задержки. Таймер начинает отсчет тактовых циклов при запуске транзакции (инициатор устанавливает FRAME #). Если таймер истек и арбитр удалил GNT #, тогда инициатор должен завершить транзакцию при следующей законной возможности. Обычно это следующая фаза данных, но транзакции записи в память и недействительности должны продолжаться до конца строки кэша.
Отложенные транзакции
Устройства, не соответствующие этим временным ограничениям, должны использовать комбинацию опубликовал пишет (для записи в память) и отложенных транзакций (для других операций записи и всех операций чтения). В отложенной транзакции цель записывает транзакцию (включая данные записи) внутренне и прерывает (утверждает STOP #, а не TRDY #) первую фазу данных. Инициатор должен повторить ту же транзакцию позже. Тем временем цель внутренне выполняет транзакцию и ждет повторной транзакции. При обнаружении повторной транзакции доставляется буферизованный результат.
Устройство может быть целью других транзакций при выполнении одной отложенной транзакции; it must remember the transaction type, address, byte selects and (if a write) data value, and only complete the correct transaction.
If the target has a limit on the number of delayed transactions that it can record internally (simple targets may impose a limit of 1), it will force those transactions to retry without recording them. They will be dealt with when the current delayed transaction is completed. If two initiators attempt the same transaction, a delayed transaction begun by one may have its result delivered to the other; this is harmless.
A target abandons a delayed transaction when a retry succeeds in delivering the buffered result, the bus is reset, or when 215=32768 clock cycles (approximately 1 ms) elapse without seeing a retry. The latter should never happen in normal operation, but it prevents a тупик of the whole bus if one initiator is reset or malfunctions.
Мосты шины PCI
The PCI standard permits multiple independent PCI buses to be connected by bus bridges that will forward operations on one bus to another when required. Although PCI tends not to use many bus bridges, PCI Express systems use many PCI-to-PCI bridge called PCI Express Root Port; each PCI Express slot appears to be a separate bus, connected by a bridge to the others. The PCI host bridge (usually Северный мост in x86 platforms) interconnect between CPU, main memory and PCI bus.[32]
Posted writes
Generally, when a bus bridge sees a transaction on one bus that must be forwarded to the other, the original transaction must wait until the forwarded transaction completes before a result is ready. One notable exception occurs in the case of memory writes. Here, the bridge may record the write data internally (if it has room) and signal completion of the write before the forwarded write has completed. Or, indeed, before it has begun. Such "sent but not yet arrived" writes are referred to as "posted writes", by analogy with a postal mail message. Although they offer great opportunity for performance gains, the rules governing what is permissible are somewhat intricate.[33]
Combining, merging, and collapsing
The PCI standard permits bus bridges to convert multiple bus transactions into one larger transaction under certain situations. This can improve the efficiency of the PCI bus.
- Объединение
- Write transactions to consecutive addresses may be combined into a longer burst write, as long as the order of the accesses in the burst is the same as the order of the original writes. It is permissible to insert extra data phases with all byte enables turned off if the writes are almost consecutive.
- Слияние
- Multiple writes to disjoint portions of the same word may be merged into a single write with multiple byte enables asserted. In this case, writes that were presented to the bus bridge in a particular order are merged so they occur at the same time when forwarded.
- Рушится
- Multiple writes to the same byte or bytes may нет be combined, for example, by performing only the second write and skipping the first write that was overwritten. This is because the PCI specification permits writes to have side effects.
PCI bus signals
PCI bus transactions are controlled by five main control signals, two driven by the initiator of a transaction (FRAME# and IRDY#), and three driven by the target (DEVSEL#, TRDY#, and STOP#). There are two additional arbitration signals (REQ# and GNT#) which are used to obtain permission to initiate a transaction. Все активный низкий, meaning that the active or утверждал state is a low Напряжение. Pull-up resistors on the motherboard ensure they will remain high (inactive or deasserted) if not driven by any device, but the PCI bus does not depend on the resistors to изменять the signal level; all devices drive the signals high for one cycle before ceasing to drive the signals.
Signal timing
All PCI bus signals are sampled on the rising edge of the clock. Signals nominally change on the falling edge of the clock, giving each PCI device approximately one half a clock cycle to decide how to respond to the signals it observed on the rising edge, and one half a clock cycle to transmit its response to the other device.
The PCI bus requires that every time the device driving a PCI bus signal changes, one turnaround cycle must elapse between the time the one device stops driving the signal and the other device starts. Without this, there might be a period when both devices were driving the signal, which would interfere with bus operation.
The combination of this turnaround cycle and the requirement to drive a control line high for one cycle before ceasing to drive it means that each of the main control lines must be high for a minimum of two cycles when changing owners. The PCI bus protocol is designed so this is rarely a limitation; only in a few special cases (notably fast back-to-back transactions ) is it necessary to insert additional delay to meet this requirement.
Арбитраж
Any device on a PCI bus that is capable of acting as a bus master may initiate a transaction with any other device. To ensure that only one transaction is initiated at a time, each master must first wait for a bus grant signal, GNT#, from an arbiter located on the motherboard. Each device has a separate request line REQ# that requests the bus, but the arbiter may "park" the bus grant signal at any device if there are no current requests.
The arbiter may remove GNT# at any time. A device which loses GNT# may complete its current transaction, but may not start one (by asserting FRAME#) unless it observes GNT# asserted the cycle before it begins.
The arbiter may also provide GNT# at any time, including during another master's transaction. During a transaction, either FRAME# or IRDY# or both are asserted; when both are deasserted, the bus is idle. A device may initiate a transaction at any time that GNT# is asserted and the bus is idle.
Address phase
A PCI bus transaction begins with an address phase. The initiator, seeing that it has GNT# and the bus is idle, drives the target address onto the AD[31:0] lines, the associated command (e.g. memory read, or I/O write) on the C/BE[3:0]# lines, and pulls FRAME# low.
Each other device examines the address and command and decides whether to respond as the target by asserting DEVSEL#. A device must respond by asserting DEVSEL# within 3 cycles. Devices which promise to respond within 1 or 2 cycles are said to have "fast DEVSEL" or "medium DEVSEL", respectively. (Actually, the time to respond is 2.5 cycles, since PCI devices must transmit all signals half a cycle early so that they can be received three cycles later.)
Note that a device must защелка the address on the first cycle; the initiator is required to remove the address and command from the bus on the following cycle, even before receiving a DEVSEL# response. The additional time is available only for interpreting the address and command after it is captured.
On the fifth cycle of the address phase (or earlier if all other devices have medium DEVSEL or faster), a catch-all "subtractive decoding" is allowed for some address ranges. This is commonly used by an Автобус ISA bridge for addresses within its range (24 bits for memory and 16 bits for I/O).
On the sixth cycle, if there has been no response, the initiator may abort the transaction by deasserting FRAME#. Это известно как master abort termination and it is customary for PCI bus bridges to return all-ones data (0xFFFFFFFF) in this case. PCI devices therefore are generally designed to avoid using the all-ones value in important status registers, so that such an error can be easily detected by software.
Address phase timing
_ 0_ 1_ 2_ 3_ 4_ 5_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ ___ GNT# \___/XXXXXXXXXXXXXXXXXXX (GNT# Irrelevant after cycle has started) _______ FRAME# \___________________ ___ AD[31:0] -------<___>--------------- (Address only valid for one cycle.) ___ _______________ C/BE[3:0]# -------<___X_______________ (Command, then first data phase byte enables) _______________________ DEVSEL# \___\___\___\___ Fast Med Slow Subtractive _ _ _ _ _ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ 0 1 2 3 4 5
On the rising edge of clock 0, the initiator observes FRAME# and IRDY# both high, and GNT# low, so it drives the address, command, and asserts FRAME# in time for the rising edge of clock 1. Targets latch the address and begin decoding it. They may respond with DEVSEL# in time for clock 2 (fast DEVSEL), 3 (medium) or 4 (slow). Subtractive decode devices, seeing no other response by clock 4, may respond on clock 5. If the master does not see a response by clock 5, it will terminate the transaction and remove FRAME# on clock 6.
TRDY# and STOP# are deasserted (high) during the address phase. The initiator may assert IRDY# as soon as it is ready to transfer data, which could theoretically be as soon as clock 2.
Dual-cycle address
To allow 64-bit addressing, a master will present the address over two consecutive cycles. First, it sends the low-order address bits with a special "dual-cycle address" command on the C/BE[3:0]#. On the following cycle, it sends the high-order address bits and the actual command. Dual-address cycles are forbidden if the high-order address bits are zero, so devices which do not support 64-bit addressing can simply not respond to dual cycle commands.
_ 0_ 1_ 2_ 3_ 4_ 5_ 6_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ ___ GNT# \___/XXXXXXXXXXXXXXXXXXXXXXX _______ FRAME# \_______________________ ___ ___ AD[31:0] -------<___X___>--------------- (Low, then high bits) ___ ___ _______________ C/BE[3:0]# -------<___X___X_______________ (DAC, then actual command) ___________________________ DEVSEL# \___\___\___\___ Fast Med Slow _ _ _ _ _ _ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ 0 1 2 3 4 5 6
Configuration access
Addresses for PCI configuration space access are decoded specially. For these, the low-order address lines specify the offset of the desired PCI configuration register, and the high-order address lines are ignored. Instead, an additional address signal, the IDSEL input, must be high before a device may assert DEVSEL#. Each slot connects a different high-order address line to the IDSEL pin, and is selected using one-hot encoding on the upper address lines.
Data phases
After the address phase (specifically, beginning with the cycle that DEVSEL# goes low) comes a burst of one or more data phases. In all cases, the initiator drives active-low byte select signals on the C/BE[3:0]# lines, but the data on the AD[31:0] may be driven by the initiator (in case of writes) or target (in case of reads).
During data phases, the C/BE[3:0]# lines are interpreted as active-low byte enables. In case of a write, the asserted signals indicate which of the four bytes on the AD bus are to be written to the addressed location. In the case of a read, they indicate which bytes the initiator is interested in. For reads, it is always legal to ignore the byte enable signals and simply return all 32 bits; cacheable memory resources are required to always return 32 valid bits. The byte enables are mainly useful for I/O space accesses where reads have side effects.
A data phase with all four C/BE# lines deasserted is explicitly permitted by the PCI standard, and must have no effect on the target other than to advance the address in the burst access in progress.
The data phase continues until both parties are ready to complete the transfer and continue to the next data phase. The initiator asserts IRDY# (initiator ready) when it no longer needs to wait, while the target asserts TRDY# (target ready). Whichever side is providing the data must drive it on the AD bus before asserting its ready signal.
Once one of the participants asserts its ready signal, it may not become un-ready or otherwise alter its control signals until the end of the data phase. The data recipient must latch the AD bus each cycle until it sees both IRDY# and TRDY# asserted, which marks the end of the current data phase and indicates that the just-latched data is the word to be transferred.
To maintain full burst speed, the data sender then has half a clock cycle after seeing both IRDY# and TRDY# asserted to drive the next word onto the AD bus.
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ 9_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ ___ _______ ___ ___ ___ AD[31:0] ---<___XXXXXXXXX_______XXXXX___X___X___ (If a write) ___ ___ _______ ___ ___ AD[31:0] ---<___>~~~This continues the address cycle illustrated above, assuming a single address cycle with medium DEVSEL, so the target responds in time for clock 3.However, at that time, neither side is ready to transfer data. For clock 4, the initiator is ready, but the target is not. On clock 5, both are ready, and a data transfer takes place (as indicated by the vertical lines). For clock 6, the target is ready to transfer, but the initiator is not. On clock 7, the initiator becomes ready, and data is transferred. For clocks 8 and 9, both sides remain ready to transfer data, and data is transferred at the maximum possible rate (32 bits per clock cycle).
In case of a read, clock 2 is reserved for turning around the AD bus, so the target is not permitted to drive data on the bus even if it is capable of fast DEVSEL.
Fast DEVSEL# on reads
A target that supports fast DEVSEL could in theory begin responding to a read the cycle after the address is presented. This cycle is, however, reserved for AD bus turnaround. Thus, a target may not drive the AD bus (and thus may not assert TRDY#) on the second cycle of a transaction. Note that most targets will not be this fast and will not need any special logic to enforce this condition.
Ending transactions
Either side may request that a burst end after the current data phase. Simple PCI devices that do not support multi-word bursts will always request this immediately. Even devices that do support bursts will have some limit on the maximum length they can support, such as the end of their addressable memory.
Initiator burst termination
The initiator can mark any data phase as the final one in a transaction by deasserting FRAME# at the same time as it asserts IRDY#. The cycle after the target asserts TRDY#, the final data transfer is complete, both sides deassert their respective RDY# signals, and the bus is idle again. The master may not deassert FRAME# before asserting IRDY#, nor may it deassert FRAME# while waiting, with IRDY# asserted, for the target to assert TRDY#.
The only minor exception is a master abort termination, when no target responds with DEVSEL#. Obviously, it is pointless to wait for TRDY# in such a case. However, even in this case, the master must assert IRDY# for at least one cycle after deasserting FRAME#. (Commonly, a master will assert IRDY# before receiving DEVSEL#, so it must simply hold IRDY# asserted for one cycle longer.) This is to ensure that bus turnaround timing rules are obeyed on the FRAME# line.
Target burst termination
The target requests the initiator end a burst by asserting STOP#. The initiator will then end the transaction by deasserting FRAME# at the next legal opportunity; if it wishes to transfer more data, it will continue in a separate transaction. There are several ways for the target to do this:
- Disconnect with data
- If the target asserts STOP# and TRDY# at the same time, this indicates that the target wishes this to be the last data phase. For example, a target that does not support burst transfers will always do this to force single-word PCI transactions. This is the most efficient way for a target to end a burst.
- Disconnect without data
- If the target asserts STOP# without asserting TRDY#, this indicates that the target wishes to stop without transferring data. STOP# is considered equivalent to TRDY# for the purpose of ending a data phase, but no data is transferred.
- Повторить
- A Disconnect without data before transferring any data is a повторить попытку, and unlike other PCI transactions, PCI initiators are required to pause slightly before continuing the operation. See the PCI specification for details.
- Target abort
- Normally, a target holds DEVSEL# asserted through the last data phase. However, if a target deasserts DEVSEL# before disconnecting without data (asserting STOP#), this indicates a target abort, which is a fatal error condition. The initiator may not retry, and typically treats it as a ошибка шины. Note that a target may not deassert DEVSEL# while waiting with TRDY# or STOP# low; it must do this at the beginning of a data phase.
There will always be at least one more cycle after a target-initiated disconnection, to allow the master to deassert FRAME#. There are two sub-cases, which take the same amount of time, but one requires an additional data phase:
- Disconnect-A
- If the initiator observes STOP# before asserting its own IRDY#, then it can end the burst by deasserting FRAME# at the same time as it asserts IRDY#, ending the burst after the current data phase.
- Disconnect-B
- If the initiator has already asserted IRDY# (without deasserting FRAME#) by the time it observes the target's STOP#, it is committed to an additional data phase. The target must wait through an additional data phase, holding STOP# asserted without TRDY#, before the transaction can end.
If the initiator ends the burst at the same time as the target requests disconnection, there is no additional bus cycle.
Burst addressing
For memory space accesses, the words in a burst may be accessed in several orders. The unnecessary low-order address bits AD[1:0] are used to convey the initiator's requested order. A target which does not support a particular order must terminate the burst after the first word. Some of these orders depend on the cache line size, which is configurable on all PCI devices.
PCI burst ordering A[1] A[0] Burst order (with 16-byte cache line) 0 0 Linear incrementing (0x0C, 0x10, 0x14, 0x18, 0x1C, ...) 0 1 Cacheline toggle (0x0C, 0x08, 0x04, 0x00, 0x1C, 0x18, ...) 1 0 Cacheline wrap (0x0C, 0x00, 0x04, 0x08, 0x1C, 0x10, ...) 1 1 Reserved (disconnect after first transfer) If the starting offset within the cache line is zero, all of these modes reduce to the same order.
Cache line toggle and cache line wrap modes are two forms of critical-word-first cache line fetching. Toggle mode XORs the supplied address with an incrementing counter. This is the native order for Intel 486 and Pentium processors. It has the advantage that it is not necessary to know the cache line size to implement it.
PCI version 2.1 obsoleted toggle mode and added the cache line wrap mode,[31]:2 where fetching proceeds linearly, wrapping around at the end of each cache line. When one cache line is completely fetched, fetching jumps to the starting offset in the next cache line.
Note that most PCI devices only support a limited range of typical cache line sizes; if the cache line size is programmed to an unexpected value, they force single-word access.
PCI also supports burst access to I/O and configuration space, but only linear mode is supported. (This is rarely used, and may be buggy in some devices; they may not support it, but not properly force single-word access either.)
Transaction examples
This is the highest-possible speed four-word write burst, terminated by the master:
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ ___ ___ ___ ___ ___ AD[31:0] ---<___X___X___X___X___>---<___> ___ ___ ___ ___ ___ C/BE[3:0]# ---<___X___X___X___X___>---<___> | | | | ___ IRDY# ^^^^^^^^\______________/ ^^^^^ | | | | ___ TRDY# ^^^^^^^^\______________/ ^^^^^ | | | | ___ DEVSEL# ^^^^^^^^\______________/ ^^^^^ ___ | | | ___ FRAME# \_______________/ | ^^^^\____ _ _ |_ |_ |_ |_ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ 0 1 2 3 4 5 6 7On clock edge 1, the initiator starts a transaction by driving an address, command, and asserting FRAME# The other signals are idle (indicated by ^^^), pulled high by the motherboard's pull-up resistors. That might be their turnaround cycle. On cycle 2, the target asserts both DEVSEL# and TRDY#. As the initiator is also ready, a data transfer occurs. This repeats for three more cycles, but before the last one (clock edge 5), the master deasserts FRAME#, indicating that this is the end. On clock edge 6, the AD bus and FRAME# are undriven (turnaround cycle) and the other control lines are driven high for 1 cycle. On clock edge 7, another initiator can start a different transaction. This is also the turnaround cycle for the other control lines.
The equivalent read burst takes one more cycle, because the target must wait 1 cycle for the AD bus to turn around before it may assert TRDY#:
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ ___ ___ ___ ___ ___ AD[31:0] ---<___>---<___X___X___X___>---<___> ___ _______ ___ ___ ___ C/BE[3:0]# ---<___X_______X___X___X___>---<___> ___ | | | | ___ IRDY# ^^^^\___________________/ ^^^^^ ___ _____ | | | | ___ TRDY# ^^^^ \______________/ ^^^^^ ___ | | | | ___ DEVSEL# ^^^^\___________________/ ^^^^^ ___ | | | ___ FRAME# \___________________/ | ^^^^\____ _ _ _ |_ |_ |_ |_ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ 0 1 2 3 4 5 6 7 8A high-speed burst terminated by the target will have an extra cycle at the end:
0_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ ___ ___ ___ ___ ___ AD[31:0] ---<___>---<___X___X___X___XXXX>---- ___ _______ ___ ___ ___ ___ C/BE[3:0]# ---<___X_______X___X___X___X___>---- | | | | ___ IRDY# ^^^^^^^\_______________________/ _____ | | | | _______ TRDY# ^^^^^^^ \______________/ ________________ | ___ STOP# ^^^^^^^ | | | \_______/ | | | | ___ DEVSEL# ^^^^^^^\_______________________/ ___ | | | | ___ FRAME# \_______________________/ ^^^^ _ _ _ |_ |_ |_ |_ _ _ CLK _/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ 0 1 2 3 4 5 6 7 8On clock edge 6, the target indicates that it wants to stop (with data), but the initiator is already holding IRDY# low, so there is a fifth data phase (clock edge 7), during which no data is transferred.
Паритет
The PCI bus detects parity errors, but does not attempt to correct them by retrying operations; it is purely a failure indication. Due to this, there is no need to detect the parity error before it has happened, and the PCI bus actually detects it a few cycles later. During a data phase, whichever device is driving the AD[31:0] lines computes even parity over them and the C/BE[3:0]# lines, and sends that out the PAR line one cycle later. All access rules and turnaround cycles for the AD bus apply to the PAR line, just one cycle later. The device listening on the AD bus checks the received parity and asserts the PERR# (parity error) line one cycle after that. This generally generates a processor interrupt, and the processor can search the PCI bus for the device which detected the error.
The PERR# line is only used during data phases, once a target has been selected. If a parity error is detected during an address phase (or the data phase of a Special Cycle), the devices which observe it assert the SERR# (System error) line.
Even when some bytes are masked by the C/BE# lines and not in use, they must still have немного defined value, and this value must be used to compute the parity.
Fast back-to-back transactions
Due to the need for a turnaround cycle between different devices driving PCI bus signals, in general it is necessary to have an idle cycle between PCI bus transactions. However, in some circumstances it is permitted to skip this idle cycle, going directly from the final cycle of one transfer (IRDY# asserted, FRAME# deasserted) to the first cycle of the next (FRAME# asserted, IRDY# deasserted).
An initiator may only perform back-to-back transactions when:
- they are by the same initiator (or there would be no time to turn around the C/BE# and FRAME# lines),
- the first transaction was a write (so there is no need to turn around the AD bus), and
- the initiator still has permission (from its GNT# input) to use the PCI bus.
Additional timing constraints may come from the need to turn around are the target control lines, particularly DEVSEL#. The target deasserts DEVSEL#, driving it high, in the cycle following the final data phase, which in the case of back-to-back transactions is the first cycle of the address phase. The second cycle of the address phase is then reserved for DEVSEL# turnaround, so if the target is different from the previous one, it must not assert DEVSEL# until the third cycle (medium DEVSEL speed).
One case where this problem cannot arise is if the initiator knows somehow (presumably because the addresses share sufficient high-order bits) that the second transfer is addressed to the same target as the previous one. In that case, it may perform back-to-back transactions. All PCI targets must support this.
It is also possible for the target keeps track of the requirements. If it never does fast DEVSEL, they are met trivially. If it does, it must wait until medium DEVSEL time unless:
- the current transaction was preceded by an idle cycle (is not back-to-back), or
- the previous transaction was to the same target, or
- the current transaction began with a double address cycle.
Targets which have this capability indicate it by a special bit in a PCI configuration register, and if all targets on a bus have it, all initiators may use back-to-back transfers freely.
A subtractive decoding bus bridge must know to expect this extra delay in the event of back-to-back cycles in order to advertise back-to-back support.
64-bit PCI
Starting from revision 2.1,[требуется разъяснение ] the PCI specification includes optional 64-bit support. This is provided via an extended connector which provides the 64-bit bus extensions AD[63:32], C/BE[7:4]#, and PAR64, and a number of additional power and ground pins. The 64-bit PCI connector can be distinguished from a 32-bit connector by the additional 64-bit segment.
Memory transactions between 64-bit devices may use all 64 bits to double the data transfer rate. Non-memory transactions (including configuration and I/O space accesses) may not use the 64-bit extension. During a 64-bit burst, burst addressing works just as in a 32-bit transfer, but the address is incremented twice per data phase. The starting address must be 64-bit aligned; i.e. AD2 must be 0. The data corresponding to the intervening addresses (with AD2 = 1) is carried on the upper half of the AD bus.
To initiate a 64-bit transaction, the initiator drives the starting address on the AD bus and asserts REQ64# at the same time as FRAME#. If the selected target can support a 64-bit transfer for this transaction, it replies by asserting ACK64# at the same time as DEVSEL#. Note that a target may decide on a per-transaction basis whether to allow a 64-bit transfer.
If REQ64# is asserted during the address phase, the initiator also drives the high 32 bits of the address and a copy of the bus command on the high half of the bus. If the address requires 64 bits, a dual address cycle is still required, but the high half of the bus carries the upper half of the address and the final command code during both address phase cycles; this allows a 64-bit target to see the entire address and begin responding earlier.
If the initiator sees DEVSEL# asserted without ACK64#, it performs 32-bit data phases. The data which would have been transferred on the upper half of the bus during the first data phase is instead transferred during the second data phase. Typically, the initiator drives all 64 bits of data before seeing DEVSEL#. If ACK64# is missing, it may cease driving the upper half of the data bus.
The REQ64# and ACK64# lines are held asserted for the entire transaction save the last data phase, and deasserted at the same time as FRAME# and DEVSEL#, respectively.
The PAR64 line operates just like the PAR line, but provides even parity over AD[63:32] and C/BE[7:4]#. It is only valid for address phases if REQ64# is asserted. PAR64 is only valid for data phases if both REQ64# and ACK64# are asserted.
Cache snooping (obsolete)
PCI originally included optional support for write-back согласованность кеша. This required support by cacheable memory targets, which would listen to two pins from the cache on the bus, SDONE (snoop done) and SBO# (snoop backoff).[34]
Because this was rarely implemented in practice, it was deleted from revision 2.2 of the PCI specification,[15][35] and the pins re-used for SMBus access in revision 2.3.[17]
The cache would watch all memory accesses, without asserting DEVSEL#. If it noticed an access that might be cached, it would drive SDONE low (snoop not done). A coherence-supporting target would avoid completing a data phase (asserting TRDY#) until it observed SDONE high.
In the case of a write to data that was clean in the cache, the cache would only have to invalidate its copy, and would assert SDONE as soon as this was established. However, if the cache contained dirty data, the cache would have to write it back before the access could proceed. so it would assert SBO# when raising SDONE. This would signal the active target to assert STOP# rather than TRDY#, causing the initiator to disconnect and retry the operation later. In the meantime, the cache would arbitrate for the bus and write its data back to memory.
Targets supporting cache coherency are also required to terminate bursts before they cross cache lines.
Инструменты разработки
When developing and/or troubleshooting the PCI bus, examination of hardware signals can be very important. Logic analyzers и bus analyzers are tools which collect, analyze, and decode signals for users to view in useful ways.
Смотрите также
- Пространство конфигурации PCI
- CompactPCI, PCI-X, PCI Express
- PCI-SIG, PCI Special Interest Group
- PICMG, PCI Industrial Computer Manufacturers Group
- Еврокарта (печатная плата)
Рекомендации
- ^ PCI Local Bus Specification Revision 2.2. Хиллсборо, Орегон: PCI Special Interest Group. December 18, 1998. page ii.
- ^ "PCIe (Peripheral Component Interconnect Express) | On the Motherboard | Pearson IT Certification". www.pearsonitcertification.com. Получено 2020-09-25.
- ^ PCI, Web‐o‐pedia.
- ^ Hamacher et al (2002), Computer Organization, 5th ed., McGraw-Hill.
- ^ "PCI Edition AMD HD 4350 Graphic Card from HIS". Получено 2009-07-27.
- ^ Imdad-Haque, Faisal (1996). Inside PC Card: CardBus and PCMCIA Design: CardBus and PCMCIA Design. Newnes. п. 39. ISBN 978-0-08-053473-2.
- ^ Sumathi, S.; Surekha, P. (2007). LabVIEW based Advanced Instrumentation Systems. Springer. п. 305. ISBN 978-3-540-48501-8.
- ^ https://documentation.euresys.com/Products/MultiCam/MultiCam_6_16/Content/MultiCam_6_7_HTML_Documentation/PCI_Bus_Variation.pdf
- ^ а б John Williams (2008). Digital VLSI Design with Verilog: A Textbook from Silicon Valley Technical Institute. Springer. п. 67. ISBN 978-1-4020-8446-1.
- ^ Alexander Bachmutsky (2011). System Design for Telecommunication Gateways. Джон Вили и сыновья. п. 81. ISBN 978-1-119-95642-6.
- ^ VLB was designed for 486-based systems, yet even the more generic PCI was to gain prominence on that platform.
- ^ Michael Meyers (2012). CompTIA A+ Certification All-in-One Exam Guide, 8th Edition. McGraw Hill Professional. п. 339. ISBN 978-0-07-179512-8.
- ^ Identify a variety of PCI slots, LaCie
- ^ PCI Family History
- ^ а б c d е ж PCI Local Bus Specification, revision 3.0
- ^ "PCI Latency Timer Howto". Reric.NET by Eric Seppanen. 2004-11-14. Получено 2008-07-17.
- ^ а б c d е PCI Local Bus Specification Revision 2.3. Портланд, штат Орегон: PCI Special Interest Group. 29 марта 2002 г.
- ^ PCI Connector Pinout
- ^ а б PCI PowerManagement Interface Specification v1.2
- ^ archive.org/zuavra.net - Using Wake-On-LAN WOL/PME to power up your computer remotely
- ^ ZNYX Networks (June 16, 2009). "ZX370 Series". Архивировано из оригинал 2 мая 2011 г.. Получено 13 июля, 2012.
The ZX370 Series is a true 64-bit adapter, widening the network pipeline to achieve higher throughput, while offering backward compatibility with standard 32-bit PCI slots.- ^ ZNYX Networks. "ZX370 Series Multi-Channel PCI Fast Ethernet Adapter" (PDF). Архивировано из оригинал (PDF) 20 июля 2013 г.. Получено 13 июля, 2012.
Backward compatible with 32 bit, 33 MHz PCI slots- ^ Adaptec (January 2000). "Adaptec SCSI Card 29160 Ultra160 SCSI Controller User's Reference" (pdf). п. 1. Получено 13 июля, 2012.
Although the Adaptec SCSI Card 29160 is a 64-bit PCI card, it also works in a 32-bit PCI slot. When installed in a 32-bit PCI slot, the card automatically runs in the slower 32-bit mode.- ^ LaCie. "LaCie support: Identify a variety of PCI slots". Архивировано из оригинал 4 апреля 2012 г.. Получено 13 июля, 2012.[ненадежный источник? ]
- ^ PCI Local Bus Specification Revision 3.0. Хиллсборо, Орегон: PCI Special Interest Group. 3 февраля 2004 г.Рисунок 5-8.
- ^ Версия 3.0 Спецификации локальной шины PCI. Хиллсборо, Орегон: Специальная группа по интересам PCI. 3 февраля 2004 г. Рисунок 5-9.
- ^ Версия 3.0 Спецификации локальной шины PCI. Хиллсборо, Орегон: Специальная группа по интересам PCI. 3 февраля 2004 г. Рисунок 5-6.
- ^ Версия 3.0 спецификации локальной шины PCI. Хиллсборо, Орегон: Специальная группа по интересам PCI. 3 февраля 2004 г. Рисунок 5-7.
- ^ Micro PCI, Micro AGP (FAQ), iBASE, заархивировано из оригинал на 2001-12-11, получено 2010-11-20.
- ^ Рудье, Жерар (2001-11-28). «Re: sym53c875: чтение / proc вызывает ошибку четности SCSI». Linux-ядро (Список рассылки).
- ^ а б Спецификация локальной шины PCI: версия 2.1 по сравнению с версией 2.0 (PDF) (Примечание по применению). Корпорация Intel. Март 1997 г. АП-753. Архивировано из оригинал (PDF) 2015-04-30.
- ^ «Особенности шины (пишущие драйверы устройств)». docs.oracle.com. Получено 2020-11-14.
- ^ Спецификация архитектуры моста PCI-to-PCI, редакция 1.1
- ^ Спецификация локальной шины PCI, редакция 2.1
- ^ Спецификация локальной шины PCI, редакция 2.2. Хиллсборо, Орегон: Специальная группа по интересам PCI. 18 декабря 1998 г.
дальнейшее чтение
- Официальные технические характеристики
- PCI-SIG (29 марта 2002 г.). Спецификация локальной шины PCI: версия 2.3. (1000 долларов для лиц, не являющихся членами, или 50 долларов для членов. Членство в PCI-SIG составляет 3000 долларов в год).
- PCI-SIG (12 августа 2002 г.). Спецификация локальной шины PCI: Версия 3.0. (1000 долларов для лиц, не являющихся членами, или 50 долларов для членов. Членство в PCI-SIG составляет 3000 долларов в год).
- Книги
- Развенчание тайны шины PCI; 2-е изд; Дуг Эбботт; 250 страниц; 2004; ISBN 978-0-7506-7739-4.
- Архитектура системы PCI; 4-е изд; Том Шенли; 832 страницы; 1999; ISBN 978-0-201-30974-4.
- Архитектура системы PCI-X; 1-е изд; Том Шенли; 752 страницы; 2000; ISBN 978-0-201-72682-4.
- Архитектура и дизайн аппаратного и программного обеспечения PCI и PCI-X; 5-е изд; Эд Солари; 1140 страниц; 2001; ISBN 978-0-929392-63-9.
- Применение и конструкция PCI HotPlug; 1-е изд; Алан Гудрам; 162 страницы; 1998; ISBN 978-0-929392-60-8.
внешняя ссылка
- Официальный
- Официальный веб-сайт, Специальная группа по интересам PCI (PCI-SIG)
- Технические детали
- Введение в протокол PCI, electrofriends.com
- Распиновка шины PCI и сигналы, pinouts.ru
- Размеры карты PCI, interfacebus.com
- Списки производителей / устройств / идентификаторов
- Списки поставщиков и устройств PCI, pcidatabase.com
- Репозиторий PCI ID, проект по сбору всех известных идентификаторов
- подсказки
- Краткий обзор требований к питанию и совместимости PCI с красивой диаграммой
- Хорошие диаграммы и текст о том, как распознать разницу между гнездами 5 и 3,3 вольт
- Linux
- Linux с картами miniPCI
- Страница проверки драйвера устройства PCI для GNU / Linux
- Расшифровка данных PCI и вывода lspci на хостах Linux
- Инструменты разработки
- Активный удлинитель шины PCI, dinigroup.com
- Ядра ПЛИС
- Ядро интерфейса PCI, Решетчатый полупроводник
- Ядро моста PCI, OpenCore.
- IP-поиск ядер шины PCI, Беркли.