Как стать автором
Обновить

Комментарии 30

Вот это правильный подход, в отличие от.
Мне кажется, что автору асинхронной схемы не удастся избежать временного анализа. Обязательно нужно позаботиться о стабильности сигналов r1 и r2 до прихода d.

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

Хм… разве fpga в сути своей не синхронны?
Википедия в статье «Асинхронная логика» уверяет, что просто так на fpga асинхронная логика работать не будет т.к. они завязаны на тактовую частоту.
Кстати, у меня не вышло реализовать этот алгоритм в logisim (первая картинка поста явно из него) — выходят сигналы error на элементах…
Не очень понимаю, что такое «fpga в сути своей синхронны» — если проект fpga не использует триггера (регистры), а использует только логические функции, то и будет проект выполнять только логику без тактового сигнала. Никаких проблем тут в общем нет.
Только один нюанс — Quartus не любит обратную связь из логического элемента на вход
этого же логического элемента и выдает предупреждение «found combinanational loop».
Но это только предупреждение.
Это «только предупреждение» о том, что с данного момента ты сам по себе, все переходные процессы и гонки на твоей совести, при том что планировщик может от сборки к сборке менять взаиморасположение элементов и соответственно задержки между ними.
Но в теории, правильно разработанная самосинхронная схема не должна от этого ломаться.
Есть вот такое мнение.
Как выясняется, исключительную роль в асинхронных схемах играют монотонные (unate) функции, а значит — логические элементы у которых нет инвертера на входе (NAND, NOR). Это и понятно, ведь если есть инвертер, то сигнал на другой вход элемента может прийти, когда инвертер еще меняет состояние. Теперь посмотрим насколько в этом отношении хороши FPGA. Все они используют LUT и выходную защелку. Допустим (что очень редко) у этой защелки есть раздельные входы set и reset, т.е. мы можем сделать из неё обычный RS-триггер. Допустим, что к set и reset можно подключить свой LUT. Допустим также, что логический блок из двух LUT и RS-триггера можно без проблем подключить к любому из четырех ближайших соседей. Это, на мой взгляд является необходимым, но не достаточным условием для реализации асинхронной схемы. Дело в том, что LUT — это фактически мультиплексор, который, как известно, описывается немонотонной функцией. Вернее, не монотонный в мультиплексоре только декодер. Таким образом, корректность реализаций асинхронных схем на FPGA оказывается под вопросом. В частности реализация С-элемента на LUT, мы это обсуждали. В данном случае люди берут 8:1 MUX, делают на нем binary adder, а выход переноса замыкают на один из входов. Это то, что называется relative timing. Для «чистой» реализации нужна мажоритарная функция (на одном элементе), которая является монотонной. К сожалению, все FPGA так или иначе используют LUT (мультиплексор). В том и числе мелкозернистые типа АТ40К или proASIC3. Более того, некоторые CPLD тоже построены на LUT, например MAX II, Lattice, Igloo 2. Из традиционных CPLD, где есть монотонные NAND, NOR остались EPM7512, ispMACH4512 и XC2C512. Все три имеют 512 макроячеек и представяют собой расширенный вариант 22V10, на которой делали асинхронные схемы.
Под «fpga в сути своей синхронны» понимается скорее то, что на fpga нельзя сделать чистую самосинхронную схему. Объясню, почему:
Под чистой понимается схема, у которой неисправность любого транзистора (перестал переключаться) приводит к остановке всей схемы или ее части. В таком случае, не-чистая схема, их еще называют квази-самосинхронные, это схемы с различной степенью отхождения от этого правила. Далее, что есть FPGA? это эмулятор, в котором эмулируемая схема использует только часть транзисторов. Есть еще служебные транзисторы, которые поддерживают зашитую конфигурацию. Тот же LUT — избыточная функция, из которой используется только часть. Кроме того, архитектура LUT это вовсе не мультиплексор, а сложная мостиковая схема. Вот так выглядит альтеровский LUT4
image
Это даже не КМОП-логика, и уж тем более не мультиплексор. Из всего этого следует, что чистые самосинхронные схемы на FPGA не сделать. Именно это видимо и имелось ввиду на вики.
p.s. если же речь идет о асинхронных схемах вообще, то, разумеется, их можно делать на FPGA. Потому что асинхронная схема по определению, это просто схема, работающая без внешней синхронизации (от тактового генератора). Асинхронных схем существует несколько разновидностей, поэтому надо всегда указывать, о каких схемах идет речь. Чтобы не было путаницы.
Честно говоря из Вашего пояснения выше я не очень понял, почему ЛУТ не подходит для самосинхронной схемы. Ну я согласен, что ЛУТ — это сложное устройство, но ведь выполняет логическую функцию? Что не так с этой логической функцией в отличии от иных реализаций?
Я там вверху пару оговорок сделал. Чистые самосинхронные схемы на ПЛИС делать нельзя, потому что нет индицируемости неисправностей некоторых транзисторов. А квази-самосинхронные, или другие асинхронные — делать можно. Поскольку ajrec и не заявлял, что его схемы — чистые самосинхронные, то почему бы их и не помоделировать на ПЛИС.

