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

в 20:16, , рубрики: fpga, асинхронные схемы, метки:

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

Автор: ajrec

Источник

Поделиться

* - обязательные к заполнению поля