Forum: FPGA, VHDL & Co. when Anweisung mit Signal Abfrage (Fehlermeldung)


von Robert T. (robert0815)


Lesenswert?

Hallo!

Kann mir jemand sagen, warum ich bei dem Code unten (7 Segment Decoder) 
die Fehlermeldung "Error (10500): VHDL syntax error at sensor.vhd(58) 
near text "when";  expecting ";"" bekomme? Ich habe keine Ahnung warum 
die Meldung immer kommt. Ich vermute es liegt an dem Signal (S_z) was 
ausgelesen wird, oder an dem Prozess Aufruf. (Bin noch Anfänger).
1
process(S_z)
2
begin
3
4
  seg7_1 <= "0111111" when S_z = 0 else   -- 0
5
       "0000110" when S_z = 1 else   -- 1
6
       "1011011" when S_z = 2 else   -- 2
7
       "1001111" when S_z = 3 else   -- 3
8
       "1100110" when S_z = 4 else   -- 4
9
       "1101101" when S_z = 5 else   -- 5
10
       "1111101" when S_z = 6 else   -- 6
11
       "0000111" when S_z = 7 else   -- 7
12
       "1111111" when S_z = 8 else   -- 8
13
       "1101111" when S_z = 9;   -- 9
14
--       "1110111" when i = A else   -- A
15
--       "1111110" when i = B else   -- b
16
--       "0111001" when i = "1100" else   -- C
17
--       "1011110" when i = "1101" else   -- d
18
--       "1111001" when i = "1110" else   -- E
19
--       "1110001" when i = "1111";       -- F
20
21
end process;

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


Lesenswert?

Das ist eine concurrent-Beschreibung innerhalb eines Prozesses.
Sowas geht natürlich nicht... ;-)

Zwei Lösungen:
1) Mach den Prozess weg, dann gehts.
1
  seg7_1 <= "0111111" when S_z = 0 else   -- 0
2
            "0000110" when S_z = 1 else   -- 1
3
            ...
4
            "1101111" when S_z = 9;   -- 9

2a) Oder mach die Beschreibung mit
1
process(S_z) begin
2
   if   (S_z = 0)then seg7_1 <= "0111111";
3
   elsif(S_z = 1)then   ...
4
   end if;
5
end if;

2b) Oder besser als case:
1
process(S_z) begin
2
   case S_z is
3
   when 0 => seg7_1 <= "0111111";
4
   when 1 =>  ...
5
   end case;
6
end if;

von Robert T. (robert0815)


Lesenswert?

Danke für die schnell Antwort. Das dachte ich mir schon, das irgendetwas 
in der Art falsch war. ICh habe gerade wieder alles nen bisschen 
verändert. Decoder,Counter,Sensor jeweils als eigene Entity und dann als 
Komponente eingebunden. Jetzt muss ich wieder basteln...ist aber 
hoffentlich ne saubere Lösung.

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.