Forum: FPGA, VHDL & Co. Ampelschaltung


von Moritz R. (moritz_r483)


Lesenswert?

Hallo,

ich habe ein kleines Problem mit einer Ampelschaltung.
Die Schaltung für die zwei Ampeln (main und side) funktionieren.
Jetzt wollte ich eine Fußgängerampel integrieren die folgendes tun soll:

- nach dem drücken des BTN0 wird ein Merker gesetzt
- Wenn die Ampel Main im State Green ist, soll die Fußgängerampel rot 
leuchten
- Die Ampel Main durchläuft weiterhin die normalen Zyklus von grün -> 
gelb-> rot -> rotgelb -> grün
- allerdings soll die Fußgängerampel dann einen Zyklus lang aktiv sein.
- also wenn die Ampel Main grün, gelb, gelbrot ist soll die 
Fußgängerampel rot leuchten und wenn die Ampel Main rot leuchtet, soll 
die Fußgängerampel umschalten auf grün.
- die Fußgängerampel soll sich ausschalten sobald die Ampel Main wieder 
im Zustand Green ankommt und warten bis der Taster BTN0 wieder gedrückt 
wird.

Der Code dazu ist folgender, allerding habe ich Probleme mit dem 
aktivieren und deaktivieren der Fußgängerampel für genau einen Zyklus.
Hat jemand einen Tipp?
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.numeric_std.all;
4
5
entity TOP is
6
    Port (
7
        CLK, SW, BTN0: in bit;
8
        LEDMAINR, LEDSIDER, LEDMAING, LEDSIDEG, LEDPEDG, LEDPEDR: out bit
9
    );
10
    constant TRED: unsigned (3 downto 0) := "0010";
11
    constant TREDAMBER: unsigned (3 downto 0) := "0010";
12
    constant TGREEN: unsigned (3 downto 0) := "0010";
13
    constant TAMBER: unsigned (3 downto 0) := "0010";
14
    constant PED_CYCLE_LENGTH: integer := 10; -- Define the length of one cycle of the pedestrian lights
15
    constant DIVBY: integer := 100000000;
16
end TOP;
17
18
architecture Behavioral of TOP is
19
    component PWM is
20
        Port (
21
            CLK: in bit;
22
            DUTY: in unsigned (7 downto 0);
23
            PWMOUT: out bit
24
        );
25
    end component;
26
    
27
    signal DUTYMAINR, DUTYMAING, DUTYSIDER, DUTYSIDEG, DUTYPEDG, DUTYPEDR: unsigned (7 downto 0);
28
    signal CNTPHASE: unsigned (3 downto 0);
29
    signal STB: bit;
30
    signal CNTSTB: integer;
31
    type MSTATE is (INIT, RED, REDAMBER, GREEN, AMBER);
32
    signal STATE: MSTATE;
33
    signal PEDESTRIAN_ACTIVE: boolean := false;
34
    signal PEDESTRIAN_DURATION: integer := 0; -- Counter for pedestrian light duration
35
    signal PEDESTRIAN_REQUEST: boolean := false;
36
begin
37
38
    strobe: process(CLK)
39
    begin
40
        if CLK='1' and CLK'event then
41
            if (CNTSTB /= (DIVBY-1)) then
42
                STB <= '0';
43
                CNTSTB <= CNTSTB + 1;
44
            else
45
                STB <= '1';
46
                CNTSTB <= 0;
47
            end if;
48
        end if;
49
    end process strobe;
50
51
    STATE1: process(CLK, STB, BTN0)
52
    begin
53
        if CLK='1' and CLK'event then
54
            if (CNTPHASE = 0) then
55
                case STATE is
56
                    when INIT =>
57
                        STATE <= GREEN;
58
                        CNTPHASE <= TGREEN;
59
        
60
                    when RED =>
61
                        STATE <= REDAMBER;
62
                        CNTPHASE <= TREDAMBER;
63
           
64
                    when REDAMBER =>
65
                        STATE <= GREEN;
66
                        CNTPHASE <= TGREEN;
67
                      
68
                    when GREEN =>
69
                        STATE <= AMBER;
