For 반복문
Coddy Verilog 여정의 기초 섹션에 포함된 레슨. 90개 중 58번째.
Verilog의 루프를 사용하면 코드 블록을 여러 번 실행할 수 있습니다. 루프는 반복적인 테스트 패턴을 생성하고, 메모리를 초기화하며, 배열을 순회하는 테스트벤치에서 특히 유용합니다. 병렬로 실행되는 하드웨어 설명과 달리 루프는 순차적으로 실행되므로 시뮬레이션과 테스트에 적합합니다.
가장 흔히 사용하는 루프는 for 루프로, 정해진 횟수만큼 반복합니다. for 루프는 반복할 때마다 값이 바뀌는 루프 변수를 사용해 코드 블록을 반복 실행합니다. 몇 번 실행할지 정확히 제어할 수 있습니다.
구문:
for (initialization; condition; increment) begin
// 반복할 코드
end| 부분 | 기능 | 예시 |
|---|---|---|
initialization | 시작 값을 설정합니다 | i = 0 |
condition | 중단할 시점을 정합니다 | i < 10 |
increment | 반복할 때마다 값을 변경합니다 | i = i + 1 |
간단한 예제
integer i;
for (i = 0; i < 5; i = i + 1) begin
$display("i = %d", i);
end출력:
i = 0
i = 1
i = 2
i = 3
i = 4루프는 5회 실행됩니다(i = 0, 1, 2, 3, 4).
테스트벤치의 For 루프
For 루프는 모든 입력 조합을 테스트하는 데 자주 사용됩니다.
integer test_value;
for (test_value = 0; test_value < 16; test_value = test_value + 1) begin
$display("test_value = %d", test_value);
end이 코드는 4비트 신호의 가능한 값 16개를 모두 테스트합니다.
배열을 사용하는 For 루프
reg [7:0] memory [0:9];
integer i;
initial begin
for (i = 0; i < 10; i = i + 1) begin
memory[i] = i * 8;
end
end메모리 위치 10개를 초기화합니다.
중요한 규칙
| 규칙 | 설명 |
|---|---|
반복 변수는 integer 또는 reg여야 합니다 | wire는 사용할 수 없습니다 |
여러 문장에는 begin/end를 사용하세요 | 두 줄 이상일 때 필요합니다 |
| 무한 반복문은 피하세요 | 조건이 결국 거짓이 되는지 확인하세요 |
| 합성 가능한 코드에는 상수 경계값을 사용하세요 | 합성 과정에서 반복마다 논리 복사본 하나씩 생성되도록 반복문이 펼쳐집니다 |
챌린지
해야 할 일:
0부터 3까지의 숫자를 출력하도록 누락된 for 루프를 추가하세요.
직접 해보기
module for_challenge;
integer i;
initial begin
$display("Printing 0 to 3:");
// TODO: for 루프 추가
// i = 0으로 초기화
// i < 4인 동안 반복
// i = i + 1로 증가
// 루프 안에서 $display("i = %d", i);로 출력
$finish;
end
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
직접 연습해 보세요: 온라인 Verilog 컴파일러