ブール代数では、任意のブール関数は、標準選言標準形( CDNF ) [ 1 ]最小項標準形、または最小項の選言 (OR) としての積和形( SoPまたはSOP )で表現できます。ド・モルガンの双対は、標準連言標準形( CCNF )、最大項標準形、または最大項の連言 (AND) である積和形( PoSまたはPOS )です。これらの形式は、ブール関数の簡略化に役立ち、これは一般的にブール式の最適化、特にデジタル回路の最適化において非常に重要です。
その他の標準形には、素インプリカントの完全和またはブレイク標準形(およびその双対)、および代数標準形 (ジェガルキンまたはリード・ミュラーとも呼ばれる)がある。
ブール関数の場合変数最小項は、各項が変数は、補数形式または非補数形式のいずれかで、ちょうど 1 回出現します。したがって、 mintermは、補数演算子と論理積演算子 (論理 AND ) のみを使用するn個の変数の論理式です。minterm は、入力変数の 1 つの組み合わせ、つまり最小の非自明な量に対してのみ真の値を返します。たとえば、a b ' cは、 aとc の両方が真でbが偽の場合にのみ真になります。入力の配置a = 1、b = 0、c = 1 の結果は 1 になります。
n個の変数には 2 n個の最小項があります。これは、最小項式の変数は直接形式または補数形式のいずれかになる可能性があるためです。つまり、変数ごとに 2 つの選択肢があります。最小項は、変数の補数パターンのバイナリ エンコーディングによって番号付けされることが多く、変数は通常、アルファベット順の標準的な順序で記述されます。この慣例では、直接形式 ()と0を補数形式()最小項は例えば、minterm番号は 110 2 = 6 10で、。
論理関数の真理値表が与えられた場合、その関数を「積和」または「最小項和」として記述することができます。これは、選言標準形の特殊な形式です。たとえば、加算器回路の1ビット位置の論理における算術和ビットuの真理値表が、加数と桁上げ入力ciからのxとyの関数として与えられた場合、次のようになります。
出力が 1 となる行が 2 番目、3 番目、5 番目、8 番目であることに注目すると、u を最小項の和として表すことができます。そしてこれを検証したい場合は、3つの変数の8つの組み合わせすべてについて評価すると、表と一致します。
n個の変数を持つブール関数の場合最大項とは、n 個の変数のそれぞれがちょうど 1 回だけ出現する和項です(補数形式または非補数形式のいずれか)。したがって、最大項は、補数演算子と論理和演算子 (論理 OR ) のみを使用するn 個の変数の論理式です。最大項は、ド・モルガンの法則の相補対称性に従って、最小項の考え方の双対です。ANDと補数を使用する代わりに、OR と補数を使用し、同様に進めます。最大項は、入力変数の 1 つの組み合わせに対してのみ偽の値を返すことは明らかです。つまり、最大数の可能性で真になります。たとえば、最大項a ′ + b + c ′は、 aとc の両方が真でbが偽の場合にのみ偽になります。入力の配置 a = 1、b = 0、c = 1 の結果は 0 になります。
最大項式では変数が直接形式または補数形式のいずれかになる可能性があるため、 n個の変数に対して 2 n 個の最大項が存在します。つまり、変数ごとに 2 つの選択肢があります。番号付けは、最小項の補数が対応する最大項になるように選択されています。つまり、各最大項には、最小項に使用される従来のバイナリ符号化とは逆のインデックスが割り当てられます。最大項の規則では、直接形式に値 0 が割り当てられます。そして補形に1つ例えば、最大項にインデックス6を割り当てます。(110) 最大項をM 6と表記する。補数は最小項ド・モルガンの法則を用いて。
論理関数の真理値表が与えられた場合、その関数を「和の積」または「最大項の積」として記述することができます。これは、連言標準形の特殊な形式です。たとえば、加算器回路の1ビット位置の論理における桁上げビットcoの真理値表が、加数と桁上げ入力ciのxとyの関数として与えられた場合、次のようになります。
出力が 0 になる行が 1 番目、2 番目、3 番目、5 番目であることに注目すると、co をmaxterms の積として表すことができます。そしてこれを検証したい場合は、
3つの変数の8つの組み合わせすべてについて評価すると、表と一致します。
多くの場合、標準的な最小項形式は、より小さな積項形式と等価です。このより小さな形式も積項の和で構成されますが、積項の数が少なく、または積項に含まれる変数の数が少なくなります。例えば、次の3変数関数が挙げられます。
標準的な最小項表現を持つしかし、同等のSoP形式が存在するこの些細な例では、、より小さい形式は、積項の数も各項内の変数の数も少なくなっています。この「最小」の概念に従って関数の最小SoP 表現は、最小 SoP 形式と呼ばれます。一般に、最小 SoP 形式は複数存在する可能性があり、どれも他の形式より明らかに小さい、または大きいということはありません。[ 2 ]同様に、標準的な最大項形式は、さまざまな最小 PoS 形式に縮小できます。
この例は通常の代数的手法を適用することで簡略化されましたが[]、それほど明白でないケースでは、最大 4 つの変数を持つ関数の最小 PoS/SoP 形式を見つける便利な方法は、カルノー図を使用することです。クワイン-マクラスキー アルゴリズムは、もう少し大きな問題を解決できます。論理最適化の分野は、最小 PoS 形式や SoP 形式などのブール関数の最適な実装を見つける問題から発展しました。
上記の minterms と maxterms の真理値表の例は、2 進数の加算における単一ビット位置の標準形式を確立するには十分ですが、ゲートの在庫に AND と OR が含まれていない限り、デジタル ロジックを設計するには不十分です。パフォーマンスが問題となる場合 (アポロ誘導コンピュータのように)、トランジスタ ロジックに固有の相補動作のため、使用可能な部品は NAND と NOR である可能性が高くなります。値は電圧状態として定義され、1 つはグランド付近、もう 1 つは DC 電源電圧 V cc付近(例: +5 VDC) です。より高い電圧が 1 の「真」値として定義される場合、NOR ゲートは可能な限り最も単純な有用な論理要素です。
具体的には、3入力NORゲートは、エミッタがすべて接地され、コレクタが負荷インピーダンスを介してVccに接続された3つのバイポーラ接合トランジスタで構成される。各ベースは入力信号に接続され、共通のコレクタ点が出力信号となる。ベースへの入力が1(高電圧)の場合、トランジスタのエミッタとコレクタが短絡され、負荷インピーダンスを介して電流が流れ、コレクタ電圧(出力)が接地電圧に非常に近くなる。この結果は他の入力とは無関係である。3つの入力信号すべてが0(低電圧)の場合にのみ、3つのトランジスタすべてのエミッタ・コレクタインピーダンスが非常に高くなる。この場合、電流はほとんど流れず、負荷インピーダンスによる分圧効果により、コレクタ点にVccに非常に近い高電圧がかかる。
これらのゲート回路の相補性は、関数を標準形式で実装しようとする際には欠点のように思えるかもしれないが、それを補う利点がある。それは、入力が1つだけのゲートでも相補関数を実装できることであり、これはデジタル論理回路で頻繁に必要とされる。
この例では、アポロ計画で使用された部品構成、すなわち3入力NORゲートのみを想定していますが、4入力NORゲートも利用可能であると仮定することで議論を簡略化しています(アポロ計画では、4入力NORゲートは3入力NORゲートのペアから構成されていました)。
8個のNORゲートのセットは、入力が3つの入力変数ci、x、 yの直接形式と補数形式の組み合わせである場合、常に最小項を生成し、最大項を生成することはありません。つまり、3つの入力変数のすべての組み合わせを処理するために必要な8つのゲートのうち、出力値が1になるのは1つだけです。これは、NORゲートはその名前にもかかわらず、(ド・モルガンの法則を用いて)入力信号の補数のANDとして見なす方が適切であるためです。
これが問題にならない理由は、最小項と最大項の双対性、つまり各最大項が同じインデックスの最小項の補数であり、その逆もまた然りであるからです。
上記のmintermの例では、次のように書きました。しかし、これを4入力NORゲートで実行するには、和の積(PoS)として再表現する必要があります。ここで、和は反対の最大項です。つまり、
上記のmaxtermの例では、次のように書きました。しかし、これを4入力NORゲートで実行するには、同じ最小項のNORとの等価性に注意する必要があります。つまり、
加算器ステージの設計作業はこれで完了したと思われるかもしれませんが、入力変数 3 つすべてが直接形式と補数形式の両方で現れる必要があるという事実に対処していません。加数xとyについては、加算全体を通して静的であるため、通常は直接出力と補数出力の両方を持つラッチ回路に保持されるため、この点で困難はありません。(NOR ゲートで構成される最も単純なラッチ回路は、フリップフロップを構成するために相互に結合された一対のゲートです。それぞれの出力は、もう一方の入力の 1 つとして配線されます。)また、和uの補数形式を作成する必要もありません。ただし、あるビット位置からのキャリー出力は、直接形式と補数形式の両方で次のビット位置へのキャリーとして渡されなければなりません。これを行う最も簡単な方法は、co を1 入力 NOR ゲートに通して出力をco ′とすることですが、これは最悪の場所にゲート遅延を追加し、右から左へのキャリーの波及を遅くします。co ′の標準形 ( coと反対の最小項から構成される)を構築する追加の 4 入力 NOR ゲートにより、この問題が解決されます。
このようにフルスピードを維持するためのトレードオフには、予期せぬコスト(より大きなゲートを使用する必要があることに加えて)が含まれます。もしその1入力ゲートをcoの補数にのみ使用していたならば、mintermは必要なかったでしょう。そして、その原因となったゲートは排除できたはずだ。とはいえ、それでも良い取引であることに変わりはない。
NORゲートを指定された関数に変換することで、SoPとPoSの標準形式に厳密に従ってこれらの関数を実装することも可能でした。NORゲートの出力を1入力NORゲートに通すことでORゲートになり、各入力を1入力NORゲートに通すことでANDゲートになります。しかし、この方法では使用するゲートの数が増えるだけでなく、信号処理におけるゲート遅延も2倍になり、処理速度が半分になってしまいます。したがって、パフォーマンスが重要な場合は、標準形式を超えてブール代数演算を行い、拡張されていないNORゲートで目的の処理を行う方がはるかに価値があります。
ここまで、minterm/maxtermツールを使用して、ブール代数を追加した標準形式の加算器ステージを設計する方法を見てきました。各出力のコストはわずか2ゲート遅延です。これは、この機能のデジタル回路を設計する「トップダウン」方式ですが、これが最善の方法でしょうか?議論は「最速」を「最良」とすることに重点が置かれてきましたが、拡張標準形式はその基準を完全に満たしています。しかし、他の要素が優先される場合もあります。設計者の主な目標は、ゲート数を最小限に抑えること、および/または他のゲートへの信号のファンアウトを最小限に抑えることかもしれません。ファンアウトが大きいと、電源の劣化やその他の環境要因に対する耐性が低下するためです。このような場合、設計者は標準形式の設計をベースラインとして開発し、次にボトムアップ方式で開発を試み、最後に結果を比較することができます。
ボトムアップ開発では、 u = ci XOR ( x XOR y ) であることに注目します。ここで、XOR は排他的 OR [どちらかの入力が真の場合に真、両方が真の場合には偽] を意味し、co = ci x + xy + y ciです。このような開発では、合計 12 個の NOR ゲートが必要です。6 個の 2 入力ゲートと 2 個の 1 入力ゲートでu を5 ゲート遅延で生成し、3 個の 2 入力ゲートと 1 個の 3 入力ゲートでco ′ を2 ゲート遅延で生成します。標準的なベースラインでは、8 個の 3 入力 NOR ゲートと 3 個の 4 入力 NOR ゲートでu、co、co ′ を2 ゲート遅延で生成します。回路構成に実際に 4 入力 NOR ゲートが含まれている場合、トップダウンの標準的な設計は、ゲート数と速度の両方で優れているように見えます。しかし、(我々の都合の良い仮定に反して)回路が実際には3入力NORゲートであり、4入力NOR関数ごとに2つの3入力NORゲートが必要な場合、標準的な設計ではボトムアップ方式の12ゲートに対して14ゲートが必要になりますが、それでも合計桁uをかなり高速に生成します。ファンアウトの比較は、次の表にまとめられています。
ボトムアップ開発の説明では、出力としてco ′は言及されていますが、 co は言及されていません。この設計では、キャリー出力の直接形式がまったく必要ないということでしょうか?答えはイエスでもありノーでもあります。各段階で、co ′の計算はci ′、x ′、y ′のみに依存するため、キャリーの伝播は、co を生成することなく、標準的な設計と同じ速さでビット位置に沿って波及します。1 入力 NOR によってci ′からciを生成する必要があるuの計算は遅くなりますが、ワード長に関係なく、この設計ではそのペナルティを 1 回だけ支払います (最左端の合計桁が生成されるとき)。これは、これらの計算が重複しており、それぞれが独自の小さなパイプラインとして機能し、次のビット位置の合計ビットをいつ計算できるかに影響を与えないためです。そして、確かに、最左端のビット位置から出力されるco ′は、加算がオーバーフローしたかどうかを判断するロジックの一部として、おそらく反転される必要があります。しかし、3入力NORゲートを使用したボトムアップ設計は、非自明なワード長での並列加算においてほぼ同等の速度を実現し、ゲート数を削減し、ファンアウトも低減します。したがって、ゲート数やファンアウトが最優先事項である場合は、ボトムアップ設計が優れています。
これらの記述がすべて正しいボトムアップ設計の正確な回路は、もう1つの代数式u = ci ( x XOR y ) + ci ′ ( x XOR y ) ′ ] ′を用いて、興味のある読者の演習として残しておきます。このようにキャリー伝播を和の形成から分離することで、キャリー先読み加算器の性能がリップルキャリー加算器の性能よりも向上します。
ブール代数の応用例の一つにデジタル回路設計があり、その目的の一つはゲート数を最小限に抑えること、もう一つはセトリング時間を最小限に抑えることである。
2つの変数には16通りの関数が存在するが、デジタル論理ハードウェアでは、最も単純なゲート回路で実装されるのは、論理積(AND)、論理和(ORを含む)、およびそれらの補数(NANDとNOR)の4つだけである。
ほとんどのゲート回路は2つ以上の入力変数を受け入れます。例えば、1960年代に集積回路の応用を先駆けた宇宙船アポロ誘導コンピュータは、3入力NORゲートという1種類のゲートのみで構築されており、その出力は3つの入力すべてが偽の場合にのみ真となります。[ 3 ] [ 4 ]
アポロ誘導コンピュータのALUでNORゲートロジックがどのように使用されているかを確認するには、図面索引の4ビットモジュールエントリのいずれかを選択し、必要に応じて画像を拡大してください。
著者らは、任意のブール(論理)関数は選言形式または連言形式のいずれかの標準形で表現できることを証明しています(5~6ページ参照)。この証明は、N
個
のブール変数からなる
2N
行すべてを作成し、各行(「最小項」または「最大項」)が一意のブール式を持つことを示すことで進められます。N個
の変数の任意のブール関数は、
最小項または最大項が論理値1(「真」)である行の合成から導き出すことができます。
標準表現が定義され、説明されている。
指定