70
                        CNTPHASE <= TAMBER;
71
                      
72
                    when AMBER =>
73
                        STATE <= RED;
74
                        CNTPHASE <= TRED;
75
              
76
                end case;
77
                -- Reset pedestrian duration counter at the beginning of a cycle
78
                    if PEDESTRIAN_ACTIVE = false then
79
                        PEDESTRIAN_DURATION <= PED_CYCLE_LENGTH;
80
                    end if;
81
            elsif (STB = '1') then
82
                CNTPHASE <= CNTPHASE - 1;
83
                
84
                -- Decrement pedestrian duration counter during each clock cycle
85
                if PEDESTRIAN_DURATION > 0 then
86
                    PEDESTRIAN_DURATION <= PEDESTRIAN_DURATION - 1;
87
                end if;
88
            end if;
89
90
            -- Set pedestrian flag if BTN0 pressed and the system is in GREEN state
91
            if BTN0 = '1' and STATE = GREEN then
92
                PEDESTRIAN_REQUEST <= true;
93
            end if;
94
95
            -- Activate pedestrian light if there is a pedestrian request and the system is in GREEN state
96
            PEDESTRIAN_ACTIVE <= PEDESTRIAN_REQUEST and STATE = GREEN;
97
98
            -- Deactivate pedestrian light after it gets to the GREEN state again
99
            if STATE = GREEN and PEDESTRIAN_ACTIVE = true then
100
                PEDESTRIAN_REQUEST <= false; -- Reset the pedestrian request flag
101
        end if;
102
        end if;
103
    end process STATE1;
104
105
    mr: PWM Port map (
106
        CLK => CLK,
107
        DUTY => DUTYMAINR,
108
        PWMOUT => LEDMAINR
109
    );
110
    mg: PWM Port map (
111
        CLK => CLK,
112
        DUTY => DUTYMAING,
113
        PWMOUT => LEDMAING
114
    );
115
    sr: PWM Port map (
116
        CLK => CLK,
117
        DUTY => DUTYSIDER,
118
        PWMOUT => LEDSIDER
119
    );
120
    sg: PWM Port map (
121
        CLK => CLK,
122
        DUTY => DUTYSIDEG,
123
        PWMOUT => LEDSIDEG
124
    );
125
    pg: PWM Port map (
126
        CLK => CLK,
127
        DUTY => DUTYPEDG,
128
        PWMOUT => LEDPEDG
129
    );
130
    pr: PWM Port map (
131
        CLK => CLK,
132
        DUTY => DUTYPEDR,
133
        PWMOUT => LEDPEDR
134
    );
135
136
    STATE2: process(CLK)
137
    begin
138
        if CLK='1' and CLK'event then
139
            case STATE is
140
                when RED =>
141
                    DUTYMAINR <= "10000000";
142
                    DUTYMAING <= "00000000";
143
                    DUTYSIDER <= "00000000";
144
                    DUTYSIDEG <= "10000000";
145
                     if PEDESTRIAN_ACTIVE and PEDESTRIAN_DURATION > 0 then
146
                        DUTYPEDR <= "00000000";  -- Pedestrian light ON
147
                        DUTYPEDG <= "10000000";
148
                    else
149
                        DUTYPEDG <= "00000000";
150
                        DUTYPEDR <= "00000000";  -- Pedestrian light OFF
151
                    end if;
152
                when REDAMBER =>
153
                    DUTYMAINR <= "01110000";
154
                    DUTYMAING <= "00010000";
155
                    DUTYSIDER <= "01110000";
156
                    DUTYSIDEG <= "00010000";
157
                     if PEDESTRIAN_ACTIVE and PEDESTRIAN_DURATION > 0 then
158
                        DUTYPEDR <= "10000000";
159
                        DUTYPEDG <= "00000000";  -- Pedestrian light ON
160
                    else
161
                        DUTYPEDG <= "00000000";
162
                        DUTYPEDR <= "00000000"; 
163
                    end if; -- Pedestrian light OFF  -- Pedestrian light OFF
164
                when GREEN =>
165
                    DUTYMAINR <= "00000000";
166
                    DUTYMAING <= "10000000";
