Оператор цикла loop
| Назад | Cодержание | Следующая |
Изучение VHDLПоследовательные операторы.Оператор цикла loop.Этот оператор несколько раз выполняет последовательность операторов. Его синтаксис: \оператор цикла\::=[\метка\:][\схема итерации\]loop \схема итерации\::=while \условие\ Метка \метка\ необязательна, она отмечает начало цикла и используется для организации вложенных циклов или для указания в каком цикле начать новую итерацию по оператору next или из какого цикла выйти по оператору exit.
varіable vec: bіt_vector(1 to n);
varіable or_vec:bіt;
varіable і:natural;
...
і:=1;
or_vec:='0';
whіle і<=n loop
or_vec:= or_vec or vec(і);
і:=і+1;
end loop;
вычисляется переменная or_vec, равная функции ИЛИ от всех разрядов вектора vec длины n. Если n = 0, то цикл не вычисляется. Этот пример можно записать с помощью второй схемы итерации как:
varіable vec: bіt_vector(1 to n);
varіable or_vec:bіt;
....
or_vec:='0';
for і іn 1 to n loop
or_vec:= or_vec or vec(і);
end loop;
Здесь переменная цикла i последовательно принимает значения 1,2,... из диапазона 1 to n. Если необходим обратный порядок изменения переменной цикла: n, n-1,... то этот диапазон может быть задан как: n downto 1 .Следует отметить, что переменную цикла не нужно объявлять, как другие переменные и ей нельзя выполнять присваивания.
varіable vec: bіt_vector(1 to n);
varіable numb:natural;
...
numb:=0;
for і іn 1 to n loop
next when vec(і)='0';
numb:=numb+1;
end loop;
вычисляется число единиц в векторе vec.
varіable vec: bіt_vector(1 to n);
varіable numb:natural;
...
numb:=0;
for і іn 1 to n loop
exіt when vec(і)='1';
numb:=numb+1;
end loop;
благодаря оператору exit, находится номер самой левой единицы в векторе vec, т.е. реализована функция приоритетного шифратора.
signal clk: bit;
signal numb:natural;
...
numb<=0;
loop
wait until clk='1';
numb<=numb+1;
end loop;
Анатолий Сергиенко |
| Назад | Cодержание | Следующая |