9.2. Методы борьбы с гонками Противогоночное кодирование
Эффект гонок может возникать лишь в случаях, когда переход автомата из одного состояния в другое связан с одновременным переключением нескольких триггеров. Так в автомате, граф состояний которого приведен на рис.9.6, гонки могут возникать при переходе автомата из состояния Q1 в состояние Q2 и переходе из состояния Q3 в состояние Q0 .
Действительно, при естественном кодировании состояний последовательность переходов, если входной сигнал равен 1, выглядит следующим образом:
Q0 Q1 Q2 Q3 Q0 Q1
q1 0® 0 ® 1 ® 1 ® 0 ® 0
q2 0 ® 1 ® 0 ® 1 ® 0 ® 1 и т.д.
Идея противогоночного кодирования заключается в том, что состояния автомата кодируются так, чтобы при любом переходе автомата из одного состояния в другое переключался только один элемент памяти. Например, для графа на рис.9.6 можно отказаться от естественного кодирования и закодировать состояния следующим образом: Q0 ® 00, Q1 ® 01, Q2 ® 11, Q3 ® 10. Тогда последовательность переходов при входном сигнале q , равном 1, будет иметь следующий вид:
Q0 Q1 Q2 Q3 Q0 Q1
q1 0 ® 0 ® 1 ® 1 ® 0 ® 0
q2 0 ® 1 ® 1 ® 0 ® 0 ® 1 и т.д.
Гонки в этом случае не могут возникать.
В настоящее время существуют алгоритмы противогоночного кодирования. Эти алгоритмы связаны с перебором всех возможных переходов автомата и являются довольно громоздкими. Кроме того, реализация таких алгоритмов может потребовать введения дополнительных состояний специально для устранения гонок.
Синхронизация работы автомата
Одной из причин гонок в автоматах является наличие обратной связи с выходов элементов памяти на вход схемы формирования состояний автомата. Именно по этой цепи изменение состояния одного элемента памяти передается в конечном счете на входы как других, так и этого же элемента и может нарушить логику переходов автомата.
Идея синхронизации работы автомата заключается в том, что цепь обратной связи выполняется управляемой, т.е. при помощи специальных синхронизирующих сигналов замыкается лишь в определенный момент и на определенный промежуток времени. Пусть, например, автомат имеет два элемента памяти, на входах которых установлены вентили или ключи так, как это показано на рис.9.7.
&
X
ЭП1
КС1
КС2
Y
&
Q
ЭП2
С=1
Рис.9.7
В качестве вентилей на рис.9.7. используются элементы И на два входа. На один из входов проступает сигнал нового состояния элемента памяти, на второй – синхронизирующий сигнал С. При С = 1 сигнал со входа вентиля проходит на его выход, т. е. цепь обратной связи замкнута и тем самым разрешается переход элементов памяти в новое состояние.
Если элементами памяти являются синхронные триггеры (например, как на рис.9.5), то управление цепью обратной связи осуществляется при помощи сигнала, подаваемого на вход синхронизации триггера. В этом случае надобность в использовании вентилей отпадает.
Недостатком данного метода являются жесткие требования к длительности синхронизирующего импульса. Эта длительность должна быть достаточной для того, чтобы за время действия импульса триггер успел переключиться в новое состояние. Но, с другой стороны, длительность импульса должна быть такой, чтобы за время его действия сигнал с выхода триггера не успел пройти по всей цепи обратной связи и поступить на входы этого и других триггеров.
