Einfache Ressource zum Erlernen des Lösens von Zählerproblemen?

Könnte mir bitte jemand einen Hinweis geben, wo ich lernen kann, einfache Zählerprobleme wie das Zählen in einer bestimmten Reihenfolge mit einem bestimmten Flip-Flop zu lösen? Zum Beispiel:

Erstellen Sie einen Zähler, der in der Reihenfolge 3-1-4-7-2 und wieder von vorne zählt, indem Sie die Flip-Flops vom Typ D verwenden

Ich bitte nicht um Hilfe bei diesem speziellen Problem - es wäre vielmehr großartig zu wissen, wie man diese Klasse von Problemen löst. Ich weiß, wie man Zähler in einer Reihe entwirft, um von n bis n + k oder umgekehrt zu zählen, aber wie macht man das?

Antworten (2)

Stellen Sie sich Ihren speziellen Zähler als Zustandsmaschine vor. Weisen Sie dann dem Zustand den codierten Wert der gewünschten Zählfolge zu. In diesem Fall wären die Zustände wie folgt, wobei der nächste Zustand angezeigt wird.

Status Nächster Status
  3 -> 1
  1 -> 4
  4 -> 7
  7 -> 2
  2 -> 3

Jeder Zustand kann in drei binäre Bits codiert werden, sodass Ihr Design drei Flipflops vom Typ D erfordert. Sie müssen einen Satz von drei Karnough-Karten erstellen, eine für jedes Flipflop, das den nächsten Bitwert für das Flopflop (D-Eingang) basierend auf den drei aktuellen Zuständen (Q-Ausgänge) anzeigt.

Verwenden Sie die k-Maps, um die Logik auf das erforderliche Minimum zu reduzieren. Schließlich können Sie die minimale Logik in einer Reihe von UND-Gattern codieren, die ODER-Gatter in jeden FF D-Eingang treiben.

Hier zeige ich die k-Map für das niedrigstwertige Bit des "Zählers", um Ihnen den Einstieg in die Idee zu erleichtern.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Wow, das ist wahnsinnig informativ und einfach gesagt! Vielen Dank, ich verstehe! :)

Die Grundidee bei dieser Art von Problemen ist, dass Ihre D-Flip-Flops Ihren Zustand darstellen und Sie eine kombinatorische Logik erstellen müssen, die den aktuellen Zustand als Eingabe nimmt und als Ausgabe den nächsten Zustand erzeugt.

Also erstellst du die Wahrheitstabelle:

  input      output
D2 D1 D0 | D2' D1' D0'
 0  0  0 |  *   *   *    # actually, don't care is not quite right, see below
 0  0  1 |  1   0   0    # 1 -> 4
 0  1  0 |  0   1   1    # 2 -> 3
 0  1  1 |  0   0   1    # 3 -> 1
 1  0  0 |  1   1   1    # 4 -> 7
 1  0  1 |  *   *   *    # not quite right, see below
 1  1  0 |  *   *   *    # not quite right, see below
 1  1  1 |  0   1   0    # 7 -> 2

Jetzt haben Sie also drei Funktionen ( D2', D1', und D0'), für die Sie kombinatorische Logik erstellen müssen. Was Sie mit einer Karnaugh-Karte oder was auch immer Sie sonst zur Verfügung haben, tun können. (Zum Beispiel können Sie sich eine Kopie des Espresso-Logikminimierers besorgen . Der Quellcode befindet sich auf github . Es gibt verschiedene vorkompilierte Versionen, wenn Sie googeln.)

Initialisierung

In der Wahrheitstabelle oben habe ich gesagt, dass egal ist „nicht ganz richtig“. Hier ist der Grund: Wenn Sie zum ersten Mal den Strom in Ihrer Schaltung einschalten, werden die D-Flip-Flops in einem zufälligen Zustand erscheinen. Sie müssen also sicherstellen, dass Ihre Schaltung irgendwie in einen vernünftigen Zustand gelangt. Eine Möglichkeit, dies zu tun, besteht darin, sicherzustellen, dass ein anderer Teil Ihrer Schaltung kurz nach dem Start die richtigen Set/Reset-Leitungen auf Ihren Flip-Flops aktiviert (und beachten Sie, dass 000 dies nicht istein gültiger Zustand in diesem Fall.) Eine andere Möglichkeit, dies zu tun, besteht darin, sicherzustellen, dass die "egal"-Zustände tatsächlich (letztlich) in gültige Zustände führen. (Dies macht Ihre Schaltung auch robuster gegenüber vorübergehenden Fehlern.) Stellen Sie also sicher, dass Zustand 000 nicht in Zustand 000 übergeht (oder perverser, dass Sie keine Übergänge haben, die zwischen ungültigen Zuständen wechseln, wie 000-> 101 ->000.) Wenn Ihre Logikminimierung die egal-Funktion verwendet, um Zyklen zu erstellen, können Sie diese Zyklen durchbrechen, indem Sie die egal-Funktion durch gültige Zustände ersetzen.

Einige Ressourcen, die Ihnen bei der weiteren Erkundung helfen:

Frühere electronic.stackexchange-Fragen zu ähnlichen Themen: