Периферийные устройства ПК / interfaces_lections / Интерфейс РСI_ команды шины / ИНТЕРФЕЙС РСI_ КОМАНДЫ ШИНЫ
.docИнтерфейс РСI: команды шины.
Команды шины 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 - сброс тестовой логики |