Арбитрация

в начало

Каждый задатчик на шине 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.

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

Рис.2.3. Временная диаграмма

На 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-м импульсе может начинать следующую транзакцию.