Рассмотрим систему, представленную следующей схемой (рис. 1):
Рис. 1.  
Здесь представлены два микропроцессора, которые могут через магистраль обращаться к общими ЗУ и УВВ. Очевидно, для ЗУ и УВВ, представленных на рисунке, существует два ведущих устройства — микропроцессор 1 и микропроцессор 2. Естественно, микропроцессоры используют общие ресурсы не одновременно, а по очереди, поэтому в конкретном цикле обмена ведущим устройством является один из них. В общем случае количество микропроцессоров может быть больше двух.
Такая схема может применяться в разных случаях, например, если нужно осуществить обмен данными между двумя микропроцессорами через общее ЗУ, или иметь доступ из нескольких МПС к одному УВВ, через которое подключен какой-либо датчик.
На рис. 1 представляет упрощенное представление системы с несколькими микропроцессорами. В реальности, системы будет выглядеть следующим образом (рис. 2):
Рис. 2.  
У каждого микропроцессора имеются свои персональные ЗУ и УВВ, находящиеся целиком и полностью в его распоряжении. Вместе с микропроцессором они образуют микропроцессорную систему. В то же время, каждый микропроцессор имеет доступ к общим ресурсам — ЗУ и УВВ.
Магистрали (шины), соединяющие все эти устройства, имеют свою классификацию (рис. 3):
Рис. 3.  
Магистраль, выходящая из микропроцессора называется локальной шиной микропроцессора. Она является мультиплексированной (в большинстве случаев). Магистраль, соединяющая микропроцессор с УВВ и ЗУ, находящимися в его персональном распоряжении, называется резидентной шиной. Магистраль, соединяющая микропроцессор с общими ЗУ и УВВ носит название системной шины. Резидентная и системная шины не мультиплексированы.
Очевидно, для подключения УСО к микропроцессору в данном случае мы должны использовать специальную схему — схему шинного интерфейса (СШИ). Она должна располагаться в месте соединения всех трех шин (см. рис. 3). СШИ должна решать следующие задачи:
  1. Демультиплексирование локальной ШАД;
  2. Хранение адреса в течение всего цикла обмена;
  3. Подключение микропроцессора (локальной шины) к системной или резидентной шине, в зависимости от того, по какой шине будет происходить обмен.
