目次
前
次
論理演算での活用
論理演算は、Bool代数を基にした計算方法で
身の回りで考えると、湯を混ぜるときに出て
きます。
40℃の湯を2つの桶に別々に汲み置き、より大きな
桶に2つの桶の湯を入れても、40℃の湯のまま。
これが論理和という用語で扱うのが、論理演算。
2つの桶の体積が同じときには、湯を混ぜると
体積は2倍になります。
代数和という用語を使います。
論理演算の基本は、3通りあります。
- 論理否定(NOT)
- 論理積(AND)
- 論理和(OR)
マイクロコンピュータの内部では、論理否定を使わず
排他的論理和を利用して計算していることが多いです。
各論理演算の機能は、真理値表を使って表現されます。
論理否定(NOT)
1入力1出力で表現されます。
真理値表は、以下。
論理積(AND)
2入力1出力で表現します。
真理値表は、以下。
論理和(OR)
2入力1出力で表現します。
真理値表は、以下。
実際には、否定論理積(NAND)だけを用意しておき
組み合せて、論理否定、論理積、論理和、排他的
論理和を実現します。
否定論理積(NAND)の真理値表は、以下。
ここまでに出てきた内容を、spreadsheetで確認
してみます。
各論理演算は、IF関数を利用して記述できます。
- 論理積 D2 =IF((B2*C2)=1;1;0) or IF((B2*C2)=1,1,0)
- 論理和 E2 =IF((B2+C2)>0;1;0) or IF((B2+C2)>0,1,0)
- 否定論理積 F2 =IF(D2=1;0;1) or IF(D2=1,0,1)
- 否定論理和 G2 =IF(E2=1;0;1) or IF(E2=1,0,1)
否定論理積(NAND)を利用し、論理否定、論理積、論理和
排他的論理和を表現してみます。
NANDをIF関数で表現すると、以下。
=IF((B8*C8)=1;0;1) or IF((B8*C8)=1,0,1)
セルB8、C8の論理値での処理でワークシートを表現。
NANDからAND(論理積)を導出することは
単純に否定すればよいですがOR(論理和)
の導出には、次の二重否定を使います。
これを確認してみると、以下。(nA、nBはA、Bの否定)
入力A、Bに対して、最も右にある列の値が
ORになっていることがわかります。
ORには、排他的論理和もあるので、通常の
ORは、inclusive ORと呼ばれます。
排他的論理和は、exclusive ORと英単語で
表現すると、わかりやすいでしょう。
排他的論理和のIF関数による記述は、以下。
=IF((B8+C8)=1;1;0) or IF((B8+C8)=1,1,0)
排他的論理和の真理値表は、ワークシートでは
次のようになります。
論理演算を扱うとき、論理圧縮と呼ばれる作業が
必要になることがあります。
論理圧縮は、ICで実現する論理演算で使うゲート
数を減らす目的で使われます。ゲート数を減らす
ことで、消費電力が減る、高速動作につながると
いう長所をもちます。
論理圧縮で使う式は、以下。
3式の証明を、ワークシート上で実行してみます。
H列、J列は、入力Pの論理値と一致しています。
また、I列では、入力P、Qの論理和になってます。
D列からG列までは、H列からJ列に格納する
論理値を求めて、中間値を格納。
中間の論理値があるので、H列からJ列の計算式は
以下としておけます。
- H列 =IF((B14+F14)>0;1;0) or IF((B14+F14)>0,1,0)
- I列 =IF((C14+H14)>0;1;0) or IF((C14+H14)>0,1,0)
- J列 =IF((F14+G14)>0;1;0) or IF((F14+G14)>0,1,0)
中間の論理値を求めてあるので、論理和を
計算する式をIF関数を使って記述。
算術計算で、論理演算を実現するときには
IF関数を適用すると考えることが重要。
Bool代数だけの証明は、以下。
上の論理値を表現するP、Qは、複数の論理式の
出力になっているときには、通過するゲート数
を減らすことになります。
通過するゲート数が少ないと、その分、高速動作
になる可能性が出てくるので、論理圧縮は重要。
次の回路で、論理圧縮したとき、結果が妥当かを
判断してみます。
組み合わせ回路の内容を、AND、OR、INVERTERに
限定して、これまで使ったIF関数で処理します。
ANDは、3入力1出力で表現するので
IF((A3*B3*C3)=1;1;0)
として扱えばよいはず。
ワークシートで、どうなるのかを調べると、以下。
Bool代数での論理圧縮は、以下。
目次
前
次