Архитектура шины PCI

1. Архитектура шины PCI

Интерфейс PCI имеет двухшинную структуру: мультиплексированную шину адреса данных (АД) и шину управления. Интерфейс использует два набора сигналов: базовый и расширенный. Базовый поддерживает минимальную конфигурацию, а расширенный дополнительно - 64 разрядные операции, тестирование плат через порт JTAG (IEEE 1149.1), кэш-память и прерывания. В минимальной конфигурации имеется 49 сигналов. В данном электронном учебнике рассматривается только базовая конфигурация.

Шина PCI процессорно независимая и взаимодействует с главным процессором и памятью через главный мост (Host bus). Интерфейс PCI может иметь иерархическую структуру, взаимодействуя с шиной расширения типа ISA, EISA или MCA через соответствующий контроллер. К шине PCI подсоединены два типа объектов: задатчики и исполнители. Основной операцией на шине является блочный обмен последовательностью данных между задатчиком и исполнителем при выполнении операций чтения и записи данных.

Блок или пакет передаваемых данных в спецификации PCI называется транзакцией (transaction), в начале транзакции идет адрес исполнителя (фаза адреса), а за ним произвольное число 32 битовых данных (последовательность фаз данных), двойных слов (DWORD). Задатчик-объект, который захватывает в свое распоряжение шину, начинает транзакцию и адресует исполнителя. Исполнитель - объект, который адресуется задатчиком и отрабатывает транзакцию, принимая (запись) или выдавая (чтение) данные.

Объект может быть только задатчиком или только исполнителем, но может быть и задатчиком, и исполнителем одновременно, но в разные моменты времени.

На шине могут работать несколько задатчиков. Для разделения во времени шины между ними используется арбитр, который соединяется с каждым задатчиком с помощью двух индивидуальных линий типа точка-точка. Одна идет от задатчика - линия запроса шины (REQ), другая от арбитра - линия разрешения подключения задатчика к шине (GRN).

На шине могут работать несколько задатчиков. Для разделения во времени шины между ними используется арбитр, который соединяется с каждым задатчиком с помощью двух индивидуальных линий типа точка-точка. Одна идет от задатчика - линия запроса шины (REQ), другая от арбитра - линия разрешения подключения задатчика к шине (GRN).

В спецификации шины PCI предполагается реализация алгоритмов вложенных прерываний при операциях арбитрации, когда задатчик с более высоким уровнем приоритета прерывает работу текущего задатчика на шине, обладающего меньшим приоритетом.

В случае, если задатчик с большим приоритетом прерывает работу текущего задатчика в момент получения им разрешения на захват шины, то задатчики с меньшим приоритетом будут очень долго ждать доступа к шине. Если же текущий задатчик будет прерывать свою работу только после завершения транзакции, то долго ждать придется задатчику с большим приоритетом.

Чтобы уйти от таких неприятностей, на шине PCI предусмотрен механизм Таймера задержек (Latency Timer). Он заключается в том, что для любого задатчика вводится фиксированное время, в течении которого прерывать транзакцию нельзя. Это время задается Таймером задержки, который включается в начале транзакции. Время задается в виде количества импульсов CLK. После исчерпания времени, задаваемого Таймером задержки, выдается сигнал Тайм-аут. Если в момент Тайм-аута сигнал разрешения GNT# текущего задатчика был сброшен, то он сразу завершает транзакцию не дожидаясь ее окончания. Если в момент Тайм-аута сигнал GNT# не сброшен, то транзакция продолжается до момента Тайм-аута, после чего транзакция прерывается. Если сигнал Тайм-аут отсутствует, то транзакция продолжается до конца.

Этот механизм отслеживает максимальную задержку доступа к шине не более N+1 тактов шины, где N - это число импульсов записываемое в Таймер задержки.

Шина PCI поддерживает автоматическую конфигурацию устройств ввода/вывода (plug and play). С этой целью, для выбора устройств в процессе конфигурации на шине предусмотрена индивидуальная линия типа точка-точка для каждого объекта (IDSEL). Она идет как задатчикам, так и к исполнителям, осуществляя выбор устройства при операции конфигурации.

На шине PCI используются два метода адресации.

Положительное декодирование (positiv decoding) - когда объекту задается диапазон адресов, и он отвечает на операцию, когда выставленный на шину адрес попадает в этот диапазон. Здесь каждое устройство имеет свой дешифратор адреса.

Вычитательное декодирование (subtractiv decoding) - когда объект отвечает на операцию, которую не опознали другие объекты. Такой адрес может быть только у одного объекта на шине. Этот метод используется при построении стандартных шин расширения, например, ISA.

В спецификации PCI определены три адресных пространства: памяти, устройств ввода-вывода и регистров конфигурации.

