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