VHDL-Forum

 
Sie sind nicht eingeloggt.
LoginLogin Kostenlos anmeldenKostenlos anmelden
BeiträgeBeiträge MembersMitglieder SucheSuche HilfeHilfe
VotesUmfragen FilesDateien CalendarKalender BookmarksBookmarks
Schaltung

Anfang   zurück   weiter   Ende
Autor Beitrag
SilverDragon666
Neuling


Beiträge: 6

New PostErstellt: 08.01.07, 20:25  Betreff: Schaltung  drucken  Thema drucken  weiterempfehlen Antwort mit Zitat  

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
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
DaMicha
Stammgast


Beiträge: 27
Ort: Rostock

New PostErstellt: 09.01.07, 07:06  Betreff: Re: Schaltung  drucken  weiterempfehlen Antwort mit Zitat  

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
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
SilverDragon666
Neuling


Beiträge: 6

New PostErstellt: 09.01.07, 08:25  Betreff: Re: Schaltung  drucken  weiterempfehlen Antwort mit Zitat  

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
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
SilverDragon666
Neuling


Beiträge: 6

New PostErstellt: 09.01.07, 08:34  Betreff: Re: Schaltung  drucken  weiterempfehlen Antwort mit Zitat  

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
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
SilverDragon666
Neuling


Beiträge: 6

New PostErstellt: 09.01.07, 08:41  Betreff: Re: Schaltung  drucken  weiterempfehlen Antwort mit Zitat  

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
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
SilverDragon666
Neuling


Beiträge: 6

New PostErstellt: 09.01.07, 10:21  Betreff: Re: Schaltung  drucken  weiterempfehlen Antwort mit Zitat  

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
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
SilverDragon666
Neuling


Beiträge: 6

New PostErstellt: 09.01.07, 10:49  Betreff: Re: Schaltung  drucken  weiterempfehlen Antwort mit Zitat  

Habe jetzt alles selbst hinbekommen. DANKE an alle!

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
Sortierung ndern:  
Anfang   zurück   weiter   Ende
Seite 1 von 1
Gehe zu:   
Search

powered by carookee.com - eigenes profi-forum kostenlos

Design © trevorj