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

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

Счётчики и сдвиговые регистры: проектирование шаг за шагом

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

Счётчик — это группа триггеров, которая с каждым тактовым импульсом проходит фиксированную последовательность состояний; регистр — это группа триггеров, которая хранит или сдвигает двоичное слово. С их помощью измеряют время, делят частоту, преобразуют данные из последовательной формы в параллельную и формируют управляющие последовательности. Вам нужно хорошо представлять себе D-, JK- и T-триггеры и их таблицы возбуждения, о которых рассказано в теме «защёлки и триггеры».

Асинхронный счётчик (с последовательным переносом)

Самый простой способ считать — соединить в цепочку T-триггеры с T = 1, чтобы каждый переключался и делил частоту на 2. Только первый получает системный тактовый сигнал; каждый из следующих тактируется выходом предыдущего. Если триггеры срабатывают по спадающему фронту, выход Q одного разряда подключают к тактовому входу следующего, и счётчик считает вверх; при нарастающем фронте для счёта вверх нужно использовать Q (с Q он считал бы вниз).

Его недостаток — накапливающаяся задержка: разряд n не изменится, пока не изменятся все предыдущие, словно по цепочке бежит волна. В течение этого времени на выходе появляются ложные значения.

Пример: 4-битный асинхронный счётчик с tCQ = 12 ns на триггер. Он переходит из 0111 в 1000.

  1. Q0 меняется с 1 на 0 через 12 ns: на выходе читается 0110.
  2. Q1 меняется через 24 ns: 0100.
  3. Q2 меняется через 36 ns: 0000.
  4. Q3 меняется через 48 ns: 1000, правильное значение.

В течение 48 ns на выходе побывали 0110, 0100 и 0000. Если какая-то схема дешифрирует эти значения, она увидит ложные импульсы. Чтобы всегда читать установившееся значение, период тактового сигнала должен превышать 48 ns, то есть f < 20.8 MHz.

Синхронный счётчик

В синхронном счётчике все триггеры получают один и тот же тактовый сигнал, а кто из них переключается, решает логика. В двоичном суммирующем счётчике бит переключается, когда все младшие биты равны 1:

T0 = 1, T1 = Q0, T2 = Q0·Q1, T3 = Q0·Q1·Q2

Все выходы меняются вместе, через tCQ после фронта. Минимальный период больше не растёт с числом бит из-за цепочки триггеров, а определяется суммой tCQ + задержка элемента AND + tsu.

Счётчик по модулю N

Счётчик по модулю N проходит N состояний и начинает сначала. Ему нужно не меньше ⌈log2 N⌉ триггеров. Сделать его можно двумя способами.

С асинхронным сбросом: берут двоичный счётчик и обнаруживают первое состояние, которое не должно появляться. Для модуля 10 это состояние 1010; достаточно элемента NAND от Q3 и Q1, подключённого ко входу сброса (clear) с активным низким уровнем, потому что здесь Q3 и Q1 впервые равны 1 одновременно. Это работает, но состояние 1010 появляется на несколько наносекунд и порождает короткий импульс на выходах.

Синхронное проектирование: записывают таблицу состояний и вычисляют входы по таблице возбуждения. Переходных состояний нет.

Пример: синхронный счётчик по модулю 6 (от 0 до 5) на T-триггерах. Состояния Q2 Q1 Q0; состояния 110 и 111 не используются и помечаются как X.

Q2 Q1 Q0СледующееT2T1T0
000001001
001010011
010011001
011100111
100101001
101000101

Каждое T равно 1, когда соответствующий бит меняется. Упрощая с учётом X, получаем:

  • T0 = 1.
  • T1 = Q2·Q0 (покрывает 001 и 011; в 101 равно 0, потому что Q2 = 1).
  • T2 = Q1·Q0 + Q2·Q0 = Q0·(Q1 + Q2).

Проверьте неиспользуемые состояния: из 110 при T2 = 0, T1 = 0, T0 = 1 счётчик переходит в 111; из 111 при T2 = 1, T1 = 0, T0 = 1 — в 010. Оба возвращаются в последовательность: счётчик запускается сам, даже если при включении окажется в недопустимом состоянии.

Сдвиговые регистры

