74181 がそのように動作する理由がわかりません。論理機能(AND、NAND、OR、NOR、XOR、シフト)の完全なセットを提供しますが、その算術機能はそれほど明確ではありません。たとえば、A - B
と同じモードのA + B
。
設計方法に関する歴史的背景を教えてください。
コメント
- 良い質問ですが、'私たちチップハッカーユーザーの誰もが、データシートやウィキペディアにあるもの以外のTIの動機を知っているとは思いません。 en.wikipedia.org/wiki/74181
- @Jason:コメントありがとうございます。では、この質問に適した場所はどこですか?
- わからない… TIの営業担当者に確認してください。おそらく、1970年に74181に取り組んだ昔の人の1人と連絡を取ることができます' s。
回答
これは古い質問ですが、最近74181をリバースエンジニアリングし、なぜ機能があるのかを詳しく説明できます。
74181は4ビットのALUチップで、オペランドAとBに16個の論理関数と16個の算術関数を提供します。論理関数の多くは期待どおりです(AND、OR、 XOR)ですが、A OR NOTBのような珍しいものもあります。算術関数はさらに奇妙です。 A PLUSBとAMINUS Bがありますが、(A OR B)PLUS(A AND NOT B)などのいくつかはかなりランダムに見えます。
この一連の操作には実際には理由があります。論理関数は16個すべてのブール関数f(A、B)を提供します。算術関数はすべてA PLUS f(A、B)PLUSキャリーインに要約されます。
16個ある理由を確認するために戻ってください。関数。1ビット入力にブール関数f(A、B)がある場合、真理テーブルには4つの行があります。各行は0または1を出力できます。したがって、2 ^ 4 = 16の可能な関数があります。これらを拡張します。 〜4ビットであり、これらは74181の16の論理関数であり、些細な0と1から、A AND Bのような予想される論理、NOT A ANDBのような不自然な演算までです。
算術関数は単にこれらです。キャリーインが追加された16個の関数がAに追加されました。たとえば、f(A、B)= Bの場合、A PLUS B PLUSキャリーインが得られます。f(A、B)= NOT Bの場合、APLUSが得られます。 NOT B PLUSキャリーイン、2 “s-complementロジックで、A MINUS B MINUS 1PLUSキャリーインになります。
その他の算術関数fu nctionsはもう少し分析が必要です。 f(A、B)= NOT(A OR B)と仮定します。その場合、Aが0でBが1の場合を除いて、A PLUS f(A、B)の各ビットは常に1になります。したがって、結果はA OR NOT Bになります。加算を行っても、結果は論理関数。他の奇妙な算術関数も同様に説明できます。
A PLUS Aは左シフトを提供しますが、74181で右シフトを実行する方法はありません。
その実装では、74181には16個のf(A、B)関数のどれを使用するかを選択する4つの選択行があります。チップの回路の前半は、f(A、B)を使用してAの4つの1ビット合計を計算します(具体的には、キャリー先見。これにより、74181はリップルキャリーを使用するのではなく、並列に動作します。)チップの回路の後半では、すべてのキャリーが並列に生成され、最終的な合計が計算されます。
内部的には、論理関数は、Mラインによってすべて強制的にハイにされた内部キャリーで加算を実行することによって実装されます。すべてのキャリーでA PLUS f(A、B)。これでも16個の一意の論理関数が生成されることは簡単です。ただし、順序が変わります。そのため、データシートを見ると、論理関数と算術関数の間に明確な関係がありません。
74181の内部を理解したい場合は、最初に2年前に発売された 7483 の4ビット加算器を見てください。キャリー計算手法は同じですが、32ではなく1つの関数を提供するため、理解が簡単です。74181は、7483の一般化と考えることができます。
回答
A minus B minus 1
は減算に使用され、キャリーフラグの補数はボローフラグと見なすことができます。
コメント
- 実際、AVRでさえこれを使用します-簡単に相互に変換できるため、即時加算命令はありません(即時減算のみ)。両方の値がレジスタからのものである場合その後、両方のsu bとaddは素晴らしく高速ですが、厳密には必要ありません。
- はい、 stackoverflow.com/questions/1337831/