167
                    DUTYSIDER <= "10000000";
168
                    DUTYSIDEG <= "00000000";
169
                    if PEDESTRIAN_ACTIVE and PEDESTRIAN_DURATION > 0 then
170
                        DUTYPEDR <= "10000000";
171
                        DUTYPEDG <= "00000000";  -- Pedestrian light ON
172
                    else
173
                        DUTYPEDG <= "00000000";
174
                        DUTYPEDR <= "00000000";  -- Pedestrian light OFF
175
                    end if;
176
                when AMBER =>
177
                    DUTYMAINR <= "01110000";
178
                    DUTYMAING <= "00010000";
179
                    DUTYSIDER <= "01110000";
180
                    DUTYSIDEG <= "00010000";
181
                     if PEDESTRIAN_ACTIVE and PEDESTRIAN_DURATION > 0 then
182
                        DUTYPEDR <= "10000000";
183
                        DUTYPEDG <= "00000000"; -- Pedestrian light ON
184
                    else
185
                        DUTYPEDG <= "00000000";
186
                        DUTYPEDR <= "00000000";
187
                     end if;  -- Pedestrian light OFF
188
                when others =>
189
                    DUTYMAINR <= "10000000";
190
                    DUTYMAING <= "00000000";
191
                    DUTYSIDER <= "10000000";
192
                    DUTYSIDEG <= "00000000";
193
                    DUTYPEDG <= "00000000";
194
                    DUTYPEDR <= "00000000";  -- Pedestrian light OFF
195
            end case;
196
        end if;
197
    end process STATE2;
198
end Behavioral;

: Bearbeitet durch Moderator
von Helmut -. (dc3yc)


Lesenswert?

Ich weiß zwar nicht, welche Programmiersprache das ist, weswegen ich 
nicht helfen kann. Aber es wäre schön, wenn du dich an die Forenregeln 
halten würdest:

Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Danke.

von Rick D. (rickdangerus)


Lesenswert?

Ohne (sinnvolle) Testbench macht debuggen keinen Spaß!
Kannst du deine Testbench noch anhängen?

von Marcel V. (mavin)


Lesenswert?

Helmut -. schrieb:
> Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Ein zusätzlicher Text zum Dateianhang hat aber den Vorteil, dass man den 
Sourcecode sofort von Unterwegs aus lesen kann und nicht erst warten 
muss, bis man ihn erst zu Hause mit dem Programm öffnen kann.

von Steve van de Grens (roehrmond)


Lesenswert?

Marcel V. schrieb:
> nicht erst warten
> muss, bis man ihn erst zu Hause mit dem Programm öffnen kann.

???

Ich kann angehängte Quelltexte direkt auf dem Android Smartphone öffnen. 
Kann mir auch kaum vorstellen, dass das auf anderen Geräten nicht geht.

von Max M. (fpga_eth)


Lesenswert?

Helmut -. schrieb:
> Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Nun anstatt OT zu generieren und sich darüber zu beschweren, könntest du 
einfach kurz einen mod benachrichtigen der dies kurz verbessern kann. 
Dein beitrag (wie auch dieser hier) helfen dem TO nicht weiter und sind 
OT.

@ Mod: diesen OT post (inkl. diesem) bitte löschen

: Bearbeitet durch User
von Christian K. (chkddd)


Lesenswert?

Das Verhalten der Fußgängersignale ist nach RiLSA überhaupt nicht 
zulässig.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Christian K. schrieb:
> Das Verhalten der Fußgängersignale ist nach RiLSA überhaupt nicht
> zulässig.

welches Schaltverhalten genau hast du identifiziert?
Wie müsste man es anpassen, damit es RiLSA konform wird?

von Re D. (re_d228)


Lesenswert?

Christian K. schrieb:
> Das Verhalten der Fußgängersignale ist nach RiLSA überhaupt nicht
> zulässig.

Es ist doch offensichtlich, dass hier jemand seine Hausaufgaben macht. 
Troll wo anders.

von Christian K. (chkddd)


Lesenswert?

