Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа _6 .doc
Скачиваний:
112
Добавлен:
23.05.2015
Размер:
9.87 Mб
Скачать

6.4.2 Преобразователь прямого кода в дополнительный код

При построении взаимных преобразователей кодов следует исходить из определений для этих кодов и правил взаимного преобразования (перевода).

Правила взаимного преобразования кодов вытекают из определений кодов и правил двоичной арифметики. В частности, х  0 = х, х  1 = х.

Общие правила взаимного преобразования кодов n-разрядных двоичных чисел можно выразить следующими соотношениями:

а) если необходимо [Х]п/ [Х]0, то [X]0=(Xn+1, xпnxn+1, xпn-1xn+1 ,…, xп1xn+1);

б) если необходимо [Х]0/ [Х]п, то [X]п=(Xn+1, x0nxn+1, x0n-1xn+1 ,…, x01xn+1);

в) если необходимо [Х]п/ [Х]д, то [X]д=[(Xn+1, xпnxn+1 ,…, xп1xn+1)  xn+1];

г) если необходимо [Х]д/ [Х]п, то [X]п=[(Xn+1, xдnxn+1 ,…, xд1xn+1)  xn+1];

д) если необходимо [Х]0/ [Х]д, то [X]д = [Х]0  xn+1 ,

где [X]п – прямой код числа,

[X]о – обратный код числа,

[X]д – дополнительный код числа.

При использовании сумматора в качестве преобразователя кода необходимо иметь (n+1)-разрядный сумматор, причем на неиспользованные входы подают нуль, т.к. х0=х, а для формирования сигнала переноса (знакового разряда) используют (n+1)-й вход сумматора.

Например, построим преобразователь трехразрядных чисел прямого кода в дополнительный, т.е. осуществим [Х]п/[Х]д

При построении преобразователя будем руководствоваться алгоритмами в) и г). Из их анализа следует, что при преобразовании кодов необходимо вначале произвести поразрядно суммирование по модулю два входной информации (х3, x2, x1) и знакового разряда x4, а затем к полученному результату прибавить значение x4. Первую операцию выполним с помощью n сумматоров по модулю 2 (схем "Исключающее ИЛИ"), а вторую - с помощью четырехразрядного сумматора. При этом результат суммирования по модулю 2 подадим поразрядно на один из входов сумматора, а на вторые (неиспользованные) входы подадим нуль. Знаковую информацию подадим на входы 4-го разряда сумматора и на вход переноса. Результат получим на выходах сумм, причем вход 4-го разряда будет знаковым.

Если на вход схемы преобразователя четырехразрядного прямого кода в дополнительный код (см. рис. 6.15) подать дополнительный код, то на выходе получим прямой код.

Подведём итог:

Правило кодирования: если число A>0, то [A]доп=[A]пр, если число А<0, то в знаковый разряд кода записывается 1, числовые разряды исходного числа инвертируются, и к младшему числовому разряду добавляется 1.

Например, число А = 1.111 в дополнительном коде

Схему такого преобразования можно собрать на сумматорах (рис.6.15).

В модифицированном дополнительном коде в отличие от дополнительного кода для представления знака числа отводится два разряда. Например, отрицательное число B, модуль которого равен 00.01110, в модифицированном дополнительном коде: [B]Mдоп = 11.10010.

Рис. 6.14 Подключение преобразователя

Рис. 6.15 Схема для преобразования прямого кода в дополнительный (для 4-х разрядных чисел)

Рис. 6.16 Временные диаграммы для преобразователя прямого кода

в дополнительный

Рис. 6.17 Преобразователь прямого кода в дополнительный в пакете MAX+Plus II

Рис. 6.18 Временные диаграммы для преобразователя прямого кода в дополнительный

Рис. 6.19 Матрица временных задержек

Программа:

SUBDESIGN preobraz_praymogo_v_dopol

( X[3..0] : INPUT;

Y[3..0] : OUTPUT;

Q[3..0], t[3..0] : NODE;

)

BEGIN

IF x[3] == 0 THEN

Y[3..0] = x[3..0];

ELSE

t[3] = x[3];

t[2..0] = !x[2..0];

Q[3..0] = t[3..0] + B"00000001";

y[3..0] = Q[3..0];

ENDIF;

END;

Обратите внимание, на временных диаграммах показаны не все возможные входные сигналы. Вам так же не рекомендуется перебирать их все (32 шт.). На временных диаграммах видно, что:

Прямой код

Обратный код

0.0000

0.0000

0.1111

0.1111

0.0111

0.0111

0.0011

0.0011

0.0001

0.0001

1.1111

1.0001

1.0111

1.1001

1.0011

1.1101

Такие комбинации были выбраны потому, что их очень легко проверить.