2:1 MUXだけを使用して次の関数をどのように実装しますか?


8

ブール関数を実装する方法を理解するのに苦労しています。特に、2:1のマルチプレクサと変数Dのみを残差変数として使用する可能性があるためです。

関数は次のとおりです。

FBCDE=Σ67121314152223242526日27日2829日3031

真理値表を作成し、カーノーマップを使用して、関数を次のように最小化しました。

FBCDE=B+BC+CDE¯+CDE

また、A、B、C、Eをセレクターとして、Dを残差変数として16:1 MUXを設計することもできました。

マルチプレクサの仕組みを理解し、既存の実装から真理値表を完全に導き出すことができますが、真理値表、カルノーマップ、および最小化されたSOP関数を取得し、2:1のみを使用して関数を実装する方法を理解していません。残差変数としてのMUXおよびD。

見ればいいのですが、正直な回答を求めているわけではありません。私は説明、アルゴリズム、または自分で実装を思い付くのに役立つ本当に何かにもっと興味があります。

なぜそれがそうであるのか理解せずに、心でそれを実装する方法を学ぶだけでなく、関数と実装の間の接続を視覚化できるようになりたいです。

お時間をいただきありがとうございます!

編集:私は受け入れられた答えを理解し、それが正しい答えですが、2:1マルチプレクサのデータ行に次の入力のみを使用するように要求されました:論理0、論理1および変数D。変数A、 B、Cはセレクターラインとしてのみ使用してください。

以下に示すように、F(A、B、C、D)= AB + BC + CDのVKマップを作成し、そのマップを使用してF(A、B、C)のVKマップを導出しました。

ここに画像の説明を入力してください 編集:右側のマップの場合、ABC = 000の値は1ではなく0である必要があります。ノートブックからExcelにテーブルをコピーしたときの間違いです。

その後、次のmux実装を作成しました。

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

マルチプレクサのデザインは、電子書籍から取られました。実装は、それほど効率的ではありませんが、機能します。M(X、Y、Z)= XZ '+ YZの式を使用してマルチプレクサの出力を計算しました。右端のマルチプレクサの出力は次のとおりです。

MUバツ7=BC¯+DB¯C+BC

さらに別のKarnaughマップを使用すると、上記は、実装に必要な関数であるAB + BC + CDに簡略化されます。

MUXes自体のデザインは、電子書籍から借用したものです。この本では、MUXの左端のレベルのデータ入力は、図に見られるように番号が付けられており、ラベルはF(A、B、C)VKマップセルに相当する10進数を表します。たとえば、セル101(5のバイナリ)を見ると、そのセルの値は、実装内の対応するラベルが付いたMUX入力(この場合は「D」)の入力です。

データ入力ラインにその特定の順序(0、4、2、6、1、5、3、7)でラベルが付けられているのはなぜですか?


F(A、B、C、D、E)はA(B + C)+ CDに減少しませんか?
Tony Stewart Sunnyskyguy EE75 16

A = msbの場合、F = 00110 + 00111 + 011xx + 10110から11111は、このようにして始めましたか?
Tony Stewart Sunnyskyguy EE75 16

私の質問を読んでいただきありがとうございます。それはそれまでに減るでしょう。私は関数を最小化するために代数を使用していません。カルノーマップだけです。いずれにしても、関数自体は質問の最終目標ほど重要ではありません。技術的には、関数がどのように見えるかに関係なく、実装自体に興味があります。
user1969903

これはF = AB + BC + C Dに減少
jonk

回答:


8

それほど複雑ではありませんが、必要な方程式を正しく計算したと想定します(そこで大丈夫だと思います)。まず、2インチMUXの方程式を調べます。

M2BS=S¯+BS

これから、いくつかの有用な結果を得ることができます。

M20バツy=バツyM2バツ0y=バツy¯M2バツy0=バツM21バツy=バツ+y¯M2バツ1y=バツ+yM2バツy1=yM2バツyバツ=バツyM2バツyy=バツ+yM200バツ=0M201バツ=バツM210バツ=バツ¯M211バツ=1

したがって、次のようになります。

F=B+BC+CDバツ=B=M2By=BC=M2BCBz=CD=M2CDCF=バツ+y+zF=M2M2バツyyzz

つまり、(5)2インチのマルチプレクサが必要になります。

概略図

この回路のシミュレーションCircuitLabを使用して作成された回路

そこには素晴らしい対称性もあります。気づく?

追加:マルチプレクサデータ入力ソースとして0、1、またはDのみを使用できることについて質問しました。これは、A、B、C、およびDのすべてをマルチプレクサセレクターとして使用できることを意味していると思います。(それ以外の場合、結果は達成できないと思います。)したがって、これは、先に述べた他の有用な結果のいくつかを使用する必要があることを意味します。最も簡単なアイデアは、2つのマルチプレクサを3つ追加することです。

概略図

この回路をシミュレート

それをさらに最適化する方法があるかどうかはわかりません。私はすべての可能性を調べたわけではありません。

もう一度編集:はい!OPの新たに追加されたソリューションを使用して、次の2つが流出します。左側は質問の最初の部分に答え、右側は質問の2番目の部分に答えます。

概略図

この回路をシミュレート

もう一度編集する:順序は複雑ではありません。それらが属する文字を割り当てるだけです。著者は(A)を3ビットのバイナリ値の上位ビットであると見なしたため、次のいずれかを表します。022=0 または 122=4; (B)を3ビットのバイナリ値の中間ビットと見なしたため、次のいずれかを表します。021=0 または 121=2; (C)を3ビットのバイナリ値の下位ビットとするため、次のいずれかを表します。020=0 または 120=1。さまざまな視点が同じように機能します。しかし、それは彼らが選んだように見えるものです。

