Wie implementieren Sie die folgende Funktion nur mit 2: 1 MUX?

Ich habe Schwierigkeiten zu verstehen, wie boolesche Funktionen implementiert werden, insbesondere da ich nur 2: 1-Muxes und die Variable D als Restvariable verwenden darf.

Die Funktion ist wie folgt:

F ( EIN , B , C , D , E ) = ( 6 , 7 , 12 , 13 , 14 , fünfzehn , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 )

Ich habe die Wahrheitstabelle erstellt und mithilfe einer Karnaugh-Karte die Funktion so minimiert:

F ( EIN , B , C , D , E ) = EIN B + B C + C D E ¯ + C D E

Ich habe es auch geschafft, einen 16: 1-MUX mit A, B, C und E als Selektor und D als Restvariable zu entwerfen.

Ich verstehe, wie ein Multiplexer funktioniert, und ich bin voll und ganz in der Lage, eine Wahrheitstabelle aus einer vorhandenen Implementierung abzuleiten, aber ich verstehe einfach nicht, wie man die Wahrheitstabelle, die Karnaugh-Karte und die minimierte SOP-Funktion nimmt und die Funktion nur mit 2:1 implementiert MUX und D als Restvariable.

Ich frage nicht unbedingt nach der direkten Antwort, obwohl es schön wäre, sie zu sehen. Ich interessiere mich mehr für eine Erklärung, einen Algorithmus oder wirklich alles, was mir helfen kann, selbst auf die Implementierung zu kommen.

Ich möchte den Zusammenhang zwischen der Funktion und der Implementierung visualisieren können und nicht nur auswendig lernen, wie man es implementiert, ohne zu verstehen, warum es so ist, wie es ist.

Vielen Dank für Ihre Zeit!

Bearbeiten: Während ich die akzeptierte Antwort verstanden habe und es die richtige Antwort ist, musste ich dann nur die folgenden Eingänge für die Datenleitungen meiner 2: 1-Muxe verwenden: logisch 0, logisch 1 und die Variable D. Die Variablen A, B, C sollten nur als Auswahlleitungen verwendet werden.

Ich habe die VK-Karte für F(A, B, C, D) = AB + BC + CD erstellt und diese Karte dann verwendet, um eine VK-Karte für F(A, B, C) abzuleiten, wie unten zu sehen ist.

Geben Sie hier die Bildbeschreibung einBearbeiten: Für die Karte rechts sollte der Wert für ABC = 000 0 sein, nicht 1. Ein Fehler, den ich gemacht habe, als ich die Tabelle von meinem Notizbuch in Excel kopiert habe.

Danach habe ich folgende Mux-Implementierung erstellt:

Geben Sie hier die Bildbeschreibung ein

Das Mux-Design wurde aus einem Elektronikbuch entnommen. Die Implementierung funktioniert, obwohl nicht besonders effizient. Ich habe die Ausgabe der Muxes mit der Formel M (X, Y, Z) = XZ '+ YZ berechnet und die Ausgabe des Mux ganz rechts ist:

M U X 7 = EIN B C ¯ + D B ¯ C + B C

Unter Verwendung einer weiteren Karnaugh-Karte vereinfacht sich das Obige zu AB + BC + CD, was die Funktion ist, die ich implementieren musste.

Das Design der MUXes selbst ist einem Elektronikbuch entlehnt. In dem Buch wurden die Dateneingänge der MUX-Ebene ganz links nummeriert, wie in meinem Diagramm zu sehen ist, und die Beschriftungen stellen das dezimale Äquivalent der F(A, B, C)-VK-Kartenzellen dar. Wenn Sie sich beispielsweise die Zelle 101 (binär für 5) ansehen, dann ist der Wert in dieser Zelle die Eingabe für den entsprechend gekennzeichneten MUX-Eingang in der Implementierung, in diesem Fall „D“.

Kann jemand sagen, warum die Dateneingabezeilen in dieser bestimmten Reihenfolge (0, 4, 2, 6, 1, 5, 3, 7) gekennzeichnet sind?

reduziert sich F(A,B,C,D,E) nicht auf A(B+C)+CD?
für A=msb, F=00110+00111+011xx+10110 bis 11111 hast du so angefangen?
Vielen Dank, dass Sie sich die Zeit genommen haben, meine Frage zu lesen. Es kann sich sehr gut darauf reduzieren. Ich habe keine Algebra verwendet, um die Funktion zu minimieren, nur die Karnaugh-Karte. In jedem Fall ist die Funktion selbst nicht so relevant wie das Endziel der Frage. Technisch interessiert mich die Implementierung selbst, unabhängig davon, wie die Funktion aussieht.
Es reduziert sich auf F = AB + BC + C D.

Antworten (3)

