Menu
CoddyTech

Forever 반복문

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로 무한 반복 멈추기

disable 문을 사용해 forever 반복문을 멈출 수 있습니다.

initial begin : clock_gen   // 여기에 이름을 추가함
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end
initial begin
  #100;
  disable clock_gen;   // 이제 제대로 작동합니다
end

무한 반복과 다른 반복문

반복문멈추나요?사용 시점
for예 (정해진 횟수만큼 반복한 후)반복 횟수를 알고 있을 때
while예 (조건이 거짓일 때)멈춤 조건을 모를 때
repeat예 (정해진 횟수만큼 반복한 후)반복 횟수를 알고 있을 때
forever아니요 (절대 멈추지 않음)연속 신호(시계)

중요 규칙

규칙설명
지연을 포함해야 함#10 또는 @(posedge clk)
지연이 없으면 시뮬레이션이 멈춤시간이 진행되지 않는 무한 루프
disable으로 루프를 중지하거나 $finish로 시뮬레이션을 종료해야 함그렇지 않으면 시뮬레이션이 끝나지 않음
테스트벤치에서 사용하는 것이 가장 좋음합성할 수 없음
challenge icon

챌린지

해야 할 일:

10시간 단위마다 전환되는 클록을 생성하도록 빠진 forever 루프를 추가하세요.

직접 해보기

module forever_challenge;
  reg clk;
  
  initial begin
    clk = 0;
    // TODO: 10 시간 단위마다 clk를 토글하는 forever 루프를 추가하세요
  end
endmodule
quiz icon실력 점검

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

기초의 모든 레슨

직접 연습해 보세요: 온라인 Verilog 컴파일러