www.mikrocontroller.net

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


Autor: Robert T. (robert0815)
Datum:

Bewertung
0 lesenswert
nicht 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).
process(S_z)
begin

  seg7_1 <= "0111111" when S_z = 0 else   -- 0
       "0000110" when S_z = 1 else   -- 1
       "1011011" when S_z = 2 else   -- 2
       "1001111" when S_z = 3 else   -- 3
       "1100110" when S_z = 4 else   -- 4
       "1101101" when S_z = 5 else   -- 5
       "1111101" when S_z = 6 else   -- 6
       "0000111" when S_z = 7 else   -- 7
       "1111111" when S_z = 8 else   -- 8
       "1101111" when S_z = 9;   -- 9
--       "1110111" when i = A else   -- A
--       "1111110" when i = B else   -- b
--       "0111001" when i = "1100" else   -- C
--       "1011110" when i = "1101" else   -- d
--       "1111001" when i = "1110" else   -- E
--       "1110001" when i = "1111";       -- F

end process;

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

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

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

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

Autor: Robert T. (robert0815)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.