이전 for 루프 탐구에 이어, 이 튜토리얼은 while 루프를 다룹니다. while 루프는 미리 정해진 범위가 아닌 동적 조건에 따라 반복을 제어할 수 있는 강력한 구조입니다.
while 루프는 지정된 조건이 true로 유지되는 동안 본문을 반복 실행합니다. 이는 반복 횟수가 런타임 데이터나 복잡한 로직에 의존하는 시나리오에 이상적입니다.
이 게시물은 기본 VHDL 튜토리얼 시리즈의 일부입니다.
구문
while <조건> loop -- 루프 본문 end loop;
<조건>은 부울 값으로 평가되어야 합니다. 단순 비교나 더 복잡한 표현식일 수 있습니다. 조건은 각 패스 전에 체크되어 true로 유지될 때만 루프가 계속됩니다.
조건 예시
i < 10 – i가 10보다 작은 동안 참
i /= 10 – i가 10과 같지 않은 동안 참
i >= 0 and i < 2**8 – 0부터 255까지 값에 대해 참
관계 연산자
=
같음
/=
같지 않음
<
작음
<=
작거나 같음
>
큼
>=
크거나 같음
논리 연산자
nota
a가 거짓이면 참
aandb
a와 b가 모두 참이면 참
aorb
a 또는 b가 참이면 참
anandb
a 또는 b가 거짓이면 참
anorb
a와 b가 모두 거짓이면 참
axorb
a와 b 중 정확히 하나만 참이면 참
axnorb
a와 b가 같으면 참
실습
아래 비디오 튜토리얼을 시청하여 변수가 while 루프를 구동하는 실제 모습을 확인하세요:
샘플 코드
entity T05_WhileLoopTb is end entity;
architecture sim of T05_WhileLoopTb is
begin
process is
variable i : integer := 0;
begin
while i < 10 loop
report "i=" & integer'image(i);
i := i + 2;
end loop;
wait;
end process;
end architecture;
i를 0으로 초기화하고 i < 10을 루프 가드로 사용했습니다. 루프가 i를 매 사이클마다 2씩 증가시키므로 마지막으로 출력되는 값은 8입니다. 다음 패스에서 조건은 거짓(10은 10보다 작지 않음)으로 평가되어 루프를 빠져나옵니다. 이후 wait;는 프로세스를 무한히 일시 중단하며, 이는 테스트벤치에서 일반적인 패턴입니다.