Двійково-десятковий суматор в коді 8-4-2-1
При побудові даного суматора необхідно розглянути три загальні випадки.
1. Десяткова сума, отримана на першому етапі, менше або рівна 9. Результат правильний, корекція не потрібна, десятковий перенос рівний нулю.
2. Десяткова сума, отримана на першому етапі, знаходиться в межах від 10 до 15. Результат треба зменшити на 10, а десятковий перенос необхідно сформувати як інформаційний сигнал про те, що . Віднімання 10 з результату замінюється додаванням додаткового коду . Оскільки знаковий (п'ятий) розряд нас не цікавить, то на другому етапі до треба додати число 6=0110.
Рис.11. Карти Карно: а) – еталонна; Рис.12. Двійково-десятковий суматор
б – для інформаційного сигналу . у коді 8,4,2,1.
3. Десяткова сума, отримана на першому етапі, знаходиться в межах від 16 до 19. У цій ситуації і його можна використовувати як десяткове перенесення, проте, оскільки вага в двійковій структурі 16, а, то до значення необхідно додати поправку 6 = 0110.
На рис. 11а показана еталонна карта Карно для чотирьох змінних, а на рис. 11б – робоча карта для інформаційного сигналу, з якого виходить:
. (1.14)
Застосувавши на першому і другому етапах двійкові суматори з послідовним переносом, отримаємо остаточну схему, яка приведена на рис. 12. Оскільки на два однорозрядні суматори в другому ступені подається на один з входів сигнал логічного “0”, то відповідні суматори можна замінити на напівсуматори.
3.3. Двійково-десятковий суматор в коді “з надлишком 3”
При побудові даного суматора необхідно розглянути два випадки.
1. Десяткова сума , отримана на першому етапі, менше або рівна 9. Десятковий перенос відсутній ( ), двійкові коди на виходах першого ступеня лежать в межах від 0110 до 1111. Оскільки двійкові коди суми виходять “з надлишком 6” (кожний з доданків “з надлишком 3”), то з результату, отриманого на першому етапі, необхідно відняти двійковий код 0011, або, що те ж саме, додати його додатковий код 1101 (без урахування знакового розряду, оскільки нас він не цікавить). Як генератор одиниці для коду 1101 можна використовувати вихід інвертора, підключеного до виходу перенесення з четвертого розряду суматора першого ступеня.
2. Десяткова сума , отримана на першому етапі, знаходиться в діапазоні від 10 до 19. Існує десятковий перенос ( ), в якості якого можна використовувати вихід переносу з четвертого розряду суматора першого ступеня, оскільки відповідні двійкові коди лежать в діапазоні від 10000 до 11001. Поправка, яку треба використовувати в цьому випадку, визначається з наступних міркувань. Щоб результат прийняв правильне значення двійкового коду, треба з суми, отриманої на першому етапі, відняти 10 (вага десяткового переносу) і 3 (щоб усунути надлишок 6 в сумі), тобто всього треба відняти 13. Фактично ж двійкова структура переносу з четвертого розряду в п'ятий має вагу 16. Отже, щоб результат був правильним, необхідно до суми, отриманої на першому етапі, додати двійковий код 3 = 0011. Як генератор одиниць цього коду використовується вихід перенесення з четвертого розряду суматора першого ступеня. Застосувавши на першому і другому етапах двійкові суматори з послідовним переносом, отримаємо остаточну схему, приведену на рис. 13. Оскільки в обох випадках на молодший суматор другого ступеня поступають два константні сигнали 0 і 1, його можна замінити інвертором, причому виходить , а .
Рис.13. Двійково-десятковий суматор в коді “з надлишком 3”.
3.4. Двійково-десятковий суматор в коді, що самодоповнюється (2-4-2-1)
Перш ніж розглядати загальні ситуації, що виникають при роботі даного суматора, відзначимо наступне: десяткові цифри 0,1.,4 представляються природними двійковими кодами 8,4,2,1, а цифри 5,6.,9 – двійковими кодами з надлишком 6. Кодові комбінації від 0101 до 1010 є забороненими. Якщо десяткова сума виходить рівною або більше десяти, обов'язково виникає перенос з четвертого розряду першого ступеня суматора, оскільки в цьому випадку, як мінімум, один з доданків буде представлено кодом з надлишком 6. Цей перенос можна використовувати як вихідний десятковий перенос .
Відзначимо чотири випадки при побудові даного суматора.
1. Десяткова сума , отримана на першому етапі, менша або рівна 9, а двійкові коди мають дозволені набори. В цьому випадку корекції не вимагається, оскільки результат істинний. Ясно, що .
2. Десяткова сума , отримана на першому етапі, менша або рівна 9, а двійкові коди мають заборонені набори від 0101 до 1001, причому набір 1010 не може з'явитися. В цьому випадку необхідно скоректувати попередній результат збільшенням двійкового коду 6 = 0110. Як генератор одиниць цього коду потрібно використовувати сигнал , де - інформаційний сигнал, який інформує про те, що на першому ступені суматора отримані заборонені коди 0101 ... 1001. На рис. 14а показана карта Карно для сигналу . Отже, для сигналу можна записати:
. (1.15)
Рис.14. Карти Карно: а – для сигналу ; б – для сигналу .
1. Десяткова сума , отримана на першому етапі, лежить в діапазоні , а двійкові коди мають заборонені набори від 0110 до 1010, причому набір 0101 не може з'явитися. Оскільки ці набори з'являються тільки при значеннях десяткової суми від 10 до 14, то, по-перше, , а по-друге, значення суми потрібно зменшити на 6 = 0110, або, що те ж саме, додати додатковий код –6 = 1010 (знаковий розряд нас не цікавить). Як генератор одиниць для цього коду потрібно використовувати сигнал , де - інформаційний сигнал про те, що на першому ступені суматора отримані заборонені коди 0110 ... 1010. На рис. 14(б) показана карта Карно для сигналу , звідки слідує:
Отже, для сигналу можна записати:
(1.16)
2. Десяткова сума , отримана на першому етапі, лежить в діапазоні , а двійкові коди мають дозволені набори. В цьому випадку результат правильний, корекція не потрібна. Ясно, що .
Застосувавши на першому і другому етапах двійкові суматори з послідовним переносом, отримаємо остаточну схему, приведену на рис. 15.
Рис.15. Двійково-десятковий суматор в коді, що самодоповнюється, 2,4,2,1.