Hallo, ich bin bei meinen Recherchen fürs Studium schon mehrfach auf Beiträge aus diesem Forum gestoßen und da ich bei meinem Hardwarepraktikum immer etwas unsicher bin, dachte ich mir für die aktuelle Aufgabe schreibe ich selbst mal etwas. Es wäre schön wenn sich jemand etwas Zeit nehmen könnte um mir zu sagen ob ich generell richtig liege oder irgendetwas übersehe bzw. falsch mache. Erstellt werden soll ein synchroner Zähler mit folgender (binärer) Ausgabe auf 4 LED's: 0, 2, 4, 6, 8, 10, 11, 12, 0, 2, ... Anschließend soll die Zählerschaltung über einen Decoder auf einer 7-Segmentanzeige ausgegeben werden (als 0, 2, 4, 6, 8, a, b, c, 0, 2, ...) Für den Versuch sollen JK-Flipflops als T-Flipflops verwendet werden. Realisiert wird das ganze auf einem PLD XC 9572 XL von Xilinx. Für den Zähler habe ich mir folgendes überlegt: Jeder Ausgang eines FF's dient als Eingang für genau eine der LED's. Ich muss mir also nur anschauen welche Ausgaben ich auf den LED's dargestellt haben will (also die Zustände Q3, Q2, Q1 und Q0 an den FF-Ausgängen) und was die jeweils nächste Ausgabe nach dem Taktsignal sein soll (Q3+, Q2+, Q1+ und Q0+). Da T-FlipFlops bei einer 1 am Eingang ihre aktuelle Ausgabe wechseln muss der Eingang Ti eines FF's also genau dann 1 sein wenn sich von Qi zu Qi+ eine Änderung ergeben soll. Über KV-Diagramme für jedes Ti in Abhängigkeit der Belegungen Q3 bis Q0 bekomme ich dann die Funktionsgleichungen für die Eingänge T3 bis T0. Aber wo fängt so eine Schaltung dann überhaupt an, sprich: Was ist der Startzustand? Im Programm das zur Erstellung der Schaltung vorgegeben ist, heißt es bei jedem JK-FF "this flip-flop is asynchronously cleared, output Low, when power is applied". Das heißt jeder Ausgang hat beim Start der Schaltung 0. Ich müsste dann also entweder diesen Startzustand ebenfalls in die o.g. Wahrheitstabelle aufnehmen (die LED's auf dem Board sind low-aktiv, für die Ausgabe der Binärzahl 0 müssen die Ausgänge also alle auf 1 liegen, entgegen der eigentlichen Binärdarstellung von 0 als 0000) oder sicherstellen, dass der Zähler irgendwann einen "erlaubten" bzw. vorgesehenen Zustand annimmt, damit er von dort an korrekt weiterläuft, richtig? Für den Decoder: Auch hier wird für jeden Strich in der Anzeige ein T-Flipflop verwendet. Ich schaue mir wie beim Zähler einfach wieder die gewünschten Ausgänge nach dem nächsten Taksignal (Qg+, ..., Qa+) und die aktuellen Ausgänge (Qg, ..., Qa) an um die Eingangsbelegung der T-FlipFlops (Tg, ..., Ta) zu bekommen. Die Gleichungen für diese Eingänge errechne ich mir dann mittels KV-Diagrammen wieder aus den Zählerausgängen Q3, ..., Q0. Damit hätte die Schaltung prinzipiell zwei (mehr oder minder) getrennte Teile: Den zur Berechnung der Zählwerte als Binärzahlen und den zur Umrechnung dieser Binärzahlen für die Anzeige. Heißt das dann nicht aber, dass meine 7-Segmentanzeige dem eigentlichen Zähler immer um einen Taktschritt hinterherhinkt? Sprich: Wenn am Zähler z. B. die Binärzahl 4 anliegt zeigt die 7-Segmentanzeige die Zahl 2 (weil die ja beim letzten Taktsignal an den Eingängen der Anzeige anlag und übernommen wurde)? Umgehen könnte ich das dann aber damit, dass ich die Augabe der 7-Segmentanzeige einfach um einen Schritt "vorschiebe", damit bei einer 4 am Zähler auch eine 4 auf der Anzeige steht, obwohl dafür die Belegung 2 vom Zähler zur Berechnung verwendet wurde. Gibt es in einem solchen Fall "Konventionen" ob man dieses "Nachhinken" der Anzeige einfach akzeptiert oder eher in die richtige Anzeige umrechnet? Zur Erfüllung der Aufgabe ist es zwar wahrscheinlich egal, aber wenn dieser Zähler Teil einer echten Schaltung wäre, würde man sicher nicht wollen dass Anzeige und Zähler nicht den gleichen Wert wiedergeben, oder? Eine letzte Frage noch zum theoretischen Aspekt hinter der Schaltung. Für das Praktikumsprotokoll soll außerdem zu beidem ein Automatengraph (Moore-Automat) erstellt werden. Das Thema wurde in der Vorlesung nur kurz abgehandelt, darum weiß ich nicht recht ob meine Lösung hierzu viel zu einfach gedacht ist oder nicht: Der Automatengraph eines Zähler ist doch eigentlich immer nur ein kreisförmiger Graph mit einer Schleife bei jedem Knoten falls die Eingabe 0 ist und dem Übergang zum nächsten Zustand falls die Eingabe 1 ist. Das wirkt irgendwie etwas zu simpel, übersehe ich da etwas? Muss der Graph etwa jedes der FF's einzeln betrachten statt die jeweiligen Belegungen der FF's zu einem Zustand zusammenzufassen? Vielen Dank schonmal für eure Unterstützung und beste Grüße, Tom
Ich frage mich, wieso es so kompliziert sein muss. Der Zähler hat genau acht Zustände, also würde ich einen 3-bit Zähler bauen, und alles andere dekodieren. Wenn die Dekodierung auch noch synchron sein soll, dann kommt eben ein 4-bit Ausgangsregister dazu. Es gibt so keine unzulässigen Zustände. Wenn der Reset beim Einschalten nötig ist, muss noch eine übliche Resetschaltung dran, solange das CPLD so etwas nicht schon enthält.
Hallo Christoph und vielen Dank für die schnelle Antwort. Wenn ich dich richtig verstehe sind meine Überlegungen zumindest nicht falsch. An einen einfacheren Zähler habe ich auch schon gedacht. Da zufällig genau 8 verschiedene Zustände angezeigt werden sollen würde es sich anbieten einfach einen 3-bit Zähler mit 3 T-FF's zu bauen und jeweils eine Ausgabe für die LED's und die 7-Segmentanzeige hinterherzuschalten. In der Aufgabenstellung klingt es, als sollte der Zähler selbst die genannten Werte am Ausgang haben, darum habe ich mir überlegt wie ich das bewerkstelligen könnte. Ich werde aber wahrscheinlich ohnehin Wahrheitstafeln und Schaltfunktionen für beide Varianten vorbereiten, da die eigentlichen Schaltungen erst im Praktikum erstellt werden sollen. Du schreibst noch: > Wenn der Reset beim Einschalten nötig ist, muss > noch eine übliche Resetschaltung dran, solange das CPLD so etwas nicht > schon enthält. Kannst du mir sagen wo ich etwas zu so einer "üblichen Resetschaltung" finde? Habe gerade überhaupt keine Ahnung was du damit meinst. Kannst du mir evtl. auch noch etwas zu meinen Fragen zum Automatengraphen sagen? Vielen Dank, beste Grüße und noch einen angenehmen Abend, Tom
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.