手作業で論理回路の設計を行う場合、目的とする論理回路の入力信号と出力信号を真理値表で表し、その真理値表を基に出力信号を実現する論理回路を作成することが一般的です。真理値表と同じ機能を持つ論理式は、主加法標準形または主乗法標準形で表すことができます。
主加法標準形と主情報標準形は、真理値表の出力信号の値に着目して論理式を表現する点は同じですが、着目する値が異なります。主加法標準形は、真理値表の出力が1の部分に着目し、主乗法標準形は、真理値表の出力が0の部分に着目します。
表1は、2入力XORゲートの真理値表です。
入力 | 出力 | |
---|---|---|
A | B | Z |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
表1の出力Z=1の部分に着目し、主加法標準形で表した2入力XORゲートの論理式が(1)です。
$$Z = A\overline{B} + \overline{A}B \ \ \ \ \ \text{(1)}$$表1の出力Z=0の部分に着目し、主乗法標準形で表した2入力XORゲートの論理式が(2)です。
$$Z= (A + B)(\overline{A} + \overline{B}) \ \ \ \ \ \text{(2)}$$
ある真理値表から作成した主加法標準形の論理式と主乗法標準形の論理式は、一見全く異なる論理式に見えることがありますが、ブール代数を利用して変形すると、最終的に同じ論理式になります。
主乗法標準形の式(2)を展開すると、主加法標準形の式(1)と一致することがわかります。
\begin{equation}
\begin{split}
Z
&= (A + B)(\overline{A} + \overline{B})\\
&= A\overline{A} + A\overline{B} + B\overline{A} + B\overline{B} \\
&= A\overline{B} + \overline{A}B\ \ \ \ \ \text{(3)}
\end{split}
\end{equation}
真理値表から直接加法標準形や主乗法標準形で求めた論理式は、冗長な論理が含まれている場合があります。このような冗長な論理を削減して、論理圧縮を行うために利用する図がカルノー図とベイチ図です。冗長な回路を削減して論理式を最適化することで、必要最低限の論理ゲートで目的とする論理回路を実現できます。
尚、HDL設計では、このような最適化は論理合成ツールが自動的に行ってくれるため、 コーディング時にあまり意識することはありません。特殊な場合を除いて、HDLコードの人間の可読性を優先してHDLレベルの論理の最適化を行わないことが一般的です。