무한 반복문
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 61번째.
forever 루프는 코드 블록을 계속해서 영원히 반복합니다. 스스로 멈추지 않습니다.
forever 루프는 끝없이 반복해서 실행됩니다. 이것은 테스트벤치에서 클록 및 기타 연속 신호를 생성하는 데 유용합니다.
구문:
forever begin
// 영원히 반복되는 코드
end간단한 예제
forever begin
$display("This prints forever");
end이것은 무한히 출력되어 시뮬레이션을 중단시킬 것입니다. 항상 지연 시간이나 중지 조건을 추가하세요.
클록 생성하기 (일반적인 용도)
forever의 가장 일반적인 용도는 클록을 생성하는 것입니다:
initial begin
clk = 0;
forever begin
#5 clk = ~clk; // 5 시간 단위마다 토글
end
end이것은 전체 시뮬레이션 동안 실행되는 시계를 생성합니다.
Disable을 사용한 Forever
disable 문을 사용하여 forever 루프를 중지할 수 있습니다:
initial begin : clock_gen // 여기에 이름이 추가됨
clk = 0;
forever begin
#5 clk = ~clk;
end
endinitial begin
#100;
disable clock_gen; // 이제 작동합니다
endForever와 다른 루프 비교
| 루프 | 중지 여부 | 사용 시기 |
|---|---|---|
for | 예 (정해진 횟수 반복 후) | 반복 횟수를 알 때 |
while | 예 (조건이 거짓일 때) | 중지 조건을 모를 때 |
repeat | 예 (정해진 횟수 반복 후) | 반복 횟수를 알 때 |
forever | 아니요 (절대 중지되지 않음) | 연속 신호 (클록) |
중요 규칙
| 규칙 | 설명 |
|---|---|
| 지연을 포함해야 함 | #10 또는 @(posedge clk) |
| 지연이 없으면 시뮬레이션이 멈춤 | 시간 경과가 없는 무한 루프 |
중지하려면 disable과 함께 사용 | 그렇지 않으면 시뮬레이션이 종료되지 않음 |
| 테스트벤치에서 사용하기에 적합함 | 합성 불가능 |
챌린지
수행할 작업:
10 시간 단위마다 토글되는 클록을 생성하기 위해 누락된 forever 루프를 추가하세요.
치트 시트
forever 루프는 코드 블록을 멈추지 않고 계속해서 반복합니다. 시뮬레이션이 중단되는 것을 방지하기 위해 항상 지연(delay)을 포함해야 합니다.
initial begin
clk = 0;
forever begin
#5 clk = ~clk; // 5 시간 단위마다 토글
end
end이름이 지정된 블록과 함께 disable을 사용하여 forever 루프를 중지합니다:
initial begin : clock_gen
clk = 0;
forever begin
#5 clk = ~clk;
end
end
initial begin
#100;
disable clock_gen;
end주요 규칙:
- 반드시 지연(
#10또는@(posedge clk))을 포함해야 하며, 그렇지 않으면 시뮬레이션이 멈춥니다. - 중지하려면
disable을 사용하십시오. 그렇지 않으면 시뮬레이션이 끝나지 않습니다. - 합성 가능하지 않음 — 테스트벤치 전용입니다.
직접 해보기
module forever_challenge;
reg clk;
initial begin
clk = 0;
// TODO: 10 시간 단위마다 clk를 반전시키는 forever 루프를 추가하세요
end
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.