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


von Bernd (Gast)


Angehängte Dateien:

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

von Bernd (Gast)


Angehängte Dateien:

Lesenswert?

Zum leichteren Verständnis vielleicht noch eine Skizze als jpg.
Vielen Dank!

von Jan M. (mueschel)


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.

von Falk B. (falk)


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

von Falk B. (falk)


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

von Jan M. (mueschel)


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.

von Bernd (Gast)


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

von Falk B. (falk)


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

von Bernd (Gast)


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!

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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

von Bernd (Gast)


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

von Matthias L. (Gast)


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.

von Bernd (Gast)


Lesenswert?

Vielen Dank Matthias und den Anderen!

ich werde mal mein Glück zu Hause versuchen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.