www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Schleifen untile oder while


Autor: Bernd (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich muss die Steuerung für ein Zahlenschloss programmieren.
Leider habe ich mit den Schleifen ein Problem. (siehe Anhang until oder 
while geht irgendwie nicht) Ich benutze das alte Xilinx das für win98. 
Leider habe ich die Versionsnummer nicht im Kopf. Ich will zuerst über 
Button 4 Werte einlesen, dann soll nachgefragt werden ob ein 5 Wert noch 
eingelesen werden soll für den Supercode. Button „1111“ steht für keine 
Taste gedrückt.

Vielen Dank für Eure Hilfe!

Bernd

Autor: Bernd (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Zum leichteren Verständnis vielleicht noch eine Skizze als jpg.
Vielen Dank!

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In VHDL gibt es keine Schleifen wie until, while oder for in anderen 
Programmiersprachen. Die Sprache kennt diese Begriffe zwar, sie haben 
jedoch alle eine andere Bedeutung.

In VHDL brauchst du eine Statemachine. Alternativ waere auch eine 
Implementierung mit einem Counter moeglich, aber das ist nur eine andere 
Schreibweise der selben Logik.


Achja: Du solltest an eine Grundregel denken: Jedes Signal muss immer in 
jedem Fall zugewiesen werden.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Bernd (Gast)

>Ich muss die Steuerung für ein Zahlenschloss programmieren.
>Leider habe ich mit den Schleifen ein Problem. (siehe Anhang until oder
>while geht irgendwie nicht) Ich benutze das alte Xilinx das für win98.

Hast du überhaupt schonmal was mit Programmierbarer Logik und VHDL 
gemacht?

Du brauchst eine State Machine. Die State Machine braucht einen Takt. 
Deine Tasten müssen entprellt werden, entweder per Hardware oder per 
Logik. Seine Schleifenkonstruktion mit wait untill kannst du sofort 
vergessen, das ist vollkommen falsch.

MfG
Falk

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Jan M. (mueschel)

>Achja: Du solltest an eine Grundregel denken: Jedes Signal muss immer in
>jedem Fall zugewiesen werden.

Stimmt nicht. Das gilt nur für kombinatorische Prozesse. In einem 
getakteten Prozess ist das vollkommen egal.

MfG
Falk

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Falk: Die Synthese erkennt zwar synchrone Prozesse und verhaelt sich 
entsprechend, auch wenn Signale ausschliesslich auf einer Taktflanke 
zugewiesen werden. Ich halte es aber trotzdem fuer sauberer, Signale 
immer zuzuweisen und auch in einem getakteten Prozess einen else-Zweig 
zu benutzen.

Ausserdem: Ein "Profi" weiss, wann er was wo weglassen darf, fuer 
Anfaenger finde ich solche pauschalen Aussagen jedoch gut, da sie viele 
Fehler vermeiden helfen und nur in ganz seltenen Faellen zu neuen 
Fehlern fuehren.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!

>In VHDL brauchst du eine Statemachine.

Mit dem Begriff als solches kann ich leider nicht viel anfangen.
Hat jemand mal ein kleines Beispiel?

>Deine Tasten müssen entprellt werden, entweder per Hardware oder per
Logik.

Die Tasten sind in dem programm schon entprellt worden.
Die Tastertur hat jemand anderes programmiert, ich bekomme von dem 
anderen Programm die Werte Buttom, Loesche und Eingabe übergeben.
Ich bin davon ausgegangen das ich kein clk mehr brauche und das die If 
Anweisung solange ausgeführt wird bis entwerder 4 eingaben erfolgt sind 
oder bis Enter das entspricht Eingabe = 1 gedrückt wird.

Kann jemand mir vielleicht ein Beispiel für die Lösung geben?
Danke!

Bernd

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Jan M. (mueschel)

>zugewiesen werden. Ich halte es aber trotzdem fuer sauberer, Signale
>immer zuzuweisen und auch in einem getakteten Prozess einen else-Zweig
>zu benutzen.

Sehe ich nicht so. vor allem kann es unübersichtlich werden. Und solchen 
Quark wie

my_signal <= my_signal;

Muss man nur in ABEL schreiben, da hat mich dort schon aufgeregt.

>Ausserdem: Ein "Profi" weiss, wann er was wo weglassen darf, fuer
>Anfaenger finde ich solche pauschalen Aussagen jedoch gut, da sie viele

Finde ich nicht. Grenzen aufzeigen und vereinfachen ist OK, aber das ist 
mir zu restriktiv.

@ Bernd (Gast)

>Mit dem Begriff als solches kann ich leider nicht viel anfangen.

Dann solltest du dich mit den Grundlagen beschäftigen. Auf deutsch 
heisst das Zustandsautomat. Gern unter den Namen von Meely und More 
gehandelt (machmal auch Medvedev, aber das eher in der östlichen 
Hemissphäre)

>Hat jemand mal ein kleines Beispiel?

process(clk)
begin
  if rising_edge(clk) then
    case state is
      when warten => if taste='1' then
                       state = Z1;
                     end if;

      when z1     => state = Z2;

      when z2     => if code="111" then
                       state <= warten;
                     else
                       state <= Z1;
                     end if;

      when others => state <= warten;
    end case;
  end if;
end process;

Das Beispiel ist zwar wenig sinnvoll, zeigt aber das Prinzip.

>Die Tasten sind in dem programm schon entprellt worden.

Welchem Programm? Es geht hier um PROGRAMMIERBARE DIGITALE LOGIK, NCIHT 
um Mikrocontroller!

>Kann jemand mir vielleicht ein Beispiel für die Lösung geben?

Du braucht erstmal elementare grundlagen in Logikdesign. Das ist nicht 
gleich Mikrocontrollerprogrammierung!

MFG
Falk

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich werde mal meine Frage anders formulieren. Wie kann ich das Programm 
zwingen das es solange wartet, bis 4 oder 5 Tasten gedrückt sind und 
diese durch Enter sprich Eingabe = 1 bestätigt werden???

Vielen Dank!

Bernd!

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Indem du einen Zustandsautomat baust der die Anzahl der gedrückten 
Tasten zählt.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchem Programm? Es geht hier um PROGRAMMIERBARE DIGITALE LOGIK, NCIHT
um Mikrocontroller!

Es sind insgesamt 3 Teile die (Tastatur, Steuerung und 7Seg.)
Diese werden dann zu einem Top Modul zusammen gefasst.
mit component

Danke für das Beispiel!

Ich möchte auch den anderen für Ihre Hilfe danken!

Bernd

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ern unter den Namen von Meely und More
>gehandelt (machmal auch Medvedev, aber das eher in der östlichen
>Hemissphäre)

Wieso manchmal?
Es gibt drei Arten von Zustandsautomaten:

Medvedev:
    Z_neu = F(X,Z_akt)
    Y     = Z_akt

Moore:
    Z_neu = F(X,Z_akt)
    Y     = F(Z_akt)

Mealy
    Z_neu = F(X,Z_akt)
    Y     = F(X,Z_akt)

Am meisten wird Moore verwendet.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank Matthias und den Anderen!

ich werde mal mein Glück zu Hause versuchen!

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.