====== CASE ====== ===== case_statement ===== case expression is case_statement_alternative { case_statement_alternative } end case [ case_label ] ; ===== Parents ===== * function_statement_part * procedure_statement_part * process_statement_part ===== Further definition ===== ==== label ==== * [[.:bnf#identifier]] ==== expression ==== * [[.:bnf#relation]] { and relation } * relation { or relation } * relation { xor relation } * relation [ nand relation ] * relation [ nor relation ] * relation { xnor relation } ==== case_statement_alternative ==== ''**when** [[.:bnf#choices]] => '' \\ '' [[.:bnf#sequence_of_statements]]'' ===== Examples ===== The value of bit //a// is checked. If it is //0// then //s// is assigned the value //0000// after 2 ns, otherwise it is assigned the value //1111// , also after 2 ns. CASE a IS WHEN '0' => s <= "0000" AFTER 2 ns ; WHEN '1' => s <= "1111" AFTER 2 ns ; END CASE ; ---- The value of the integer //int_value// is checked. If it is //0// then int is assigned the value //5// ; if it is //1// , //2// or //8// //int// is assigned the value of //int_value// ; if it is between //3// and //7// int is assigned the value //int_value + 5// ; if it is //9// no action is carried out. For all other values of //int_value// //int// is assigned the value //0// . CASE int_value IS WHEN 0 => int := 5 ; WHEN 1 | 2 | 8 => int := int_value ; WHEN 3 TO 7 => int := int_value+5; WHEN 9 => NULL ; WHEN OTHERS => int := 0 ; END CASE ; ---- Depending on the value of the expression //two_bit '( a_enable & b_enable )//, //s// is assigned the corresponding value after a certain delay. CASE two_bit'( a_enable & b_enable ) IS WHEN "00" => s <= zero AFTER 1 ns ; WHEN "10" => s <= a AFTER 1 ns ; WHEN "01" => s <= b AFTER 2 ns ; WHEN "11" => s <= one AFTER 1 ns ; END CASE ;