vak: (Улыбка)
[personal profile] vak
Главная фишка асинхронного дизайна - отсутствие тактирующего сигнала. Вместо глобального генератора синхроимпульсов используется локальный сигнал подтверждения и четырехфазовый протокол взаимодействия. Есть разные варианты протоколов, подробно описанные в умной книжке. Я здесь коротенько набросаю один их них.



Сигналы данных направлены от передатчика к приёмнику. Обычно один бит данных кодируется двумя сигналами (1-из-2). Иногда два бита кодируются четырьмя сигналами (1-из-4), это имеет свои преимущества.



Фаза 1: исходно сигналы данных равны нуль (состояние NULL). Подтверждение также равно нулю. Инициатива на стороне передатчика. Когда готов, передатчик выставляет один из сигналов данных в единицу (cостояние DATA).

Фаза 2: данные поступили на вход приёмника (cостояние DATA). Приёмник выставляет сигнал подтверждения.

Фаза 3: передатчик получил сигнал подтверждения и переводит сигналы данных обратно в состояние NULL.

Фаза 4: приёмник обнаружил состояние NULL на входе данных и сбрасывает сигнал подтверждения.

Здесь действуют два важных правила. В фазе 1 (когда ack=0) передатчик имеет право формировать на шине данных только положительные фронты. В фазе 3 (когда ack=1) допускаются только отрицательные фронты. При этих условиях синхронизация всегда устойчива, независимо от времени распространения сигнала и задержек на логических элементах.

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

Date: 2016-08-13 06:18 (UTC)
From: [identity profile] spamsink.livejournal.com
С учетом того, что на входе могут быть только данные, представленные в виде 1-из-2 или 1-из-4, реально полезных монотонных функций остается всего ничего.

Date: 2016-08-13 07:07 (UTC)
From: [identity profile] spamsink.livejournal.com
Ну да. Т.е. реально LUT6 может моделировать не более чем какую-нибудь трехвходовую функцию, которых заметно меньше, чем 256.

Date: 2016-08-13 07:23 (UTC)
From: [identity profile] spamsink.livejournal.com
Т.е. ты хочешь оптимизировать логику, пользуясь произвольными монотонными функциями, а не только пороговыми? Интересно, на каком минимальном примере удастся показать преимущество.

Date: 2016-08-13 06:38 (UTC)
From: [identity profile] andrey-yurin.livejournal.com
А асинхронная логика в целом и асинхронные каналы связи в частности - они какие-то преимущества имеют перед синхронной?

Date: 2016-08-13 07:15 (UTC)
From: [identity profile] spamsink.livejournal.com
Это примерно как спросить про морских млекопитающих в целом и морских свинок в частности.

Date: 2016-08-13 08:39 (UTC)
From: [identity profile] andrey-yurin.livejournal.com
Наверное. Но мои познания в области морских млекопитающих ещё меньше, а из асинхронных интерфейсов я - если ничего не путаю - припоминаю лишь АТА или UART. Хотя вот сейчас я могу очень сильно соврать, ибо подробно я его не помню (АТА, всмысле). Ну а всё остальное мной виденное на практике - оно либо синхронное (тактовый сигнал есть), либо с 8b/10b, когда тактовая напрямую восстанавливается из потока. Ну а что вопрос не корректен - каюсь, не сильно я вопросах компетентен.
Edited Date: 2016-08-13 08:39 (UTC)

Date: 2016-08-13 11:23 (UTC)
From: [identity profile] andrey-yurin.livejournal.com
Ага, спасибо. Посмотрел. Ну если с Low Power и Reduced EMI более-менее интуитивно понятно, то вот в High Perfomance поверить уже не так-то просто (я не оспариваю ни в коем случае - просто удивляюсь). Ну и насчёт асинхронного дизайна. Вот тот же TimeQuest у Альтеры как средство временнОго анализа. Вот сколько я его видел - там инструментов для асинхронного дизайна я не припомню (хотя это не значит, что их там нет). Тем более для меня удивительно, что асинхронный дизайн вполне жизнеспособен. Собственно потому такие вопросы странные и появляются :)
В любом случае спасибо за наводку на книжку. Век живи, век учись - а всё равно дураком помрёшь.

Date: 2016-08-13 07:11 (UTC)
From: [identity profile] 1500py470.livejournal.com
А асинхронная тема тебя только сейчас заинтересовала или статьи Варшавского ещё во времена СССР читал?

Date: 2016-08-13 09:38 (UTC)
From: [identity profile] gouriev.livejournal.com
но большая избыточность.

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

или тоже разруливается за счет избыточного кодирования?

Date: 2016-08-15 00:13 (UTC)
From: [identity profile] gouriev.livejournal.com
тогда удвоение проводников для каждого логического сигнала

Date: 2016-08-15 13:17 (UTC)
From: [identity profile] gouriev.livejournal.com
а, это да.
если любой сигнал передается позитивной и негативной линией,
то инвертор - это перекрещивание линий.

А в чём смысл смешения

Date: 2016-08-13 17:31 (UTC)
From: [identity profile] a-shen.livejournal.com
данных и флагов готовности? почему бы передатчику и приёмнику не завести по флагу - и когда эти флаги разные, приёмник считывает данные - потом меняет флаг, а когда флаги одинаковые, передатчки помещает новые данные и меняет флаг? Чем это плохо - и вроде никакой монотонности не надо?

?

Date: 2017-02-02 19:00 (UTC)
From: [personal profile] mrupor
"Здесь действуют два важных правила. В фазе 1 (когда ack=0) передатчик имеет право формировать на шине данных только положительные фронты. В фазе 3 (когда ack=1) допускаются только отрицательные фронты. При этих условиях синхронизация всегда устойчива,..."


на это есть доказательство? т.е. как этот принцип позволяет выяснить потерю синхронизации