logo
mat_mod

55. Циклы в vhdl.

В VHDL существует три вида циклов: бесконечный, while и for. Синтаксис бесконечного цикла выглядит следующим образом:

[ loop_label: ] loop

{ sequential_statement }

end loop [ loop_label ] ;

Такие циклы часто используются для генерирования синхросигнала, как это сделано в следующем примере:

signal Clock: BIT := ’0′;                             —  инициализация  в 0

Clk_1:  process  (Clock)

begin

L1: loop

Clock <=  not Clock  after 5 ns;  —  период Clock  равен 10 ns

end loop L1;

end process Clk_1;

Для завершения цикла может быть применен оператор  exit, а для прерывания теку-

щейитерации – оператор next:

[ label: ] exit [ loop_label ][when boolean _expression];

[ label:] next [ loop_label ] [when boolean _expression];

Если метка не указана, то действие оператора относится к содержащему его циклу. Необязательное выражение boolean_expression позволяет задавать условие прерыва- ния выполнения цикла или его итерации. В следующем коде выполнение цикла завер- шится, когда А станет больше 10:

L2: loop

A := A+1;

exit L2 when A > 10;

end loop L2;

Цикл for

Общая форма цикла for имеет следующий вид:

[loop_label:] for loop_index in range loop

sequential  statements

end loop [loop-label];

Индекс цикла loop_index автоматически описывается при использовании оператора цикла и не требует его предварительного декларирования. Индекс инициализируется первым значением из указанного диапазона range, после чего выполняются последо- вательные операторы (sequential statements). Индекс цикла может быть использован в последовательных операторах, но не может быть изменен в них. После выполнения одной итерации цикла индекс получает следующее значение из диапазона и последо- вательность операторов выполняется снова. Процесс продолжается до тех пор, пока индекс цикла не переберет все значения диапазона. После этого выполнение операто- ра цикла заканчивается и индекс становится недоступным. Для следующего цикла- индекс count_value в начале выполнения цикла будет инициализирован значением 0 и последовательность операторов в цикле будет выполнена 128 раз:

for count_value in 0 to 127 loop

count_out <= count_value after  5 ns;

end loop;

Цикл while

Выполнение операторов, размещенных в условном цикле while, будет продолжаться до тех пор, пока условие condition имеет значение истины:

[ loop_label: ] while condition loop

{ sequential_statement }

end loop [ loop_label ] ;