Bitzähler mit einfachen Logikgattern [geschlossen]

Ich kann kein Rätsel lösen, das darin besteht, einen 4-Bit-Bitzähler mit einfachen Logikgattern (NOT, OR, AND, NOR, NAND, XOR, XNOR, MUX, FULL ADDER) zu erstellen. Ein Bitzähler gibt an, wie viele Bits in einem Wert gesetzt sind. So hätte beispielsweise der Wert '1011' das Ergebnis '011', weil drei Bits gesetzt sind und '011' binär 3 bedeutet.

Ich habe ein Buch mit dem Titel "Digital Principles" von Schaum's Outlines gekauft, und nirgendwo in diesem Buch steht, wie man aus Logikgattern einen kleinen Zähler macht. Ich habe auch das Buch Hill & Horowitz, das verwendet wird, um digitale Logik zu lehren. Nirgendwo in diesem Buch wird beschrieben, wie man aus Logikgattern einen Bitzähler macht. Ich finde es äußerst frustrierend, dass die Herstellung grundlegender kombinatorischer Logikschaltungen eine Art schwarzer Voodoo ist, der nicht dokumentiert ist.

Gibt es ein Buch, das den Aufbau aller gängigen kombinatorischen Schaltungen wie Bitzähler, Addierer usw. mit einfachen Logikgattern UMFASSEND beschreibt?

Hinweis: Herauszufinden, wie das geht, ist nicht einfach. Dies ist eine Wahrheitstabelle mit 16 Zeilen und 3 Spalten mit Ausgaben. Wenn Sie versuchen, das alles aufzuschreiben und zu vereinfachen, wird es sehr komplex und es gibt viele Möglichkeiten, Fehler zu machen. Die Wahrheitstabelle für einen 4-Bit-Bitzähler sieht so aus (Eingänge links, Ausgänge rechts):

Geben Sie hier die Bildbeschreibung ein

Ich habe versucht, dies mit einer Karnaugh-Karte zu lösen, aber es führt immer noch zu einem Ausdruck, der viel zu groß für den Rätsellösungsbereich ist. Für die zweite Ausgabespalte habe ich beispielsweise die folgende Karnaugh-Karte erhalten:

Geben Sie hier die Bildbeschreibung ein

was den folgenden Ausdruck hat:

A'B'CD + A'BD + ABC' + AB'D + BCD' + AB'CD'

Um dies im Puzzle darzustellen, wären 6 4-Wege-UNDs, 1 4-Wege-ODER und 3 2-Wege-ODERs erforderlich. All diese Komponenten würden nicht einmal in den zur Verfügung stehenden Bereich für die Rätsellösung passen.

Was ist Bitzähler? Übrigens kann jede Logik nur aus NANDoder NORnur aus Gattern entworfen werden ...
@EugenSch. Ein Bitzähler zählt die Anzahl der Bits in einem Binärwert. So enthält beispielsweise der Wert 1011 3 gesetzte Bits. Wenn also die Eingabe in den Bitzähler 1011 ist, dann wäre die Ausgabe 0011, was gleich 3 ist.
Zeichnen Sie in diesem Fall einfach eine Wahrheitstabelle. So einfach ist das. Hinweis: 4 Eingänge 3 Ausgänge..
Ich schließe mich dem Kommentar von Eugene Sh an. Sie scheinen den Punkt über die Logiksynthese verpasst zu haben. Sobald Sie wissen, wie man eine einfache Funktion synthetisiert, unterscheiden sich komplexere Funktionen qualitativ nicht, so dass Sie nicht finden werden, "wie man einen Addierer macht" (na ja, ok, schlechtes Beispiel - Sie können solche Anweisungen finden). Setzen Sie sich stattdessen hin, definieren Sie genau, was Ihre Funktion tun soll, brechen Sie sie dann in einfache Begriffe herunter und synthetisieren Sie sie. Ihr Bitzähler kann beispielsweise als ein Paar 1-Bit-Addierer angesehen werden, die einen 2-Bit-Addierer speisen. Nimm es von dort.
Die Kenntnis der Wahrheitstabelle macht es mir nicht klarer, wie man die Logikgatter zusammenbaut, die diese Wahrheitstabelle implementieren.
@TylerDurden Wenn Sie nicht wissen, wie man eine Wahrheitstabelle in eine Gate-Implementierung übersetzt, sollten Sie einen Schritt zurückgehen und lernen, wie man dies für einfachere Funktionen macht.
@EugenSch. Die "Wahrheitstabelle" hier hat keinen einfachen binären Ausgang, sie hat einen 3-Bit-Ausgang, daher kann sie nicht einfach durch Boolesche Algebra gelöst werden.
@TylerDurden Jede Ausgabe ist eine binäre Funktion. Wenn Sie es vorziehen, können Sie es als 3 Wahrheitstabellen sehen, wenn Sie nicht mit Wahrheitstabellen vertraut sind, die 3 Ausgänge gleichzeitig haben ... Und zu Ihrer Anmerkung: Nein, es ist nicht schwierig, wenn Sie es sorgfältig machen.
@TylerDurden Anstatt den Vorschlägen zuzuhören , beleidigst du die Leute, die sie geben. Sehr schlau. Aber trotzdem werde ich nett sein und Ihnen noch einen Hinweis geben: Es gibt Methoden zur Vereinfachung von Booleschen Funktionen, die keine Boolesche Algebra beinhalten. Haben Sie schon von K-Maps gehört? Wie lange werden Sie brauchen, um es von einer Wahrheitstabelle aufzuschreiben und den resultierenden Ausdruck daraus zu schreiben?
Ist so etwas wie das, wonach Sie suchen, ti.com/lit/ds/symlink/sn74hc163-q1.pdf , das auf Seite 2 hauptsächlich zeigt, wonach Sie suchen, und dann sind die Flip Flops auf der nächsten Seite.
@Tyler Ein Binärzähler und ein Bitzähler sind verschiedene Dinge.
@transistor Ich habe die Wahrheitstabelle hinzugefügt, die die erwarteten Ein- und Ausgänge zeigt.
@EugenSch. Tut mir leid, wenn ich schnippisch wirke, ich weiß Ihre Hilfe sehr zu schätzen. Es ist nur so, dass dies ein sehr frustrierendes Problem für mich war und es war frustrierend, kein Buch zu finden, das nur gängige kombinatorische Logikschaltungen auflistet. Ich schätze Ihre Vorschläge.
@TylerDurden Sehen Sie sich jetzt Ihren Tisch genau an. Die erste Ausgabe ist trivial, oder? Sie können seine Funktion sofort schreiben. Die anderen beiden werden mit Ihrer bevorzugten Vereinfachungsmethode erstellt. K-map wäre am schnellsten.
Da Sie das triviale haben, ist das letzte, sobald Sie das nächste ausgearbeitet haben, alles, was NICHT in den anderen beiden enthalten ist. Eine andere Sache, die zu beachten ist, ist, dass ein Satz der beiden komplexeren sieben Bedingungen hat und der andere acht. Einer kann einfacher sein als der andere.
Von welchem ​​"Puzzle-Bereich" sprichst du? Die Frage bezog sich auf das allgemeine Design.