Es ist nicht zu komplex, denke ich, vorausgesetzt, Sie haben die gewünschte Gleichung richtig ausgearbeitet (ich gehe davon aus, dass Sie dort alles richtig gemacht haben). Betrachten Sie zunächst die Gleichung für einen 2-in-MUX:

M 2 ( EIN , B , S ) = EIN S ¯ + B S

Daraus können Sie einige nützliche Ergebnisse ableiten:

M 2 ( 0 , x , j ) = x j M 2 ( x , 0 , j ) = x j ¯ M 2 ( x , j , 0 ) = x M 2 ( 1 , x , j ) = x + j ¯ M 2 ( x , 1 , j ) = x + j M 2 ( x , j , 1 ) = j M 2 ( x , j , x ) = x j M 2 ( x , j , j ) = x + j M 2 ( 0 , 0 , x ) = 0 M 2 ( 0 , 1 , x ) = x M 2 ( 1 , 0 , x ) = x ¯ M 2 ( 1 , 1 , x ) = 1

Daraus folgt also:

F = EIN B + B C + C D x = EIN B = M 2 ( EIN , B , EIN ) j = B C = M 2 ( B , C , B ) z = C D = M 2 ( C , D , C ) F = x + j + z F = M 2 ( M 2 ( x , j , j ) , z , z )

Kurz gesagt, Sie benötigen (5) 2-in-Muxe:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Es gibt auch eine schöne Symmetrie. Bemerke es?

HINZUGEFÜGT: Sie haben gefragt, ob Sie nur 0, 1 oder D als Mux-Dateneingangsquelle verwenden können. Ich gehe davon aus, dass Sie damit meinen, dass alle A, B, C und D als Mux-Selektoren verwendet werden können. (Andernfalls glaube ich nicht, dass das Ergebnis erreicht werden kann.) Das bedeutet also nur, dass Sie einige der anderen nützlichen Ergebnisse verwenden müssen, die ich zuvor erwähnt habe. Die einfachste Idee wäre, einfach drei weitere 2-in-Muxes hinzuzufügen:

schematisch

Simulieren Sie diese Schaltung

Ich bin mir nicht sicher, ob es eine Möglichkeit gibt, es weiter zu optimieren. Ich habe nicht alle Möglichkeiten geprüft.

NOCHMAL EDITIEREN: Ja! Unter Verwendung der neu hinzugefügten Lösung des OP fließen die folgenden beiden einfach heraus. Der Linke beantwortet seinen ersten Teil der Frage, der Rechte seinen zweiten Teil.

schematisch

Simulieren Sie diese Schaltung

WIEDER WIEDER BEARBEITEN: Die Bestellung ist nicht kompliziert. Es geht nur darum, die Buchstaben dort zuzuordnen, wo sie hingehören. Der Autor nahm an, dass (A) das höherwertige Bit eines Drei-Bit-Binärwerts ist, also repräsentiert es beides 0 2 2 = 0 oder 1 2 2 = 4 ; nahm (B) als das mittlere Bit eines 3-Bit-Binärwerts an, also repräsentiert es beides 0 2 1 = 0 oder 1 2 1 = 2 ; und nahm (C) als niederwertiges Bit eines 3-Bit-Binärwerts, also repräsentiert es beides 0 2 0 = 0 oder 1 2 0 = 1 . Eine Vielzahl unterschiedlicher Perspektiven würde gleichermaßen gut funktionieren. Aber das scheinen sie gewählt zu haben.

Also begannen sie jetzt mit der ersten (linken) Ebene, legten (4) Muxes an, die von (A) gesteuert wurden, und blieben mental bequem, indem sie diese Muxes als ABC = "x00", ABC = "x01", ABC = "x10" nummerierten. , und für das untere ABC="x11".

Nun, da für die obere, ABC="x00", bedeutet dies, dass entweder "000" = 0 oder "100" = 4 akzeptiert wird. Für den "0"-Eingang dieses Mux (mux1) haben sie also in der Tabelle nach ABC="000"=0 gesucht und den Tabelleneintrag in seinen "0"-Seiteneingang eingefügt. Für den "1"-Eingang dieses Mux suchten sie in der Tabelle nach ABC="100"=4 und platzierten diesen Tabelleneintrag in seinem "1"-Seiteneingang. (Diese Tabelle sieht hier falsch aus, da in diesem Feld eine 0 stehen sollte, was durch einen Blick auf die früheren erweiterten Spalten bestätigt wird.)

Der nächste Mux nach unten (mux2) ist für ABC="x10" und verwendet daher ABC="010"=2 und ABC="110"=6; der nächste Mux nach unten (mux3) ist für ABC="x01" und verwendet daher ABC="001"=1 und ABC="101"=5; und schließlich ist der letzte Mux (mux4) für ABC = "x11" und wird daher für ABC = "011" = 3 und ABC = "111" = 7 verwendet.

