В предыдущей публикации я представил метод синтеза асинхронных схем в минимальной элементной базе. Этот метод не требует вычисления логических функций, а представляет из себя коррекцию исходного поведения с помощью добавления дополнительных сигналов. Покажу на примере 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
Поделиться с друзьями
-->

Комментарии (6)


  1. nckma
    21.06.2017 10:27

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


    1. ajrec
      21.06.2017 14:53

      Вот эта статья


      1. nckma
        21.06.2017 15:10

        Хм… опять не вижу ссылки…


      1. Khort
        21.06.2017 15:41

        После ввода текста ссылки надо еще что то написать между тегами — текст, который будет виден вместо адреса ссылки. Если этого не сделать, ссылка просто пропадает.
        ссылка


        1. ajrec
          21.06.2017 19:08

          Спасибо, вразумили.


  1. ajrec
    21.06.2017 15:06

    Со ссылками что-то пошло не так. Посмотрите мои публикации. Там их всего две.