- •Проектирование многоразрядного десятичного сумматора комбинационного типа
- •1. Цель и практическое содержание методических указаний
- •1.1. Цель работы
- •1.2. Краткое содержание
- •2. Теоретическая часть
- •2.1. Теория о двоично-десятичном кодировании и свойствах кодов
- •Примеры двоично-десятичных кодов
- •2.2. Сложение одноразрядных десятичных числе со знаком в двоично-десятичном коде
- •0.1000.0111.0101
- •2.3. Проектирование функциональной логической схемы и её реализация в заданном базисе логических элементов
- •2.3.1. Общие принципы
- •2.3.2. Проектирование логической схемы одноразрядного двоичного сумматора
- •2.3.3. Проектирование одноразрядного десятичного сумматора в коде 8421
- •2.3.4. Проектирование дополнительных схем
- •2.3.5. Построение функциональной схемы 3-х разрядного десятичного сумматора
- •2.4. Устройство управления многоразрядным сумматором
- •2.4.1. Проектирование распределителя сигналов
- •2.4.2. Получение общей схемы сумматора
- •2.5. Порядок оформления пояснительной записки
- •Литература
- •Приложение
- •Содержание
Примеры двоично-десятичных кодов
Десятичная цифра |
Двоично-десятичный код | |||||
8421 |
5421 |
8421+3 |
8421+6 |
5121 |
2421 | |
0 |
0000 |
0000 |
0011 |
0110 |
0000 |
0000 |
1 |
0001 |
0001 |
0100 |
0111 |
0001 |
0001 |
2 |
0010 |
0010 |
0101 |
1000 |
0010 |
0010 |
3 |
0011 |
0011 |
0110 |
1001 |
0011 |
0011 |
4 |
0100 |
0100 |
0111 |
1010 |
0111 |
0100 |
5 |
0101 |
1000 |
1000 |
1011 |
1000 |
1011 |
6 |
0110 |
1001 |
1001 |
1100 |
1001 |
1100 |
7 |
0111 |
1010 |
1010 |
1101 |
1010 |
1101 |
8 |
1000 |
1011 |
1011 |
1110 |
1011 |
1110 |
9 |
1001 |
1100 |
1100 |
1111 |
1111 |
1111 |
2.2. Сложение одноразрядных десятичных числе со знаком в двоично-десятичном коде
Разработка алгоритма сложения чисел в заданном коде может осуществляться двумя способами. Первый способ заключается в рассмотрении свойств заданного кода и анализа этих свойств. На основании проведенного анализа можно сделать вывод о величине коррекции для кода и критериях ввода этой коррекции.
Пусть
T(A) = α8 α4 α2 α1 — тетрада, изображающая одноразрядное десятичное число А;
T(B) = β8 β4 β2 β1 — тетрада, изображающая одноразрядное десятичное число B;
T(C) = X8 X4 X2 X1 — результат от сложения чисел A и B.
При этом
Пi-1 — перенос из предыдущего десятичного разряда (тетрады);
Пi — перенос в следующий десятичный разряд (тетраду).
Все рассмотренные ниже примеры приведены в коде 8421.
Если T(A) + T(B) + Пi-1 < 10, то результат всегда получается правильный и никакой коррекции не требуется:
+ |
7 |
|
+ |
0011 |
1 |
|
0001 | ||
8 |
|
1000 |
Примечание: все действия выполняются с соблюдением правил двоичной арифметики:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10
В случае T(A) + T(B) + Пi-1 ≥ 10, результат всегда получается неверный. Причём, здесь можно рассмотреть два варианта:
10 ≤ T(A) + T(B) + Пi-1 ≤ 15
15 < T(A) + T(B) + Пi-1
В первом варианте результат от сложения T(C) — величина, которая не используется в коде 8421:
+ |
8 |
|
+ |
1000 |
5 |
|
0101 | ||
13 |
|
1101 |
На самом деле, величина 13 должна представляться как Пi = 1 и T(C) = 0011, то есть для коррекции полученного результата надо организовать перенос "1" в следующую тетраду, а из полученного значения вычесть величину 1010. Однако, поскольку вычитание в прямом виде невозможно, заменим его сложением полученной величины 1101 и величины 1010 в дополнительном коде 0110. Тогда
+ |
1101 |
0110 | |
0011 |
Единицу переноса, которая при этом получается, можно или отбросить, или использовать как единицу переноса в следующую тетраду. В дальнейшем будем использовать данную единицу как единицу переноса.
Во втором варианте результат от сложения T(C) — величина, которая используется в коде 8421:
+ |
9 |
|
+ |
1001 |
7 |
|
0111 | ||
16 |
|
0000 |
Однако этот результат неверен и требует коррекции. Нетрудно видеть, что для получения правильного результата из величины 16 надо вычесть 10 (величины десятичные). Вычитание, как и в предыдущем случае, заменим сложением, взяв интересующую величину в дополнительном коде.
Таким образом, и в данном варианте величина коррекции будет 0110 (двоичная величина). При этом полученная единица переноса в следующую тетраду сохраняется.
Обобщив все эти случаи, можно получить алгоритм сложения чисел в коде 8421. Он будет следующим:
если результат от сложения двух одноразрядных десятичных чисел с учетом переноса из предыдущего разряда меньше десяти, то коррекция не требуется. При этом результат получается в коде 8421;
если результат от сложения двух одноразрядных чисел с учетом переноса из предыдущего разряда больше или равен десяти, то коррекция требуется. Корректирующая величина будет 0110.
При этом результат получается в виде комбинации, которая не используется в коде 8421, или в результате присутствует единица переноса в следующую тетраду.
На основании этого алгоритма можно выработать правило введения корректирующей величины:
корректирующую величину 0110 необходимо прибавить к полученному результату от сложения T(A) и T(B), если результат — запрещенная величина или если есть перенос в следующий разряд Пi = 1. В первом случае после введения коррекции получается величина Пi = 1, которую необходимо сохранить для получения правильного результата. Во втором случае эта величина получается сама собой.
Однако, не всегда удается получить алгоритм сложения, используя только свойства кода. В этом случае можно использовать другой подход. Он заключается в следующем:
Строится таблица соответствия результатов сложения десятичных и двоично-десятичных чисел. Таблица симметрична относительно главной диагонали.
Таблица 2.2.1.
Таблица соответствия для кода 8421
Код 8421 |
0 0000 |
1 0001 |
2 0010 |
3 0011 |
4 0100 |
5 0101 |
6 0110 |
7 0111 |
8 1000 |
9 1001 |
0 0000 |
0000 0000 |
0001 0001 |
0010 0010 |
0011 0011 |
0100 0100 |
0101 0101 |
0110 0110 |
0111 0111 |
1000 1000 |
1001 1001 |
1 0001 |
0001 0001 |
0010 0010 |
0011 0011 |
0100 0100 |
0101 0101 |
0110 0110 |
0111 0111 |
1000 1000 |
1001 1001 |
0110 1010 1.0000 |
2 0010 |
0010 0010 |
0011 0011 |
0100 0100 |
0101 0101 |
0110 0110 |
0111 0111 |
1000 1000 |
1001 1001 |
0110 1010 1.0000 |
0110 1011 1.0001 |
3 0011 |
0011 0011 |
0100 0100 |
0101 0101 |
0110 0110 |
0111 0111 |
1000 1000 |
1001 1001 |
0110 1010 1.0000 |
0110 1011 1.0001 |
0110 1100 1.0010 |
4 0100 |
0100 0100 |
0101 0101 |
0110 0110 |
0111 0111 |
1000 1000 |
1001 1001 |
0110 1010 1.0000 |
0110 1011 1.0001 |
0110 1100 1.0010 |
0110 1101 1.0011 |
5 0101 |
0101 0101 |
0110 0110 |
0111 0111 |
1000 1000 |
1001 1001 |
0110 1010 1.0000 |
0110 1011 1.0001 |
0110 1100 1.0010 |
0110 1101 1.0011 |
0110 1110 1.0100 |
6 0110 |
0110 0110 |
0111 0111 |
1000 1000 |
1001 1001 |
0110 1010 1.0000 |
0110 1011 1.0001 |
0110 1100 1.0010 |
0110 1101 1.0011 |
0110 1110 1.0100 |
0110 1111 1.0101 |
7 0111 |
0111 0111 |
1000 1000 |
1001 1001 |
0110 1010 1.0000 |
0110 1011 1.0001 |
0110 1100 1.0010 |
0110 1101 1.0011 |
0110 1110 1.0100 |
0110 1111 1.0101 |
0110 1.0000 1.0110 |
8 1000 |
1000 1000 |
1001 1001 |
0110 1010 1.0000 |
0110 1011 1.0001 |
0110 1100 1.0010 |
0110 1101 1.0011 |
0110 1110 1.0100 |
0110 1111 1.0101 |
0110 1.0000 1.0110 |
0110 1.0001 1.0111 |
9 1001 |
1001 1001 |
0110 1010 1.0000 |
0110 1011 1.0001 |
0110 1100 1.0010 |
0110 1101 1.0011 |
0110 1110 1.0100 |
0110 1111 1.0101 |
0110 1.0000 1.0110 |
0110 1.0001 1.0111 |
0110 1.0010 1.1000 |
Строки и столбцы таблицы соответствуют десятичным числам от 0 до 9 (см. таблицу 2.2.1).
Каждая клетка таблицы содержит:
корректирующую величину;
результат сложения соответствующих двоично-десятичных чисел по правилам двоичной арифметики;
корректный результат сложения, то есть результат, который должен получиться при сложении двоично-десятичных чисел.
Пусть имеет место пересечение цифр 7 и 6. В коде 8421 7 — это 0111, а 6 — это 0110.
От сложения этих величин в коде будет:
+ |
0111 |
0110 | |
1101 |
Эта величина размещается в средней части пересечения. На самом деле 7 + 6 = 13 и в коде 8421 — это 1.0011, где в тетраде 0011 и "1" переноса в следующую тетраду.
Величина 1.0011 размещается в нижней части пересечения (см. таблицу 2.2.1).
Составив такую таблицу и рассмотрев разницу между двумя величинами в клетке, можно найти и корректирующую величину. Внимательно посмотрев, в каких местах таблицы есть коррекция, можно найти закономерность ее введения.
Как правило, для широко используемых двоично-десятичный кодов бывает не больше двух корректирующих комбинаций, и критерий их ввода определяется:
наличием или отсутствием запрещенной комбинации в результате;
наличием или отсутствием переноса в следующую тетраду;
определенное сочетание "1" и "0" в фиксируемых разрядах внутри тетрады.
Поскольку нельзя оперировать только с одноразрядными положительными числами, то надо уметь представлять многоразрядные числа с положительным и отрицательным знаком.
Если A - многоразрядное десятичное число со знаком плюс, то в прямом, обратном и дополнительном видах кодирования оно будет представлено следующим образом:
A = a a1 a2 a3 ... an
где ai — десятичное одноразрядное число, записанное в виде двоичной тетрады.
Если же A имеет знак минус, то для его представления можно использовать прямой, обратный и дополнительный код:
[A]пр. = 1. a1 a2 a3 ... an
[A]обр. = 1. a1 a2 a3 ... an
гдеai — дополнение до "9" в десятичной системе;
[A]доп. = 1. a1 a2 a3 ... an-1 an
гдеai — дополнение до "9" во всех десятичных разрядах, кроме младшего. В младшем разряде берётся дополнение до "10" (an).
Величина +875 в коде 8421 будет иметь вид: