"expecting End" - Fehler in Modelsim

OP #4137926
Lesenswert?
• ▲
▼
Hallo Forum,

ich versuche im Moment in VHDL einen Automaten zu erstellen, der dir 
Drehrichtung und Drehgeschwindigkeit eines Motors analysiert.

Bei der Umsetzung in VHDL mithilfe von Modelsim stoße ich jedoch auf ein 
Problem, da ich eine Fehlermeldung erhalte und ich nicht weiß, was genau 
ich falsch mache. Andere Beiträge und die Googlesuche haben mir nicht 
geholfen, also hoffe ich, dass mir hier jemand weiter helfen kann.

Hier ist erst mal der Code (Der Teil für den Ausgang ist übrigens nur 
provisorisch):
1
entity IDG is
2
  port(   CLK, RESET, ENABLE : in bit; -- sekundäre Eingangssignale
3
      PHI  :in bit_vector(1 downto 0); -- Eingangsvektor
4
     A    :out bit_vector(1 downto 0) ); -- Ausgangsvektor
5
end IDG;
6

7
architecture SEQUENZ of IDG is
8
  type ZUSTAENDE is (V00, V00I, V10, V10I, V11, V11I, V01, V01I, R01, R01I, R00, R00I, R10, R10I, R11, R11I, Fehler); -- Aufzählungstyp
9
  signal ZUSTAND,FOLGE_Z: ZUSTAENDE ; -- Prozess-Kommunikation
10
begin
11

12
Z_SPEICHER: process(CLK, RESET) -- Zustandsaktualisierung
13
begin
14
  if RESET = '1' then ZUSTAND <= V10 after 20 ns;
15
  elsif CLK = '1' and CLK'event then
16
    if ENABLE = '1' then ZUSTAND <= FOLGE_Z after 20 ns;
17
    end if;
18
  end if;
19
end process Z_SPEICHER; 
20

21
UE_SN: process(PHI, ZUSTAND) -- Folgezustandsberechnung
22
begin  
23
  
24
  case ZUSTAND is
25
    when V00 =>  if PHI = "10" then FOLGE_Z <= V10I;
26
      else if PHI = "01" then FOLGE_Z <= R01I;
27
      else if PHI = "00" then FOLGE_Z <= V00;
28
      else if PHI = "11" then FOLGE_Z <= Fehler;
29
      end if;
30
    when V10 =>  if PHI = "10" then FOLGE_Z <= V10;
31
      else if PHI = "01" then FOLGE_Z <= Fehler;
32
      else if PHI = "00" then FOLGE_Z <= R00I;
33
      else if PHI = "11" then FOLGE_Z <= V11I;
34
      end if;
35
    when  V11 => if PHI = "10" then FOLGE_Z <= R01I;
36
      else if PHI = "01" then FOLGE_Z <= V01I;
37
      else if PHI = "00" then FOLGE_Z <= Fehler;
38
      else if PHI = "11" then FOLGE_Z <= V11;
39
      end if;
40
    when  V01 => if PHI = "10" then FOLGE_Z <= Fehler;
41
      else if PHI = "01" then FOLGE_Z <= V01;
42
      else if PHI = "00" then FOLGE_Z <= V00I;
43
      else if PHI = "11" then FOLGE_Z <= R11I;
44
      end if;
45
    when R00 =>  if PHI = "10" then FOLGE_Z <= V10I;
46
      else if PHI = "01" then FOLGE_Z <= R01I;
47
      else if PHI = "00" then FOLGE_Z <= R00;
48
      else if PHI = "11" then FOLGE_Z <= Fehler;
49
      end if;
50
    when R10 =>  if PHI = "10" then FOLGE_Z <= R10;
51
      else if PHI = "01" then FOLGE_Z <= Fehler;
52
      else if PHI = "00" then FOLGE_Z <= R00I;
53
      else if PHI = "11" then FOLGE_Z <= V11I;
54
      end if;
55
    when  R11 => if PHI = "10" then FOLGE_Z <= R01I;
56
      else if PHI = "01" then FOLGE_Z <= V01I;
57
      else if PHI = "00" then FOLGE_Z <= Fehler;
58
      else if PHI = "11" then FOLGE_Z <= R11;
59
      end if;
60
    when  R01 => if PHI = "10" then FOLGE_Z <= Fehler;
61
      else if PHI = "01" then FOLGE_Z <= R01;
62
      else if PHI = "00" then FOLGE_Z <= V00I;
63
      else if PHI = "11" then FOLGE_Z <= R11I;
64
      end if;
65
    when V00I => FOLGE_Z <= V00;
66
    when V01I => FOLGE_Z <= V01;
67
    when V11I => FOLGE_Z <= V11;
68
    when V10I => FOLGE_Z <= V10;
69
    when R00I => FOLGE_Z <= R00;
70
    when R01I => FOLGE_Z <= R01;
71
    when R11I => FOLGE_Z <= R11;
72
    when R10I => FOLGE_Z <= R10;
73
    end case;
74
end process UE_SN;
75

76
AUS_SN: process(ZUSTAND) -- Ausgangssignalberechung
77
begin
78
  case ZUSTAND is
79
    when V00 => A <= '10' after 20 ns;
80
    when others => A <= '00' after 20 ns;
81
  end case;
82
end process AUS_SN;
83
end SEQUENZ;

Und hier die Fehlermeldung:

vcom -work work -2002 -explicit -stats=none 
C:/Modeltech_pe_edu_10.4/examples/IDG.vhd
Model Technology ModelSim PE Student Edition vcom 10.4 Compiler 2014.12 
Dec  3 2014
-- Loading package STANDARD
-- Compiling entity IDG
-- Compiling architecture SEQUENZ of IDG
** Error: C:/Modeltech_pe_edu_10.4/examples/IDG.vhd(31): near "when": 
(vcom-1576) expecting END.

Ich hoffe jemand kann mir mit dem Problem weiter helfen, danke im 
Vorraus.
Gast #4137948
Lesenswert?
• ▲
▼
Hi,
- Ersetze sämtliche "else if" durch "elsif" ;)
- Strings werden mittels Anführungszeichen (") ausgedrückt. Vgl. Zeile 
79, 80
- Im Kombinatorischen Schaltnetz "UE_SN" fehlt ein "when others"
Viele Grüße

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.