www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Eine Uhr in VHDL (für ein Basys-Board Xinlinx Spartan 3E 100TQ144) )


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: VHDL-Noob (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite Flattr this
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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... ;-)

Autor: VHDL-Noob (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: VHDL-Noob (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
PS: Tut mir Leid, dass ich mich vertippt habe ;) Muss natürlich 
"Trompeten" heißen!

Autor: voodoofrei (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite Flattr this
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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...

Autor: VHDL-Noob (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Alles klar, dann werde ich es mal so versuchen. Vielen Dank für die 
Antworten.

Autor: Gustl Buheitel (-gb-)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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!

Autor: Marius Wensing (mw1987)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Gustl Buheitel schrieb:
> Dafür
> kann man gut Karnaugh-Diagramme nutzen.
> http://de.wikipedia.org/wiki/Karnaugh-Veitch-Diagramm

Nutzt die überhaupt noch ernsthaft jemand? Mit VHDL oder Verilog nimmt 
einem die Arbeit doch der Synthesizer ab. Ist in meinen Augen 
verschwendete Zeit...

MfG
Marius

Autor: Gustl Buheitel (-gb-)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Duke Scarring (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Autor: VHDL-Noob (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity zaehl_zehn is
    Port ( mclock : in  STD_LOGIC;
           clk_en : in  STD_LOGIC;
           reset : in  STD_LOGIC;
           stell : in  STD_LOGIC;
        zehn_aus : out  STD_LOGIC;
           q0 : out  STD_LOGIC;
           q1 : out  STD_LOGIC;
           q2 : out  STD_LOGIC;
           q3 : out  STD_LOGIC);
end zaehl_zehn;

architecture Behavioral of zaehl_zehn is
signal count : std_logic_vector(3 downto 0);

begin
  process (mclock, reset) 


begin

if reset='1' then 
      count <= (others => '0');
    zehn_aus <= '0';
   elsif (clk_en='1' and clk_en'event) or (stell='1' and mclock'event) then
         count <= count + 1;
      
      if count = "0000" then
      q0 <= '0';
      q1 <= '0';
      q2 <= '0';
      q3 <= '0';
      end if;
      
      if count = "0001" then
      q0 <= '1';
      q1 <= '0';
      q2 <= '0';
      q3 <= '0';
      end if;
      
      if count = "0010" then
      q0 <= '0';
      q1 <= '1';
      q2 <= '0';
      q3 <= '0';
      end if;
      
      if count = "0011" then
      q0 <= '1';
      q1 <= '1';
      q2 <= '0';
      q3 <= '0';
      end if;
      
      if count = "0100" then
      q0 <= '0';
      q1 <= '0';
      q2 <= '1';
      q3 <= '0';
      end if;
      
      if count = "0101" then
      q0 <= '1';
      q1 <= '0';
      q2 <= '1';
      q3 <= '0';
      end if;
      
      if count = "0110" then
      q0 <= '0';
      q1 <= '1';
      q2 <= '1';
      q3 <= '0';
      end if;
      
      if count = "0111" then
      q0 <= '0';
      q1 <= '1';
      q2 <= '1';
      q3 <= '1';
      end if;
      
      if count = "1000" then
      q0 <= '0';
      q1 <= '0';
      q2 <= '0';
      q3 <= '1';
      end if;
      
      if count = "1001" then
      q0 <= '1';
      q1 <= '0';
      q2 <= '0';
      q3 <= '1';
      end if;
      
      if count = "1010" then
      zehn_aus <= '1';
      count <=    "0000";
      else
      zehn_aus <= '0';
      end if;
end if;
      
      end process;

end Behavioral;

Autor: Uwe (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Uwe (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
> elsif (clk_en='1' and clk_en'event) or (stell='1' and mclock'event) then

Mal mal dieses Konstrukt auf !

Autor: derLars (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ich würde zunächst mit einem VHDL-Tutorial bzw. Buch anfangen!

Mir hat VHDL-Synthese gut gefallen!

derLars

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite Flattr this
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
VHDL-Noob schrieb im Beitrag #2688654:
> elsif (clk_en='1' and clk_en'event) or (stell='1' and mclock'event)
Ein Double-Clock-And-Double-Enable-And-Double-Edge-Flipflop?
Das gibt es nicht.

> Also ich hab jetzt mal versucht nen Zähler zu schreiben,
Das was da steht wird niemals was rechtes zusammengeben.
Probiers erst mal das mit der blinkenden LED:
http://www.lothar-miller.de/s9y/archives/80-Hello-...
und dem Lauflicht:
http://www.lothar-miller.de/s9y/archives/61-Lauflicht.html
Und wenn du das verstanden hast, dann ist auch die Uhr kein Problem 
mehr.

Lothar Miller schrieb:
>> 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.
Ich helf dir mal mit dem Link auf den 
Beitrag "kruder Fehler bei FPGA-Programmierung (ISE WEBpack-Schematic)"

Autor: VHDL-Noob (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite Flattr this
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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...

Autor: Duke Scarring (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
VHDL-Noob schrieb im Beitrag #2688654:
> use IEEE.STD_LOGIC_ARITH.ALL;
> use IEEE.STD_LOGIC_UNSIGNED.ALL;

Siehe Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete"

Duke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net