Digitalschaltung zur Mehrheitsprüfung

Ich habe 31 digitale Eingänge (jeder ist hoch oder niedrig) und möchte einen digitalen Ausgang, der nur dann hoch ist, wenn mindestens 16 Eingänge hoch sind. Wie kann ich diese "Mehrheitsfunktion" (die auch das höchstwertige Bit der Summe ist) mit den wenigsten MOS-Transistoren implementieren?

Als Bonus würde ich auch gerne die schnellste Implementierung im schlimmsten Fall wissen.

Hmm, der Geruch von Hausaufgaben kitzelt meine Nase. Fragen zu Ihren Hausaufgaben sind in Ordnung, solange Sie uns zeigen, was Sie bisher recherchiert / überlegt haben, und eine konkrete Frage dazu haben. Sie scheinen nichts getan zu haben, um sich selbst zu helfen, also werden wir Ihnen auch nicht helfen.
Es sind keine Hausaufgaben. Ich habe längst meinen Abschluss gemacht. Es ist ein einfach formuliertes, aber schwer zu lösendes Problem, mein Lieblingstyp, für das mir bisher die beiden Antworten eingefallen waren. Ich hatte einfach gehofft, jemand hätte einen anderen Trick, um das zu lösen.
Hausaufgaben oder nicht (und ich hatte auch Hausaufgaben nach meinem Master, wenn ich einen Kurs besucht habe, einen richtigen Kurs, den, wo man Hausaufgaben bekommt ;-) ) der wichtigste Punkt ist, dass man sich nicht bemüht hat, selbst zu einer Lösung zu kommen.
Die analoge Version der "Winner Take All"-Schaltung besteht nur aus 31 * 2 + 4 FETs. Sie nehmen digitale Eingaben und erhalten eine digitale Ausgabe, aber der Zwischenzustand ist aktuell. Etwas, das Sie für eine alternative Lösung in den Archiven ablegen können.

Antworten (4)

Konfigurieren Sie 31 MOS-Transistoren als schaltbare Stromquellen, die einen 32. speisen, der als Stromsenke mit dem 15-fachen der Quellenströme konfiguriert ist. Beobachten Sie dann die Spannung des Summierknotens.

EDIT - Ich sollte keine Spiele spielen. Der Titel sagte "Digital", also werden wir digital gehen. Eine Konfiguration wäre

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Dieser verarbeitet 15 Eingänge. Duplizieren Sie es und fügen Sie einen 4-Bit-Volladdierer hinzu, und Bob ist Ihr Onkel. Ich habe den letzten Addierer nicht gezeigt, aber Sie sollten in der Lage sein, es selbst herauszufinden.

Und natürlich, wenn Sie dies mit BJTs bauen, wie bei TTL- oder ECL-Logik, werden überhaupt keine MOS-Transistoren verwendet.

Machen Sie die Senke besser auf das 15,5-fache des Quellstroms.
Da die Designmetrik "wenigste MOS-Transistoren" ist, wäre es besser, dies mit BJTs und Relais zu tun.
Für die Aufzeichnung würde ich dies wahrscheinlich mit Ihren 32 Transistoren plus fünf Serienwechselrichtern für die letzte Verstärkungsstufe bauen. Also insgesamt 42 Transistoren. Diese Lösung reagiert empfindlich auf analoge MOS-Eigenschaften, daher hatte ich gehofft, dass es stattdessen einen digitalen Trick gibt ... mal sehen, ob andere Antworten eintreffen.
@bobuhito - Da D / A-Wandler mit viel höherer Präzision hergestellt werden (ein 12-Bit benötigt eine Schaltgenauigkeit im Bereich von 0,025% gegenüber den hier benötigten 3%) und eine monolithische Lösung passende Temperatureffekte verursacht, würde ich ' Erwarten Sie kein Problem. Aber es ist wahr, dass ich Spiele spiele. Eine digitale Lösung würde 8 1-Bit Volladdierer, 4 2-Bit Volladdierer, 2 3-Bit Volladdierer und 1 4-Bit Volladdierer beinhalten. Daraus kannst du die Anzahl der Transistoren berechnen.
Ihre digitale Lösung hat mindestens 200 Transistoren (unter Verwendung von Hochleistungsaddierern, um die Anzahl der Transistoren zu minimieren), daher bevorzuge ich die ursprüngliche analoge Antwort besser ... hoffe aber immer noch, einen Trick zu sehen und jemandem ein kostenloses "Taktsignal" zu geben, um zu helfen . Was @ThePhoton angeht, das BJTs/Relais vorschlägt, sind sie natürlich nicht erlaubt; er könnte auch vorgeschlagen haben, einen Menschen zu verwenden, um einen Draht manuell anzuschließen, je nachdem, wie viele Eingaben einen Schock verursachen!

