Операторы управления в VHDL


В VHDL определены следующие операторы управления:
• условный оператор if, elsif;
• операторы цикла for, while, loop;
• оператор выбора case;
• оператор возврата return.

Условный оператор if имеет следующий формат:

if condition then
sequential_statements
end if;

if condition then
sequential_statements
else
sequential_statements2
end if;

if condition then
sequential_statements
elsif condition2 then
sequential_statements2
else
sequential_statements3
end if;

Тип условных выражений (condition) — boolean, в операторе допускается наличие любого числа конструкций elsif.

Операторы цикла loop, for и while организуют циклический порядок выполнения операторов:

[loop_label:] loop
sequence_of_statements;
end loop [loop_label];

[loop_label:] while condition loop
sequence_of_statements;
end loop [loop_label];

[loop_label:] for loop_parametr in range loop
sequence_of_statements;
end loop [loop_label];

Первая форма цикла образует бесконечный цикл, остальные формы позволяют задать условие выхода. Кроме того, выйти из цикла можно при помощи оператора exit, а продолжить выполнение с начала цикла можно при помощи оператора next. Несколько примеров цикла приведены ниже:

L1: loop — бесконечный цикл
clock <= not clock after 5 ns; end loop L1; L2: loop -- выход по условию A:= A+1; exit L2 when A > 10;
end loop L2;

L3: while i <= 8 loop -- задание условия в while output_X(i) <= input_X(i+8) after 5 ns; i := i + 1; end loop L3; L4: for cnt_val in 1 to 8 loop -- цикл по диапозону output_X (cnt_val) <= input_X (cnt_val + 8) after 5 ns; end loop L4; subtype Range_Type is POSITIVE range 1 to 8; ... L5: for cnt_val in Range_Type loop output_X (cnt_val) <= input_X (cnt_val + 8) after 5 ns; end loop L5;

Оператор выбора case в зависимости от значения управляющего выражения (которое может быть скалярным типом либо одномерным массивом) выполняет соответствующие группы операторов:

[case_label:] case expression is
when choices1 => sequence_of_statements1
when choices2 => sequence_of_statements2

when others => sequence_of_statementsn
end case [case_label];

Выражение выбора (choices) может быть как одиночным, так и множественным, альтернативы задаются при помощи оператора |. Примеры использования выражений case приведены ниже:

variable x: Integer range 1 to 3;

C1: case x is
when 1 => out_1 := 0;
when 2 => out_1 : =1;
when 3 => out_1 : =2;
end case C1;

variable y: BIT_VECTOR (0 to 1)

C2: case y is
when "00" => out_2 := 0;
when "01" => out_2 := 1;
when "02" => out_2 := 2;
when "03" => out_2 := 3;
end case C2;

type Codes_Of_Operation is (ADD, SUB, MULT, DIV);
variable code_variable: Codes_Of_Operation;

C3: case code_variable is
when ADD | SUB => operation := 0;
when MULT => operation := 1;
when others => operation := 2;
end case C3;

Оператор возврата return используется для завершения выполнения функции или процедуры. В случае процедуры оператор не содержит выражения; для функции оператор должен содержать выражение, тип которого соответствует типу, заданному в секции return объявления функции. Значение выражения определяет результат, возвращаемый функцией.


Комментарии запрещены.




Статистика