Материалы

Команды шины PCI

Рейтинг:   / 0
ПлохоОтлично 

Команды PCI определяют направление и тип транзакций, а также адресное пространство, к которому они относятся. Набор команд шины PCI включает следующие: 

 

 

  • I/O Read, I/O Write — команды чтения и записи ввода/вывода, служат для обращения к пространству портов;
  • Memory Read, Memory Write — команды чтения и записи памяти, служат для выполнения коротких (как правило, непакетных) транзакций. Их прямое назначение — обращение к отображенным на память устройствам ввода/вывода. Для «настоящей» памяти, допускающей предвыборки, предназначены команды чтения строк, множественного чтения и записи с инвалидацией;
  • Memory-Read Line — чтение строки памяти, применяется, когда в транзакции планируется чтение до конца строки кэша. Выделение данного типа чтения позволяет повысить производительность обмена с памятью;
  • Multiple Memory Read — множественное чтение памяти, используется для транзакций, затрагивающих более одной строки кэш-памяти. Использование данного типа транзакций позволяет контроллеру памяти выполнять упреждающую выборку строк, что дает дополнительный выигрыш производительности;
  • Memory Write and Invalidate (MVI) — запись с инвалидацией, применяется к целым строкам кэша, причем все байты во всех фазах должны быть разрешены. Эта операция заставляет контроллер кэш-памяти очищать «грязные» строки кэша, соответствующие записываемой области, без их выгрузки в ОЗУ, что экономит время. Инициатор, вводящий эту команду, должен знать размер строки кэша в данной системе (для этого у него есть специальный регистр в конфигурационном пространстве);
  • Dual Address Cycle (DAC) — двухадресный цикл, позволяет по 32-битной шине обращаться к устройствам с 64-битной адресацией. В этом случае младшие 32 бита адреса передаются одновременно с данной командой, а далее следует обычный цикл, определяющий команду обмена и несущий старшие 32 бита адреса. Шина PCI допускает 64-битную адресацию как памяти, так и портов ввода/вывода (последнее для систем на x86 бесполезно, но PCI существует и на других платформах);
  • Configuration Read, Configuration Write — команды конфигурационного чтения и записи, адресуются к конфигурационному пространству устройств. Обращение производится только выровненными двойными словами, биты AD[1:0] используются для идентификации типа цикла (см. ниже). Для генерации данных команд требуется специальный аппаратно-программный механизм;
  • Special Cycle — специальный цикл, отличается от всех других тем, что является широковещательным. Однако ни один агент на него не отвечает, а главный мост или иное устройство, вводящее этот цикл, всегда завершает его способом Master Abort (на него требуется 6 тактов шины). Специальный цикл предназначен для генерации широковещательных сообщений, которые могут читать любые «заинтересованные» агенты шины. Тип сообщения декодируется содержимым линий AD[15:0]; на линиях AD[31:16] могут помещаться данные, передаваемые в сообщении. Фаза адреса в этом цикле обычными устройствами игнорируется, но мосты используют ее информацию для управления распространением сообщения. Сообщения с кодами 0000h, 0001h и 0002h требуются для указания на отключение (сообщение Shutdown), остановку (сообщение Halt) процессора или специфические функции процессора x86, связанные с кэшем и трассировкой. Коды 0003h–FFFFh зарезервированы. Специальный цикл может генерироваться тем же аппаратно-программным механизмом, что и конфигурационные циклы, но со специфическим значением адреса;
  • Interrupt Acknowledge (INTA) — команда подтверждения прерывания, предназначена для чтения вектора прерываний. По протоколу она выглядит как команда чтения, неявно адресованная к системному контроллеру прерываний. Здесь в фазе адреса по шине AD полезная информация не передается (BE[3:0]# задают размер вектора), но ее инициатор (главный мост) должен обеспечить стабильность сигналов и корректность бита четности. В x86-архитектуре 8-битный вектор передается в байте 0 по готовности контроллера прерываний (по сигналу TRDY#). Подтверждение прерываний выполняется за один цикл (первый холостой цикл, который процессоры x86 делают в дань совместимости со стариной, мостом подавляется).

Команды кодируются значениями бит C/BE# в фазе адреса (см. таблицу ниже), специфические команды PCI-X рассмотрены в последующих разделах.

Код C/BE[3:0]  PCI команда  PCI-X команда Длина Возможность
расщепления
0000 Interrupt Acknowledge Interrupt Acknowledge, подтверждение прерывания DWORD +
0001 Special Cycle Special Cycle, специальный широковещательный цикл DWORD -
0010 I/O Read I/O Read, чтение ввода/вывода DWORD +
0011 I/O Write I/O Read, запись ввода/вывода  DWORD +
0100 Резерв Резерв - -
0101 Резерв Device ID Message (DIM), посылка собщения устройству (PCI-X 2.0) 
 
Пакет -
0110 Memory Read Memory Read DWORD, одиночное чтение памяти DWORD +
0111 Memory Write Memory Write, запись памяти Пакет -
1000 Резерв Alias to Memory Read Block псевдоним чтения блока памяти Пакет +
1001 Резерв Alias to Memory Write Block, псевдоним записи блока памяти Пакет -
1010 Configuration Read Configuration Read, конфигурационное чтение DWORD +
1011 Configuration Write Configuration Write, конфигурационная запись DWORD +
1100 Memory Read Multiple Split Completion, завершение расщепленной транзакции Пакет -
1101 Dual Address Cycle Dual Address Cycle (DAC), цикл передачи расширенного адреса памяти - -
1110 Memory Read Line Memory Read Block, чтение блока памяти Пакет +
1111 Memory Write and Invalidate Memory Write Block, запись блока памяти Пакет -

Таблица. Декодирование команд шин PCI и PCI-X

В каждой команде шины указывается адрес, относящийся к первой фазе данных пакета. Для каждой последующей фазы данных пакета адрес увеличивается на 4 (следующее двойное слово) или 8 (для 64-битных передач), но в командах обращения к памяти предусматривался и иной порядок.

В шине PCI байты шины AD, несущие реальную информацию, определяются сигналами C/BE[3:0]# в фазах данных. Разрешенные байты могут быть разрозненными; возможны фазы данных, в которых не разрешено ни одного байта. В PCI-X правила разрешения байтов изменились (см. ниже). Сигналами C/BE[3:0]# управляет инициатор, он указывает требуемые байты для каждой фазы данных и не меняет состояние этих сигналов в течение всей этой фазы. В транзакциях чтения байты «заказывает» опять же инициатор; если поведение целевого устройства (источника данных для чтения) зависит от того, какие байты заказаны, то целевое устройство вынуждено растягивать каждую фазу данных. При этом в первом такте каждой фазы данных целевое устройство принимает C/BE[3:0]# и только в последующем такте (а может, и с дополнительным ожиданием) выдает данные чтения.

В отличие от шины ISA на PCI нет динамического изменения разрядности — все устройства должны подключаться к шине 32- или 64-разрядным способом. Если в устройстве PCI применяются функциональные схемы иной разрядности (к примеру, нужно подключить микросхему 8255, имеющую 8-битную шину данных и четыре регистра), то приходится применять схемотехнические методы преобразования, отображающие все регистры на 32-разрядную шину AD. Возможность 16-битных подключений появилась только во второй версии PCI-X.

Для каждого из трех пространств — памяти, портов ввода/вывода и конфигурационных регистров — адресация различна; в специальных циклах адрес игнорируется.



Sitelinkx by eXtro-media.de
Яндекс.Метрика