Wegstaben V. schrieb:
> Christian K. schrieb:
>> Das Verhalten der Fußgängersignale ist nach RiLSA überhaupt nicht
>> zulässig.
>
> welches Schaltverhalten genau hast du identifiziert?
> Wie müsste man es anpassen, damit es RiLSA konform wird?

Das Ausschalten der Fußgängersignale.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Moritz R. schrieb:
> Hat jemand einen Tipp?

Ja. Entwerfe für dein Problem einen endlichen Automaten (finite state 
machine) und setze ihn in der Programmiersprache deiner Wahl um.

von Christian K. (chkddd)


Lesenswert?

Wegstaben V. schrieb:
> Christian K. schrieb:
>> Das Verhalten der Fußgängersignale ist nach RiLSA überhaupt nicht
>> zulässig.
>
> welches Schaltverhalten genau hast du identifiziert?
> Wie müsste man es anpassen, damit es RiLSA konform wird?

Das Ausschalten der Fußgängersignale.
Fußgängersignale dürfen nicht nur auf Bedarf Ein-/Ausgeschaltet werden 
sondern sind durchgehend in Betrieb entweder Zeigen die Freigabe oder 
Gesperrt.

von Re D. (re_d228)


Lesenswert?

Christian K. schrieb:
> Das Ausschalten der Fußgängersignale.
> Fußgängersignale dürfen nicht nur auf Bedarf Ein-/Ausgeschaltet werden
> sondern sind durchgehend in Betrieb entweder Zeigen die Freigabe oder
> Gesperrt.

Wenn  das dein einziges Problem ist, dann solltest du noch mal in die 
RiLSA schauen. Fußgängerampeln schalten nicht mit rot für den 
"Querverkehr" auf grün, sondern warten die Räumzeit ab.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Christian K. schrieb:
> Fußgängersignale dürfen nicht nur auf Bedarf Ein-/Ausgeschaltet werden
> sondern sind durchgehend in Betrieb entweder Zeigen die Freigabe oder
> Gesperrt.

Dann sind eben viele Fußgängersignale nicht RiLSA-konform. Trotzdem 
existieren sie im deutschen Straßenverkehr.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Moritz R. schrieb:
> also wenn die Ampel Main grün, gelb, gelbrot ist soll die Fußgängerampel
> rot leuchten und wenn die Ampel Main rot leuchtet, soll die
> Fußgängerampel umschalten auf grün.
Ich würde da noch eine Sekunde warten, bis der letzte Rotlichtsünder 
über den (noch leeren) Fußgängerübergang drüber ist. Und ich würde die 
Fußgängerampel schon deutlich eher rot schalten, vor die Straße auf grün 
geht.

Ein Tipp: einfach mal eine echte Fußgängerampel anschauen.

Andreas S. schrieb:
> Christian K. schrieb:
>> Fußgängersignale dürfen nicht nur auf Bedarf Ein-/Ausgeschaltet werden
>> sondern sind durchgehend in Betrieb
> Dann sind eben viele Fußgängersignale nicht RiLSA-konform. Trotzdem
> existieren sie im deutschen Straßenverkehr.
"Viele" kann nich sein. Denn ich kenne keine einzige, bei der die 
Straßenampel grün zeigt und die Fußgängerampel abgeschaltet ist. Was es 
allerdings gibt, ist gelbes Blinklicht auf der Straße, so lange die 
Fußgängerampel aus ist.

Moritz R. schrieb:
> Hat jemand einen Tipp?
Mein Ansatz wäre sowas wi das da im 
Beitrag "Re: Ampelsteuerung"

> Hat jemand einen Tipp?
die Sensitivliste ist falsch:
1
    STATE1: process(CLK, STB, BTN0)
2
    begin
3
        if CLK='1' and CLK'event then
4
        :
Da gehört nur CLK rein, die anderen beiden Signale sind unnötig.

Und noch ein Tipp: verwende die Funktion rising_edge() statt nur 'event.

Max M. schrieb:
> könntest du einfach kurz einen mod benachrichtigen der dies kurz
> verbessern kann.
Kann er nicht. Das muss der TO am gleich von Anfang an selber richtig 
machen und die Bedienungsanleitung über der Texteingabebox beachten. Und 
zudem war der Thread schon 6 Wochen tot und begraben, wozu für OT 
ausbuddeln?

von Re D. (re_d228)


Lesenswert?

Lothar M. schrieb:
> Ich würde da noch eine Sekunde warten, bis der letzte Rotlichtsünder
> über den (noch leeren) Fußgängerübergang drüber ist. Und ich würde die
> Fußgängerampel schon deutlich eher rot schalten, vor die Straße auf grün
> geht.

Wie gesagt, wie lang zu warten ist, muss man ausrechen. Nennt sich 
Zwischenzeit und steht im Regelwerk.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Lothar M. schrieb:
> Andreas S. schrieb:
>> Christian K. schrieb:
>>> Fußgängersignale dürfen nicht nur auf Bedarf Ein-/Ausgeschaltet werden
>>> sondern sind durchgehend in Betrieb
>> Dann sind eben viele Fußgängersignale nicht RiLSA-konform. Trotzdem
>> existieren sie im deutschen Straßenverkehr.
> "Viele" kann nich sein. Denn ich kenne keine einzige, bei der die
> Straßenampel grün zeigt und die Fußgängerampel abgeschaltet ist.

Es war nie die Rede davon, dass die Straßenampel grün zeige. Sog. 
"Bedarfsampeln" bzw. "Schlafampeln" werden per Knopfdruck eingeschaltet 
und beginnen dann mit einer kurzen Grünphase für die Straße und Rotphase 
für Fußgänger. Und nachdem der ganze Zyklus, d.h. der Grünphase für die 
Straßenüberquerung der Fußgänger, abgeschlossen ist, schalten sie sich 
wieder aus.

Eine durchaus interessante Betrachtung, ob für solch eine "Schlafampel" 
eine Benutzungspflicht besteht, findet sich hier:
https://www.haufe.de/recht/deutsches-anwalt-office-premium/zfs-72015-benutzungspflicht-einer-schlafampel-fuer-den-fussgaengerverkehr_idesk_PI17574_HI8493238.html

Das ist wohlgemerkt die Meinung eines Rechtsanwalts. Was in dem Verweis 
auf "Hentschel/König/Dauer, Kommentar zum Straßenverkehrsrecht, 41. 
Auflage, § 37 Rn 35" beschrieben wird, habe ich nicht recherchiert, da 
es im Kontext dieses Threads auch völlig irrevant ist. Hier geht es ja 
nur um die Existenz von (nicht defekten) Lichtzeichenanlagen, bei denen 
die Fußgängerzeichen im Normalzustand ausgeschaltet sind.

Auch in der Wikipedia wird die "Schlafampel" ausdrücklich erwähnt:
https://de.wikipedia.org/wiki/Ampel

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Andreas S. schrieb:
> Es war nie die Rede davon, dass die Straßenampel grün zeige.
Kann man aber ohne Widerspruch aus der Formulierung des TO genau so 
herleiten, denn

Moritz R. schrieb:
> die **Fußgängerampel** soll sich **ausschalten** sobald die *Ampel Main*
> wieder im Zustand Green ankommt
Da steht eben nichts davon, dass die Straßenampel ebenfalls 
ausgeschaltet wird.

Deshalb wäre es sinnvoll, gleich zu Beginn mit einem Zeitdiagramm die 
Abfolge der Hell- und Dunkelphasen der Lampen aufzuzeigen. Dann sieht 
man auch gleich, wie viele Zustände man für den Gesamtablauf braucht.

: Bearbeitet durch Moderator
von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich würde das Programm grundsätzlich anders aufbauen, nicht so ein 
"Friedhof" aus 1000x wenn-dann-sonst, wo keiner mehr durchblickt ...

Die Ampelschaltung ist doch ein immer wiederkehrender Zyklus, bestehend 
aus einzelnen Schritten, von denen einige (Fußgänger-Bedarfsampel) 
optional sind, d.h. ggf. übersprungen werden (je nachdem, ob jemand die 
zugehörige Taste gedrückt hat).

Also würde ich mir eine tabellarische Notierung ("Script") ausdenken, 
was diese Schritte, ihre Dauer und Bedinungen enthält, ggf. sogar auf 
externem Datenträger (SD-Karte), so dass man jederzeit ohne 
Neuprogrammierung das Verhalten anpassen kann.

Die Tabelle könnte folgenden Aufbau haben:

- für jeden Schritt eine Zeile
- jede Zeile besteht pro Ampel-LED aus einem Zeichen
 diese Zeichn könnten sein 0=aus, 1=unbedingt an, 2=bedingt an

usw. ...

: Bearbeitet durch User
von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Frank E. schrieb:
> ggf. sogar auf
> externem Datenträger (SD-Karte), so dass man jederzeit ohne
> Neuprogrammierung das Verhalten anpassen kann.

Solch ein Dateisystem in einer (V)HDL-Beschreibung zu realisieren, 
dürfte den Aufwand unglaublich in die Höhe treiben. Das mag zwar in der 
Simulation funktionieren, bei der einem auch Dateioperationen zur 
Verfügung stehen, nicht jedoch bei der Synthese für ein FPGA o.ä..

von Manfred P. (pruckelfred)


Angehängte Dateien:

Lesenswert?

Lothar M. schrieb:
> Ein Tipp: einfach mal eine echte Fußgängerampel anschauen.

Warum, wenn man doch im Forum fragen kann?

Lothar M. schrieb:
> Ich würde da noch eine Sekunde warten, bis der letzte Rotlichtsünder
> über den (noch leeren) Fußgängerübergang drüber ist. Und ich würde die
> Fußgängerampel schon deutlich eher rot schalten, vor die Straße auf grün
> geht.

Wer nicht mit geschlossenen Augen durch die Gegend fährt / läuft, kennt 
diese Totzeiten, wo alles Rot ist.

Andreas S. schrieb:
> Es war nie die Rede davon, dass die Straßenampel grün zeige. Sog.
> "Bedarfsampeln" bzw. "Schlafampeln" werden per Knopfdruck eingeschaltet
> und beginnen dann mit einer kurzen Grünphase für die Straße und Rotphase
> für Fußgänger. Und nachdem der ganze Zyklus, d.h. der Grünphase für die
> Straßenüberquerung der Fußgänger, abgeschlossen ist, schalten sie sich
> wieder aus.

Sind das irgendwelche landesspezifischen Sonderlocken?

In meiner Nähe ist eine Fußgängerampel, einfache Querung ohne 
PKW-Kreuzung.
Der Fußgänger hat dauerhaft rot, auf der Fahrbahn gibt es nur gelb und 
rot.
Bei Anforderung per Taster kommt gelb und kurz drauf rot, etwas 
zeitverzögert Fußgänger grün.
Nach Zeitablauf Fußgänger rot und verzögert auf der Fahrbahn aus.

Ganz wichtig sind "Toleranz-Ampeln" in zwei Nachbarstädten, eine 
Regionalzeitung hat sie anders benannt. Die Cannabis-Ampeln sind nicht 
offiziell, die haben ein paar Piraten überklebt und wurden zügig 
entfernt.

von Roland E. (roland0815)


Lesenswert?

Lustige Ampeln gibts inzwischen einige. In Wernigerode Hexen und Teufel, 
in Marburg Märchenfiguren. In Leipzig Ampelfrauchen mit Zöpfchen und 
Röckchen...

In Frederica historische Wachsoldaten...

Ist nett und steigert die Akzeptanz.

Ne Ampel ist ja eigentlich nur eine Reihe von Bitmustern, welche nach 
Zeit und/oder Ereignis durchgeschoben werden...

: Bearbeitet durch User
von Marcel V. (mavin)


Angehängte Dateien:

Lesenswert?

Roland E. schrieb:
> In Leipzig Ampelfrauchen mit Zöpfchen und Röckchen...

...und in Ostfriesland den hüpfenden Otti, mit seinem Ottifant.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Andreas S. schrieb:
> Frank E. schrieb:
>> ggf. sogar auf
>> externem Datenträger (SD-Karte), so dass man jederzeit ohne
>> Neuprogrammierung das Verhalten anpassen kann.
>
> Solch ein Dateisystem in einer (V)HDL-Beschreibung zu realisieren,
> dürfte den Aufwand unglaublich in die Höhe treiben. Das mag zwar in der
> Simulation funktionieren, bei der einem auch Dateioperationen zur
> Verfügung stehen, nicht jedoch bei der Synthese für ein FPGA o.ä..

