Альтернативой является асинхронная
магистраль, на которой операция, например, ввода осуществляется следующим образом. ЦП устанавливает адрес порта, а на стробирующей линии (назовем ее, как и раньше, IOR') уровень (не импульс), который показывает адресному устройству, что идет операция ввода. Адресуемое устройство устанавливает данные на линиях DATA, а также уровень, сигнализирующий о наличии достоверных данных (назовем его DTACK', data transfer acknowledged, подтверждение передачи данных). ЦП, обнаружив DTACK', фиксирует («защелкивает») данные и затем снимает уровень IOR'. Как только интерфейс замечает, что линия IOR' переходит в высокое состояние, он снимает сигналы с линий DTACK' и DATA. Другими словами, ЦП заявляет: «Дай мне данные». Периферийное устройство отвечает: «Вот они, бери». Тогда ЦП говорит: «Готово, взял». И, наконец, периферийное устройство завершает диалог: «Отлично! Пойду снова спать». Описанную процедуру иногда называют «рукопожатием», или квитированием. Асинхронный протокол допускает использование длинных шин и позволяет взаимодействующим устройствам убедиться, что данные действительно передаются. Если удаленное устройство будет выключено, ЦП узнает об этом. Собственно говоря, эта информация доступна (через регистры состояния) на магистралях любого вида, и основное достоинство асинхронного протокола заключается в возможности использовать линии связи любой длины за счет незначительного усложнения аппаратуры.Иногда вам может понадобиться подключить к магистрали относительно медленные интерфейсные ИС; примером может служить ПЗУ с большим временем доступа или даже ОЗУ. Все магистрали предоставляют какие-то средства удлинения цикла магистрали, однако при асинхронном протоколе это происходит само по себе, поскольку цикл магистрали продолжается до тех пор, пока не будет снят сигнал DTACK'
. Синхронные магистрали всегда содержат какую-то линию типа HOLD' (в компьютерах PC она называется I/O СН RDY) для организации состояний ожидания и задержки во времени конца цикла. Результирующая длительность цикла всегда увеличивается на целое число тактов генератора ЦП, т. е. на число включенных в цикл «состояний ожидания». Например, стандартная IBM PC имеет тактовую частоту 4,77 МГц (период 210 нc), а длительность обычного цикла магистрали при обращении к памяти составляет 4 тактовых периода (840 нc). Если сигнал I/O СН RDY переводится в низкое состояние при обращении к памяти перед вторым фронтом сигнала CLK и снова переходит в высокое состояние перед третьим, генерируется одно состояние ожидания с удлинением цикла магистрали (а также и сигналов MEMW' или MEMR') до 5 тактов (1050 нc). Удерживая сигнал I/O СН RDY в низком состоянии на протяжении большего числа тактов, вы создаете дополнительные состояния ожидания, вплоть до 10 периодов тактового генератора.Теперь мы можем открыть тщательно скрываемый секрет про синхронные и асинхронные магистрали: практически все микрокомпьютеры с одним процессором (или, точнее, с одним ведущим на магистрали) являются синхронными, потому что вся синхронизация привязана к единственному генератору ЦП (вроде 4,77 МГц тактового генератора исходных IBM PC). В результате если периферийное устройство задерживает свое подтверждение на «асинхронной» магистрали, цикл всегда удлиняется на целое число тактов ЦП. Разница между синхронными и асинхронными магистралями в действительности заключается в следующем. На «асинхронной» магистрали состояния ожидания включаются в цикл по умолчанию, если только не установлен в низкое состояние сигнал DTACK'
(поступающий через проводное ИЛИ), в то время как на «синхронной» магистрали состояния ожидания по умолчанию не возникают; они генерируются лишь если линия проводного ИЛИ (HOLD') устанавливается в низкое состояние. Однако различие не носит лишь семантический характер — «синхронный» протокол не позволяет работать с длинными шинами, потому что в этом случае сигнал HOLD' поступает в ЦП слишком поздно, чтобы удлинить цикл, в то время как на «асинхронной» магистрали ЦП не завершит цикл обмена без вашего разрешения (сигнал DTACK'). Со свойственной нам скромностью мы предлагаем, во избежание недоразумений, пользоваться следующей многообещающей терминологией: если состояния ожидания генерируются на магистрали по умолчанию («асинхронная» магистраль), будем называть ее «с ожиданием по умолчанию» (default-wait); если состояния ожидания возникают только при их запросе («синхронная» магистраль), будем называть ее «с ожиданием по запросу» (request-wait). Магистраль IBM PC характеризуется ожиданием по запросу, а магистраль VME (см. ниже) — по умолчанию.