回答:
すべての回答を内部で計算し、マルチプレクサを使用してそれらの中から選択することは機能しますが、それは確かに最小限の設計ではありません。
問題をビットスライスできると考えてください。2つの8ビット入力を持つ単一のロジックブロックの代わりに、これらをリンクして正しい全体的な結果を得ることができる限り、これを2つの4ビットセクションとして分割できます。幸いにも、スライスのリンクはシングルビットより悪くはありません。これは加算の場合はキャリービットを表します。したがって、各4ビットスライスにはキャリーインビットとキャリーアウトビットがあります。(ANDやNORのような論理はこれを必要としませんが、後で左/右シフトを実装する場合、このビットは簡単に再利用されます)。
極端に実行すると、それぞれ1ビットの8スライスを使用できます。1ビットのスライスについて考えると便利です。大きなスライスにスケールアップするアプローチについて考えるのが簡単になるからです。したがって、1ビットスライスでは、4つの関数コード、入力Aからのビット、入力Bからのビット、およびキャリーインビットの7つの入力しかありません。また、出力は2つしかありません。機能アウトと実行です。したがって、2つの出力関数をわずか7つの入力で記述できるようになりました。これは、合理的に削減できる人間の能力の範囲内です。必ずしもすべての関数を常に計算するとは限らない少数のゲートが作成されますが、スライス内で何が発生するかは問題ではなく、外部から見たときに正しい結果が生成されるだけです。
今、あなたはいくつかの方法をとることができます。1つの方法は、これらの1ビットスライスのうち8つを使用するだけです。別の方法は、より大きなスライスを作成し、それらを使用することです。1ビットから2ビットになると、方程式は7入力から9ビットになり、4ビットには13入力の関数が必要になります。これは必ずしも簡単ではありませんが、すべてを計算してからマルチプレクサを作成するアプローチよりもコンパクトな結果が得られます。さらに、74181の4ビットALUスライスの内部を見ると、そこにマルチプレクサは表示されません。
はい、より多くの制御ロジックが必要です。
以前の割り当ては純粋に算術でした(それは単語ですか?)、単一の加算器を使用して、制御信号を使用して入力をマッサージし、必要な関数を作成できます。
あなたの新しい機能は論理的ですなので、論理演算を実行するには別のブロックが必要です。制御信号は、このブロックの機能を変更します。
次に、図の下部に、出力する回答(加算器からの回答と「入力マッサージ」回路)を選択するために、制御信号によって駆動されるマルチプレクサ(「マルチプレクサ」と呼ばれることもあります)が必要です。または論理演算子からのもの)。
ALU制御ラインに新しいエンコーディングを選択できる場合、MSBを「算術/論理」選択として使用し、他の方法は「サブ関数」を選択するのが魅力的です。最後のマルチプレクサ。
論理演算を処理する1つの優れたアプローチは、2つのオペランドのビットを4入力マルチプレクサへのセレクタ入力として機能させ、マルチプレクサの「データ」入力に目的の演算に対応する4ビットパターン(通常、 8ビットALUの場合、8つのマルチプレクサーがあり(各ビットに1つ)、8つのマルチプレクサーすべての「データ」入力が結合されます)。