Языки описания аппаратуры, методические указания по лабораторным работам, страница 13

          else      ;
end if;
 

 Условие - это выражение типа boolean. Условия последовательно вычисляются до тех пор, пока какое-либо из них не примет значение true, тогда выполняется соответствующая последовательность операторов. Если ни одно из условий не выполнилось, выполняется последовательность операторов после ключевого слова else, если оно присутствует в операторе. Фразы elsif и else являются необязательными. Следует проявлять аккуратность при записи вложенных друг в друга условных операторов. Оператор варианта. Этот оператор является обобщением условного оператора из предыдущего раздела для случая произвольного числа альтернатив. Другими словами, различным значениям некоторого выражения однозначно ставятся в соответствие определенные последовательности операторов. Формат оператора варианта:

 
оператор_варианта ::= 
сase  is   
       when < альтернатива 1> => ;
          . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
       when < альтернатива N> => ;
       when  others =>;
   end case;
 

 Выражение в этом операторе должно возвращать дискретный тип или одномерный массив символов. Выбирается та альтернатива, значение которой совпадает с вычисленным значением выражения, и выполняется соответствующая последовательность операторов. Все варианты альтернатив должны быть отличными. Если ни одна из альтернатив не выбралась, выполняется последовательность операторов, стоящая после others. Others обязательно должно присутствовать, если оператор CASE предусматривает не все возможные значения выражения. Если результатом выражения является массив, то альтернативами могут быть строки или битовые строки. Приведем два примера оператора CASE, в первом из которых в качестве управляющего выражения используется целое, а во втором - битовый вектор.

 
type index is range 0 to 6;
variable N : index;                                        variable X : bit_vector (0 to 1);
Case N is  
when  0 => Z:=0;
when  1 => Z:=1; 
when  2 => Z:=not Z;    
when  others => Z:=Z;   
end case;                                                                                                                                                                                                                              
Case X(0 to 1) is 
when "00" => Z:=0;
when "01" => Z:=1;
when "10" => Z:=not Z;
when "11" => Z:=Z;
end case;