Menu
Coddy logo textTech

무한 반복문

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
end
initial begin
  #100;
  disable clock_gen;   // 이제 작동합니다
end

Forever와 다른 루프 비교

루프중지 여부사용 시기
for예 (정해진 횟수 반복 후)반복 횟수를 알 때
while예 (조건이 거짓일 때)중지 조건을 모를 때
repeat예 (정해진 횟수 반복 후)반복 횟수를 알 때
forever아니요 (절대 중지되지 않음)연속 신호 (클록)

중요 규칙

규칙설명
지연을 포함해야 함#10 또는 @(posedge clk)
지연이 없으면 시뮬레이션이 멈춤시간 경과가 없는 무한 루프
중지하려면 disable과 함께 사용그렇지 않으면 시뮬레이션이 종료되지 않음
테스트벤치에서 사용하기에 적합함합성 불가능
challenge icon

챌린지

수행할 작업:

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
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