Gibts doch bestimmt längst als fertiges Modul/Lib? Man muss ja nich 
tjedes Fahrrad neu erfinden, oder?

: Bearbeitet durch User
von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Frank E. schrieb:
> Gibts doch bestimmt längst als fertiges Modul/Lib? Man muss ja nich
> tjedes Fahrrad neu erfinden, oder?

Ja, so etwas gibt es schon, z.B. auch im Rahmen des MiST-FPGA-Projektes. 
Das ist aber kein Anfängerkram, der mal schnell von jemandem, der schon 
Probleme mit einer banalen Ampelsteuerung hat, an die eigene Hardware 
bzw. das eigene Projekt angepasst werden kann. Es ist eben nicht damit 
getan, wie in der Softwarewelt üblich, einfach irgendwo eine open()- und 
eine read()-Funktion aufzurufen und der Drops ist gelutscht.

Für solche Dateioperationen wäre vermutlich eher ein Softcore geeignet, 
der einen (V)HDL-Funktionsblock für den SD-Kartenzugriff ansteuert. Das 
Dateisystem wird dann "wie üblich" in Software realisiert. Und natürlich 
bräuchte der Softcore noch eine Möglichkeit, die gelesene Konfiguration 
dann in die eigentliche Ampelsteuerung zu laden. Das wäre natürlich zu 
Lerntzwecken durchaus interessant, aber ansonsten so ziemlich das 
unsinnigste Projekt.

von Rolf S. (audiorolf)


Lesenswert?

Andreas S. schrieb:
> (V)HDL-Funktionsblock für den SD-Kartenzugriff ansteuert.

und der ist auch nicht so ganz trivial. Da muss man gut simulieren oder 
man schreibt sich beim tatsächlichen Testen einen Haufen SD-Karten 
kaputt.

von Markus F. (mfro)


Lesenswert?

Eine SD-Karte, um ein FPGA-Design zu konfigurieren?
Da haut wieder jemand mit dem Hammer Schrauben in die Wand ;)

Wenn's denn unbedingt konfigurierbar sein muss, nimmt man ein FPGA, das 
partial reconfiguration unterstützt und lädt so andere Konfigurationen.

Das wäre wenigstens "artgerechte Haltung".

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Markus F. schrieb:
> Eine SD-Karte, um ein FPGA-Design zu konfigurieren?
> Da haut wieder jemand mit dem Hammer Schrauben in die Wand ;)

Ja, das ist definitiv eine völlig unsinnige Anforderung bzw. 
Lösungsvorschlag.

> Wenn's denn unbedingt konfigurierbar sein muss, nimmt man ein FPGA, das
> partial reconfiguration unterstützt und lädt so andere Konfigurationen.

Das wäre noch unsinniger, denn dann müsste ja die neue 
Ampelkonfiguration erst synthetisiert werden.

> Das wäre wenigstens "artgerechte Haltung".

Naja...

von Markus F. (mfro)


Lesenswert?

Andreas S. schrieb:
> Das wäre noch unsinniger, denn dann müsste ja die neue
> Ampelkonfiguration erst synthetisiert werden.

ein geändertes .mif-File kriegt man auch ohne erneute Synthese in den 
Bitstream (gut, der Assembler muss noch drüberlaufen).

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Markus F. schrieb:
> (gut, der Assembler muss noch drüberlaufen).

Das ist ein riesiger Unterschied. WENN es sich um ein reales Produkt 
handeln würde, wäre es für einen Wartungstechniker, der 
Konfigurationsänderungen an einer Ampelanlage durchführt, kaum 
praktikabel, eine passende FPGA-Toolchain mitzuführen. Das ganze wäre 
viel zu aufwändig und fehlerträchtig, abgesehen von der Lizenzthematik. 
Und der Techniker bekäme dann bei einem Tippfehler eine (aus seiner 
Sicht) völlig obskure Fehlermeldung der Toolchain um die Ohren gehauen. 
Das wäre völlig unpraktikabel. Natürlich könnte man die Aufrufe hinter 
einem eigenen GUI verstecken.