Инициируемые процессором циклы обращения к устройствам ввода-вывода, как правило выполняются в виде одиночных фаз передачи данных.

На шине PCI не предусмотрен процесс перестановки байт. Указатель байта (byte enable) используется для определения, какие байты данных передаются в данной фазе данных.

Интерфейс PCI реализует контроль передачи данных по нечетности, используя дополнительную линию PAR для разряда контроля. Контроль производится для всех разрядов группы сигналов "Адрес и данные", которая включает 32 разряда адреса данных и 4 разряда идентификации команды или данных.


Описание сигналов шины

2. Описание сигналов шины

В интерфейсе используются два набора сигналов: базовый для минимальной конфигурации и расширенный, поддерживающий 64-разрядные операции, тестирование плат через порт JTAG (IEEE 1149.1), кэш-память и прерывания. В минимальной конфигурации исполнитель имеет 47 контактов, а задатчик - 49.

Линии

Характеристика

Функции

Группа сигналов «Адреса и данные»

AD[31::00]

Вход-выход

Адрес/данные

Сигналы адресов и данных передаются мультиплексно по одним и тем же линиям АD[31::00] . Цикл передачи состоит из одной (для 32-разрядной передачи данных) или двух (для 64-разрядной передачи) адресных фаз и следующих затем одной или более фаз передачи данных. Фаза адреса идентифицируется подачей сигнала FRAME#. При этом по

шине AD[31::00] передается 32-разрядный физический адрес, причем для операций ввода-вывода это адрес байта, а для операций конфигурирования и обмена с памятью - адрес двойного слова. В течение фазы передачи данных по линиям AD[7::00] передается младший байт данных, а по линиям AD[31::24] - старший байт. При записи данные действительны в момент действия сигнала IRDY#, а при чтении - сигнала TRDY#.

C/BE[3::0]#

Вход-выход

Идентификация команд или данных

Сигналы С/ВЕ[3::0]# (Bus Control and Byte Enables) также мультиплексированы. Во время адресной фазы они идентифицируют тип операции, а во время фазы передачи данных указывают действующие байтовые тракты 32-разрядного канала.

PAR

Вход-выход

Дополнение до нечётности шины адрес/данные

Сигнал PAR дополняет до нечетности все сигналы этой группы и генерируется всеми агентами (абонентами) РСI, причем задатчик устанавливает его во время адресной фазы и фазы записи данных, а исполнитель - только во время фазы чтения.

Группа сигналов «Управление шиной»

FRAME#

Вход-выход

Цикл передачи

Сигнал FRAME# (Cycle Frame) вырабатывается текущим задатчикам и индицирует начало и течение операции передачи данных. Сброс сигнала сообщает об окончании фазы передачи последнего слова данных.

TRDY#

Вход-выход

Готовность исполнителя

Сигнал TRDY# (Target Ready) индицирует готовность исполнителя завершить фазу данных текущей блочной передачи. Во время чтения этот сигнал подтверждает действительность данных (на шинах АО[31::00]), а во время операции записи - готовность исполнителя к приему данных.

IRDY#

Вход-выход

Готовность задатчика

Сигнал IRDY# (Indicator Ready) индицирует готовность задатчика завершить фазу данных текущей блочной передачи последовательности данных. Во время записи этот сигнал подтверждаем действительность данных (на шинах AD[31::00]), а во время чтения - готовность задатчика к приему данных.

STOP#

Вход-выход

Останов операции

Сигнал STOP# возбуждается текущим исполнителем, чтобы сообщить задатчику о необходимости завершения текущей блочной передачи.

DEVSEL#

Вход-выход

Выбор устройства при операциях конфигурации

Сигнал DEVSEL# (Device Select) вырабатывается устройством - исполнителем текущей операции доступа, сообщающий о том, что исполнитель найден.

IDSEL

Вход

Разрешение выбора устройства

Сигнал IDSEL (Initialization Device Select) используется для выборки устройства при операциях чтения и записи конфигурации.

Группа сигналов сообщений об ошибках

PERR#

Вход-выход

Ошибка чётности

Сигнал PERR# (Parity Error) используется для сообщения об ошибке по четности во время любых операций на шине РСI за исключением специальных циклов (Special Cycle). Агент не должен сообщать об ошибке четности до тех пор, пока не получен сигнал выбора устройства и не завершена фаза передачи данных.

SERR#

Вход-выход

Системная ошибка

Сигнал SERR# (System Error) сообщает об ошибках четности адресов или данных во время исполнения специальных циклов или о других ошибках, которые могут быть катастрофическими для системы в целом. Если агент не желает генерировать немаскируемое прерывание, то сообщение об ошибке должно быть передано другим способом. Агент, вырабатывающий этот сигнал, должен иметь возможность возбуждать его в произвольный момент времени.

Группа сигналов арбитража (только для задатчика)

REQ#

Выход

