Volker
Neuling
Beiträge: 5
|
Erstellt: 02.12.05, 11:38 Betreff: elektronischer Würfel & Zähler mit VHDL - HILFE -
drucken
Thema drucken weiterempfehlen
|
|
|
Hi,
ich muss mit VHDL einen elektronischen Würfel beschreiben und einen Zähler der immer die Werte "6", "5", "3" durchzählt.
Leider kriege ich das absolut nicht hin.
Wäre für Lösungsvorschläge, Anregungen etc. sehr dankbar.
DANKE SCHONMAL IM VORRAUS!!!
Gruß
Volker
|
|
Volker
Neuling
Beiträge: 5
|
Erstellt: 02.12.05, 11:49 Betreff: Re: elektronischer Würfel & Zähler mit VHDL - HILFE -
drucken
weiterempfehlen
|
|
|
Hi, nochmal hier die Aufgabenstellungen:
Zaehler: Beschreiben Sie mit VHDL einen Zähler, der den neben stehenden Code zyklisch durchzählt.
Zustand Q2 Q1 Q0 Z0(AW) 1 1 0 Z1 1 0 1 Z2 0 1 1
_____________________________________________________________
Elektronischer Würfel: Sie sollen einen elektronischen "Würfel" entwickeln. Die idee ist sehr einfach: so lange der "Wurf" Knopf gedrückt ist (WURF=1), wird mit hoher Geschwindigkeit (f=1kHz) eine interne Würfelzahl zyklisch von 1 bis 6 gezählt. Wird Wurf losgelassen, so wird die ermittelte Zahl bis zum nächsten Würfeln ausgegeben. Während des Würfelns selbst soll eine blinkende 8 ausgegeben werden, d.h. abwechselnd ein Zustand 8, ein Zustand keine Ausgabe. Taktsignal clk und Reset-Signal res stehen zur verfügung. Das Ausgabesignal des Würfels soll an eine 7-Segment-Anzeige direkt angeschlossen werden (s. Abb unten: Die Ziffern geben die Stelle des Ausgangsvektors valueN an, die an das Segmant angeschlossen ist). Durch Ausgabe einer Null leuchtet das entsprechende Segment. Beschreiben sie den Würfel mit einem Zustandsdiagramm (nach Moore) und einer VHDL-Spezifikation.
7-Segment-Anzeige 0 5 1 6 4 2 3
Wie gesagt, Danke schonmal im Vorraus für eure Bemühungen.
Ixh bin auf eure Hilfe angewiesen.
Mit freundlichen Grüßen
Volker
|
|
Volker
Neuling
Beiträge: 5
|
|
hdschondelmaier
Registrierter Benutzer
Beiträge: 4 Ort: St.Georgen / Schwarzwald
|
Erstellt: 03.12.05, 14:23 Betreff: Re: elektronischer Würfel & Zähler mit VHDL - HILFE -
drucken
weiterempfehlen
|
|
|
Hallo Volker,
Ich kenn Dein Tool nicht, aber im Prozess "taster" verwendest Du den case Konstrukt, obwohl Du nur einen Fall abfrägst. Bei Verwendung des case-Konstrukt musst Du alle anderen Fälle noch definieren z.B so:
case zahl_internzwei is when "0000000" => ... when others => ... end case;
Du könntest den case aber auch durch eine if-Abfrage ersetzen !
Ausserdem versteh ich den gesamten Prozess "taster" nicht recht. Was willst Du damit erreichen??? Ich denke mal, Du willst den Fall abfangen, wenn der Taster wieder losgelkassen wurde: Ich würde das so irgendwie machen (nicht getestet):
signal taster_old : std_logic; -- Kopie vom signal Taster process (taster) begin if taster = '1' then -- solange der taster =1, ist er gedrueckt taster_old <= '1'; else -- taster ist nicht gedrueckt if taster_old = '1' then -- wenn taster aber gedrueckt war, dann... zahl <= zahl_interndrei; -- Zahl ausgeben taster_old <= '0'; end if; end process;
Mit diesem Prozess soll nur einmal die Würfelzahl ausgegeben werden, wenn taster_old noch auf 1 steht und taster aber auf Null. Mit diesen beiden signalen erkennt der Prozess den Signalwechsel. (Achtung, den Code oben hab ich jetzt nicht getestet, da können schon noch Probleme damit auftauchen.)
Hilft Dir das weiter?
Hans-Dieter Schondelmaier
embedded Software und VHDL-Designs (www.entwickler-software.com)
|
|
Gast
|
Erstellt: 22.04.09, 20:57 Betreff: Re: elektronischer Würfel & Zähler mit VHDL - HILFE -
drucken
weiterempfehlen
|
|
|
Zitat: hdschondelmaier
Hallo Volker,
Ich kenn Dein Tool nicht, aber im Prozess "taster" verwendest Du den case Konstrukt, obwohl Du nur einen Fall abfrägst. Bei Verwendung des case-Konstrukt musst Du alle anderen Fälle noch definieren z.B so:
case zahl_internzwei is when "0000000" => ... when others => ... end case;
Du könntest den case aber auch durch eine if-Abfrage ersetzen !
Ausserdem versteh ich den gesamten Prozess "taster" nicht recht. Was willst Du damit erreichen??? Ich denke mal, Du willst den Fall abfangen, wenn der Taster wieder losgelkassen wurde: Ich würde das so irgendwie machen (nicht getestet):
signal taster_old : std_logic; -- Kopie vom signal Taster process (taster) begin if taster = '1' then -- solange der taster =1, ist er gedrueckt taster_old <= '1'; else -- taster ist nicht gedrueckt if taster_old = '1' then -- wenn taster aber gedrueckt war, dann... zahl <= zahl_interndrei; -- Zahl ausgeben taster_old <= '0'; end if; end process;
Mit diesem Prozess soll nur einmal die Würfelzahl ausgegeben werden, wenn taster_old noch auf 1 steht und taster aber auf Null. Mit diesen beiden signalen erkennt der Prozess den Signalwechsel. (Achtung, den Code oben hab ich jetzt nicht getestet, da können schon noch Probleme damit auftauchen.)
Hilft Dir das weiter?
Hans-Dieter Schondelmaier
embedded Software und VHDL-Designs (www.entwickler-software.com) |
|
|