Найти в Дзене
Владимир С.

Нестандартный счётчик

Представим, что нам необходимо реализовать какой-то нестандартный счётчик, с непостоянным шагом и при том на минимально возможном количестве триггеров. Первым делом хочется под каждый разряд выделить триггер, затем рассмотреть каждый разряд как отдельную функцию, минимизировать и попытаться избавиться от 1-2 (и то если повезёт) триггеров. Но ведь необязательно реализовывать счётчик исключительно на триггерах, почему не использовать, например, вместе с ними преобразователь кодов. При такой реализации количество триггеров зависит только от количества состояний счётчика, а сами состояния можно получать при помощи преобразователя. Итак, главное, что нужно понять при нашем подходе - как именно количество используемых триггеров зависит от количества состояний счётчика. Будем исходить из определения триггера, из него мы получаем, что количество возможных вариантов q, которые может принимать некоторое количество триггеров n зависит от этого количества как q = 2^n. Тогда необходимое количество

Представим, что нам необходимо реализовать какой-то нестандартный счётчик, с непостоянным шагом и при том на минимально возможном количестве триггеров. Первым делом хочется под каждый разряд выделить триггер, затем рассмотреть каждый разряд как отдельную функцию, минимизировать и попытаться избавиться от 1-2 (и то если повезёт) триггеров. Но ведь необязательно реализовывать счётчик исключительно на триггерах, почему не использовать, например, вместе с ними преобразователь кодов. При такой реализации количество триггеров зависит только от количества состояний счётчика, а сами состояния можно получать при помощи преобразователя.

  • Триггер - простейший цифровой автомат, элемент памяти. При наличии электропитания способен на длительное время сохранять одно из двух устойчивых состояний - 0 или 1 и переключаться между ними под действием управляющих сигналов.

Итак, главное, что нужно понять при нашем подходе - как именно количество используемых триггеров зависит от количества состояний счётчика. Будем исходить из определения триггера, из него мы получаем, что количество возможных вариантов q, которые может принимать некоторое количество триггеров n зависит от этого количества как q = 2^n. Тогда необходимое количество триггеров для каждого конкретного счётчика определяется очень просто: необходимо взять такое количество триггеров n, количество возможных комбинаций состояний которых q будет больше или равно необходимому количеству значений (например, нам нужен счётчик с 3 состояниями, тогда нам необходимо 2 триггера, т.к. 2^2 = 4 > 3, пусть нам нужен счётчик с 14 состояниями, тогда нам необходимо 4 триггера, т.к. 2^4 = 16 > 14).

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

Исходя из описанного выше принципа, делаем вывод, что для реализации достаточно 3 триггеров (2^3 = 8 > 5). В первую очередь необходимо сделать счётчик, переключающийся между 5 состояниями, а потом эти состояния будем привязывать к необходимым значениям при помощи преобразователя кодов. Реализацию будем производить в лабораторном комплексе Logisim. Счётчик будем делать на D-триггерах с параллельным переносом. Запишем таблицу переходов нашего счётчика (таблица 1).

Таблица 1 - таблица переходов счётчика
Таблица 1 - таблица переходов счётчика

Теперь необходимо по таблице переходов составить формулы нахождения значений триггеров в момент времени t+1. Это легко сделать по таблице переходов:

-3

Вся подготовительная работа выполнена, теперь реализуем сам счётчик (рис. 1)

Рис. 1 - счётчик на D-триггерах с параллельным переносом и 5 состояниями. Контакт C отвечает за синхросигнал, R - за сброс в 0.
Рис. 1 - счётчик на D-триггерах с параллельным переносом и 5 состояниями. Контакт C отвечает за синхросигнал, R - за сброс в 0.

Такой счётчик подходит для любого нестандартного счётчика с 5 состояниями. Для реализации конкретно нашего счётчика добавим к нему преобразователь кодов. На вход этому преобразователю будем подавать сигналы с триггеров, а на выходе будем преобразовывать их в двоично-десятичные формы записи необходимых чисел. В данном случае преобразователь устроен по тому же принципу, что в статье про преобразователь, поэтому здесь не будем подробно расписывать его построение. Сам преобразователь показан на рисунке 2.

Рис. 2 - преобразователь кодов.
Рис. 2 - преобразователь кодов.

Теперь подсоединим входы дешифратора к выходам с триггеров и к выходам дешифратора добавим индикаторы для более удобного отслеживания состояний счётчика. Результаты работы представлены на рисунках 3-7.

Рис. 3 - счётчик с состоянием 0
Рис. 3 - счётчик с состоянием 0
Рис. 4 - счётчик с состоянием 28
Рис. 4 - счётчик с состоянием 28
Рис. 5 - счётчик с состоянием 35
Рис. 5 - счётчик с состоянием 35
Рис. 6 - счётчик с состоянием 17
Рис. 6 - счётчик с состоянием 17
Рис. 7 - счётчик с состоянием 5
Рис. 7 - счётчик с состоянием 5

Таким образом, мы произвели реализацию нестандартного счётчика. Подобная схема подходит для реализации любых нестандартных счётчиков.