Про достоинства асинхронных схем известно - это пониженное энергопотребление. Недостатки же - меньшее быстродействие(?), большая площадь, худшая тестируемость. На самом деле это миф, основанный на единственном недостатке асинхронных схем: неумении их синтезировать. Мною разработан формальный метод синтеза асинхронных схем на стандартной элементной базе (в том числе и на самых простых двухвходовых элементах NOR, NAND), который полностью устраняет вышеперечисленные недостатки. Более того, разработана методика синтеза асинхронных схем, нечувствительных к задержкам даже в проводах. Правда для таких схем используются нестандартные элементы, похожие на 2NOR, 2NAND. Единственное отличие - дополнительный выход, по сути являющийся инверсией одного из входов. Я не специалист по железу, поэтому корректная работа такого элемента под вопросом. Для наглядности пример (в базисе 2NAND, 2NOR, NOT). Исходное задание в виде STG.
# rcv-setup # HP controller, by K. Stevens # Meat state encoding .inputs reqrcv sending acksend .outputs enwoq rejsend .graph # 0 reqrcv+/1 enwoq+/1 sending+ place_1 # -> 1 place_1 sending-/1 reqrcv+/2 # -> 5 enwoq+/1 reqrcv-/1 # 5 reqrcv-/1 enwoq-/1 # -> 0 enwoq-/1 place_0 # 1 reqrcv+/2 rejsend+ sending-/1 place_0 # -> 2 rejsend+ sending-/2 acksend+ # 2 sending-/2 rejsend- acksend+ rejsend- # -> 3 rejsend- acksend- # 3 acksend- enwoq+/2 # -> 4 enwoq+/2 reqrcv-/2 # 4 reqrcv-/2 enwoq-/2 # -> 0 enwoq-/2 place_0 place_0 reqrcv+/1 sending+ .marking { place_0 } .end
enwoq = AND ( g, k ) rejsend = NOR ( i, k ) f = NOT ( reqrcv ) g = NOR ( f, sending ) h = AND ( sending, reqrcv ) i = NOR ( h, j ) j = NOR ( acksend, i ) k = NOR ( j, acksend )
|