Хоча внутрішні обчислення всіх відповідей, а потім використання мукс для вибору серед них буде працювати, це, звичайно, не мінімальний дизайн.
Подумайте, що ви можете трохи розрізати проблему; замість одного блоку логіки з двома 8-бітовими входами ви можете розділити це на два 4-бітні секції, доки ви можете зв'язати їх, щоб отримати правильний загальний результат. На щастя, з'єднання зрізів не гірше, ніж один біт, який у разі додавання являє собою несучий біт. Таким чином, кожен 4-бітний зріз має переносний біт і переносний біт. (Зверніть увагу, що такі логіки, як AND і NOR, цього навіть не знадобляться, хоча якщо згодом ви реалізуєте зсув вліво / вправо, цей біт легко перевстановлюється).
Якщо ви перенесені до крайності, ви можете використовувати 8 скибочок 1-бітної кожної. Корисно подумати над 1-бітовими фрагментами, оскільки це полегшує роздуми про підхід, який масштабує назад до великих фрагментів. Отже, з 1-бітовим фрагментом у вас всього 7 входів: 4-бітовий функціональний код, трохи від вводу A, трохи від входу B і біт перенесення. У вас також є лише два виходи: функціонувати та виконувати. Тож тепер ви можете записати дві функції виведення з точки зору всього 7 входів, що в межах сфери здатності людини розумно зменшити. У вас з'явиться кілька затворів, які не обов'язково завжди будуть обчислювати всі функції, але не має значення, що відбувається всередині фрагмента, лише те, що він дає правильний результат при погляді ззовні.
Тепер ви можете пройти пару шляхів. Один із способів - просто використовувати 8 цих 1-бітових фрагментів, і ви закінчили. Інший спосіб - зробити більші скибочки, а потім використовувати їх. Переходячи від 1-бітного до 2-бітного рівняння, рівняння переходять від 7 входів до 9, а для 4-розрядних знадобиться функцій 13 входів. Це не обов'язково просто, але дасть більш компактні результати, ніж підхід compute-all-then-mux. Крім того, якщо ви подивитесь на внутрішні частини 4-бітового ALU-фрагмента 74181, ви не побачите муксу.