В предыдущей публикации я представил метод синтеза асинхронных схем в минимальной элементной базе. Этот метод не требует вычисления логических функций, а представляет из себя коррекцию исходного поведения с помощью добавления дополнительных сигналов. Покажу на примере C-элемента, как это работает.
Исходное поведение выглядит так:
Сигналы a, b — входные, c — выходной. Знаки событий не обозначены, поскольку для синтеза это лишняя информация и для оптимизации их лучше расставить в конце. Цель синтеза состоит в добавлении дополнительных сигналов таким образом, чтобы каждый невходной сигнал f можно было бы вписать в следующие шаблоны:
Вообще таких шаблонов несколько больше, но в данном случае достаточно только этих.
Посмотрим на исходное поведение и определим имеющиеся проблемы. Во-первых, это наличие двух синхронизаций параллельных ветвей. Во-вторых, наличие входных сигналов. Двух подряд переключений входных сигналов в исходном поведении нет, поэтому входные сигналы не являются проблемой. Но на стадии декомпозиции проблемы, связанные с входными сигналами, еще возможно проявятся.
В итоге, нам нужно обеспечить две синхронизации. Один сигнал может обеспечить только одну синхронизацию (сигнал f во втором шаблоне). Сигнал c использовать для синхронизации нельзя, он не вписывается в шаблон. Значит, для синхронизации необходимо минимум 2 дополнительных сигнала. И в данном случае двух сигналов достаточно:
Сигналы f, g вписываются в шаблон, т.е. уже имеют двухвходовую реализацию. Их объявляем псевдовходными. Сигналы a, b теперь являются причинами только псевдовходных событий. Поэтому из дальнейшего рассмотрения их можно удалить. В итоге получаем поведение:
Сигналы f, g — псевдовходные.
Нарушений CSC нет. Поэтому, казалось бы, можно приступить к декомпозиции. Но, так как сигнал c требует представления в виде триггера (для декомпозиции), и в то же время сигнал c является причиной только псевдовходных событий, то переключение дуального сигнала пришлось бы ставить в параллель с последующей синхронизацией. А это слишком сложное решение. В данном случае проще принудительно вписать сигнал c в шаблон, добавив 1 или 2 дополнительных сигнала. Такое добавление, если не вставлять два переключения одного сигнала подряд, не влечет нарушений CSC, и не препятствует декомпозиции как старых, так и новых сигналов.
В нашем случае придется добавить 2 сигнала h и i, причем единственно возможным способом:
Сигналы f, g — псевдовходные.
Теперь можно перейти к декомпозиции. Представления в виде триггера требует только сигнал i, поэтому добавим дуальный сигнал j:
В итоге все сигналы c, h, i, j — вписываются в шаблон, и собственно декомпозицию делать не нужно.
Теперь восстановим сигналы a и b, ранее удаленные из рассмотрения. Таким образом получим скорректированное исходное поведение, в котором все невходные сигналы вписываются в шаблон.
Осталось только расставить знаки, так чтобы минимизировать количество дополнительных инверторов.
А теперь введем инверторы k и n для устранения возникших рассогласований на входах элементов g и i.
В итоге коррекция не исказила исходного поведения. Логические функции выглядят так:
Схема C-элемента:
Исходное поведение выглядит так:
Сигналы a, b — входные, c — выходной. Знаки событий не обозначены, поскольку для синтеза это лишняя информация и для оптимизации их лучше расставить в конце. Цель синтеза состоит в добавлении дополнительных сигналов таким образом, чтобы каждый невходной сигнал f можно было бы вписать в следующие шаблоны:
Вообще таких шаблонов несколько больше, но в данном случае достаточно только этих.
Посмотрим на исходное поведение и определим имеющиеся проблемы. Во-первых, это наличие двух синхронизаций параллельных ветвей. Во-вторых, наличие входных сигналов. Двух подряд переключений входных сигналов в исходном поведении нет, поэтому входные сигналы не являются проблемой. Но на стадии декомпозиции проблемы, связанные с входными сигналами, еще возможно проявятся.
В итоге, нам нужно обеспечить две синхронизации. Один сигнал может обеспечить только одну синхронизацию (сигнал f во втором шаблоне). Сигнал c использовать для синхронизации нельзя, он не вписывается в шаблон. Значит, для синхронизации необходимо минимум 2 дополнительных сигнала. И в данном случае двух сигналов достаточно:
Сигналы f, g вписываются в шаблон, т.е. уже имеют двухвходовую реализацию. Их объявляем псевдовходными. Сигналы a, b теперь являются причинами только псевдовходных событий. Поэтому из дальнейшего рассмотрения их можно удалить. В итоге получаем поведение:
Сигналы f, g — псевдовходные.
Нарушений CSC нет. Поэтому, казалось бы, можно приступить к декомпозиции. Но, так как сигнал c требует представления в виде триггера (для декомпозиции), и в то же время сигнал c является причиной только псевдовходных событий, то переключение дуального сигнала пришлось бы ставить в параллель с последующей синхронизацией. А это слишком сложное решение. В данном случае проще принудительно вписать сигнал c в шаблон, добавив 1 или 2 дополнительных сигнала. Такое добавление, если не вставлять два переключения одного сигнала подряд, не влечет нарушений CSC, и не препятствует декомпозиции как старых, так и новых сигналов.
В нашем случае придется добавить 2 сигнала h и i, причем единственно возможным способом:
Сигналы f, g — псевдовходные.
Теперь можно перейти к декомпозиции. Представления в виде триггера требует только сигнал i, поэтому добавим дуальный сигнал j:
В итоге все сигналы c, h, i, j — вписываются в шаблон, и собственно декомпозицию делать не нужно.
Теперь восстановим сигналы a и b, ранее удаленные из рассмотрения. Таким образом получим скорректированное исходное поведение, в котором все невходные сигналы вписываются в шаблон.
Осталось только расставить знаки, так чтобы минимизировать количество дополнительных инверторов.
А теперь введем инверторы k и n для устранения возникших рассогласований на входах элементов g и i.
В итоге коррекция не исказила исходного поведения. Логические функции выглядят так:
Схема C-элемента:
Поделиться с друзьями
nckma
Пожалуйста поставьте ссылку на предыдущую публикацию. Видимо без нее эту статью никак не понять.
ajrec
Вот эта статья
nckma
Хм… опять не вижу ссылки…
Khort
После ввода текста ссылки надо еще что то написать между тегами — текст, который будет виден вместо адреса ссылки. Если этого не сделать, ссылка просто пропадает.
ссылка
ajrec
Спасибо, вразумили.