Sowohl mux1 (ABC="x00") als auch mux2 (ABC="x10") werden gemeinsam mux5 zugeführt. Sie können hier sehen, dass B die Variation zwischen diesen ist, 0 oder 1, also haben sie sie hier so angeschlossen. Die Ausgabe von mux5 ist ABC="xy0", wobei die ersten beiden Bits bereits dekodiert wurden und alles, was bleibt, ist, die C=0-Situation zu dekodieren. Der Ausgang von mux5 geht also an den Eingang "0" von mux7. In ähnlicher Weise werden mux3 (ABC="x01") und mux4 (ABC="x11") gemeinsam mux6 zugeführt. B ist wieder die Variation, zwischen der mux6 auswählt. Der Ausgang von mux6 bezieht sich immer auf den Fall C = 1 und wird in den Eingang "1" von mux7 eingespeist.

Alles, was bleibt, ist, dass mux7 zwischen C = 0 und C = 1 wählt.

Ich gebe zu, ich habe nie daran gedacht, die Formeln für den Mux zu verwenden, um mich zu führen. Ich kann manchmal ein wenig ignorant sein, nehme ich an.
@user1969903: Es geht nur darum, deine Gedanken ein wenig schweifen zu lassen. Lassen Sie sich nicht verwirren. Lehnen Sie sich einfach zurück und spielen Sie herum. Vielleicht finden Sie etwas Interessantes. Die Entdeckung selbst macht am meisten Spaß. Das ist natürlich der Grund, warum ich überhaupt hier bin und antworte. Ich habe auch etwas aus Ihrem Problem gelernt und es hat mir Spaß gemacht, damit zu spielen. Lerne einfach selbst damit umzugehen. Betrachten Sie es als ein Rätsel, das Sie lösen möchten. (Wenn Sie nicht auf Rätsel stehen, sind Sie möglicherweise im falschen Bereich.)
Nachdem ich Ihre Antwort studiert hatte, nahm ich mir die Zeit, die Formel für UND und ODER mit einem Mux abzuleiten, und implementierte die Funktion selbst. Ich war erfreut zu sehen, dass es genau so war, wie Sie es gepostet haben, aber auf den Kopf gestellt (ich habe die letzten beiden Eingänge umgekehrt angeschlossen, aber es ist immer noch richtig). Falls Sie noch ein wenig damit herumspielen wollen, ich bin nun aufgefordert, die Funktion wieder nur mit Mux 2:1 zu implementieren, aber diesmal darf ich A, B, C oder E nicht als Eingänge für beliebige Datenleitungen für beliebige verwenden der Muxen. Die einzigen Dateneingänge, die ich verwenden darf, sind logisch 0, logisch 1 und D.
@ user1969903: Wahrscheinlich sollten Sie das entweder zu Ihrer aktuellen Frage hinzufügen (damit eine Antwort von mir sinnvoller wäre) oder eine neue Frage erstellen. Fürs Erste füge ich noch ein paar M()-Bedingungen hinzu, was nicht schaden wird.
Nun, eigentlich habe ich es herausgefunden, aber ich bin mir nicht sicher, wie ich es hier teilen würde. Morgen, nachdem ich mit der Arbeit fertig bin, werde ich die ursprüngliche Frage bearbeiten und meine Version der Implementierung hinzufügen, damit jeder sie sehen und auch korrigieren kann, wenn sie falsch ist.
Ich mag Ihre Lösung für meine zweite Anforderung. Würden Sie die Unterschiede zwischen meinem Ansatz (basierend auf einem Elektronikbuch eines Professors einer örtlichen Hochschule) und Ihrem schätzen? Ihre Implementierung scheint definitiv einfacher, intuitiver und effizienter zu sein, aber ich frage mich, ob die von mir gepostete Implementierung einen Nutzen hat.
@ user1969903: Ihre Implementierung verwendet weniger Muxes und hat eine konsistentere und kürzere Ausbreitungsverzögerung. Es ist besser! Und du hast es richtig gemacht. Aber jetzt, wo du all diese großartige Arbeit geleistet hast, gebe ich dir ein noch besseres Paar!! Eine für die erste Antwort und eine für die zweite. Ich habe diesen Prozess mit Ihnen sehr genossen.
Ich bin froh, dass wir alle etwas gelernt haben. Ich bin immer noch neugierig, warum die Eingaben in meiner Implementierung so beschriftet sind, wie sie sind. Irgendwelche Gedanken dazu?
@ user1969903: Sie haben die Säulen eingeklappt. Ich bin sicher, Sie können das sehen. Die beiden linken sind identisch, also haben sie sie nur zu einer einzigen Spalte gemacht. Die beiden rechten waren für zwei Reihen gleich (Mitte), aber nicht oben und unten, aber D funktionierte dort eher als eine Konstante. Um die Nummerierung herauszufinden, verwenden Sie einfach die Bits auf der linken Seite (zwei Bits), gefolgt vom Spaltenkopfbit. Dies ergibt eine 3-Bit-Binärzahl, die dort oben übereinstimmt. Ist das sinnvoll?
Ja, das habe ich verstanden. Meine Frage bezieht sich auf die Art und Weise, wie die Dateneingänge in meinem Design auf der linken Seite der Muxes beschriftet sind. Warum sind sie in dieser bestimmten Reihenfolge 0, 4, 2, 6, 1, 5, 3, 7 und nicht 0, 1, 2, 3, 4, 5, 6, 7 oder in einer anderen Reihenfolge gekennzeichnet? Das Buch, aus dem ich das Design entnommen habe, weist mich buchstäblich an, die zusammengeklappte VK-Karte zu erstellen und einfach die dezimalen Zellenäquivalente mit den beschrifteten Eingängen der Muxes abzugleichen. Warum sind die Eingänge als Zellen 0 und 4 für MUX1, Zellen 2 und 6 für MUX2 und so weiter gruppiert? Wenn ich eine zusammengeklappte Tabelle mit 4 Variablen hätte, wie würde ich meine Muxes beschriften?
@ user1969903: Weitere Kommentare zum bereits langen Kommentar hinzugefügt. Ich hoffe, das hilft.
Nun, solange es prägnant ist, können Sie nichts tun, wenn die Menge an Informationen groß ist. Auf jeden Fall kann ich jetzt sagen, dass ich mit der Antwort zu 100 % zufrieden bin, da ich genau verstehe, was vor sich geht, und ich danke Ihnen für Ihre Zeit und Ihre detaillierten Informationen. In Bezug auf die zusammengeklappte Tabelle ist es ein Fehler, den ich beim Kopieren der Werte aus meinem Notizbuch gemacht habe ('0' ist wirklich nahe an 1'' auf dem Nummernblock).
@user1969903: Ich hatte so viel davon vergessen, also habe ich die Gelegenheit sehr geschätzt, mich noch einmal an einiges davon zu erinnern. Es ist schön, wenn eine Frage auch von gegenseitigem Wert ist!

