bitGateLab Digital · Обучение
Русский
Открыть симулятор

Обучение › Тема 11

Конечные автоматы Мура и Мили: полное проектирование

7 мин чтения · Команда bitGateLab

Конечный автомат (FSM) — это последовательностная схема, которая «помнит», на каком шаге процесса она находится. Светофоры, кодовые замки, контроллеры лифтов и приёмники последовательной связи — всё это конечные автоматы. Здесь вы познакомитесь с двумя классическими моделями, Мура и Мили, и пройдёте всё проектирование целиком, от словесного описания до уравнений триггеров, на примере детектора последовательности 101.

Из чего состоит конечный автомат

В любом синхронном автомате есть три блока:

Разница между двумя моделями — в последнем блоке:

Автомату Мили обычно требуется меньше состояний, и он реагирует в том же такте, в котором приходит входной сигнал, но его выход может измениться в любой момент, если изменится вход. Автомат Мура реагирует на такт позже, а его выход меняется только сразу после фронта тактового сигнала, поэтому он «чище».

Задача: детектор последовательности 101

Последовательный вход X поступает синхронно с тактовым сигналом, по одному биту за такт. Выход Z должен быть равен 1 каждый раз, когда три последних принятых бита — это 1, 0, 1. Допускается перекрытие: в цепочке 10101 два обнаружения, потому что последняя 1 первой последовательности служит первой для следующей.

Первый шаг — решить, что должен помнить автомат. Каждое состояние означает «какая часть последовательности уже набрана»:

Диаграмма и таблица состояний (автомат Мура)

Для каждого состояния и каждого значения X спросите себя: какой самый длинный суффикс с учётом нового бита совпадает с началом 101? Этот суффикс и определяет следующее состояние.

S0/0 S1/0 S2/0 S3/1 1 0 1 0 1 0 0 1
Детектор 101 с перекрытием на автомате Мура. Числа над стрелками — значение X; выход записан внутри каждого состояния.
Текущее состояниеX = 0X = 1Z
S0S0S10
S1S2S10
S2S0S30
S3S2S11

Обратите внимание на два перехода, в которых часто ошибаются. В S1 приходит ещё одна 1: цепочка оканчивается на 11, и последняя 1 по-прежнему годится как начало, поэтому автомат остаётся в S1. В S3 приходит 0: цепочка оканчивается на 1010, её суффикс 10 совпадает с началом 101, поэтому автомат переходит в S2, а не в S0. Именно это и обеспечивает перекрытие.

Кодирование состояний и уравнения

Для 4 состояний достаточно 2 D-триггеров (Q1 Q0). Самое прямолинейное кодирование — двоичное: S0 = 00, S1 = 01, S2 = 10, S3 = 11. Для D-триггеров таблица возбуждения тривиальна, потому что D = Q+.

Q1Q0XQ1+ = D1Q0+ = D0
00000
00101
01010
01101
10000
10111
11010
11101

Упрощение:

  • D0 равно 1 в точности в строках с X = 1, поэтому D0 = X. Это логично: при таком кодировании Q0 = 1 означает «последний бит был 1».
  • D1 = Σm(2, 5, 6) при порядке переменных Q1 Q0 X. Минтермы 2 (010) и 6 (110) соседние и образуют Q0·X. У минтерма 5 (101) нет соседей со значением 1, и он остаётся один: Q1·Q0·X. D1 = Q0·X + Q1·Q0·X.
  • Выход автомата Мура зависит только от состояния: Z = Q1·Q0.

В схеме получается 2 D-триггера, элемент AND с 2 входами для Z, а для D1 — AND с 2 входами, AND с 3 входами и OR с 2 входами (плюс инверторы для Q0 и X).

Проверка на тестовой последовательности

Вход X = 1 0 1 0 1 1 0 1, начинаем с S0. Состояние после каждого фронта:

Фронт12345678
X10101101
СостояниеS1S2S3S2S3S1S2S3
Z00101001

Обнаружений три: в битах с 1 по 3, с 3 по 5 (перекрытие) и с 6 по 8. Проверьте фронт 4 по уравнениям: состояние S3 = 11 и X = 0, D1 = 1·1 + 1·0·0 = 1 и D0 = 0, следующее состояние 10 = S2. Совпадает.

Вариант на автомате Мили

В автомате Мили выход относится к переходу, поэтому состояние S3 становится лишним: обнаружение происходит «по приходе 1 в состоянии S2». С тремя состояниями A (ничего), B (последний бит 1) и C (последние биты 1, 0):

СостояниеX = 0X = 1
AA / 0B / 0
BC / 0B / 0
CA / 0B / 1

По-прежнему нужны 2 триггера, но выход Z = 1 появляется в том же такте, в котором приходит последняя 1, — на такт раньше, чем в варианте Мура.

Типичные ошибки

Попробуйте в симуляторе

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

  1. Поместите два D-триггера с общим тактовым сигналом; назовите их выходы Q1 и Q0.
  2. Подключите вход X напрямую к D0.
  3. Соберите D1 = Q0·X + Q1·Q0·X из двух инверторов, двух AND и одного OR и подключите к D1.
  4. Подключите AND от Q1 и Q0 к светодиоду для Z.
  5. Меняйте X перед каждым фронтом по последовательности 1 0 1 0 1 1 0 1 и убедитесь по временной диаграмме, что Z загорается после фронтов 3, 5 и 8.

Упражнения

  1. Сколько раз автомат с перекрытием обнаружит 101 в цепочке 1010101?
    Ответ

    Три раза: в битах с 1 по 3, с 3 по 5 и с 5 по 7.

  2. Переделайте таблицу автомата Мура для детектора 101 без перекрытия (после обнаружения всё начинается с нуля).
    Ответ

    Меняется только строка S3: при X = 0 переход в S0, а при X = 1 — в S1. Остальные строки остаются прежними.

  3. При кодировании варианта Мили A = 00, B = 01, C = 10 найдите Z.
    Ответ

    Z = 1 только в состоянии C при X = 1: Z = Q1·Q0·X. Если код 11 никогда не появляется, его можно пометить как X, и получится Z = Q1·X.

  4. Сколько триггеров, как минимум, нужно автомату с 9 состояниями?
    Ответ

    4, потому что 23 = 8 не хватает, а 24 = 16 достаточно.

Чтобы повторить триггеры, из которых состоит регистр состояния, обратитесь к теме «защёлки и триггеры».