Отдельно должен решаться вопрос о порядке подключении к системной шине (СШ). Очевидно, что к общим ресурсам (ЗУ, УВВ) в некий момент времени может иметь доступ только один микропроцессор. Следовательно, должна существовать возможность проверки занятости СШ. Также необходимо предусмотреть механизм для разрешения конфликтных ситуаций, например, когда два или более микропроцессора одновременно попытаются получить доступ к общим ресурсам. Все эти вопросы будут рассмотрены нами позже, пока же сосредоточимся на создании СШИ, решающей сформулированные выше три задачи.
Очевидно, что СШИ должно быть две — одна будет обеспечивать подключение к СШ, другая — к РШ. Естественно, в каждом цикле обмена работать будет либо одна, либо другая СШИ (рис. 4):
Рис. 4.  
Рассмотрим более детально саму схему шинного интерфейса (рис. 5):
Рис. 5.  
Если посмотреть на сформулированные ранее три задачи, которые должна решать СШИ, мы можем увидеть, что две первые из них совпадают с задачами, которые решала рассмотренная в предыдущем разделе схема демультиплексирования. Следовательно, она может быть положена в основу СШИ.
Остается третья задача: обеспечение подключения/отключения от локальной шины (в соответствии с сигналом, передаваемым по специальной линии "Разрешение подключения к шине"). На выходе СШИ мы имеем три шины: адреса, данных и управления. Задача отключения шины данных фактически уже решена в схеме демультиплексирования: при неактивном сигнале DEN шина данных отключена от локальной шины. Отключение шины адреса также может быть выполнено в рамках известной нам схемы демультиплексирования путем подачи сигнала "Разрешение подключения к шине" на вход OE буферного регистра.
Для отключения шины управления используется специальное устройство, называемое контроллером шины (рис. 6).
Контроллер шины
Контроллер шины предназначен для решения задач управления шинным интерфейсом.
Рис. 6.  
Контроллер шины (КШ) состоит из следующих блоков:
Контроллер шины позволяет выполнять подключение/отключение шины управления в зависимости от сигнала разрешения AEN. А вся схема шинного интерфейса будет выглядеть следующим образом (рис. 7):
Рис. 7.  
Здесь мы видим уже знакомую нам схему демультиплексирования, которая в данном случае управляется контроллером шины. Он же решает задачу "подключения/отключения" шины управления. Схема шинного интерфейса "открывается", то есть подключает микропроцессор к соответствующей шине, с помощью сигнала "Разрешение подключения к шине". Этот сигнал подается на контроллер шины, заставляя его "подключить" микропроцессор к шине управления и сформировать сигналы, управляющие буферным регистром и шинным формирователем. Этот же сигнал подается на буферный регистр для "отключения" его от шины данных в случае, когда схема шинного интерфейса находится в "закрытом" состоянии.
Как же формируется сигнал "Разрешение подключения к шине"? Если посмотреть на рис. 4 мы увидим, что у нас имеется две СШИ — одна для подключения к системной шине, другая для подключения к резидентной шине. Обе схемы имеют вход "Разрешение подключения к шине". Следовательно, должно быть некое устройство, которое в каждом цикле обмена определяло бы, будет ли вестись обмен по системной или резидентной шине. Определить это можно на основании адреса ведомого устройства. Поэтому для решения рассматриваемой задачи используется дешифратор адреса (рис. 8):
Рис. 8.  
На вход дешифратора адреса подается адрес устройства, с которым будет происходить обмен. Не углубляясь в нюансы технической реализации дешифратора адреса, мы можем представить его в виде некоей таблицы из двух столбцов. В первом — все значения адресов, с которыми возможен обмен, во втором — для каждого адреса признак: к системной или резидентной шине он относится. Получив значение адреса и определив его принадлежность, дешифратор активизирует одну из линии "Разрешение подключения к шине" (на схеме обозначена AEN), "отпирая" таким образом одну из СШИ.
Обратите внимание, что между дешифратором и СШИ системной шины на пути сигнала AEN находится некое устройство, задачей которого является определение возможности подключения к системной шине (она может быть занята другой МПС). Об этом устройстве мы поговорим немного позже.
Синхронизация схемы шинного интерфейса и микропроцессора
Представим себе теперь следующую ситуацию. Микропроцессор начинает цикл обмена по системной шине. Дешифратор формирует сигнал AEN, но подключение к шине невозможно — она занята. Устройство, отмеченное на рис. 8 знаком вопроса, не открывает СШИ, обмен начаться не может. Но ведь микропроцессор не знает об этом! Возникает необходимость синхронизации шинного интерфейса с микропроцессором. В случае, когда доступ к запрашиваемому устройству по системной шине не может быть получен, микропроцессор должен быть извещен об этом для того, чтобы приостановить цикл обмена до того момента, когда системная шина станет доступна. Как это можно сделать? Для воздействия на цикл асинхронного обмена микропроцессора есть только один способ — использование сигнала готовности READY, который проверяется в конце второго такта обмена. Как мы помним, если сигнал READY к этому моменту неактивен, микропроцессор не приступает собственно к обмену, переходя к выполнению холостых тактов до перехода READY в активное состояние. Следовательно, в нашем случае сигнал READY должен быть неактивен, если доступ к системной шине невозможен. Реализовать этот принцип можно, например, с помощью следующей схемы (рис. 9):
Рис. 9.  
Использование логической микросхемы "ИЛИ" с инверсными входами (на ее выходе будет "1" только если на одном или на обоих входах "0") позволяет формировать активное значение сигнала READY только в том случае, если хотя бы один из сигналов AEN (для системной или резидентной шины) активен (на нем присутствует сигнал логического "0").
Арбитр шины
Вернемся к рис. 9. Устройство, обозначенное на этом рисунке знаком вопроса и определяющее возможность подключения к системной шине, называется арбитром шины (АШ). Каждая МПС, подключенная к системной шине имеет в своем составе арбитр шин. Таким образом, количество арбитров шин (АШ) равно количеству МПС (микропроцессоров) в многопроцессорной системе. Образно выражаясь, АШ является "представителем" МПС по вопросам доступа к системной шине. Получив от микропроцессора информацию о желании использовать системную шину (СШ), АШ "вступает в переговоры" с другими АШ и в результате определяет момент времени, когда ему (его микропроцессору) будет разрешено использование СШ. (рис. 10)
Рис. 10.  
Все АШ соединены между собой посредством специальных линий связи, по которым осуществляется взаимодействие между ними в процессе решения вопросов о возможности и порядке доступа к СШ.
Рассмотрим АШ более подробно (рис. 11):
Рис. 11.  
От микропроцессора к АШ по специальным линиям приходит информация о состоянии микропроцессора (аналогично КШ, рассмотренному ранее). От дешифратора адреса поступает сигнал о том, что в данном цикле обмен будет вестись по СШ (сигнал SYSB). Когда разрешение на занятие шины получено, АШ "открывает" СШИ уже известным нам сигналом AEN. Общая схема соединения АШ с микропроцессором и СШИ приведена на рис. 12.
Рис. 12.  
В общем случае АШ решает следующие задачи:
Рассмотрим первую задачу. Для определения занятости СШ используется специальная сигнальная линия BUSY, к которой параллельно подключаются все АШ (рис. 13):
Рис. 13.  
Получив от микропроцессора и дешифратора адреса информацию о необходимости использования СШ, АШ проверяет ее занятость, анализируя состояние линии BUSY. Наличие логической "1" говорит о том, что СШ свободна, наличие "0" — о том, что СШ занята. Если СШ занята, АШ ожидает ее освобождения, "прослушивая" линию BUSY. Если СШ свободна, АШ сам выдает на линию BUSY сигнал логического "0", сообщая таким образом остальным АШ о том, что шина им занята. По окончании использования шины АШ, "захвативший" шину, переводит сигнал BUSY в неактивное состояние (логической "1"), сообщая другим АШ об освобождении СШ.
Решение второй задачи основано на использовании понятия "приоритет". Каждому АШ назначается некий приоритет и при одновременном запросе СШ доступ получает АШ с более высоким приоритетом. Рассмотрим две основные схемы, используемые для решения этой задачи: схему последовательного и параллельного арбитража.
Последовательный арбитраж
Схема включения АШ при использовании последовательного арбитража приведена на рис. 14.
Рис. 14.  
Каждый арбитр имеет вход BPRN — разрешение занятия шины. Если на этом входе присутствует активный сигнал (в данном случае это сигнал логического "0"), АШ разрешается занять СШ.
Посмотрим на рис. 14. У самого левого АШ вход BPRN соединен с "землей" — это эквивалентно подаче на него логического "0". То есть самый левый АШ всегда имеет право занять СШ — он имеет наивысший приоритет. Но возможна ситуация, когда АШ не нуждается в использовании СШ (его микропроцессор не выполняет в данный момент циклов обмена по СШ). В этом случае данный АШ может "передать" свое право на занятие СШ следующему АШ. Внутри АШ расположен воображаемый логический ключ (рис. 15), который в этом случае "замыкается", соединяя вход BPRN с выходом BPRO.
Рис. 15.  
Выход BPRO соединен со входом BPRN следующего АШ и разрешение на занятие СШ передается ему за счет подачи уровня "0" на вход BPRN. Второй АШ может начать использование СШ (если его микропроцессору это нужно), а может "передать" право использования СШ дальше. Очевидно, что самый правый АШ имеет наименьший приоритет и получит право работы с СШ только в том случае, если все предыдущие АШ "отказались" ее использовать.
Достоинства последовательного арбитража: простота реализации — не нужно никаких дополнительных устройств, достаточно лишь соединить в определенной последовательности выходы и входы АШ.
Недостатки последовательного арбитража:
Параллельный арбитраж
Схема включения АШ при использовании параллельного арбитража приведена на рис. 16.
Рис. 16.  
При необходимости получения доступа к шине АШ устанавливает активный уровень на линии BREQ — сигнал запроса на занятие шины. Эти сигналы от всех АШ поступают в специальное устройство — контроллер арбитража, которое в соответствии с заложенными в него приоритетами выбирает один из АШ и разрешает ему работать с СШ, устанавливая в активное состояние сигнал BPRN для этого АШ. Внутри контроллера арбитража каждому АШ может быть назначен жесткий приоритет, либо может использоваться система циклически меняющихся приоритетов, когда АШ, последним использовавший СШ, получает наинизший приоритет, а тот, который дольше всего не обращался к СШ — наивысший.
Достоинства данной схемы:
Недостаток (по сравнению со схемой последовательного арбитража) — большая сложность, так как используется дополнительное устройство — контроллер арбитража.
Функционирование арбитра шины при захвате системной шины
Арбитр шины начинает процедуру захвата системной шины при наступлении следующих событий:
Функционирование АШ при захвате СШ иллюстрируется рис. 17:
Рис. 17.  
В момент времени (1) информация о состоянии микропроцессора сигнализирует о начале цикла обмена, в момент времени (2) сигнал SYSB переходит в активное состояние. АШ выдает сигнал запроса системной шины BREQ (3). После этого АШ ожидает наступления следующих условий: перехода сигнала BUSY в состояние логической "1" (говорит об освобождении СШ) и перехода сигнала BPRN в активное состояние логического "0" (означает, что занятие шины разрешено именно этому АШ). Наступление этих двух условий (моменты времени (4) и (5)) означает, что АШ может занять СШ. Он переводит сигнал BUSY в состояние логического "0" (момент (6)), сообщая тем самым другим АШ о занятии шины, и переводит в активное состояние сигнал AEN, "отпирая" схему шинного интерфейса и сигнализируя микропроцессору о возможности продолжения обмена (момент времени (7)).
Функционирование арбитра шины при освобождении системной шины
Освобождение СШ арбитром происходит при наступлении одного из следующих условий:
Процедура освобождения СШ иллюстрируется рис. 18:
Рис. 18.  
АШ переводит в неактивное состояние сигналы BREQ, AEN и устанавливает на линии BUSY сигнал логической "1", показывая другим арбитрам, что он освободил СШ.
Сигнал блокировки шины
Если в процессе обмена по СШ сигнал BPRN на входе АШ переходит в неактивное состояние, СШ немедленно (по завершении текущего цикла обмена) освобождается, и использовавший ее микропроцессор вынужден ждать, пока ему снова будет предоставлен доступ к системной шине. Однако существуют операции ввода-вывода, которые нежелательно прерывать до их полного завершения. Например, при вводе данных с 20-разрядного цифрового датчика положения нужно произвести два цикла обмена, так как за один цикл может быть введено только одно машинное слово (16 разрядов для 16-разрядного микропроцессора). Если доступ к датчику осуществляется по СШ и после первогого цикла доступ к СШ будет прерван, только часть данных окажется введенной. И микропроцессор должен будет ожидать неопределенное время для ввода оставшейся порции данных и продолжения вычислений. Такой ситуации можно избежать, если иметь возможность запретить АШ освобождать СШ при выполнении "критических" операции ввода-вывода. Для этого служит специальная управляющая линия блокировки шины LOCK (рис. 19):
Рис. 19.  
Установка активного состояния линии LOCK на выходе микропроцессора производится программно с помощью специального префикса блокировки шины LOCK, например:
LOCK IN AL, 0001
Таким образом, при составлении программы имеется возможность защиты "критических" операции ввода-вывода от прерывания, вызванного отказом в доступе к СШ.