そのため、彼らは最初の(左)層から開始し、(A)によって制御される(4)マルチプレクサを配置し、それらのマルチプレクサをABC = "x00"、ABC = "x01"、ABC = "x10"として番号付けすることで精神的に便利なままでした。 、下の方はABC = "x11"です。

さて、一番上のABC = "x00"なので、これは "000" = 0または "100" = 4を受け入れることを意味します。そのため、そのmux(mux1)の「0」入力については、ABC = "000" = 0のテーブルを調べ、テーブルエントリをその「0」サイド入力に配置しました。そのマルチプレクサの「1」入力では、ABC = "100" = 4のテーブルを調べ、そのテーブルエントリを「1」サイド入力に配置しました。(この表は、以前の展開された列を確認することで確認できるように、ボックス内で0になっているため、ここでは正しくありません。)

次のマルチプレクサー(mux2)はABC = "x10"用であり、したがってABC = "010" = 2およびABC = "110" = 6が使用されます。次のマルチプレクサ(mux3)はABC = "x01"のため、ABC = "001" = 1およびABC = "101" = 5を使用します。最後に、最後のマルチプレクサ(mux4)はABC = "x11"のため、ABC = "011" = 3およびABC = "111" = 7を使用します。

mux1(ABC = "x00")とmux2(ABC = "x10")の両方が一緒にmux5に供給されます。ここで、Bは0または1の間の変動であることがわかります。そのため、ここでBが接続されています。mux5の出力はABC = "xy0"になります。最初の2ビットはすでにデコードされており、残っているのはC = 0の状況をデコードすることだけです。したがって、mux5の出力は、mux7の「0」入力に行きます。同様に、mux3(ABC = "x01")とmux4(ABC = "x11")は一緒にmux6に供給されます。Bもmux6が選択するバリエーションです。mux6の出力は常にC = 1の場合に関連し、それはmux7の「1」入力に供給されます。

残っているのは、mux7がC = 0とC = 1の間で選択することだけです。


私は、muxの公式を使って自分を導くことを考えたことはありません。時々、私は少し無知になることがあります。
user1969903 2016

@ user1969903:少し気を回すだけです。イライラしないでください。ただ座って遊んでみてください。あなたは何か面白いものを見つけるかもしれません。発見自体が一番の楽しみです。もちろん、これが私がここにいる理由です。私もあなたの問題から何かを学びました、そしてそれをいじることからの感覚を楽しみました。自分自身で、それに合わせて学習するだけです。それをあなたが解決したいパズルと考えてください。(パズルに
慣れ

あなたの答えを調べた後、私は時間をかけてマルチプレクサとのANDおよびORの式を導き出し、自分で関数を実装しました。私はそれがあなたが投稿したものとまったく同じだったが、上下を逆にしたことを知って嬉しかったです(私は最後の2つの入力を逆に接続しましたが、それでも正しいです)。あなたが少しそれをいじくり回したいならば、私はmux 2:1でだけ再び機能を実装する必要がありますが、今回はA、B、CまたはEを任意のデータラインの入力として使用することは許可されていませんマルチプレクサの。私は使用することができるだけのデータ入力が論理0、論理1及びD.ある
user1969903

@ user1969903:おそらく、それを現在の質問に追加するか(私からの返答が意味をなすようにするため)、または新しい質問を作成する必要があります。今のところ、害のないM()条件をいくつか追加します。
16

実は私はそれを理解しましたが、ここでそれを共有する方法がわからないのです。明日、作業が終わった後、元の質問を編集し、実装の私のバージョンを追加して、全員が見たり、間違っている場合は修正したりできるようにします。
user1969903 2016

3

2:1マルチプレクサには、インバータ、2つのANDゲート、およびORゲートが含まれています。適切な配線により、ANDゲート、ORゲート、インバーター、およびその他のいくつかの機能として使用できます。実際、FPGAの特定のファミリは、完全にこの概念に基づいています。

これは、2:1マルチプレクサを使用して任意の機能を実現するのに十分なヒントになるはずです。


2

2入力マルチプレクサには3つの入力(a、b、およびselect)があります。それらのいずれか2つを選択したときにそれが縮退するものを考慮し、もう1つを「0」または「1」に配線接続します。それらのいずれか2つを選択し、3つ目をそれらのいずれかに配線するとどうなるかを検討してください。基本的に、その3つの入力スペースを2つの入力スペースに縮退させる方法はたくさんあります。

それほど手の込んだことをせずに、マルチプレクサによって、デコードされた選択入力に対応する真理値表の行の出力値を明示的に設定できることを理解する必要があります。したがって、4入力マルチプレクサ(したがって2つの選択ビット)を使用すると、入力を適切に配線するだけで、任意の 2入力ブール関数を表すことができます。

さらに、ツリートポロジを作成して選択を適切に配線することにより、3つの2:1マルチプレクサーから4:1のマルチプレクサー、7つの2:1マルチプレクサーから8:1のマルチプレクサーを作成できることも明らかです。必要な入力数を得るのに十分な2:1マルチプレクサーを配置し、出力をペアでダウンストリームの2:1マルチプレクサーに流し込み、単一の出力が得られるようにし、選択した入力の配線方法を検討します。

32行の真理値表があっても16の最小項しかなく、サブツリー全体が無視できるようにグループ化されているため、非表示の変数を使用しても問題はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.