Hallo Mikrocontroller-Gemeinde,
im Rahmen einer Laborarbeit soll ich auf dem oben genannten Board
(BASYS-Board: Xilinx Spartan3E-100 TQ144) eine Uhr in VHDL über Xilinx
ISE erstellen. Nun liegt mein eigentliches Problem darin, dass ich was
das angeht von Tuten und Trompheten keine Ahnung habe, was weniger
schlimm wäre da es mich eigentlich sehr interessiert, aber mir so
langsam die Zeit davon läuft.
Nun zur Aufgabe: Die Aufgabe ist es Uhr zu erstellen, die wahlweise
Stunde und Minuten und auf Knopfdruck Minuten und Sekunden auf der
4-stellingen 7-Segment-Anzeige ausgibt.
Zudem sollen Stunden, Minuten und Sekunden einstellbar sein.
Mein jetziger Stand ist recht mau, da ich schon für den Vorteiler der
mir den Takt von 100 MHz auf 1 Hz teilt inzwischen schon 2 Wochen
gebraucht habe, da ich im Studium noch ziemlich viel anderes Zeugs um
die Ohren habe.
Naja lange Rede kurze Sinn, um ehrlich zu sein habe ich keinen blassen
Schimmer wie ich jetzt weitermachen soll bzw. wie so eine Uhr im
allgemeinen Aufgebaut ist (Blockschaltbild) und wollte mal fragen ob
jemand für so etwas mal ein Beispiel zur Hand hätte.
Grüße
Der VHDL-Noob
VHDL-Noob schrieb im Beitrag #2678188:
> Naja lange Rede kurze Sinn, um ehrlich zu sein habe ich keinen blassen> Schimmer wie ich jetzt weitermachen soll
Da könnte man weiterhelfen. Man müsst nur sehen, wie weit du schon bist.
> bzw. wie so eine Uhr im allgemeinen Aufgebaut ist (Blockschaltbild)
Eine Uhr?
Die ZÄHLT eigentlich nur die Sekunden und bringt zum richtigen Zeitpunkt
einen ÜBERTRAG in die nächste Stelle. Das wars.
> und wollte mal fragen ob> jemand für so etwas mal ein Beispiel zur Hand hätte.
Ja, sogar ganz hier in der Nähe, noch keine Woche alt. Incl.
Schaltjahrberechnung...
Du musst dir, wenn du von Tuten&Blasen keine Ahnung hast, aber
wenigstens die Zeit nehmen, ein wenig zu suchen. Schon mit durchklicken
(also ganz ohne die Suchfunktion) des Forums solltest du innerhalb einer
Minute (oder zwei) den Thread finden.
> Trompheten
Der hat mal Niveau... ;-)
Also erstmal danke für die Schnelle Antwort! Hatte es mal auf die
Schnelle mit der Suche nach "Uhr" versucht und nichts passendes zu
meinem Problem gefunden, deswegen war ich so frech nen neuen Thread zu
eröffnen.
Aktueller Stand ist, dass ich einen Vorteiler hab der mir die 100 Mhz
die vom Prozessor kommen in 1 Hz wandelt.
Die Uhr soll Modulweise erstellt werden. Somit habe ich mein erstes
Modul. Was wäre denn der nächste Sinnvolle Schritt? Also was wäre denn
das sinnvolle nächste Modul?
Sorry wenn ich etwas dumm frage nur habe ich auf erneute Suche immer
noch nichts passendes gefunden.
VHDL-Noob schrieb im Beitrag #2678260:
> Aktueller Stand ist, dass ich einen Vorteiler hab der mir die 100 Mhz> die vom Prozessor kommen in 1 Hz wandelt.
Jetzt brauchst du nur noch einen Zähler für:
Die Sekunden
Die Minuten
Die Stunden
und einen 4-stelligen 7-Segment-Wandler, der dir im Sekundentakt die
Anzeige aktualisiert.
VHDL-Noob schrieb im Beitrag #2678260:
> Was wäre denn der nächste Sinnvolle Schritt?
Das Forum durchklicken.... ;-)
> Also was wäre denn das sinnvolle nächste Modul?
Ein Sekunden-Einer-Zähler, der an den Sekunden-Zehner-Zähler einen
Übertrag meldet, der an den Minuten-Einer-Zähler einen Übertrag
weitergibt usw.
Und stellen kannst du die Uhr z.B. indem du über eine passende logische
Verknüpfung einen Minutenübertrag öfter als 1 mal pro Minute
erzeugst...
Ich will Dich nicht deprimieren, aber der Taktgeber auf dem Basys ist
nicht sonderlich genau. Ich bekomme mehrere Sekunden bis zu knapp einer
Minute Abweichung von der Funkuhr an einem Tag. Auf einem Nexys2 mit so
ziemlich gleichem Code bleibt die Abweichung sogar nach einer Woche noch
unter einer Sekunde.
Als Hauptaufgabe sehe ich auch eher weniger den Zähler, sondern die
Ansteuerung der 7-Segment-Anzeigen. Mach das erstmal und versuche dort
zuerst irgendetwas hinzuschreiben, z.B. "1234".
Nach dem Du dann mal alle Zahlen anzeigen lassen kannst, und zahlen sind
wichtig, dann ist das nächste Problem eine binäre Zahl als Dezimalzahl
anzuzeigen. Also versuche dann ein beliebiges Bitmuster das Du über die
Schiebeschalter einstellen kannst (0 ... 255) auf den Anzeigen
darzustellen.
Und dann erst kommt die Uhr, also ein paar Zähler die Bitmuster liefert
die dann angezeigt werden.
Konkret brauchst Du ein paar "Bauteile" die Du öfters verwenden wollen
wirst:
"Zahl" das bekommt eine lange Binärzahl, also z.B. Minuten, Sekunden,
... und zerlegt z.B. Minuten in die Einerstelle und die Zehnerstelle des
Dezimalsystems. Die Ergebnisse gehen an Ziffer.
"Ziffer" das bekommt ein Bitmuster von "0000" zu "1001" also 0 bis 9 und
gibt das entsprechende Bitmuster für die 7-Segment-Anzeige raus. Dafür
kann man gut Karnaugh-Diagramme nutzen.
http://de.wikipedia.org/wiki/Karnaugh-Veitch-Diagramm
Also viel Spaß, das ist ein sehr lehrreiches Projekt!
An der FH haben wir so beschrieben wie Ziffern auf 7-Segment-Anzeigen
dargestellt werden. Aber klar man kann auch einfach jede Ziffer einzeln
beschreiben und die generierte Logik ist am Ende vermutlich identisch.
Ich dachte nur, weil man das mal gesehen haben sollte.
Marius Wensing schrieb:>> http://de.wikipedia.org/wiki/Karnaugh-Veitch-Diagramm>> Nutzt die überhaupt noch ernsthaft jemand?
Nein ich denke nicht.
> Mit VHDL oder Verilog nimmt> einem die Arbeit doch der Synthesizer ab.
Jepp.
> Ist in meinen Augen> verschwendete Zeit...
Das wiederum sehe ich anders. Ich findes es genauso wichtig, wie z.B.
mal in Assembler reingeschnuppert zu haben, um ein Gefühl dafür zu
bekommen, was hinter den Kulissen passiert.
Duke
Also ich hab jetzt mal versucht nen Zähler zu schreiben, der von 0 bis 9
zählt und mir erstmal die Zahlen binär auf den LEDs ausgibt. Leider
kommt bei der Simulation des Ganzen nur raus, dass meine LEDs( q0-q3)
nicht definiert sind. Weis jemand von euch abhilfe?
Code sieht wie folgt aus:
Mal dir mal nen Blockdiagram auf RTL Ebene (Bitte mit den Steuersignalen
die Benötigt werden). Also Counter, Register, Comperatoren, Decoder,
Logikgatter.
Ohne Plan einfach draufloszuschreiben funktioniert nur wenn man schon
Erfahrung hat.
Naja einfach drauf losgeschrieben war es nicht, sondern eher ein
bestehendes funktionierendes Programm umgeschrieben. Aber danke für die
Infos werde es nochmal daraufhin überprüfen.
VHDL-Noob schrieb im Beitrag #2688714:
> ein bestehendes funktionierendes Programm umgeschrieben.VHDL /= Programmieren
Mit VHDL schreibst du keine Programme, sondern du beschreibst
Hardware. VHDL ist eigentlich einfach ein Schaltplan in Textform...