Autor |
Beitrag |
SilverDragon666
Neuling
Beiträge: 6
|
Erstellt: 08.01.07, 20:25 Betreff: Schaltung
drucken
Thema drucken weiterempfehlen
|
|
|
Hallo,
bin neu auf dem Gebiet der VHDL und versuche mich gerade ein wenig einzuarbeiten.
Habe ein Beispiel von einem Studienkollegen aufgegriffen, in dem es um eine Ampelschaltung geht.
Über die Architektur wird dem Signal phase dür den Ablauf eine Zählsteuerung realisiert.
ENTITY ampel IS
PORT (reset : IN BIT; red, yellow, green : INOUT BIT);
END ampel;
ARCHITECTURE zaehler OF ampel IS SIGNAL clock : BIT :='0' ; SIGNAL phase : BIT_VECTOR(2 DOWNTO 0) :="000"; BEGIN clock <= NOT clock AFTER 50 ns; phase <= "001" WHEN (clock'event AND phase="000") ELSE "010" WHEN (clock'event AND phase="001") ELSE "011" WHEN (clock'event AND phase="010") ELSE "100" WHEN (clock'event AND phase="011") ELSE "101" WHEN (clock'event AND phase="100") ELSE "000" WHEN (clock'event AND phase="101") ; END zaehler;
Nun möchte ich gerne das ganze so ergänzen, dass Ausgaben an red, yellow und green erfolgen.
Es gibt insgesamt 6 Phasen.
Phase 0 green=1 yellow=0 red=0 Phase 1 green=1 yellow=0 red=0 Phase 2 green=1 yellow=1 red=0 Phase 3 green=0 yellow=0 red=1 Phase 4 green=0 yellow=1 red=1 Phase 5 green=0 yellow=1 red=0
Wie bekomme ich dies am schnellsten hin?
Für eure Hilfe wäre ich sehr dankbar!
|
|
nach oben |
|
|
DaMicha
Stammgast
Beiträge: 27 Ort: Rostock
|
Erstellt: 09.01.07, 07:06 Betreff: Re: Schaltung
drucken
weiterempfehlen
|
|
|
Hallo.
Im Prinzip genauso wie bei der Statezuweisung:
green <= '1' when (phase = "000" or phase = "001" or phase = "010") else '0';
yellow und red dann analog nach Deiner Tabelle.
Gruß DaMicha.
|
|
nach oben |
|
|
SilverDragon666
Neuling
Beiträge: 6
|
Erstellt: 09.01.07, 08:25 Betreff: Re: Schaltung
drucken
weiterempfehlen
|
|
|
Vielen Dank erst einmal für die nette Erklärung.
Ich probiere es gerade einzubauen, aber scheitere immer daran, dass ich es nicht so recht hinbekomme, deine Zuweisung in meinen bisherigen Code zu bekommen. Kannst du mir vielleicht mal den Anfang erklären?
|
|
nach oben |
|
|
SilverDragon666
Neuling
Beiträge: 6
|
Erstellt: 09.01.07, 08:34 Betreff: Re: Schaltung
drucken
weiterempfehlen
|
|
|
Ok, habe es jetzt selbst hinbekommen!
War ja eigentlich auch nicht mehr so schwer nach deinen Erklärungen!
Danke!
ARCHITECTURE fifth OF ampel IS TYPE states IS SIGNAL clock : BIT :='0' ; SIGNAL phase : BIT_VECTOR(2 DOWNTO 0) :="000" ; BEGIN clock <= NOT clock AFTER 50 ns; phase <= "001" WHEN (clock'event AND phase="000") ELSE "010" WHEN (clock'event AND phase="001") ELSE "011" WHEN (clock'event AND phase="010") ELSE "100" WHEN (clock'event AND phase="011") ELSE "101" WHEN (clock'event AND phase="100") ELSE "000" WHEN (clock'event AND phase="101") ; green <= '1' WHEN (phase = "000" OR phase = "001" OR phase = "010") ELSE '0'; yellow <= '1' WHEN (phase = "010" OR phase = "100" OR phase = "101") ELSE '0'; red <= '1' WHEN (phase = "011" OR phase = "100") ELSE '0'; END fifth;
[editiert: 09.01.07, 08:35 von SilverDragon666]
|
|
nach oben |
|
|
SilverDragon666
Neuling
Beiträge: 6
|
Erstellt: 09.01.07, 08:41 Betreff: Re: Schaltung
drucken
weiterempfehlen
|
|
|
So, jetzt ist mir eingefallen, dass es ja noch eine Reset-Funktion geben sollte.
Wie könnte man diese realisieren?
RESET müsste dann ja auf jeden Fall "green" ergeben.
|
|
nach oben |
|
|
SilverDragon666
Neuling
Beiträge: 6
|
Erstellt: 09.01.07, 10:21 Betreff: Re: Schaltung
drucken
weiterempfehlen
|
|
|
Habe jetzt folgendes versucht:
ARCHITECTURE fifth OF ampel IS SIGNAL clock : BIT :='0' ; SIGNAL phase : BIT_VECTOR(2 DOWNTO 0) :="000" ; BEGIN clock <= NOT clock AFTER 50 ns; phase <= "001" WHEN (clock'event AND phase="000") OR (clock'event AND reset = '1') ELSE "010" WHEN (clock'event AND phase="001") ELSE "011" WHEN (clock'event AND phase="010") ELSE "100" WHEN (clock'event AND phase="011") ELSE "101" WHEN (clock'event AND phase="100") ELSE "000" WHEN (clock'event AND phase="101") ; green <= '1' WHEN (phase = "000" OR phase = "001" OR phase = "010") ELSE '0'; yellow <= '1' WHEN (phase = "010" OR phase = "100" OR phase = "101") ELSE '0'; red <= '1' WHEN (phase = "011" OR phase = "100") ELSE '0'; END fifth;
Kann ich die Reset-Funktion so mit einbringen? Wie kann ich reset zum Testen mal auf 1 bringen?
|
|
nach oben |
|
|
SilverDragon666
Neuling
Beiträge: 6
|
Erstellt: 09.01.07, 10:49 Betreff: Re: Schaltung
drucken
weiterempfehlen
|
|
|
Habe jetzt alles selbst hinbekommen. DANKE an alle!
|
|
nach oben |
|
|
|