Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Мне кажется, что автору асинхронной схемы не удастся избежать временного анализа. Обязательно нужно позаботиться о стабильности сигналов r1 и r2 до прихода d.
Вот да, тоже об этом подумал. Если не ошибаюсь, то в CMOS какой-то из примитивных элементов ещё имеет разные временные характеристики для разных входов несмотря на их симметричность с точки зрения таблицы истинности. Т.е. даже в масштабе одного логического элемента нужно помнить о ненулевых задержках, не говоря уж о целой схеме.
Как выясняется, исключительную роль в асинхронных схемах играют монотонные (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, на которой делали асинхронные схемы.

Чистые самосинхронные схемы на ПЛИС делать нельзя, потому что нет индицируемости неисправностей некоторых транзисторов
Исследование асинхронной схемы в ModelSim