Оператор цикла 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одержание | Следующая |