Обмен информацией по шинам PCI и PCI-X организован в виде транзакций — логически завершенных операций обмена. В каждой транзакции выполняется одна команда — как правило, чтение или запись данных по указанному адресу. Транзакция начинается с фазы адреса, в которой инициатор задает команду и целевой адрес. Далее могут следовать фазы данных, в которых одно устройство (источник данных) помещает данные на шину, а другое (приемник) их считывает. Транзакции, в которых присутствует множество фаз данных, называются пакетными. Есть и одиночные транзакции (с одной фазой данных). Транзакция может завершиться и без фаз данных, если целевое устройство (или инициатор) не готово к обмену. В шине PCI-X добавлена фаза атрибутов, в которой передается дополнительная информация о транзакции.
Состав и назначение интерфейсных сигналов шины раскрывает табл. 14.2. Состояния всех сигнальных линий воспринимаются по положительному перепаду CLK. В разные моменты времени одними и теми же сигнальными линиями управляют разные устройства шины.
В каждый момент времени шиной может управлять только одно ведущее устройство, получившее на это право от арбитра. Каждое ведущее устройство имеет пару сигналов — REQ# для запроса на управление шиной и GNT# для подтверждения предоставления управления шиной. Устройство может начинать транзакцию (устанавливать сигнал FRAMES) только при полученном активном сигнале GNT# и дождавшись отсутствия активности шины. Заметим, что за время ожидания покоя арбитр может «передумать» и отдать управление шиной другому устройству с более высоким приоритетом. Снятие сигнала GNT# не позволяет устройству начать следующую транзакцию и даже может заставить прекратить начатую транзакцию.
Для адреса и данных используются общие мультиплексированные линии AD. Линии С/ВЕ[3:О] обеспечивают кодирование команд в фазе адреса и разрешение байтов в фазе данных. В фазе адреса (начало транзакции) ведущее устройство активирует сигнал FRAMES, передает целевой адрес по шине AD, а по линиям С/ВЕ# — информацию о типе транзакции (команду). Адресованное целевое устройство отзывается сигналом DEVSEU. Ведущее устройство указывает на свою готовность к обмену данными сигналом IRDY#, эта готовность может быть выставлена и до получения сигнала DEVSEL#. Когда и целевое устройство оказывается готово к обмену данными, оно устанавливает сигнал TRDY#. Данные по шине AD передаются только при одновременном наличии сигналов IRDY# и TRDY#. С помощью этих сигналов ведущее, и целевое устройства согласуют свои скорости, вводя такты ожидания (wait states). На рис. 14.1 приведена временная диаграмма обмена, в которой и ведущее и целевое устройства вводят такты ожидания. Если бы они оба ввели сигналы готовности в конце фазы адреса и не снимали бы их до конца обмена, то в каждом такте после фазы адреса передавалось бы по 32 бита данных, что обеспечило бы выход на предельную производительность обмена.
На шине PCI все транзакции трактуются как пакетные: каждая транзакция начинается фазой адреса, за которой может следовать одна или несколько фаз данных. Количество фаз данных в пакете явно не указывается. Если устройство не поддерживает пакетные транзакции в ведомом режиме, то оно должно потребовать прекращения пакетной транзакции в течение первой фазы данных. В ответ на это ведущее устройство завершает данную транзакцию и продолжает обмен последующей транзакцией со следующим значением адреса. После завершающей фазы данных ведущее устройство снимает сигнал IRDY#, и шина переходит в состояние покоя (idle).
Инициатор может начать следующую транзакцию и без такта покоя, такие быстрые смежные транзакции (fast back-to-back transactions) могут быть обращены как к одному, так и к разным целевым устройствам. При обмене данными в режиме PCI-X быстрые смежные транзакции недопустимы.
Протокол шины обеспечивает надежность обмена — ведущее устройство всегда получает информацию об отработке транзакции целевым устройством. Для повышения достоверности обмена применяется механизм контроля четности: линии AD[31:0] и С/ВЕ[3:0]# в фазах адреса и данных защищены битом четности PAR. При обнаружении ошибки устройство вырабатывает сигнал PERR#.
Каждая транзакция на шине должна быть завершена планово или прекращена по инициативе ведущего или целевого устройства.
Ведущее устройство может завершить транзакцию одним из следующих способов.
♦ Comletion — нормальное завершение по окончании обмена данными;
♦ Time-out — завершение по тайм-ауту, если целевое устройство оказалось не предвиденно медленным или запланирована слишком длинная транзакция;
♦ Master-Abort — прекращение транзакции из-за отсутствия ответа от целевого устройства.
Транзакция может быть прекращена по инициативе целевого устройства (по сигналу STOP#) по разным причинам:
♦ retry — повтор, целевое устройство из-за внутренней занятости не успевает выдать первые данные в положенный срок (это указание ведущему устрой ству на необходимость повторного запуска той же транзакции);
♦ disconnect — отключение, целевое устройство не способно своевременно вы дать или принять очередную порцию данных пакета (это указание ведущему устройству на необходимость повторного запуска транзакции, но с модифи цированным стартовым адресом);
♦ target-abort — отказ, целевое устройство не может обслужить данный запрос (неподдерживаемая команда, фатальная ошибка).
Прекращение типа retry служит для организации отложенных транзакций (delayed transactions). Отложенные транзакции используются только медленными целевыми устройствами, а также мостами PCI при трансляции транзакций на другую шину. Прекращая (для инициатора) транзакцию условием retry, целевое устройство внутренне выполняет данную транзакцию. Когда инициатор повторит эту транзакцию, у целевого устройства (или моста) уже будет готов результат (данные чтения или состояние выполнения записи), который оно быстро вернет инициатору.
Команды шины PCI
Команды PCI определяют направление и тип транзакций, а также адресное пространство, к которому они относятся. Набор команд шины PCI включает следующие:
♦____________________________________________ команды чтения и записи портов ввода-вывода (обращения к пространству портов);
♦ команды обращения к памяти нескольких типов, в том числе к отображен ным на память устройствам ввода-вывода и «настоящей» памяти, допускаю щей предвыборки (чтение строк, множественное чтение, запись с инвалида- цией);
♦ команды конфигурационных чтения и записи (обращения к конфигурацион ному пространству устройств);
♦ специальный цикл (передача широковещательных сообщений);
♦ команда подтверждения прерывания (чтение вектора прерываний).
Для каждого из трех пространств — памяти, портов ввода-вывода и конфигурационных регистров — адресация различна; в специальных циклах адрес игнорируется.
Особенности PCI-X
Протокол шины PCI-X во многом совпадает с PCI, изменения протокола нацелены на повышение эффективности использования тактов шины. В обычной шине PCI все транзакции начинаются одинаково (с фазы адреса) как пакетные с заранее неизвестной длиной. При этом реально транзакции ввода-вывода всегда имеют лишь одну фазу данных; длинные пакеты эффективны только для обращений к памяти (и применяются они именно для этого). В PCI-X транзакции по длине разделены на два типа:
♦ пакетные (burst) транзакции — все команды, обращенные к памяти (кроме команд чтения двойного слова);
♦ одиночные транзакции размером в двойное слово — остальные команды.
В каждой транзакции после фазы адреса присутствует новая фаза передачи атрибутов транзакции, в которой инициатор сообщает свой идентификатор (номера шины, устройства и функции), тег, счетчик байтов и характеристики области памяти, к которой относится транзакция. Идентификатор инициатора вместе с тегом определяют последовательность (sequence) — одну или несколько транзакций, обеспечивающих одну логическую передачу данных, запланированную инициатором. Каждый инициатор может одновременно выполнять до 32 логических передач. Логическая передача (последовательность) может иметь длину до 4096 байт; в атрибутах каждой транзакции указывается количество байтов, которые должны быть переданы до конца данной последовательности. Общее количество байтов, передаваемых в данной транзакции, заранее не определено.
Характеристики памяти включают флаги R0 и NS:
♦ RO {Relaxed Ordering) — возможность изменения порядка выполнения от дельных операций записи и чтения;
♦ NS (No Snoop) — область памяти, к которой относится данная транзакция, ни где не кэшируется.
В PCI-X отложенные транзакции заменены расщепленными транзакциями (split transactions). Любую транзакцию, кроме всех транзакций записи в память, целевое устройство может завершать либо немедленно (обычным для PCI способом), либо с использованием протокола расщепленных транзакций. В последнем случае целевое устройство подает сигнал Split Response (расщепление), внутренне исполняет команду, а потом инициирует собственную транзакцию (команда Split Completion) для пересылки данных или сообщения о завершении инициатору исходной (расщепленной) транзакции. Устройство, вызвавшее расщепленную транзакцию, называется запросчиком (Requester), устройство, завершающее расщепленную транзакцию, — исполнителем (Completer). Для завершения транзакции исполнитель должен запросить управление шиной у арбитра; запросчик на этапе завершения выступает в роли целевого устройства. Транзакция завершения (команда Split Completion) во многом напоминает пакетную транзакцию записи, но вместо полного адреса пространства памяти или ввода-вывода по шине AD передаются идентификатор последовательности (с номерами шины, устройства и функции запросчика), к которой относится это завершение, и только младшие 6 бит адреса. По этому идентификатору (номеру шины запросчика) мосты доводят транзакцию завершения до устройст-ва-запросчика. Последовательность может отрабатываться и не одной транзакцией завершения, а серией транзакций.
Запросчик должен быть всегда готов к получению данных начатых им последовательностей, причем данные разных последовательностей могут приходить в произвольном порядке. Исполнитель может выдавать транзакции завершения на несколько последовательностей также в произвольном порядке.
В PCI-X 2.0 вдобавок к вышеописанным изменениям протокола появился новый режим Mode 2, отличающийся ускорением блочной записи в память и применением ЕСС-контроля. Этот режим возможен только при низком (1,5 В) напряжении питания интерфейсных схем. В данном режиме имеет место ЕСС-контроль адреса и данных (что требует дополнительных тактов). В транзакциях пакетной записи в память используется удвоенная или учетверенная скорость передачи данных по отношению к тактовой частоте (режимы PCI-X266 и PCI-X533). В Mode 2 есть возможность применения 16-битной шины (с 32-или 64-битной адресацией памяти).
В PCI-X 2.0 введена возможность передачи информации (сообщений) устройству, адресуясь с помощью идентификатора (номеров шины, устройства и функции). Сообщения передаются последовательностями, в которых используются команды DIM (Device ID Message), отличающиеся специфичностью адреса и атрибутов. Тело сообщения может иметь длину до 4096 байт. Содержимое тела определяется классом сообщения; класс 0 определяется производителем.