Verbinden Sie die 31 Eingänge (0-30 im Diagramm unten) mit vier 8-Bit-Schieberegistern mit parallelem Eingang und seriellem Ausgang wie dem 74HC597, die in Reihe kaskadiert sind (nur zwei gezeigt). Takten Sie den seriellen Ausgang des letzten Registers in einen Binärzähler wie den 74HC4024. Verwenden Sie einen anderen 74HC4024-Zähler, um zu verfolgen, wann 32 Taktimpulse aufgetreten sind, die dann den Zyklus wiederholen.

Geben Sie hier die Bildbeschreibung ein

Aus irgendeinem verrückten Grund fingen der ursprüngliche CD4024 und der Nachfolger 74HC4024 an, ihre Flip-Flops mit Q1 anstelle von Q0 zu nummerieren. Sehr verwirrend. Daher zeige ich stattdessen das NXP-Teil (HEF4024B), das diese Anomalie korrigiert.

Wenn also alle 32 Taktimpulse (wenn Q5 des zweiten Zählers hoch geht) mindestens 16 Eingänge hoch waren (was bedeutet, dass Q4 des ersten Zählers 1 ist), wird dieser Status in einem D-Flip-Flop (74HC74) zwischengespeichert. und gespeichert, bis der nächste Satz von 32 Taktimpulsen abgeschlossen ist. Währenddessen werden die Eingänge parallel zu den Schieberegistern umgeladen.

Dies ist insofern ein Sonderfall, als der Mehrheitsschwellenwert eine Zweierpotenz ist, sodass nur ein Pin (in diesem Fall Q4, der 16–31 darstellt) abgefragt werden muss. Wenn der Schwellenwert stattdessen beispielsweise 14/27 wäre, müsste ein Adressdecoder hinzugefügt werden, um die Werte 14 und 15 zusätzlich zu 16 zu trennen.

Bei einem Eingangstakt von 90 MHz gibt es eine maximale Verzögerung von 355 ns von einer Änderung im Eingang bis zur Aktualisierung des Mehrheitsstatus am Ausgang.

Hinweis - nicht unbedingt die gesamte "Klebelogik" gezeigt, aber dies sollte die Idee vermitteln.

Ich würde gerne einen Schaltplan auf Transistorebene zum Zählen sehen, aber ich denke, das sind mehr als 200 Transistoren, wenn Standard-JK-Flip-Flops verwendet werden. Dieser Ansatz ist gut, wenn es nur eine clevere Möglichkeit gäbe, eine Reihe von Eingaben zu serialisieren und zu zählen.

Es scheint, als würden Sie hier einige Konzepte verwechseln. Sie sagen, Sie wollen einen Mehrheitswahlkreis. In diesem Fall könnten Sie eine sehr große Wahrheitstabelle erstellen und die Schaltung mithilfe von Reduktionstechniken reduzieren. Zum Beispiel:

Input-Output

000 / 0

001 / 0

010 / 0

011 / 1

100 / 0

101 / 1

