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
Zum leichteren Verständnis vielleicht noch eine Skizze als jpg. Vielen Dank!
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.
@ 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
@ 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
@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.
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
@ 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
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!
Indem du einen Zustandsautomat baust der die Anzahl der gedrückten Tasten zählt.
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
>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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.