Запрос на обслуживание

Сигнал REQ# (Request) передается в арбитр шины агентом, которому требуется шина. Для каждого задатчика шины предусмотрена отдельная линия REQ#.

GNT#

Вход

Разрешение захвата шины

Сигнал GNT# (Grant - разрешение) передается из арбитра каждому агенту шины по отдельной линии.

Группа системных сигналов

CLK

Вход

Общая синхронизация

Сигнал CLK (Clock) предназначен для синхронизации всех операций на шине РСI и является входным для всех устройств шины. Его максимальная частота равна 33 МГц.

RST#

Вход

Сброс

Сигнал RST# (Reset) используется для приведения всех специальных регистров устройств РСI, сигналов и их последовательностей в исходное состояние. Может подаваться асинхронно относительно сигнала CLK.

Группа сигналов 64-разрядного расширения

AD[64::32]

Входы-выходы

Адрес/данные 64-разряда

Шина АD[64::32] является мультиплексированной. Во время фазы адреса передаются не только младшие, но и 32 старших разряда адреса, однако они являются резервными и их состояние не определено. Когда сигналы REQ64# и ACK64# активны, в фазе данных передаются 32 дополнительных разряда данных.

C/BE[7::4]#

Входы-выходы

Идентификация команд или данных 64-разряда

Сигналы С/ВЕ[7::4]# используются главным образом для указания действующих байтовых трактов 32 старших разрядов данных: С/ВЕ[4] идентифицирует байт 4, С/BЕ[7] - байт 7.

PAR64

Вход-выход

Дополнение до нечётности шины адрес/данные

Сигнал PAR64 (Parity Upper DWORD) дополняет до нечетности расширенные сигналы шин адрес/данные и идентификации команд и байтов данных, Действителен после второй фазы адреса и в фазе данных при готовности задатчика или исполнителя к осуществлению

соответствующих операций.

REQ64#

Вход

Запрос задатчика на 64-разрядную операцию

Сигнал REQ64# (Request 64-bit Transfer) индицирует способность задатчика вести 64-разрядный обмен данными.

ACK64#

Вход

Подтверждение исполнителем 64-разрядной операции

Сигнал ACK64# (Acknowledge 64-bit Transfer) подается устройством, правильно дешифрировавшим адрес исполнителя и подтверждающим возможность обмена 64-разрядными данными.

Группа специальных сигналов

LOCK#

Вход-выход

Управление интерфейсом

Сигнал управления интерфейсом LOCK# вырабатывается при выполнении операций, которым для полного завершения может потребоваться большое количество передач данных.

INT#

Вход-выход

Сигналы прерываний

