VHDL For-루프 마스터하기: 실용 가이드
이전 튜토리얼에서는 loop 문을 사용한 무한 루프 생성과 exit로 빠져나오는 방법을 탐구했습니다. 루프를 특정 횟수만큼 실행해야 한다면? For-루프가 가장 직관적인 해결책입니다.
For-루프는 정수 또는 열거형 항목의 고정 범위를 순회합니다. 현재 반복 값은 암시적으로 선언된 상수를 통해 루프 내부에서 자동으로 사용 가능합니다.
이 기사는 기본 VHDL 튜토리얼 시리즈의 일부입니다.
구문
for <상수> in <범위> loop -- 루프 본문 end loop;
여기서 <상수>는 루프 카운터의 사용자 정의 이름이고, <범위>는 정수 범위(오름차순 또는 내림차순)나 열거형 값 집합일 수 있습니다.
정수 범위
- 오름차순 범위:
0 to 9 – 0,1,2,…,9 순회
- 내림차순 범위:
9 downto 0 – 9,8,7,…,0 순회
- 단일 값:
0 to 0 – 0만 순회
- 빈 범위:
0 to -1 – 루프 본문 실행 안 됨
예제 코드
entity T04_ForLoopTb is end entity;
architecture sim of T04_ForLoopTb is
begin
process is
begin
for i in 1 to 10 loop
report "i=" & integer'image(i);
end loop;
wait;
end process;
end architecture;
시뮬레이션 출력 (ModelSim)
VSIM 2> run
# ** Note: i=1
# Time: 0 ns Iteration: 0 Instance: /t04_forlooptb
# ** Note: i=2
# Time: 0 ns Iteration: 0 Instance: /t04_forlooptb
# ** Note: i=3
# Time: 0 ns Iteration: 0 Instance: /t04_forlooptb
# ** Note: i=4
# Time: 0 ns Iteration: 0 Instance: /t04_forlooptb
# ** Note: i=5
# Time: 0 ns Iteration: 0 Instance: /t04_forlooptb
# ** Note: i=6
# Time: 0 ns Iteration: 0 Instance: /t04_forlooptb
# ** Note: i=7
# Time: 0 ns Iteration: 0 Instance: /t04_forlooptb
# ** Note: i=8
# Time: 0 ns Iteration: 0 Instance: /t04_forlooptb
# ** Note: i=9
# Time: 0 ns Iteration: 0 Instance: /t04_forlooptb
# ** Note: i=10
# Time: 0 ns Iteration: 0 Instance: /t04_forlooptb
분석
For-루프는 정확히 10회 반복을 실행하며, 시뮬레이션 시간 0에서 카운터 값을 출력합니다. 루프 내부에 wait가 없으므로 전체 루프가 즉시 완료됩니다. 마지막 wait;는 프로세스를 무한 대기 상태로 두며, 이는 테스트벤치에서 일반적입니다.
또한 두 가지 필수 문자열 연산을 시연했습니다:
integer'image(i) – 정수를 문자열로 변환
& – 두 문자열 연결
핵심 요약
- For-루프는 오름차순(
to)과 내림차순(downto) 범위 모두를 순회할 수 있습니다.
- 정수 값은
integer'image()로 문자열 변환
- 문자열 연결에는
& 연산자 사용
더 깊은 VHDL 개념을 위해 다음 튜토리얼로 진행하세요.