Команды
шины PCI определяются значениями бит С/ВЕ|3:0|
в фазе адреса в соответствии с табл.1.
Адресация
памяти, портов и конфигурационных
регистров различна. Байты шины AD, несущие
действительную информацию, выбираются
сигналами С/ВЕ|3:0| в фазах данных (внутри
пакета эти сигналы могут менять состояние).
В циклах обращения к памяти адрес,
выровненный по границе двойного слова,
передается по линиям AD|31:2|, линии AD|1:0| задают
порядок чередования адресов в пакете:
00 - линейное инкрементирование;
01 - чередование адресов с учетом длины
строки кэш-памяти; 1х - зарезервировано.
В
циклах обращения к портам
ввода/вывода для адресации любого байта
используются все линии AD|31:0|.
В циклах конфигурационной записи/считывания
устройство выбирается индивидуальным
сигналом IDSEL#, конфигурационные регистры
выбираются двойными словами, используя
линии AD|7:2|, при этом АD|1:0|=00. Сигнал выборки
IDSEL# воспринимается абонентом PCI только в
фазе адреса, поэтому обычно в качестве него
используют старшие биты адреса с
позиционным кодированием адреса
устройства.
Таблица
1. Команды
шины PCI
С/ВЕ|3:0
|
|
Тип команды
|
0000
|
Interrupt Acknowledge -
подтверждение прерывания
|
0001
|
Special Cycle -
специальный цикл
|
0010
|
I/O Read -
чтение порта ввода/вывода
|
0011
|
I/O Write -
запись в порт ввода/вывода
|
0100
|
Резерв
|
0101
|
Резерв
|
0110
|
Memory Read -
чтение памяти
|
0111
|
Memory Write -
запись в память
|
1000
|
Резерв
|
1001
|
Резерв
|
1010
|
Configuration Read -
конфигурационное считывание
|
1011
|
Configuration Write
- конфигурационная запись
|
1100
|
Multiple Memory Read
- множественное чтение памяти
|
1101
|
Dual
Address Cycle - двухадресный
цикл
|
1110
|
Memory-Read
Line -чтение строки памяти
|
1111
|
Memory
Write and Invalidate - запись
с инвалидацией
|
В
команде "подтверждение
прерывания" контроллер прерываний передает
вектор прерывания по шине AD.
Специальный
цикл декодируется содержимым линий AD|15:0| и
используется для указания на отключение (Shutdown),
останов (Halt) процессора или специфические
функции процессора, связанные с кэшем и
трассировкой. Этим состояниям
соответствуют коды 0000, 0001 и 0002; коды 0003-FFFFh
зарезервированы.
В
командах чтения и записи портов ввода/вывода
линии AD содержат адрес байта, причем
декодированию подлежат и биты ADO и AD1 (несмотря
на то, что имеются сигналы ВЕх#). Порты PCI
могут быть 8- или 16-битными. Для адресации
портов на шине PCI доступны все 32 бита адреса,
но процессоры х86 могут использовать только
младшие 16 бит. Порты с адресами 0CF8 и 0CFC
зарезервированы под регистры адреса и
данных для доступа к конфигурационному
пространству. Обращение к порту данных
приведет к генерации шинного цикла
конфигурационного чтения или записи по
предварительно записанному адресу.
В
командах чтения и записи памяти шина АD
содержит адреса двойных слов, и линии AD0, AD1
не должны декодироваться - на конкретные
байты указывают сигналы С/ВЕ|3:0|#.
Команды
конфигурационного
чтения и записи адресуются к
конфигурационному пространству и
обеспечивают доступ к 256-байтньм структурам.
Обращение идет двойными словами. Структура
содержит идентификатор устройства и
производителя, состояние и команду,
информацию об используемых ресурсах и
ограничения на использование шины.
Множественное
чтение памяти используется для чтения
больших блоков памяти без кэширования.
Двухадресный цикл применяется, когда
физическая шина имеет всего 32 бита адреса, а
требуется передача с 64-битной адресацией. В
этом случае младшие 32 бита адреса
передаются в цикле данного типа, а за ним
следует обычный цикл, определяющий тип
обмена и несущий старшие 32 бита адреса. Шина
PCI допускает 64-битную адресацию и портов
ввода/вывода, правда, для процессоров х86 это
бесполезно, но есть и другие процессоры и
платформы, использующие PCI.
Чтение
строки памяти используется для чтения
более чем двух 32-битных блоков данных (обычно
чтение до конца строки кэша). В таком случае
этот цикл обеспечивает обмен, более
эффективный, чем цепочка обычных пакетных
чтений.
Запись
с инвалидацией применяется при передачи
как минимум одной строки кэша и позволяет
обновлять содержимое основной памяти,
экономя циклы обратной записи.
Назначение
сигналов приведено в табл. 2
(справочно).
На
одной шине PCI может быть не более пяти
устройств (следовательно, и слотов). Для
подключения шины PCI к другим шинам
применяются специальные аппаратные
средства - мосты шины PCI (PCI Bridge). Главный мост
(Host Bridge) используется для подключения PCI к
системной шине (шине процессора или
процессоров). Одноранговый мост (Peer-to-Peer Bridge)
используется для соединения двух шин PCI. Две
и более шины PCI применяются в мощных
серверных платформах - дополнительные шины
PCI позволяют увеличить количество
подключаемых устройств. Для подключения
шин ISA/EISA используются специальные мосты,
входящие в чипсеты большинства системных
плат. Каждый мост программируется - ему
указываются диапазоны адресов пространств
памяти и ввода/вывода, отведенные абонентам
его шин. Если адрес целевого устройства
текущей транзакции на одной шине (стороне)
моста относится к шине противоположной
стороны, мост перенаправляет транзакцию на
соответствующую шину и выполняет действия
по согласованию протоколов этих шин. Таким
образом, совокупность мостов,
расположенных вокруг шины PCI, выполняет
маршрутизацию (routing) обращений по всем
связанным шинам. В общем случае считается,
что устройство с конкретным адресом может
присутствовать только на одной из шин
данного компьютера, а на каком именно, "знают"
запрограммированные мосты. Решать задачу
маршрутизации призван и сигнал DEVSEL#,
играющий важную роль в протоколе шины PCI.
Обращения, не востребованные абонентами PCI,
обычно перенаправляются на шину ISA.
Таблица 2. Сигналы
шины PCI (справочно)
Сигнал
|
Назначение
|
AD|31:0 |
|
Address/Data -
мультиплексированная шина адреса/данных.
Адрес передается в начале транзакции, в
последующих тактах передаются данные
|
С/ВЕ|3:0|#
|
Command/Byte Enable
- команда/разрешение обращения к байтам.
Команда, определяющая тип очередного
цикла шины (чтение/запись памяти, ввод/вывод
или конфигурационное чтение-запись,
подтверждение прерывания и другие),
задается четырехбитным кодом в фазе
адреса
|
FRAME#
|
Кадр-
Введением сигнала отмечается начало
транзакции (фаза адреса), снятие сигнала
указывает на то, что последующий цикл
передачи данных является последним в
транзакции
|
DEVSEL#
|
Device Select -
устройство выбрано (ответ целевого
устройства на адресованную к нему
транзакцию)
|
IRDY#
|
Initiator Ready -
готовность инициатора к обмену данными
|
TRDY#
|
Target Ready -
готовность целевого устройства к обмену
данными
|
STOP#
|
Запрос
целевого устройства к инициатору на
останов текущей транзакции
|
LOCK#
|
Используется
для установки, обслуживания и
освобождения захвата ресурса на PCI
|
REQ|3:0|#
|
Request -
запрос от PCI-мастера на захват шины (для
слотов 3:0)
|
GNT|3:0|#
|
Grant -
предоставление мастеру управления
шиной
|
PAR
|
Parity - общий
бит паритета для линий AD| 31:0 | и С/ВЕ| 3-0 |
|
PERR#
|
ParityError -
сигнал об ошибке паритета (от устройства,
ее обнаружившего)
|
RST#
|
Reset - сброс
всех регистров в начальное состояние
|
IDSEL#
|
Initialization
Device Select - выбор устройства в циклах
конфигурационного считывания и записи
|
SERR
|
System Error -
системная ошибка, активизируется любым
устройством PQ и вызывает NMI
|
REQ64#
|
Request 64 bit -
запрос на 64-битный обмен
|
АСК64#
|
Подтверждение
64-битного обмена
|
INTRA#
|
INTRB# INTRC# INTRD#
Interrupt А, В, С, D - линии запросов прерывания,
циклически сдвигаются в слотах и
направляются на доступные линии IRQ.
Запрос по низкому уровню допускает
разделяемое использование линий
|
CLK
|
Clock -
тактовая частота шины, должна лежать в
пределах 20-33 МГц, в PCI 2,1 допустима до 66,6
МГц
|
M66EN
|
66MHz_Enable -
разрешение частоты синхронизации до 66
МГц, если все абоненты ее допускают (определен
только начиная с PCI 2.1.)
|
SDONE
|
Snoop Done ~
сигнал завершенности цикла слежения для
текущей транзакции. Низкий уровень
указывает на незавершенность цикла
слежения за когерентностью памяти и
кэша. Необязательный сигнал,
используется только абонентами шины с
кэшируемой памятью
|
SBO#
|
Snoop Backoff -
попадание текущего обращения к памяти
абонента шины в модифицированную строку
кэша. Необязательный сигнал,
используется только абонентами шины с
кэшируемой памятью при алгоритме
обратной записи (WB)
|
TCK
|
Test Clock -
синхронизация тестового интерфейса JTAG
|
TDI
|
Test Data Input -
входные данные тестового интерфейса JTAG
|
TDO
|
Test Data Output -
выходные данные тестового интерфейса JTAG
|
TMS
|
Test Mode Select -
выбор режима для тестового интерфейса
JTAG
|
TRST
|
Test
Logic Reset - сброс тестовой логики
|