Хотя внутреннее вычисление всех ответов, а затем использование мультиплексора для выбора из них будет работать, это, конечно, не минимальный дизайн.
Учтите, что вы можете нарезать проблему на кусочки; вместо одного блока логики с двумя 8-битными входами вы можете разделить его на две 4-битные секции, при условии, что вы можете связать их, чтобы получить правильный общий результат. К счастью, связывание фрагментов не хуже одного бита, который в случае добавления представляет бит переноса. Таким образом, каждый 4-битный фрагмент имеет бит переноса и бит переноса. (Обратите внимание, что логикам вроде AND и NOR это даже не понадобится, хотя, если позже вы реализуете сдвиги влево / вправо, этот бит легко переопределить).
Если довести до крайности, вы можете использовать 8 кусочков по 1 биту каждый. Полезно подумать об 1-битных срезах, потому что это облегчает обдумывание подхода, который масштабируется до более крупных срезов. Таким образом, с 1-битным срезом у вас есть только 7 входов: 4-битный код функции, бит от входа A, бит от входа B и бит переноса. У вас также есть только два выхода: функционировать и выполнять. Так что теперь вы можете написать две выходные функции с точки зрения всего 7 входов, что находится в пределах способности человека разумно сокращать. В итоге вы получите несколько элементов, которые не всегда будут вычислять все функции, но не имеет значения, что происходит внутри среза, а только то, что он дает правильный результат при просмотре извне.
Теперь вы можете пойти несколькими путями. Один из способов - просто использовать 8 из этих 1-битных срезов, и все готово. Другой способ - сделать большие кусочки, а затем использовать их. Переходя от 1-битного к 2-битному, уравнения переходят от 7 входов к 9, а для 4-битных требуются функции из 13 входов. Это не обязательно легко, но даст более компактные результаты, чем подход «вычислить все, затем мультиплексировать». Кроме того, если вы посмотрите на внутреннюю часть 4-битного среза ALU 74181, вы не увидите там мультиплексора.
Да, вам нужно больше логики управления.
Ваше предыдущее задание было чисто арифметическим (это слово?), Поэтому вы можете использовать один сумматор и массировать входы, используя управляющие сигналы, чтобы создать нужные вам функции
Ваши новые функции логичны , поэтому вам нужен еще один блок для выполнения логических операций. Управляющие сигналы изменят функциональность этого блока.
Затем в нижней части диаграммы вам понадобится мультиплексор (иногда называемый «мультиплексором»), управляемый управляющими сигналами, чтобы выбрать, какой из ответов вы собираетесь вывести (один из сумматора и его схему «входного массирования»). или один из логического оператора).
Если вы можете выбрать новые кодировки для ваших линий управления ALU, у меня может возникнуть соблазн использовать MSB в качестве «арифметического / логического» выбора, а другие выбрать «подфункцию», если это имеет смысл, поскольку это упрощает декодирование для окончательный мультиплекс
источник
Один хороший подход к обработке логических операций состоит в том, чтобы биты двух операндов служили входами селектора для мультиплексора с 4 входами и передавали на входы «данных» мультиплексора четырехбитную комбинацию, соответствующую желаемой операции (обычно в в 8-битном ALU будет восемь мультиплексоров - по одному на каждый бит - и входы «данных» всех 8 мультиплексоров будут связаны друг с другом).
источник