2017-03-22 3 views
0

Ich erstelle eine Funktion, die eine Zufallszahl generiert. Diese Zahl repräsentiert ein Jahr. Ich muss herausfinden, ob dieses Jahr ein Schaltjahr ist. Der Bereich der generierten Zahlen liegt zwischen 2000 und 2017, also denke ich, dass ich einen Fall verwenden könnte, anstatt eine Formel anzuwenden, um die Schaltjahre zu finden.VHDL Fallstatement Fehler

architecture arh_afisare of afisare is  
signal year: integer; 
signal leap_year: integer; 
begin 
process 
begin 
    year <= random_gen(2000, 2017); 
    case year is 
     when '2000' => leap_year <='1'; 
     when '2004' => leap_year <='1'; 
     when '2008' => leap_year <='1'; 
     when '2012' => leap_year <='1'; 
     when '2016' => leap_year <='1'; 
     when others => leap_year <='0'; 
    end case; 
wait for 100 ns; 
end process; 
end architecture; 

Ich bekomme diesen Fehler in jeder Zeile mit 'wann' erwartet die letzte.

Error: COMP96_0019: Afisare.vhd : (28, 9): Keyword 'others' expected.

Antwort

2

Sehen Sie sich Ihre case Linien:

when '2000' => leap_year <='1'; 

2000 eine ganze Zahl, aber Sie haben um es einfache Anführungszeichen setzen. Dies ist kein gültiges Konstrukt; einfach löschen Sie die einfachen Anführungszeichen:

when 2000 => leap_year <='1'; 

Per den Kommentar, die Wahl der integer für leap_year ist ein bisschen seltsam. Wenn Sie dies mit dem Typ std_logic definieren, wird Ihre Zuordnung von leap_year <= '1' gültig. Wenn integer passend ist, ändern Sie alternativ die Zuweisung zu leap_year <= 1.

+2

Ändern Sie auch leap_year in std_logic. – FritzDC

+2

@FritzDC nicht unbedingt, wir kennen den Kontext nicht. Wenn es "ganzzahlig" oder besser ist, "natürlicher Bereich 0 bis 1", können Sie es zu daysPerYear usw. hinzufügen (aber Sie müssten die Anführungszeichen auch dort verlieren) –

+0

Ja, "oder die Anführungsstriche auch verlieren" wäre in Ordnung. Allerdings ist es beim Schreiben von VHDL eine gute Angewohnheit, std_logic für binäre Logik zu verwenden. – FritzDC