Eine einfache Konfigurationsdatei lässt sich aber mit einem einfachen 
Editor bearbeiten und dann einfach auf die SD-Karte kopieren. Oder auch 
direkt auf der SD-Karte bearbeiten.

Ob SD-Karten mit den üblichen Steckkontakten wirklich für 
Ampelsteuerungen mit riesigem Temperaturbereich und Kondenswasserbildung 
geeignet wären, steht aber auch auf einem anderen Blatt.

Insgesamt würde man aber ohnehin wohl kaum ein FPGA für solch eine 
Steuerung einsetzen, sondern irgendeinen schwachbrüstigen 
Mikrocontroller, der sich aber trotzdem noch ziemlich langweilen dürfte. 
Vermutlich werden auch heute noch Tausende an Ampeln auf Basis eines 
Intel 4004 laufen. Das war nämlich damals eine der 
"Killerapplikationen", in denen der 4004 lange Zeit verbaut wurde.

: Bearbeitet durch User
von Markus F. (mfro)


Lesenswert?

Zumindest darüber, daß eine Ampelsteuerung kein Job für ein FPGA ist, 
sind wir uns ja einig.

Einen SD-Karten-Treiber im FPGA - ohne Mikroprozessor-Unterstützung - zu 
implementieren ist aber m.E. ebenso Quatsch (abgesehen davon, daß der 
städtische Büttel sicherlich nicht mit einem Stapel SD-Karten durch die 
Stadt pilgert und die in die Ampel schiebt).

Ampelsteuerungen werden normalerweise ferngesteuert.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Markus F. schrieb:
> Ampelsteuerungen werden normalerweise ferngesteuert.

Aber würde man wirklich die Ampelschaltung ändern, ohne dass ein 
Techniker vor Ort anwesend wäre?

Und bei Funklöchern sieht es mit der Fernkonfiguration auch etwas 
schwierig aus, siehe z.B.:

https://www.telstra.com.au/coverage-networks/our-coverage

von Peter D. (peda)


Lesenswert?

Bei mir in der Straße ist eine sehr merkwürdige Fußgängerampel.
Ist sie schon länger rot und man drückt den Knopf, dauert es ewig, ehe 
sie grün wird.
Ist sie aber gerade auf rot gesprungen und man drückt den Knopf, geht 
sie fast sofort wieder auf grün.
Vermutlich geht der µC in Power-down und beim Drücken muß er dann 
erstmal neu booten.

von Roland E. (roland0815)


Lesenswert?

Peter D. schrieb:
> Bei mir in der Straße ist eine sehr merkwürdige Fußgängerampel.
> Ist sie schon länger rot und man drückt den Knopf, dauert es ewig, ehe
> sie grün wird.
> Ist sie aber gerade auf rot gesprungen und man drückt den Knopf, geht
> sie fast sofort wieder auf grün.
> Vermutlich geht der µC in Power-down und beim Drücken muß er dann
> erstmal neu booten.

Ist wohl ein subjektives Phänomen. Ampeln mit Wunschtaste schalten die 
Phasen trotzdem reihum normal durch, lassen die Fußgängerampel halt rot 
wenn nicht gedrückt, damit die Rechtsabbieger nicht irritiert werden.

Ist der Zeitpunkt, bis zu dem der Wunsch ausgewertet und umgesetzt 
werden kann schon durch, wartet man eine komplette Runde. Wenn das blöd 
gesetzt ist, kommen solche komischen Effekte zustande.

Die einzigen, die die Reihenfolge ändern bzw das Programm zurücksetzen 
sind Busse und Straßenbahnen wenn vorgesehen. Die lösen eine Abkürzung 
im Programm aus um schnell grün zu bekommen. Dann läuft das Programm von 
der Stelle an weiter.
Als Fußgänger kann man an solchen Ampeln zu ungünstigen Zeiten ne 
viertel Stunde stehen...

: Bearbeitet durch User
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.