Ein 2:1-Mux enthält einen Inverter, zwei UND-Gatter und ein ODER-Gatter. Bei entsprechender Beschaltung können Sie es als UND-Gatter, ODER-Gatter, Inverter und einige andere Funktionen verwenden. Tatsächlich basieren bestimmte Familien von FPGAs vollständig auf diesem Konzept.

Dies sollte als Hinweis genug sein, um Ihnen zu ermöglichen, beliebige Funktionen mit 2:1-Muxen zu realisieren.

Ein Multiplexer mit zwei Eingängen hat drei Eingänge (a, b und select). Überlegen Sie, wozu es degeneriert, wenn Sie zwei davon auswählen und die andere fest mit "0" oder "1" verbinden. Überlegen Sie, was passiert, wenn Sie zwei davon auswählen, und verbinden Sie den dritten mit einem der beiden. Grundsätzlich gibt es eine Reihe von Möglichkeiten, diesen Raum mit drei Eingaben in einen Raum mit zwei Eingaben zu degenerieren.

Ohne etwas so Ausgefallenes zu tun, müssen Sie sich nur darüber im Klaren sein, dass Sie mit einem Multiplexer explizit den Ausgabewert für Wahrheitstabellenzeilen festlegen können, die den decodierten Auswahleingaben entsprechen. Mit einem Multiplexer mit vier Eingängen (und daher zwei Auswahlbits) können Sie also jede boolesche Funktion mit zwei Eingängen darstellen, indem Sie die Eingänge einfach entsprechend festverdrahten.

Außerdem sollte klar sein, dass Sie einen 4:1-Multiplexer aus drei 2:1-Multiplexern, einen 8:1-Multiplexer aus sieben 2:1-Multiplexern usw. erstellen können, indem Sie eine Baumtopologie erstellen und die Auswahlen entsprechend verdrahten. Stellen Sie einfach genügend 2:1-Multiplexer auf, um die Anzahl der benötigten Eingänge zu erhalten, leiten Sie dann die Ausgänge paarweise in nachgeschaltete 2:1-Multiplexer, bis Sie zu einem einzelnen Ausgang gelangen, und überlegen Sie, wie Sie die ausgewählten Eingänge verdrahten.

Sie können mit einer versteckten Variablen davonkommen, weil Sie nur 16 Minterms haben, obwohl Sie eine Wahrheitstabelle mit 32 Zeilen haben, und sie so gruppiert sind, dass ganze Unterbäume ignoriert werden können.