p.s. по поводу мультиплексора я там выше немного погорячился. LUT на схеме — мультиплексор, но имеет состояния, хранимые на паразитных ёмкостях. В современной схемотехнике такое часто используют, к примеру — в схемах D-триггеров. Но это уже не КМОП-логика, а скорее ближе к схемотехнике ячеек памяти. Бенефит от такого дизайна — меньшая площадь и большая скорость. Чистые самосинхронные схемы так делать нельзя, они теряют независимость от задержек. А для традиционной синхронной схематехники — вполне нормальный и понятный подход.
FPGA позволяют делать асинронные схемы, однако это требует учёта некоторых особенностей, и Quartus хуже подходит для этого, чем Xilinx ISE.
Верно, рисовал в logisim, но использовал исключительно как редактор для рисования. Может дело в этом.
Сразу хочу выразить признательность за проявленный интерес. Хотя бы и с долей скепсиса, это даже хорошо.
По поводу второй части эксперимента. Результат абсолютно предсказуем. Если что-то использовать вопреки инструкции, наверняка получится кака. В описании исходного задания четко сказано: сначала устанавливаются сигналы r, только после этого вырабатывается сигнал d+.
Такое временное соотношение можно обеспечить следующим образом. Рассмотрим в совокупности дешифратор, регистр адреса и контроллер, управляющий обеими этими схемами. Сначала контроллер дает команду регистру записать новое значение. После того как регистр установит новое значение, он посылает контроллеру сигнал о готовности. Только после этого контроллер дает команду d+ дешифратору. Дешифратор выполняет свою работу и в завершении ее посылает контроллеру сигнал q-. После этого контроллер может снова выдать команду регистру на запись нового значения.
Что касается временных интервалов. В асинхронных схемах время не измеряется в метрических единицах (наносекундах и т.п.). Время представляется порядком следования одних событий за другими (причинно-следственными связями). Т.е. событие А является причиной события В. Временной интервал между этими событиями не имеет значения и определяется конкретной реализацией. Такая схема будет работоспособна при любой величине задержки между событиями А и В.
По поводу различной ширины импульсов d и q. Объясняется просто: вторая фаза дешифратора (после d-) несколько длиннее первой. Можно даже посчитать по событиям в итоговом поведении. Это всего лишь особенность данной схемы.
Что касается первой части эксперимента., то для меня положительный результат не стал сюрпризом. Более того, если отслеживать не только выходные но и внутренние сигналы, все они будут переключаться в порядке, описанном в итоговом графе.
Ну и наконец по поводу больших размеров схемы. Действительно, задача представления комбинационной логики в асинхронном виде сложна и затратна по ресурсам. И насколько я знаю до сих пор не решенная. Моя попытка первая. Особенности такой реализации надо принять как данность и использовать в соответствии с этими особенностями.
Чего минусами то баловаться. Мне они по барабану. Детский сад какой-то. Что не понравилось?
Я упорно не понимаю, почему вы называете себя первым, если тема асинхронной логики исследуется с 60х годов? И в Союзе и за рубежом. Одни работы Варшавского чего стоят. Одно время, в университете Чибы в Японии работала группа наших ученых, которая занималась именно вопросами асинхронной логики.
В универе Айзу они работали. Он тогда только создавался, специалистов по всему миру искали.
На мой взгляд, уважаемому ajrec надо со своими идеями оппонентов искать, а не заниматься популяризацией своих сырых идей здесь, на хабре. Ведь сырые же, идеи, правда?
Действительно, спутал. Спасибо за исправление.
Вы мне нравитесь как оппонент, всегда жду Вашу критику. Всегда и всем отвечаю на вопросы и критику.
Вы же сами писали, что ни одна сухая идея не может решить проблему представления операций над данными и адресами в асинхронном виде. Не прошло еще двух месяцев. А вот решение перед Вами.
Зря Вы про сырость. Методология есть. С помощью нее можно решить любую проблему.
Про самосинхронность. По-моему где то выше у Вас прочитал, что такие схемы при выходе из строя элемента прекращают переключаться. Эта схема будет себя вести точно так же.
Последний вопрос: Вы Маллера уважаете, в смысле модели?
Может я чего не понимаю, по почему вообще возникает вопрос о выходе из строя элемента? Вот и выше Khort писал
Чистые самосинхронные схемы на ПЛИС делать нельзя, потому что нет индицируемости неисправностей некоторых транзисторов

