РадиоКот >Статьи >

Теги статьи:

Синтез генератора числовой последовательности

Автор: Миротворец, peacemaker.donetsk@gmail.com
Опубликовано 20.09.2013
Создано при помощи КотоРед.
Участник Конкурса "Поздравь Кота по-человечески 2013!"

Вступление

Доброго всем здоровья, уважаемые радиокоты.

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

Теория

Предположим, нам необходимо циклически генерировать последовательность 0-1-2-3-10-11-12-13-14 в двоичном коде. Для хранения нам достаточно 4 двоичных разрядов, т.к. максимальное число в последовательности 15 (14 + нулевое состояние) <  24 = 16 . Для генератора будем использовать JK-триггеры с прямым и инверсным выходами, а также входом синхронизации, а для комбинации логических функций (в случае необходимости) - элементы "И" и "ИЛИ".

Условные обозначения.

Цифрами "0" и "1" будут обозначаться низкий и высокий уровни соотвественно, "*" - неопределённое состояние. Qt - состояние на текущем шаге, Qt+1 - состояние на следующем шаге. CC - система счисления. &, | - логическое умножение "И"(может опускаться) и логическое сложение "ИЛИ" соответственно, X -инверсное значение Х .

Шаг 1. Постоение таблицы переходов и функций возбуждения триггеров.

Таблица истинности для JK-триггера:

J K Qt+1  
0 0 Qt Сохранение значения
0 1 0 Установка в 0
1 0 1 Установка в 1
1 1 Qt Инвертирование значения

Таблица установки триггера в следующее состояние в зависимости от текущего:

Qt Qt+1 J K
0 0 0 *
0 1 1 *
1 0 * 1
1 1 * 0

Теперь строим таблицу переходов устройства и функций возбуждения триггеров:

16 CC 10 CC Состояния триггеров Функции возбуждения
Qt Qt+1
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 J1 K1 J2 K2 J3 K3 J4 K4
0 0 0 0 0 0 0 0 0 1 0 * 0 * 0 * 1 *
1 1 0 0 0 1 0 0 1 0 0 * 0 * 1 * * 1
2 2 0 0 1 0 0 0 1 1 0 * 0 * * 0 1 *
3 3 0 0 1 1 1 0 1 0 1 * 0 * * 0 * 1
4 4 0 1 0 0 * * * * * * * * * * * *
5 5 0 1 0 1 * * * * * * * * * * * *
6 6 0 1 1 0 * * * * * * * * * * * *
7 7 0 1 1 1 * * * * * * * * * * * *
8 8 1 0 0 0 * * * * * * * * * * * *
9 9 1 0 0 1 * * * * * * * * * * * *
A 10 1 0 1 0 1 0 1 1 * 0 0 * * 0 1 *
B 11 1 0 1 1 1 1 0 1 * 0 1 * * 1 * 1
C 12 1 1 0 0 1 1 0 1 * 0 * 0 0 * 1 *
D 13 1 1 0 1 1 1 1 0 * 0 * 0 1 * * 1
E 14 1 1 1 0 0 0 0 0 * 1 * 1 * 1 0 *
F 15 1 1 1 1 * * * * * * * * * * * *

Пояснение. Предположим, нам нужно установить значение входов второго  триггера J2  и K2 на наборе 3 для перехода на его значение на наборе 10(А). Смотрим, что значение Q2 в текущий момент равно "0", и в следующий момент времени также равно "0". По таблице установки триггеров находим, что значение функции возбуждения будет таково: J2= "0", K2= "*". При заполнении таблицы необходимо учесть, что состояния 4-9,15 являются недопустимыми(окрашены оранжевым), и на этих наборах функции возбуждения могут принимать любые значения. Неполную определённость функций мы используем на следующем шаге для минимизации.

 

Шаг 2. Минимизация функций возбуждения.

Для минимизации полученных функций возбуждения используются различные методы. Мы используем минимизацию на картах Карно, как наиболее простой и наглядный способ (по моему мнению).

Для входов триггеров Ji и Ki (i меняется от 1 до 4) строим карты Карно, попарно разбивая состояния триггеров на Q1Q2 и Q3Q4 (из состояния Qt). Обратите внимание на порядок записи значений: 00, 01, 11, 10! Это сделано для того, чтобы соседние столбцы и строки отличались от коллег только одним разрядом - это сделано для упрощения минимизации. Из-за такого размещения разрядов, каждая строка/столбец имеет двоих соседей - у первой строки, например, соседями являются вторая и последняя, у последней строки - соседями будут предпоследняя и первая. И в эти таблицы-карты заносим значения из функций возбуждения. Заметим, что поскольку у нас состояния (4-9,15) - запрещённые, в картах Карно для всех J и K в ячейках, соответствующих этим наборам, можно сразу проставить "*":

  Q3Q4
00 01 11 10
Q1Q2 00        
01 * * * *
11     *  
10 * *    

 Итак, строим таблицу-карту для J1:

J1 Q3Q4
00 01 11 10
Q1Q2 00 0 0 1 0
01 * * * *
11 * * * *
10 * * * *

Теперь на полученной карте делаем минимизацию. Для этого нам необходимо одним либо несколькими прямоугольниками (со сторонами, равными степени двойки - 1,2,4) охватить ВСЕ единицы в данной таблице. В прямоугольники могут включаться и "*". Для J1 нам достаточно только одного прямоугольника (выделено цветом):

J1 Q3Q4
00 01 11 10
Q1Q2 00 0 0 1 0
01 * * * *
11 * * * *
10 * * * *

Видим, что Q3,Q4 должны быть равны "1", а Q1,Q2- могут принимать значения 00,01, 11 и 10. Вспоминаем дискретную математику: a&b | a&b = a, т.е. соседние значения просто "склеиваются" по отличному разряду. В данной таблице у нас значения Q1,Q2 сольются таким образом, что на выходе получится "1", следовательно, останутся только Q3Q4. Поскольку для J1 они обе дожны равняться "1", получим значение функции J1 = Q3 & Q4, или просто J1 = Q3Q4.

Аналогичным образом выполняем минимизацию для всех остальных J и K (см. прилагаемый текстовый файл).

Получаем набор функций:

J1 = Q3Q4; K1 = Q2Q3; J2 = Q1Q4; K2=Q3; J3 = Q4; K3 = Q1Q4 | Q2Q3; J3 = Q1 | Q3 |Q1Q2; K4="1".

 

Шаг 3. Составляем схему генератора.

В схему добавлены цепи установки генератора в исходное состояние (все выводы "0") и подачи тактовых импульсов (переход триггеров выполняется по нисходящему фронту сигнала).

Для проверки правильности синтеза устройства необходимо построить временные диаграммы сигналов на входах и выходах триггеров по схеме устройства. Но я обошёлся семисегментным индикатором со встроенным дешифратором для отображения текущего значения на выходе генератора в шеснадцатеричном коде.

Итог

Как видим, в построении генератора нет ничего сложного (за исключением минимизации, но это вопрос внимательности и практики). Надеюсь, данная работа хоть немного поможет в борьбе с тенденцией "Примени микроконтроллер везде, даже если он там не нужен".

С уважением ко всем радиокотам. А Кота - с праздником, долгих лет и бодрости!

Литература

  1. Таненбаум Э. Архитектура компьютеров. Питер. СПБ, 2003 г.
  2. Новиков Ф.А. Дискретная математика для программистов. 3-е издание. Питер. СПБ, 2009 г.

Файлы:
Книга MS Excel
Проект в Proteus


Все вопросы в Форум.