Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
74
Добавлен:
27.04.2015
Размер:
113.15 Кб
Скачать

2.2. Программные способы устранения гонок

Наряду с аппаратными способами для устранения гонок используются специальные методы кодирования состояний автомата, называемые противогоночным кодированием. Частным случаем противогоночного кодирования является соседнее кодирование.

Гонки в автомате исключаются, если при любых переходах изменяется состояние только одного элемента памяти. Способ кодирования состояний, при котором соседние состояния автомата кодируются наборами, различающимися состоянием только одного элемента памяти, называется соседним кодированием.

Соседнее кодирование не всегда возможно. На рис.4.3 приведены два графа, которые не могут быть закодированы соседними кодами. Требования к графу автомата, допускающего соседнее кодирование следующие:

  • на графе не должно быть циклов с нечетным числом вершин (рис.4.3,а);

  • два соседних состояния второго порядка не должны иметь более двух состояний, лежащих между ними.

При этом под состояниями второго порядка понимаются два состояния, путь между которыми по графу автомата состоит из двух ребер, независимо от ориентации (рис.4.3,б). Однако, если ввести дополнитель­ные пустые состояния, граф можно использовать и в этих случаях, но это уже бу­дет кодирование с изменением таблицы переходов.

Рис. 4.3. Графы, не допускающие соседнего кодирования

Использование противогоночного кодирования обеспечивает устранение со­стязаний путем логического метода без усложнения схемы автомата.

Другим способом программного устранения гонок является использование развязанных пар. Если в таблице переходов автомата имеется множество состояний а,b,с,d - такое, что выполняются переходы а-b и с-d, то в кодовых комбинациях этих четырех состояний обязательно должна быть хотя бы одна переменная, прини­мающая на переходе а-b одно значение, а на переходе c-d - другое, напри­мер: k(a)=000, k(c)=100, k(b)=010, k(d)=110.

Установлено, что от способа кодирования существенно зависят сложность комбинационной схемы автомата, быстродействие и объем памяти. Поэтому при выборе метода кодирования надо учитывать эти три фактора и четвертый - устранение "гонок". Решить полностью эту задачу практически не удается, по­этому стараются удовлетворить хотя бы двум из перечисленных требований.

Следующие два метода кодирования наряду с устранением "гонок" обеспечивают минимальную сложность комбинационной схемы автомата.

      1. Единичное кодирование

Для кодирования используется граф автомата.

Алгоритм метода:

  1. Каждому состоянию автомата ставится в соответствие целое число Nm , ко­торое равно количеству дуг на графе, входящих в данное состояние am.

  2. Числа Nm, упорядочиваются по убыванию.

  3. Состояние с наибольшим Nm кодируется комбинацией М нулей: 00...00 , где М - число состояний автомата (М =|log2M|).

  1. Все остальные состояния в соответствии со значением Nm кодируются путем прибавления одной единицы в кодовую комбинацию из нулей.

  2. Если не хватает одной единицы, то добавляется вторая и т.д. до тех пор, пока не будут закодированы все состояния.

Таким образом, при данном способе кодирова­ния наиболее связанные состояния кодируются минимальным числом единиц.

      1. Соседнее кодирование

Один из методов соседнего кодирования, позволяющий устранять гонки и обеспечивать минимальные аппаратные затраты, состоит в следующем.

Каждой паре состояний автомата ставится в соответствии вес перехода:

P(i,j)=q(i,j)+q(j,i),

где q(i,j) - число дуг, идущих от i-гo состояния к j-му на графе состояний автомата;

q(j,i) - число дуг, идущих от j-ro к i-му состоянию на графе состояний.

Критерием сложности синтезированной комбинационной схемы автомата является величина

W=P(i,j)*d(i,j),

где d(i,j) - кодовое расстояние во Хеммингу, т.е. количество символов, которыми отличаются ко­ды состояний i и j. Чем меньше W, тем проще схема.

Алгоритм метода:

1. По графу или таблице переходов автомата составляется матрица Т, строки которой образуют пары состояний, между которыми возможен переход. Каждой паре состояний ставится в соответствие вес перехода P.

2. Матрица Т упорядочивается по убыванию веса перехода. В случае одинакового веса для упорядочивания используется суммарный вес перехода, определяемый как общее число дуг, связанных с обоими состояниями. Упорядоченная матрица обозначается М.

3. Состояния первой строки матрицы М кодируются начальными кодовыми комбинациями, то есть содержащими минимальное количество единиц, после чего эта строка вычеркивается. Так как матрица М упорядочена, одно из состояний второй строки уже получило свой код.

4. Для незакодированного состояния aj второй строки составляется дополнительная матрица Вj, в которую заносятся все пары состояний, содержащие aj.

5. Составляется множество кодовых комбинаций D для состояния aj c учетом условий соседнего кодирования. Для подбора кодов можно использовать карту Карно.

6. Для каждой кодовой комбинации из D вычисляется W.

7. В качестве кода для aj принимается комбинация с минимальным W.

8. Строки закодированных состояний в матрице М вычеркиваются.

  1. П.п. 3-8 выполняются до тех пор, пока все состояния не будут закодированы.

Соседние файлы в папке Лаб.работы по ТА