ブール式を実現するために必要なNAND / NORゲートの最小数の決定


9

NANDまたはNORゲートの最小数を決定するためのアルゴリズムはありますか

  1. 与えられた数の入力
  2. 補完された入力の可用性/利用不可

ブール式を実現するために必要ですか?最小限のKarnaughマップを介して、AND-OR形式を主要な含意者として取得できます(私が知る限り、Quine-McCluskeyアルゴリズムはそれらを決定論的に取得します)。同様の手法がNANDまたはNOR実装にも存在しますか?少なくとも、このような手法では、実際の図を見つけなくても、NAND / NORゲートの必要な最小数を決定する必要がありますか?

主要な含意者にドモルガンの法則を適用することは、決定論的ではないようです。

A ⊕ B = A'B + AB' = ((A'B)'(AB')')' [5 NAND gates]
A ⊕ B = (AB + A'B')' = ((ABAB+ABB') + (A'AB+A'B'))' = (AB(AB+B') + A'(AB+B'))' = ((AB+A')(AB+B'))' = (((AB)'A)'((AB)'B)')' [4 NAND gates by reusing (AB)']

これは2ステージまたはマルチステージの実装ですか?
Fizz、

@RespawnedFluffマルチレベル実装の目的はゲート数を最小限に抑えることであるため、最小のNAND / NOR実装もマルチレベルにする必要があります。
Samik

K-mapでは、マルチレベルの最適化の結果は最小限ではありません。
Fizz

回答:


10

整数計画問題(または同等のもの、以下を参照)を解くことによって、マルチレベルネットワークのゲートの最小数を見つけることができます。この問題はNP完全であるため、ダースゲート程度までしか解くことができません。

最小数を与えないが、必要な時間の点で扱いやすい近似方法が存在します...これらは、それ自体が広大なトピックであり、基本的にマルチレベル最適化の全分野です。ここで [無料]の概要を読むことができます

NANDの小さなネットワーク(最大4つの変数)の場合、問題は完全な列挙(または同等の方法)によって完全に解決されました。エリザベス・アン・アーンストによるかなり最近の[2009] 博士論文があり、古代の結果を要約して拡張しています。Ernstはブランチアンドバウンドを使用します。これは実際には徹底的な方法を改善しますが、漸近的にはしません。彼女はまた、整数プログラミングやCSP(制約充足、SATを介して解決される)のような他の暗黙的な列挙方法は実際にはパフォーマンスが悪いことにも言及しています。

彼女は明らかに自分の方法のためにいくつかのソフトウェア(BESSと呼ばれる)を書きましたが、それがどこかで公に利用可能かどうかはわかりません。彼女の論文の全文はumichで無料で入手できます。そして実際に、2入力xorの最小式(明らかに2番目の式)が見つかりました。

ここに画像の説明を入力してください

彼女はまた、正確な結果(NANDの場合)をABCのヒューリスティックオプティマイザによって生成された結果と比較しました。

ABCは、最適なネットワークが知られている4,043の機能のうち340に対して最適なネットワークを生成することができました。ABCが最適なネットワークを生成しなかった関数の場合、最適なネットワークよりも平均で36%大きくなりました[。]

(明らかに)BESSが完了しなかったが、(検索が放棄された時点で)上限を見つけることを許可したいくつかの[大きい]ネットワーク。以下の2番目のグラフからわかるように、ABCは非常にうまく機能しました(検出された境界に関しては良好です)。

ここに画像の説明を入力してください


興味があれば、xorの問題でABCを試してみましたが、少なくともresyn2スクリプトでは5ゲートが得られます。したがって、ロジックフライデー(misIIを使用)に勝るものはありません。
Fizz、

基本的に事前計算された最適な実装などのための機能を大量に調べることをABCのためのスクリプトおよびデータベースが存在arxiv.org/pdf/1108.3675.pdf私は1つが、それが動作しても、ハードワークだったと試していないが他の場所で行われます。
Fizz

私はあなたが提供した資料を調べていますが、それらは非常に興味深く見えますが、私はそれらを理解するのに苦労しています。それらを適切に理解したら、おそらく賞金を授与するでしょう。それまでの間、賛成票を投じてください。
Samik

1

おそらくもっと良いテクニックがあるでしょうが、暗黒時代に戻ったとき、私はカーナウマップがうまく機能することを発見しました


Karnaughマップから取得したAND-OR実装から最小のNAND / NOR実装に進む方法について、それらの「暗黒時代」にいくつかの光を当てていただけませんか?
Samik

1

NANDに続くNANDは、ANDに続くORと同等です。

NORに続くNORは、ORに続くANDと同等です。

NANDの後にNORが続く場合、ANDの後にANDが続くのと同等ですが、これはあまり意味がありません。NANDが後に続くNORは、ORが後に続くORと同様に同等です。

一般的なケースでは、大量の入力に関する問題の最小の解決策を見つけるための実行可能な方法があるとは思えません(明らかに、入力数が少ない場合は総当たりです)。Quine-McCluskyは2レベルのソリューションのみを確認し(最小の2レベルのソリューションは多くの場合、全体的な最小ソリューションではありません)、複雑な真理値表と多数の入力があると、計算上実行不可能になる可能性があります。


だからバブルシフトより良い方法はありませんか?
Samik

1

最良のアルゴリズムはEspressoアルゴリズムです。これはある程度FPGA合成に実装されています

Logic fridayは、使用できるソフトウェアの1つです。注:これにより、XORが5つのNANDゲートに削減されます。


しかし、EspressoはAND-OR実装も提供しますね。
Samik

1
Espressoは、[k-mapsとは異なり]大規模な入力(数式)に対して実行可能であるという意味でのみ「最適」ですが、すべての場合において最良/最小の式を提供するわけではありません。
Fizz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.