Pull to refresh

Пример синтеза асинхронных SI схем в двухходовой элементной базе: C-элемент

Reading time 2 min
Views 2.6K
В предыдущей публикации я представил метод синтеза асинхронных схем в минимальной элементной базе. Этот метод не требует вычисления логических функций, а представляет из себя коррекцию исходного поведения с помощью добавления дополнительных сигналов. Покажу на примере C-элемента, как это работает.

Исходное поведение выглядит так:
image
Сигналы a, b — входные, c — выходной. Знаки событий не обозначены, поскольку для синтеза это лишняя информация и для оптимизации их лучше расставить в конце. Цель синтеза состоит в добавлении дополнительных сигналов таким образом, чтобы каждый невходной сигнал f можно было бы вписать в следующие шаблоны:
image
Вообще таких шаблонов несколько больше, но в данном случае достаточно только этих.

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

В итоге, нам нужно обеспечить две синхронизации. Один сигнал может обеспечить только одну синхронизацию (сигнал f во втором шаблоне). Сигнал c использовать для синхронизации нельзя, он не вписывается в шаблон. Значит, для синхронизации необходимо минимум 2 дополнительных сигнала. И в данном случае двух сигналов достаточно:

image
Сигналы f, g вписываются в шаблон, т.е. уже имеют двухвходовую реализацию. Их объявляем псевдовходными. Сигналы a, b теперь являются причинами только псевдовходных событий. Поэтому из дальнейшего рассмотрения их можно удалить. В итоге получаем поведение:

image
Сигналы f, g — псевдовходные.

Нарушений CSC нет. Поэтому, казалось бы, можно приступить к декомпозиции. Но, так как сигнал c требует представления в виде триггера (для декомпозиции), и в то же время сигнал c является причиной только псевдовходных событий, то переключение дуального сигнала пришлось бы ставить в параллель с последующей синхронизацией. А это слишком сложное решение. В данном случае проще принудительно вписать сигнал c в шаблон, добавив 1 или 2 дополнительных сигнала. Такое добавление, если не вставлять два переключения одного сигнала подряд, не влечет нарушений CSC, и не препятствует декомпозиции как старых, так и новых сигналов.

В нашем случае придется добавить 2 сигнала h и i, причем единственно возможным способом:

image

Сигналы f, g — псевдовходные.

Теперь можно перейти к декомпозиции. Представления в виде триггера требует только сигнал i, поэтому добавим дуальный сигнал j:

image
В итоге все сигналы c, h, i, j — вписываются в шаблон, и собственно декомпозицию делать не нужно.

Теперь восстановим сигналы a и b, ранее удаленные из рассмотрения. Таким образом получим скорректированное исходное поведение, в котором все невходные сигналы вписываются в шаблон.

image

Осталось только расставить знаки, так чтобы минимизировать количество дополнительных инверторов.

image

А теперь введем инверторы k и n для устранения возникших рассогласований на входах элементов g и i.

image

В итоге коррекция не исказила исходного поведения. Логические функции выглядят так:

$c=NAND(j,h) $
$f=NOR(a,g) $
$g=NOR(k,f) $
$h=NAND(i,f) $
$i=NAND(n,j) $
$j=NAND(h,i) $
$k=NOT(b) $
$n=NOT(g) $

Схема C-элемента:

image

Для сравнения любопытная реализация на трехвходовых элементах. Поведение выглядит так.



Логические функции:

$c=OR(f,AND(a,c))$
$f=AND(b,OR(a,f))$

И сама схема.

Tags:
Hubs:
+11
Comments 6
Comments Comments 6

Articles