Antworten (2)

Gegeben sind die Eingänge A, B, C, D und die Ausgänge X, Y, Z, wobei XYZ eine vorzeichenlose 3-Bit-Binärzahl ist, die die Anzahl der Bits in ABCD darstellt, die 1 sind. Sei X das signifikanteste Bit der Binärzahl und sei Z sei das niederwertigste Bit.

Die Wahrheitstabelle für die Funktion sieht so aus...

ABCD => XYZ
0000 => 000
0001 => 001
0010 => 001
0011 => 010
0100 => 001 0101 =>
010
0110 => 010
0111 => 011
1000 => 001
1001 => 010
1010 =
> 010
1011 => 011 1100 => 010
1101 => 011
1110 => 011
1111 => 100

Aus der Wahrheitstabelle sehen wir deutlich, dass der X-Ausgang nur 1 ist, wenn alle Bits in ABCD 1 sind .

X = A UND B UND C UND D

Wir sehen deutlich, dass Z nur dann 1 ausgibt, wenn eine ungerade Anzahl von Bits 1 ist. Eine ungerade Paritätsfunktion lässt sich leicht mit XOR-Gattern implementieren. Also...

Z = A XOR B XOR C XOR D

Die Funktion für den Y-Ausgang ist etwas weniger offensichtlich. 1, wenn mindestens zwei von ABCD eingeschaltet sind, aber nicht, wenn alle vier eingeschaltet sind. Der Y-Term kann so geschrieben werden, dass alle Kombinationen von zwei Eingängen eingeschaltet sind, außer wenn alle vier eingeschaltet sind.

Y = ((A UND B) ODER (A UND C) ODER (A UND D) ODER (B UND C) ODER (B UND D) ODER (C UND D)) UND NICHT X

Als Alternative zu dem, was oben beschrieben wurde, könnte diese Funktion auch durch Kaskadieren eines Zwei-Bit-Addierers und zweier Drei-Bit-Addierer konstruiert werden. Der erste Addierer addiert A und B. Der zweite Addierer addiert das Ergebnis des ersten Addierers zu C. Und der dritte Addierer addiert das Ergebnis des zweiten Addierers zu D und so weiter für eine beliebige Anzahl von Eingaben.

Wie hast du den Ausdruck für Y herausgefunden?
Ich vermute auch, dass Y mithilfe von Karnaugh-Diagrammen noch weiter verkürzt werden kann

Ich habe die Lösung herausgefunden, die dem ähnelt, was user96037 am Ende seiner Antwort sagt. Aufgrund des begrenzten verfügbaren Platzes im Lösungsbereich ist die Verwendung von Addierern erforderlich, und es scheint, dass zwei Addierer wie folgt benötigt werden:

Geben Sie hier die Bildbeschreibung ein

Die grundlegende Strategie hier ist also, dass Sie die Bitzahlen für die Eingänge 1 + 2 und 3 + 4 zuerst separat generieren, was mit nur jeweils 2 Gattern (XOR und AND) möglich ist. Jetzt haben Sie zwei 2-Bit-Werte. Sie können diese beiden Werte dann mit einem Paar verketteter Volladdierer addieren. Der Übertrag in den ersten Addierer muss auf 0 gesetzt werden. Insgesamt gibt es also 6 Komponenten plus die 0 in.

Was ist das für ein Spiel?
@EugenSch. Es heißt "Circuit Coder". Das Programm gibt Ihnen ein Problem (wie hier, um einen 4-Bit-Bitzähler zu erstellen) und Sie müssen die Logikgatter zusammenbauen, um eine Lösung zu bilden. Das Programm kann Ihre Lösung testen, um zu sehen, ob Sie richtig liegen, und Ihnen die Fälle zeigen, in denen Sie falsch lagen. Mit den Pfeiltasten („1/16“ unten links) können Sie alle Eingabemöglichkeiten durchgehen und manuell ausprobieren.
Hübsch. Keine App für Android, schade.
@EugenSch. Ich versuche, mit diesem Spiel digitale Logik zu lernen, und ich kann die meisten Probleme lösen, aber einige davon (wie dieses) sind schwierig für mich.