Menu
CoddyTech

Initial 블록

Coddy Verilog 여정의 기초 섹션에 포함된 레슨. 90개 중 47번째.

Verilog에는 두 가지 절차 블록이 있습니다. initial(한 번 실행됨)과 always(계속 실행됨)입니다. 이제 initial 블록을 살펴보겠습니다.

Initial 블록이란?

initial 블록은 시뮬레이션이 시작될 때(시간 0) 한 번만 실행됩니다. 실행이 끝나면 다시 실행되지 않습니다.

주로 테스트벤치에서 다음과 같은 용도로 사용됩니다.

  • 초기값 설정
  • 테스트 신호 생성
  • 메시지 표시
  • 시뮬레이션 시작

구문

initial begin
  // 명령문은 순서대로 한 번씩 실행됩니다
end

기본 예제

initial begin
  $display("Simulation started");
  $display("This runs once");
  $finish;
end

출력:

Simulation started
This runs once

테스트 신호에 초기 블록 사용하기

initial begin
  a = 0;
  #10 a = 1;
  #10 a = 0;
  #10 $finish;
end

이 코드는 시각 0, 10, 20에 a의 값을 변경합니다.

초기 실행과 항상 실행

 initialalways
실행한 번계속해서 (영원히)
용도테스트벤치, 초기화하드웨어 (플립플롭, 카운터)
합성 가능?초기값 설정에만 사용 (FPGA)가능 (감도 목록 사용 시)

중요 참고 사항

  • initial 블록은 주로 시뮬레이션용입니다. 합성 도구는 #10과 같은 지연이나 $display와 같은 태스크를 하드웨어로 구현할 수 없습니다.
  • initial은 주로 테스트벤치에서 사용하세요. 설계 모듈에서는 FPGA 합성 도구만 이를 사용하며, 레지스터나 메모리의 초기값을 설정하는 용도로만 사용합니다.
  • 테스트벤치에 자유 실행 클록(예: always #5 clk = ~clk;)이 포함되어 있으면, $finish를 호출하지 않는 한 시뮬레이션이 끝없이 실행됩니다. initial 블록만 있는 경우에는 더 이상 이벤트가 남아 있지 않으면 시뮬레이터가 저절로 멈추지만, $finish를 추가하는 것도 여전히 좋은 방법입니다.
challenge icon

챌린지

a를 0으로 설정하고, 시간 단위 10이 지난 후 a를 1로 설정하는 누락된 initial 블록을 추가하세요.

할 일:

  1. initial begin과 end를 추가하세요
  2. a = 0으로 설정하세요
  3. #10만큼 기다리세요
  4. a = 1로 설정하세요
  5. 시뮬레이션을 종료하도록 $finish를 추가하세요

직접 해보기

module test;
  reg a;
  
  // TODO: 여기에 initial 블록을 추가하세요
  // a = 0으로 설정하세요
  // #10만큼 대기하세요
  // a = 1로 설정하세요
  // 시뮬레이션을 종료하려면 $finish;를 추가하세요
  
endmodule
quiz icon실력 점검

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

기초의 모든 레슨

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