Hallo, ich soll in der Uni eine Ampelsteuerung mit vhdl umsetzen und auf ein FPGA laden. Dafür habe ich unterschiedliche Zustände die immer unterschiedlich lang laufen sollen. Wie lange ein Zustand läuft wird über einen Counter definiert der jede Sekunde hochzählt. Mein Problem ist jetzt, dass ich wenn ein Zustandsübergang stattfindet diesen Counter zurücksetzen möchte, also das reset-signal auf '1' setzen. Leider muss das Signal damit dann angefangen werden kann zu zählen auch wieder auf '0' zurückgesetzt werden und genau das kriege ich nicht hin. Gibt es eine einfache Möglichkeit ein Signal für etwa eine Clockperiode auf '1' zu setzen und es automatisch danach wieder zurückzusetzen? Im Vorraus schon mal vielen Dank.
Gast
#4612090
Nils S. schrieb: > Gibt es eine einfache Möglichkeit ein Signal für etwa eine Clockperiode > auf '1' zu setzen und es automatisch danach wieder zurückzusetzen? Also ich würde zwischen dem Zustand Grün und Rot dann einen Zustand Rot+CntrReset einführen, indem dein Zähler rückgesetzt wired, die Ampel noch rot anzeigt und sobald du in Grün bist steht dein Zähler für die neue Aufgabe bereit. case currentState is redCntrReset => nextState <= green; ....
Nils S. schrieb: > Gibt es eine einfache Möglichkeit ein Signal für etwa eine Clockperiode > auf '1' zu setzen und es automatisch danach wieder zurückzusetzen? Ja. Das ist ganz normales synchrones Design: dort werden laufend Valid-Signale erzeugt, die für 1 Taktzyklus lang aktiv sind und Aktionen auslösen. Oder andersrum: es gibt nur 1 Takt im gesamten Design. Der Rest sind Clock-Enables, die von diesem Takt abgeleitet werden... Wie das gemeint ist, das kannst du z.B. im Beitrag "Ampelsteuerung mit Schematics Basys2" sehen. Oder eigentlich ist eine Ampel erst mal nichts Anderes als ein spezialisiertes Lauflicht http://www.lothar-miller.de/s9y/archives/61-Lauflicht.html
Gast
#4612102
Du berechnest ja irgendwo einen Folgezustand für Deine State Machine, der im nächsten Takt in das State Register übernommen wird. Du könntest einfach abfragen ob Folgezustand != aktueller Zustand ist, und falls ja, Reset=1 setzen. Dann wird bei jedem Wechsel in einen andere Zustand der Reset für einen Takt gesetzt.
Nils S. schrieb: > mit vhdl umsetzen und auf ein FPGA laden. Dafür habe ich unterschiedliche > Zustände die immer unterschiedlich lang laufen sollen. Lass doch mal sehen...
Wenn du eine schnelle Lösung brauchst, dann so:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
Somit erreichst du, dass dein "Reset"-Signal für einen Takt high ist. Aber vorsicht: Wenn du latch high und dann wieder low setzt hast du zwei resets ausgelöst. Es wird daher empfohlen das signal latch mit not invertieren zu lassen. Vllt suchst du danach.
Warum nicht einfach sowas?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Damit hast Du beim Übergang in den nächsten State deinen cntr wieder auf Null und kann ihn dort neu hochzählen mit einem anderen Grenzwert.
Gast
#4649330
ich bringe mal den Vorschlag:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
Das setzt das signal "signal" beim Uebergang genau fuer eine Taktperiode. Ralf
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.