...und so weiter und so fort. Wenn Sie dann die endgültigen Logikgatter haben, zerlegen Sie einfach das Gatter in Ihre Transistorzahl. Sie werden dies nicht für 32 Bit tun können, es sei denn, Sie haben viel Zeit zur Verfügung. Angenommen, Sie haben für jede Kombination 1 Sekunde gebraucht, dann brauchen Sie immer noch 2^32 Sekunden oder 136 Jahre. Wenn Sie so lange gelebt haben, müssten Sie eine Art Gate-Reduktion durchführen.

Wenn Sie sagen "Das bedeutendste Stück der Summe", ist dies etwas verwirrend. Stellen Sie sich vor, Sie haben 3 Eingänge, die hoch sind, das höchstwertige Bit der Summe ist 1, ebenso bei 2. Wenn Ihr Mehrheitszähler nur 3 Bits hätte, würde Ihnen diese Information nichts sagen.

"Die schnellste Im-Worst-Case-Implementierung" klingt wie die Summe der Gate-Verzögerungen, die bei der Worst-Case-Realisierung auftreten würden; die am stärksten kaskadierte Realisierung hätte die größte Verzögerung.

Hinweis: Latches und Flipflops bestehen ebenfalls aus Logikgattern, die ebenfalls aus Transistoren bestehen. Vielleicht könnten Sie ein Schieberegister und einen Zähler bauen und dann eine kleine kombinatorische Logik am Ausgang des Zählers verwenden.

Viel Glück.

Da die Schaltung 31 Schaltungen handhaben soll, ist eine vollständige Summe der Eingänge eine 5-Bit-Zahl. Wenn es wie in Ihrem Beispiel nur 3 Eingänge geben würde, wäre die Summe eine 2-Bit-Zahl, und das msb würde tatsächlich anzeigen, dass 2 oder mehr Eingänge (eine Mehrheit) 1 wären.
Die Summe einer 31-Bit-Zahl ist eine 5-Bit-Zahl? Das macht keinen Sinn. Außerdem ist die Summe aller Bits in 00101 00100 + 00001, was 00101 ist ... Das MSB ist 00100; Wie würden Sie den Unterschied zwischen 00101 und 00111 erkennen, indem Sie sich nur das höchstwertige Bit ansehen?
Nein, aber 31 ist als 5-Bit-Zahl ausdrückbar, 0b11111. Die Summe aller Bits im Bitfeld 00101 ist 2 (zwei Bits sind hoch), was 10 ist. Der Rest Ihrer Frage macht nicht viel Sinn.
Du hast mich verloren. Ich dachte, was er mit "31 digitalen Eingängen" meinte, die jeweils hoch oder niedrig sein können, also dachte ich, dies seien einzelne Bits in einem Wort; und das Ziel bestand darin, zu bestimmen, ob eine Mehrheit dieser Bits hoch war.
Es spielt keine Rolle, ob ein Bit msb oder lsb ist. Wenn es hoch ist, ist es hoch. Wenn die 16 msbs hoch sind, ist die Mehrheit der 31 Bits hoch. Wenn die 16 lsbs hoch sind, ist die Mehrheit der 31 Bits hoch. Ihr Wert spielt keine Rolle. Warum denkst du, tun sie das? Die Frage bezieht sich nicht einmal im Entferntesten auf den Wert der Bits. Es fragt nur, ob eine Mehrheit von ihnen hoch ist oder nicht.

Ich bin hauptsächlich ein analoger Mensch, also würde ich dies mit analogen Techniken tun.

Summieren Sie alle Eingänge in einem Summierverstärker. Führen Sie den Ausgang des Verstärkers einem Komparator zu, der auslöst, wenn die gewünschte Anzahl von Eingängen HI ist.

Dies kann zu einem resistiven Summierer (kein Operationsverstärker erforderlich) und einem Komparator vereinfacht werden.

Der Titel der Frage von OP lautet " Digital Circuit to Check for Majority ". (Ich habe dich aber nicht abgelehnt!)