CASE

Sequentielle Anweisungen – CASE

ENTITY four_byte_rom IS
PORT (address : IN integer RANGE 1 TO 4;
contents : OUT bit_vector(1 TO 8) ) ;
END four_byte_rom;

ARCHITECTURE if_variante OF four_byte_rom IS
BEGIN
PROCESS (address)
BEGIN
IF address = 1 THEN
contents <= "00001111" ;
ELSIF address = 2 THEN
contents <= "00111111" ;
ELSIF address = 3 THEN
contents <= "11111100" ;
ELSE
contents <= x"f0" ;
END IF ;
END PROCESS ;
END if_variante ;

ARCHITECTURE case_variante_1 OF four_byte_rom IS
BEGIN
PROCESS (address)
BEGIN
CASE address IS
WHEN 1 => contents <= "00001111" ;
WHEN 2 => contents <= "00111111" ;
WHEN 3 => contents <= "11111100" ;
WHEN OTHERS => contents <= x"f0" ;
END CASE ;


END PROCESS ;
END case_variante_1 ;
Das nebenstehende VHDL-Modell besitzt zwei Architekturen gleichen Verhaltens. Die erste Architektur besteht im wesentlichen aus einer IF-Anweisung, während die zweite Architektur eine CASE-Anweisung einsetzt.

Im Gegensatz zu IF-Anweisungen müssen bei CASE-Anweisungen alle Fälle abgefragt werden. Dies kann explizit durch Aufführen aller möglichen Signalwerte erfolgen oder durch das Schlüsselwort OTHERS (anstelle von WHEN OTHERS hätte hier auch WHEN 4 stehen können).

Der Fall WHEN OTHERS entspricht bei einer IF-Anweisung dem ELSE, das allerdings nicht zwingend erforderlich ist.

ARCHITECTURE case_variante_2 OF four_byte_rom IS
BEGIN
PROCESS (address)
BEGIN
CASE address IS
WHEN 1 | 2 => contents(1 TO 2) <= "00" ;
contents(7 TO 8) <= "11" ;
WHEN OTHERS => contents(1 TO 2) <= "11" ;
contents(7 TO 8) <= "00" ;
END CASE ;

CASE address IS
WHEN 2 TO 4 => contents(3 TO 4) <= "11" ;
WHEN OTHERS => contents(3 TO 4) <= "00" ;
END CASE ;

CASE address IS
WHEN 1 TO 3 => contents(5 TO 6) <= "11" ;
WHEN OTHERS => contents(5 TO 6) <= "00" ;
END CASE ;


END PROCESS ;
END case_variante_2 ;
Diese Architektur ist eine weitere Variante der Beschreibung des Speicherbausteins four_byte_rom von obigem Beispiel.

Hier werden mit dem Zeichen '' | '' bzw. den Bereichsangaben (TO, DOWNTO) mehrere Fälle in einer Anweisung zusammengefaßt.