Сигналы прерываний действуют по уровню и являются асинхронными по отношению к сигналу CLK. В спецификации РСI определены однофункциональные (имеющие одну линию прерывания INTA#) и многофункциональные устройства, которые могут использовать до четырех сигналов запроса прерываний (INTA#, INTB#, INTC# и INTD#).

Каждая функция может генерировать не более одного сигнала прерывания. Соответствие номеров прерываний каждому конкретному сигналу определяется содержимым регистра сигналов прерывания (Interrupt Pin register).

Спецификация PCI даст возможность разработчику системы произвольным образом комбинировать сигналы прерывания (с помощью «проводного ИЛИ», программного переключения или их комбинаций). При этом любое устройство должно обеспечивать возможность использования линии прерывания в режиме разделения (chaining) с другими логическими устройствами.

SBO#,SDONE

Вход-выход

Сигналы поддержки кэш-памяти

Сигналы поддержки кэш-памяти SBO# и SDONE используются для поддержки кэш-памяти двух типов (со сквозной записью и с обратной записью), подключенной к мостовой схеме шины РСI.

JTAG

Вход-выход

Сигналы интерфейса JTAG

Сигналы интерфейса JTAG предназначены для тестирования PCI-устройств с помощью встроенного тестового порта ТАР (Test Access Port).

К ним относятся:

- сигнал ТCK (Test Clock), используемый для тактирования передаваемой и принимаемой из тестируемого устройства информации состояния и тестовых данных;

- сигнал TDI (Test Data Input), служащий для последовательного ввода данных и тестовых инструкций в порт ТАР;

- сигнал ТDО (Test Data Output) - для последовательного вывода данных и тестовых инструкций из порта ТАР;

- сигнал TMS (Test Mode Select) - для управления состоянием контроллера порта ТАР тестируемого устройства;

- сигнал TRST# (Test Reset), обеспечивающий инициализацию контроллера ТАР (асинхронно). По отношению к стандарту IEEE 1149.1 является дополнительным.


Команды шины

3. Команды шины

Команды шины передаются в фазе адреса по линиям С/ВЕ[3::0]#. Они дешифрируются исполнителем и выполняются в соответствии с таблицей.

Все устройства должны (в качестве исполнителя) отвечать на команды конфигурации. Другие команды являются для них дополнительными и применяются по мере необходимости. Если используются команды работы с памятью, должны поддерживаться все их типы.

Все передачи данных осуществляются с использованием трех сигналов: FRAME#, TRDY#, IRDY#. Фаза адреса инициируется по фронту синхросигнала при возбуждении сигнала FRAME#, затем по следующим фронтам синхросигнала выполняются одна, две или несколько фаз передачи данных. Данные передаются при одновременном действии сигналов IRDY# и TRDY#, Если хотя бы один из них находится в пассивном состоянии, вставляются такты ожидания.

Шина поддерживает два способа декодирования адресов: позитивный (каждое устройство имеет свой дешифратор адреса) и вычитающий (может применяться только одним устройством). В последнем случае устройство участвует во всех операциях обмена, "не опознанных" остальными устройствами. Это более медленный способ декодирования, но в некоторых случаях он может быть полезен. Он используется при построении стандартных шин расширения (например, ISA), которые должны "откликаться" на обращения к сильно фрагментированному адресному пространству.

В спецификации РСI определено три адресных пространства: памяти, устройств ввода-вывода и регистров конфигурации (последнее применяется для настройки устройств РСI).

Основным режимом передачи данных по шине РСI является монопольный, поддерживаемый для памяти и устройств ввода-вывода. При необходимости главный мост, расположенный между процессором и шиной, может объединять циклы записи в память в одну блочную последовательность.

Инициируемые процессором циклы обращения к устройствам ввода-вывода, как правило, выполняются в виде одиночных фаз передачи данных. Все сигналы запоминаются по срезу синхроимпульса.

C/BE[3::0]# | Команда
0000 | Подтверждение прерывания
Обеспечивает чтение вектора прерывания из неявно адресуемого контроллера прерываний
0001 | Специальный цикл
Обеспечивает простой механизм передачи сообщений всем устройствам шины.
0010 | Чтение из порта ввода-вывода
Чтение из пространства адресов ввода/вывода шины PCI.
0011 | Запись в порт ввода-вывода
Запись в пространство адресов ввода/вывода шины PCI.
0100 | Резервная
Исполнитель не должен отвечать на коды резервных команд. При выдаче резервных команд текущая операция аварийно завершается задатчиком.
0101 | Резервная
Исполнитель не должен отвечать на коды резервных команд. При выдаче резервных команд текущая операция аварийно завершается задатчиком.
0110 | Чтение из памяти
Чтение из пространства адресов памяти шины PCI.
0111 | Запись в память
Запись в пространство адресов памяти шины PCI.
1000 | Резервная
Исполнитель не должен отвечать на коды резервных команд. При выдаче резервных команд текущая операция аварийно завершается задатчиком.
1001 | Резервная
Исполнитель не должен отвечать на коды резервных команд. При выдаче резервных команд текущая операция аварийно завершается задатчиком.
1010 | Чтение конфигурации (каждого агента)
Чтение из конфигурационного пространства адресов шины PCI для каждого объекта.
1011 | Запись конфигурации (в область конфигурации каждого агента)
Запись в конфигурационное пространство адресов шины PCI в область конфигурации каждого объекта.
1100 | Множественное чтение из памяти
Выполняется аналогично чтению из памяти, но указывает, что задатчик может считывать более одной строки данных из кэш-памяти, прежде чем завершит блочную передачу данных.
1101 | Двойной адресный цикл
Используется для передачи 64-разрядного адреса в устройство, поддерживающие 64-разрядную адресацию.
1110 | Линейное чтение из памяти
Выполняется аналогично чтению из памяти, но указывает, что задатчик намеревается выполнить более двух фаз 32-разрядной передачи данных по шине.
1111 | Запись в память и прекращение операции
Выполняется аналогично записи в память, но указывает, что задатчик намеревается записать все байты в пределах адресуемой строки кэш-памяти посредством одной блочной передачи.


Разновидности операций на шине

4. Разновидности операций на шине

4.1. Начало и продолжение транзакции

4.2. Окончание транзакции

4.3. Способы завершения транзакций Способы завершения транзакций

4.4. Цикл чтения

4.5. Цикл записи

4.6. Арбитрация

4.7. Цикл конфигурации

4. Разновидности операций на шине

Все сигналы базовой конфигурации шины PCI устанавливаются и сбрасываются по переднему фронту CLK.

AD - единице соответствует высокий уровень, нулю - низкий. Активному значению управляющего сигнала соответствует 0 – низкий уровень.

Установка сигнала - это переход его по переднему фронту CLK в 0 - низкий уровень.

Сброс сигнала - это переход его по переднему фронту CLK в 1 - высокий уровень.

Установка и сброс сигнала на линии интерфейса происходит с задержкой по отношению к фронту CLK. Задержка установки – время предустановки (t пу), задержка сброса - время удержания (t уд).

Считывание сигнала с линии производится тогда, когда этот сигнал принял стабильное, постоянное значение. Поэтому момент установки сигнала и его считывания разнесены во времени как минимум на один такт CLK.

Считывание сигнала и его сброс могут производиться одним и тем же импульсом CLK за счёт времени удержания. Поэтому минимальное время передачи данных составляет 1 такт.

В процессе выполнения операций на шине на ее линиях может возникнуть ситуация, когда на одном и том же импульсе CLK меняются объекты, управляющие этими линиями. Один объект снимает свои сигналы (адреса, данных, управления), другой начинает управлять этими линиями, подавая на них собственные сигналы (адреса, данных, управления), что приводит к возникновению состязаний на этих линиях и появлению помех. Чтобы исключить эти состязания, вводится специальный цикл длительностью в один такт импульсов CLK, который разносит во времени сброс (установку) сигналов при смене объектов, управляющих такими линиями. Один объект снимает свои сигналы в начале такого цикла, другой выставляет сигнал в его конце.

Этот цикл называют Т-циклом (turnaround cycle). Т-цикл для разных сигналов использует разные такты в транзакции. Например, для сигналов IRDY#, TRDY#, DEVSEL#, STOP# как их Т-цикл используют адресную фазу. Сигналы FRAME#, С/BE[3::0]#, AD[31::0] используют такт холостого хода на шине между транзакциями, как их Т-цикл. Такт холостого хода на шине (IDLE цикл) появляется тогда, когда сброшены и FRAME# и IRDY#.

При выполнении любой транзакции используются следующие сигналы шины: REQ#, GRN#, FRAME#, AD[31::0], C/BE[3::0]#, IRDY#, TRDY#, DEVSEL#, STOP#. Непосредственно процессом передачи данных в процессе выполнения транзакции управляют три сигнала FRAME#, IRDY# и TRDY#.

Рассмотрим назначение и действие этих сигналов в процессе передачи данных между задатчиком и исполнителем.

4.1. Начало и продолжение транзакции

Транзакцию начинает задатчик, предварительно получив разрешение на работу на шине. Это разрешение задатчик получает от арбитра, послав ему сигнал запроса REQ# и получив разрешение GRN# от него.

Если на шине состояние холостого хода (IDLE),то начинает транзакцию с адресной фазы путем установки по 1-ому импульсу транзакции сигналов FRAME#, адреса AD[31::0] и команды C/BE[3::0]#. Эти сигналы становятся достоверными ко 2-ому импульсу транзакции.

По второму импульсу, в соответствии с установленным адресом, определяется исполнитель и соответствующая команда. По этому импульсу задатчик выставляет сигнал IRDY#.

Сигнал DEVSEL# должен устанавливаться после декодирования адреса перед или вместе с сигналами TRDY#, STOP# и данных. Исполнитель не должен сбрасывать DEVSEL#, пока не закончится последняя фаза данных.

Передача данных происходит при наличие активных значений сигналов FRAME#, IRDY#, TRDY# и DEVSEL#. Если отсутствует сигнал IRDY# или TRDY#, то передачи данных нет, а идет такт ожидания. Если отсутствует сигнал DEVSEL#, то задатчик прекращает транзакцию по инициативе исполнителя.

Фаза данных может занимать один такт при отсутствии тактов ожидания, или несколько тактов при наличие тактов ожидания.

Задатчик или исполнитель могут менять значения данных на шине AD только при активных значениях сигналов IRDY# и TRDY# соответственно. Если эти сигналы сброшены, то на шине AD удерживаются старые значения данных.

При операции записи, значения сигналов на шине C/BE# меняется на каждой фазе данных. При чтении значения C/BE# не меняется в течение всех фаз данных транзакции.

4.2. Окончание транзакции

На последней фазе данных обязательно сбрасывается FRAME# и устанавливается IRDY#. FRAME# может быть сброшен только тогда, когда IRDY# установлен. После того как исполнитель на последней фазе данных установит TRDY#, выполняется последняя передача данных от исполнителя к задатчику, транзакция закончивается сбросом на последнем импульсе транзакции сигнала IRDY#. Т.к. сброшены сигналы FRAME# и IRDY#, то следующий такт будет тактом холостого хода (IDLE циклом).

По последнему импульсу транзакции также сбрасываются сигналы TRDY# и DEVSEL#.

4.3. Способы завершения транзакций

Транзакция может быть завершена либо задатчиком, либо исполнителем. Пока ни тот ни другой не инициализируют останов, транзакция продолжается.

1. Способ завершения транзакции задатчиком: заключается в следующем. Задатчик инициализирует завершение транзакции, когда сигнал FRAME# сброшен, а IRDY# установлен. Это указывает исполнителю, что наступает последняя фаза данных. Последняя передача данных происходит, когда установлены и IRDY#, и TRDY#. Транзакция завершается, когда и FRAME#, и IRDY# сброшены (состояние холостого хода шины).

Задатчик может прекращать транзакцию этим способом по двум причинам:

- когда задатчик заканчивает начатую им транзакцию;

- когда линия разрешения захвата шины задатчиком GRN cброшена и наступил момент Тайм-аут, когда исчерпано время, задаваемое Таймером задержки и транзакция прерывается.

Модифицированная версия этого способа завершения транзакции задатчиком используется тогда, когда исполнитель не отвечает на его адресацию сигналом DEVSEL#.

2.Способ завершения транзакции исполнителем: заключается в следующем. В этом случае используется сигнал STOP#. Исполнитель выдает сигнал STOP#, чтобы запросить завершение транзакции от задатчика. После установки, STOP# сохраняет активное значение до момента сброса FRAME#. Взаимосвязь между IRDY# и TRADY# не зависит от взаимодействия между STOP# и FRAME#. Поэтому данные могут быть переданы или не переданы до конца в текущей транзакции. Это зависит единственно от состояния IRDY# и TRDY#. Однако, когда STOP# установлен, а TRDY# сброшен, это указывает на невозможность дальнейшей передачи данных исполнителя. В этом случае, задатчик не ждет последней передачи данных, а немедленно завершает транзакцию.

4.4. Цикл чтения

Транзакцию начинает задатчик, при наличие на шине холостого хода (IDLE) и разрешения на работу на шине. Это разрешение задатчик получает от арбитра, послав ему сигнал запроса REQ# и получив разрешение GRN# от него.

После этого задатчик начинает транзакцию с адресной фазы путем установки по 1-ому импульсу транзакции сигналов FRAME#, адреса AD[31::0] и команды C/BE[3::0]#. Эти сигналы становятся достоверными ко 2-ому импульсу транзакции.

По второму импульсу, в соответствии с установленным адресом определяется сполнитель и соответствующая команда. По этому импульсу задатчик выставляет сигнал IRDY#, который говорит исполнителю, что задатчик готов принять данные. На втором импульсе задатчик устанавливает сигналы указателя байт при передаче данных C/BE[3::0]#. После 2-го импульса задатчик не управляет линиями AD[31::0], ими управляет исполнитель.

Поэтому исполнитель ко 2-ому импульсу организует Т-цикл для сигналов AD[31::0], задерживая установку сигнала TRDY#.

По 2-ому импульсу он может установить, если успеет, сигнал DEVSEL#, сообщающий задатчику, что исполнитель найден и имеет право проводить транзакцию, если не успевает из-за Т-цикла на шине АD, то установка DEVSEL# происходит на 3-м импульсе. На 2-ом импульсе заканчивается фаза адреса и начинается фаза данных.

На 3-ем импульсе исполнитель определяет, что задатчик готов (по сигналу IRDY#) к приему данных, и выставляет первые данные на AD[31::0] и устанавливает сигнал TRDY#, который сообщает задатчику, что на линиях AD[31::0] имеются первые достоверные данные. На этом такте может устанавливаться сигнал DEVSEL#, если исполнитель не успел его установить на втором импульсе.

Сигнал DEVSEL# должен устанавливаться после декодирования адреса и перед или вместе с сигналами IRDY#, STOP# и данных. Исполнитель не должен сбрасывать DEVSEL#, пока не закончится последняя фаза данных. Т.к. на 3-м импульсе фазы данных передачи данных от исполнителя к задатчику не произошло, то этот такт называется тактом ожидания.

Только на 4-м импульсе задатчик определяет (по сигналу TRDY#), что на шине AD[31::0] находятся достоверные данные и считывает их, завершая первую фазу данных. На 4-м импульсе начинается вторая фаза данных.

На временной диаграмме (рис. 1) показана транзакция чтения, имеющая три фазы данных длительностью в 7 импульсов CLK. Данные передаются на импульсах 4, 6, и 8, а циклы ожидания наступают на импульсах 3 и 5 по сбросу сигнала TRDY# и на импульсе 7 по сбросу сигнала IRDY#. На 7 импульсе задатчик узнает, что наступает последняя фаза данных, он сбрасывает на этом импульсе FRAME# и устанавливает IKDY#, т.к. он был сброшен. Транзакция заканчивается на 8-м импульсе сбросом IRDY#, TRDY# и DEVSEL#. Далее идет такт холостого хода.

4.5. Цикл записи

Транзакцию начинает задатчик, при наличие на шине холостого хода (IDLE) и разрешения на работу на шине. Это разрешение задатчик получает от арбитра, послав ему сигнал запроса REQ# и получив разрешение GRN# от него.

После этого задатчик начинает транзакцию с адресной фазы путем установки по 1-ому импульсу транзакции сигналов FRAME#, адреса AD[31::0] и команды C/BE[3::0]#. Эти сигналы становятся достоверными ко 2-ому импульсу транзакции.

По второму импульсу, в соответствии с установленным адресом определяется исполнитель и соответствующая команда. По этому импульсу задатчик выставляет сигналы IRDY# данных и указатель байт BE[3::0]. Сигнал IRDY# указывает исполнителю, что на шине AD[31::00] достоверные данные и их можно считывать.

Исполнитель по 2-ому импульсу устанавливает сигнал TRDY#, говоря задатчику, что он может принять данные.

По 2-ому импульсу исполнитель устанавливает сигнал DEVSEL#, сообщающий задатчику, что исполнитель найден и имеет право проводить транзакцию. На 2-ом импульсе заканчивается фаза адреса и начинается фаза данных.

На 3-ем импульсе исполнитель определяет, что задатчик выставил первые данные на AD[31::0] и считывает их.

На 3-ем импульсе заканчивается первая фаза данных. На временной диаграмме приведен пример транзакции записи, содержащей 3 фазы данных.

Как видно из диаграммы (рис. 2), первая и вторая фазы данных не имеют циклов ожидания и выполняются каждая за один такт. Третья и последняя фаза данных имеет три цикла ожидания и начинается на четвёртом импульсе, по фронту которого сбрасывается FRAME# и устанавливается IRDY#, т.к. он был сброшен. Циклы ожидания образуется сбросом сигнала TKDY#, а на первом - также сбросом сигнала IRDY#. Хотя FRAME# сброшен, а IRDY# установлен на шестом импульсе, только на 8-м импульсе установлен TKDY#, что позволяет завершить транзакцию. На 9-м импульсе шина находится в состоянии холостого хода (IDLE) и готова к новой транзакции.

4.6. Арбитрация

Каждый задатчик на шине PCI получает доступ к шине только после разрешения на захват шины от Арбитра. Для этого используется специальные, индивидуальные для каждого задатчика линии (типа точка-точка) запроса REQ# к арбитру и разрешения GNT# к задатчику от арбитра.

Для доступа к шине, задатчик выдает арбитру сигнал запроса REQ# и может захватить шину только после получения от арбитра сигнала разрешения GNT#. Процесс арбитрации не требует дополнительных циклов шины, т.к. он совмещается с выполнением других операций, кроме случая, когда шина не занята и находится в состоянии холостого хода (IDLE цикл).

Захват шины задатчиком и выполнение транзакции идет в такой последовательности. Задатчик выдает запрос REQ#, через время задержки арбитрации арбитр выдает задатчику сигнал разрешения GNT#, через время задержки ожидания захвата шины задатчик начинает транзакцию, выставив сигнал FRAME#. Идет передача одной или нескольких транзакций, в конце последней транзакции производится сброс сигнала RQE#, затем GNT#.

Такой процесс происходит тогда, когда нет запросов шины от задатчиков с большим приоритетом.

Если во время работы текущего задатчика появляется запрос от объекта с большим приоритетом, то либо идет прерывание транзакции, либо она выполняется до конца, а затем шина переходит к задатчику с большим приоритетом.

Задатчик выдает сигнал REQ# по фронту любого импульса синхронизации шины (CLK).

Задатчик может сбросить сигнал REQ# на любом импульсе CLK, сброс этого сигнала арбитр интерпретирует как то, что задатчику больше шина не требуется и можно сбросить его сигнал разрешения GNT#.

Таким образом в одно и то же время могут быть установлены REQ# от нескольких задатчиков.

В ответ на запрос арбитр выдает сигнал разрешения GNT#. При нескольких запросах REQ# арбитр выдает сигнал разрешения GNT# задатчику, имеющему в данный момент времени наивысший приоритет.

На шине в любой момент времени может быть установлен только один сигнал GNT#, т.к. шиной в каждый момент времени управляет только один задатчик.

Арбитр выдает сигнал разрешения GNT# в ответ на запрос REQ# с некоторой задержкой арбитрации.

Типовая задержка арбитрации для задатчика с наивысшим приоритетом, при наличие на шине текущего задатчика, равна двум импульсам CLK.

Арбитр может сбросить GNT# одного объекта в момент установки GNT# другого с более высоким приоритетом, если на шине нет состояния холостого хода. В противном случае, требуется задержка в один импульс между сбросом одного GNT# и установкой другого, чтобы исключить состязания на шине по сигналам AD и PAR.

Получив сигнал GNT# задатчик не сразу захватывает шину, а через некоторое время, называемое задержкой ожидания захвата шины (задержкой захвата). Это время от получения GNT# задатчиком до установки стабильного значения сигнала FRAME#. Оно также измеряется количеством импульсов CLK.

На временной диаграмме (рис. 3) показан пример протокола базовой арбитрации. В примере действуют два задатчика A и B, имеющие в своих транзакциях по одной фазе данных. Сигнал запроса шины от задатчика A - REQ#(A) уже установили. Задатчику А разрешен доступ к шине на 2-м импульсе, когда он получил сигнал GNT#(A). Т.к. шина ко 2-ому импульсу находится в состоянии холостого хода (FRAME# и IRDY# сброшены), то задатчик А может начинать транзакцию на этом импульсе с установки сигнала FRAME# (A), который примет стабильное значение на 3-м импульсе. Задатчик А требует шину для выполнения других транзакций, поэтому сигнал REQ#(A) не сбрасывается ко 2-ому импульсу и продолжается удерживаться задатчиком А.

На 1-м импульсе задатчик В с большим приоритетом выставляет свой запрос REQ#(B) арбитру и тот выдает разрешение по фронту 3-его импульса, этим же фронтом арбитр сбрасывает разрешение GNT#(A) задатчика А. Задатчик А сбрасывает FRAME#(A) на третьем импульсе и заканчивает свою транзакцию на 4-м импульсе, освобождая шину. На 5-м импульсе на шине состояние холостого хода, поэтому задатчик В может на этом импульсе начинать свою транзакцию, т.к. его GNT#(B) уже установлены. Задатчику В требуется всего одна транзакция, поэтому он сбрасывает свой запрос REQ#(B) в начале транзакции по фронту 5-ого импульса. На 7-м импульсе эадатчик В заканчивает свою транзакцию, предварительно сбросив FRAME#(B) на 6-м импульсе. Т.к. запрос на шину от объекта В сброшен, то арбитр по фронту 6-ого импульса сбрасывает разрешение GNT#(B) и устанавливает сигнал разрешения GNT(A) для задатчика А, который на 8-м импульсе может начинать следующую транзакцию.

4.7. Цикл конфигурации

Шина PCI имеет две команды конфигурации: чтения и записи из адресного пространства конфигурации емкостью в 256 байт. Команды конфигурации, подобно другим командам чтения и записи разрешают доступ к байту, слову, двойному слову (32 р.) и пакетной передаче. Правила транзакций такие же как в других командах, включая все условия завершения транзакций.

Особенностями команд конфигурации являются следующие.

Доступ в область адресов конфигурации устройства на шине производится с помощью специальных, индивидуальных для каждого устройства, линий типа точка-точка, идущих от главного моста к каждому устройству отдельно. По этим линиям передается специальный сигнал выбора устройства IDSEL. Каждое устройство имеет свой вход IDSEL, который работает подобно классическому входу "выбор кристалла" (chip select). Устройство PCI становится исполнителем команды конфигурации только тогда, когда его сигнал IDSEL установлен, и два младших разряда адреса AD[1::0] содержат код 00 в течении фазы адреса команды конфигурации.

Активное значение сигнала IDSEL имеет высокий уровень, т.е. соответствует 1.

Адресация внутри пространства конфигурации устройства, содержащего 64 регистра по 32 разряда каждый, осуществляется разрядами [7::2] шины AD(AD[7::2]) и разрядами выбора байта C/B[3::0].

В командах конфигурации используется только 11 младших разряда на шине AD[10::0], а разряд AD[31::11] не используется (являются резервными).

Спецификацией не определено как формируется сигнал IDSEL главным мостом шины PCI. Однако применяется способ задания линий IDSEL путем использования старших линий шины AD[31::11]. Это позволяет иметь 21 такую линию. В этом случае, одна из линий AD[31::11] соединяется со входом IDSEL устройства через большое сопротивление. Это снижает нагрузку на линию при выполнении других операций на шине, но приводит к затягиванию фронта установки сигнала IDSEL в активное состояние. В связи с этим необходима предустановка адреса в фазе адреса транзакции конфигурации. Адрес может быть предустановлен за несколько импульсов до FRAME# (число импульсов для предустановки определяется из постоянной времени входной цепочки сигнала IDSEL).

На временной диаграмме (рис. 4) показана операция конфигурации-чтения. Транзакция содержит всего одну фазу данных.

Как видно из диаграммы, предустановка адреса производится 1-м импульсом. Сигнал IDSEL достигает своего номинального значения ко 2-му импульсу, поэтому фронтом этого импульса производится установка FRAME# и начинается фаза адреса. Сигнал FRAME# сбрасывается 3-м импульсом, т.к. с него начинается первая и последняя фаза данных. Фаза данных состоит из 2-х тактов, первый - такт ожидания. Ожидание инициируется исполнителем с помощью задержки установки сигнала TRDY#. Передача данных и завершение транзакции производится на 5-м импульсе.