Сдвиговый регистр — это D-триггеры, соединённые в цепочку: выход каждого подаётся на вход следующего, и с каждым фронтом все биты продвигаются на одну позицию. По тому, как данные входят и выходят, регистры классифицируют так:

Пример: 4-битный регистр SIPO, изначально в состоянии 0000, где Q0 ← вход, Q1 ← Q0, Q2 ← Q1, Q3 ← Q2. Передаются биты 1, 0, 1, 1 в этом порядке.

ФронтВходной битQ0 Q1 Q2 Q3
111 0 0 0
200 1 0 0
311 0 1 0
411 1 0 1

После 4 фронтов регистр, прочитанный как Q3 Q2 Q1 Q0, содержит 1011: первый переданный бит оказался в Q3.

Кольцевой счётчик и счётчик Джонсона

Если выход последнего триггера сдвигового регистра соединить со входом первого, получится кольцевой счётчик. В него заносят одну-единственную 1 (например, 1000), и эта 1 циркулирует: 1000, 0100, 0010, 0001, 1000. При n триггерах у него n состояний, и каждое состояние уже дешифрировано, потому что только один выход равен 1. Начальную загрузку нужно гарантировать: если счётчик стартует в 0000, он останется там навсегда.

Если вместо Q завести в обратную связь Q последнего триггера, получится счётчик Джонсона (или счётчик на «скрученном кольце») с 2n состояниями. Для 4 бит (Q0 Q1 Q2 Q3, где Q0 ← Q3):

0000 → 1000 → 1100 → 1110 → 1111 → 0111 → 0011 → 0001 → 0000

Каждое состояние распознаётся элементом AND всего с двумя входами, если смотреть, где проходит граница между единицами и нулями: например, 1100 — единственное состояние с Q1 = 1 и Q2 = 0, а 0000 — единственное с Q0 = 0 и Q3 = 0.

Для 4 триггеров: двоичный счётчик использует все 16 состояний, счётчик Джонсона — 8, а кольцевой — 4. Лишние состояния счётчика Джонсона (8) и кольцевого (12) нужно исправлять дополнительной логикой, если схема может в них стартовать.

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

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

Сравнить асинхронный счётчик с синхронным на временной диаграмме — лучший способ увидеть эффект «волны» последовательного переноса.

  1. Поместите четыре T-триггера с T = 1, подключите тактовый сигнал к первому и соедините остальные в цепочку как асинхронный счётчик.
  2. Подключите четыре выхода к светодиодам и к индикатору или к линейке светодиодов.
  3. Соберите рядом синхронный счётчик с T1 = Q0, T2 = Q0·Q1 и T3 = Q0·Q1·Q2, все триггеры — с одним и тем же тактовым сигналом.
  4. Откройте временную диаграмму, запустите тактовый сигнал и понаблюдайте за переходом из 0111 в 1000 в обоих счётчиках.
  5. Соберите регистр из четырёх D-триггеров в цепочку, меняйте последовательный вход перед каждым фронтом и наблюдайте, как продвигаются биты; затем заведите Q последнего разряда на первый и проверьте все 8 состояний счётчика Джонсона.

Упражнения

  1. Сколько триггеров нужно для счётчика по модулю 12 — двоичного, кольцевого и счётчика Джонсона?
    Ответ

    Двоичный: 4 (24 = 16 ≥ 12). Кольцевой: 12. Джонсона: 6 (2 × 6 = 12).

  2. Какой элемент и какие выходы вы взяли бы, чтобы сделать счётчик по модулю 12 с асинхронным сбросом с активным низким уровнем из 4-битного двоичного счётчика?
    Ответ

    12 = 1100. Элемент NAND от Q3 и Q2, подключённый ко входу сброса (clear), потому что здесь оба впервые равны 1.

  3. В 8-битном асинхронном счётчике используются триггеры с tCQ = 10 ns. Каково наихудшее время установления?
    Ответ

    8 × 10 = 80 ns, например при переходе из 01111111 в 10000000.

  4. Какой двухвходовый элемент AND дешифрирует состояние 0111 4-битного счётчика Джонсона?
    Ответ

    Q0·Q1: это единственное состояние с Q0 = 0 и Q1 = 1.