- •Лабораторная работа № 6 Исследование преобразователей кодов на сумматорах
- •6.1 Теоретическое введение
- •6.2 Пример построения пороговых схем в пакете Multisim
- •6.3 Пример построения мажоритарного элемента в пакете Multisim
- •6.4 Построение преобразователей
- •6.4.1 Прямой, обратный и дополнительный коды
- •6.4.2 Преобразователь прямого кода в дополнительный код
- •6.4.3 Преобразователь дополнительного кода в прямой код
- •6.4.4 Преобразователь прямого кода в обратный код
- •6.4.5 Преобразователь обратного кода в прямой
- •6.4.6 Построение преобразователя двоичного кода в двоично-десятичный
- •6.4.7 Построение преобразователя двоично-десятичного кода в двоичный код
- •6.4.8 Построение преобразователя двоичного кода в код Грея
- •6.5 Моделирование исследуемых схем на эвм с применением пакета Multisim
- •6.7 Контрольные вопросы
6.4.7 Построение преобразователя двоично-десятичного кода в двоичный код
Двоичные числа, содержащие 4 или менее разрядов, преобразуются непосредственно, как 1 тетрада. Двоичные числа, имеющие длину более 4-х разрядов, можно преобразовать в двоично-десятичную форму с помощью сдвигающих регистров. Для этого двоичное число надо сдвигать справа налево старшими разрядами вперёд, записывая («вдвигая») его в регистр последовательно, разряд за разрядом, начиная с младшего разряда регистра. Сдвиги надо повторять до тех пор, пока младший разряд двоичного числа не запишется в младший разряд регистра, который можно рассматривать как двоично-десятичную разрядную сетку. Когда единица пересекает границу между двоично-десятичными разрядами, то возникает ошибка, так как при сдвиге значение этой единицы увеличивается с 8 до 16, тогда как для двоично-десятичного числа оно должно возрасти с 8 до 10. Следовательно, для коррекции тетрады необходимо добавлять цифру 6, так как двоично-десятичное число уменьшается на 6.
Таблица 6.4 Таблица истинности преобразователя
двоично-десятичного кода в двоичный
i |
X4 |
Хз |
X2 |
Xl |
Y4 |
Y3 |
Y2 |
Y1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
2 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
3 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
4 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
5 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
6 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
7 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
8 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
9 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
Таблица 6.5 Данные по коррекции сдвига двоично-десятичных чисел
ДЧ |
9 |
6 |
5 |
3 |
MP |
Вес |
103 8421 |
102 8421 |
101 8421 |
100 8421 |
|
ДЦЧ |
1001 |
0110 |
0101 |
0011 |
|
с |
0100 |
1011 |
0010 |
1001 |
1 |
к |
0000 |
0011 |
0000 |
0011 |
|
ДДЧ |
0100 |
1000 |
0010 |
0110 |
1 |
ДЧ |
4 |
8 |
2 |
6 |
|
В таблице 6.5 приведены: ДЧ - десятичное число, ДЦЧ - двоично-десятичное число, С - сдвиг, К - коррекция, МР - младший разряд.
Если в старший разряд тетрады, имеющей множитель 10j, поступает единица, то она приобретает вес 8*10j. До сдвига эта единица имела вес 10i+1, поэтому для получения при сдвиге деления на два ей следует приписать вес 2-1*10j+1. Из этого следует, что необходимо произвести коррекцию на число 8*10j - 2-1*10j+1, т.е. вычесть число 3*10j. Если в старший разряд какой-либо тетрады поступает нуль, то коррекцию производить не нужно. Из таблицы видно, что после сдвига числа 9653 и соответствующей коррекции действительно получается число 4826, отличающееся от 9653*2-1 на единицу, которая является младшим разрядом младшей тетрады двоично-десятичного кода и младшим разрядом двоичного кода.
Если вы строите преобразователя двоично-десятичного кода в двоичный код на элементах И-НЕ, то рассуждения как и для предыдущего преобразователя. Получим схему:
Рис. 6.32 Схема преобразователя двоично-десятичного кода в двоичный код
Рис. 6.33 Блок преобразователя двоично-десятичного кода в двоичный код
Рис. 6.34 Заданная последовательность входных сигналов
для схемы (рис. 6.18)
Рис. 6.35 Временные диаграммы для преобразователя двоично-десятичного кода в двоичный код
Рис. 6.36 Преобразователь двоично-десятичного кода в двоичный код
Рис. 6.36 Временные диаграммы
Рис. 6.37 Матрица временных задержек
Программа:
SUBDESIGN preobraz_dvoichno_desayt_v_dvoich
( X[3..0] : INPUT;
Y[3..0] : OUTPUT; )
BEGIN
IF X[3..0] <= B"0100"
THEN Y[3..0] = X[3..0];
ELSE
Y[0]=X[0];
TABLE
X[3..1] => Y[3..1]
B"101" => B"010";
B"110" => B"011";
B"111" => B"100";
END TABLE;
ENDIF;
END;