Ну разве это не ерунда в том смысле, что при неисправности элемента никакая другая схема, хоть и синхронная — работать не будет.
Не уж то Вы с "-" шалите? Я вот ни одного минуса не поставил, какая бы глупость ни была написана. Каждый имеет право на глупость. Никто не может знать всего.
По замечанию. Имелось ввиду: если какой то элемент застрянет в каком то состоянии, то вся схема прекратит переключения. С синхронными схемами, наверно, не так: синхросигнал ведь будет работать в любом случае.
Синхросигнал то работает, но если прошел где-то в элементе сбой, то это уже сбой — схема может перейти в непредусмотренное состояние. не понятно, чем синхронная схема более защищена от такого сбоя, чем иные виды схем. Какие могут быть против этого методы борьбы? Разве что нечто вроде watch-dog timer?
Очень глубоко заблуждаетесь.
В синхронной схеме переходной процесс начинается с тактового импульса, поэтому неисправность одного элемента, в логике, к примеру, означает только, что приемный триггер защелкнет неверную информацию. Схема при этом останется рабочей. А в некоторых случаях неисправность и вовсе будет незаметна: к примеру, если в 32-х битном умножителе подавать на вход только 8-ми разрядные числа, никто и не заметит что разряды 30-31 перестали переключаться в 1, поскольку на них всегда подан 0.
В синхронных схемах ошибки отлавливают проверкой четности, Хеммингом/Хсяо и т.д.
А в самосинхронной схеме любой сбой (в любом элементе) просто приведет к остановке работы (защелкиванию) всей схемы — почувствуйте разницу.
Вы можете предложить физический экспримент в реальной ПЛИС, который докажет, что ПЛИС нельзя использовать в самосинхронных/асинхронных схемах?
Предложите такой эксперимент и попробуем его сделать.
Совет. Если за основу хотите взять схему, сделанную по всем канонам теории Маллера, начните вот с этого самосинхронного счетного триггера. Не зря же я писал этот мануал по проектированию самосинхронных схем. А тем временем, ajrec напишет свой мануал, со своим методом.
Просмотрел статью. Я так понимаю Вы в своей работе использовали ПЛИС и похоже работало?
Моделировал на спайсе, но не этот триггер, а другие самосинхронные схемы, размером под тысячу транзисторов. На спайсе — работает, значит и в эсике будет работать. А на ПЛИС не пробовал
Спасибо. Но я, если честно, так и не разобрался в Вашей идее. Надо будет как нибудь засесть основательно. А поскольку не разобрался, то и не критикую более. (про сырость идеи — просто, высказал мнение. Вам виднее, разумеется).
Модель Маллера — это ведь система уравнений, как ее можно не уважать? Но я лично никогда не пробовал их получать по таблицам истинности, у меня были чисто инженерные задачи: проверить небольшой автомат на самосинхронность, а для этого достаточно описать его сетью Петри и проверить в Петрифае. Т.е. таблицы истинности, диаграммы переходов, модель Маллера — знаю только в теории.
Не говорю я, что первый. Варшавский в институте лекции читал. Помню на экзамене сильно хотел кубами подзавалить. Пересказ воспоминаний его учеников: он был гениальный изобретатель, но методологии не было. Он не мог формально синтезировать уже изобретенные схемы. В Айзу дело не пошло, т.к. промышленность еще не доросла. Изобретаемые им схемы не вписывались ни в какую элементную базу.
От себя могу добавить, что к асинхронной тематике он подходил как чистый синхронщик. Отсюда и автоматы, и работа с состояниями и т.д.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории