Menu
Coddy logo textTech

Initial 블록

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

Verilog에는 두 가지 절차적 블록이 있습니다: initial (한 번 실행) 및 always (지속적으로 실행). 이제 initial 블록에 대해 알아보겠습니다.

Initial Block이란 무엇인가요?

initial 블록은 시뮬레이션 시작 시점(시간 0)에 단 한 번만 실행됩니다. 완료되면 다시 실행되지 않습니다.

이것은 주로 테스트벤치(testbenches)에서 다음 용도로 사용됩니다:

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

구문

initial begin
  // 문장들은 한 번, 순서대로 실행됩니다
end

기본 예제

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

출력:

Simulation started
This runs once

테스트 신호를 위한 Initial Block 사용하기

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

이 코드는 a를 시간 0, 10, 20에서 변경합니다.

Initial 대 Always

 initialalways
RunsOnce연속적으로 (영구히)
사용처테스트벤치, 초기화하드웨어 (플립플롭, 카운터)
합성 가능 여부?아니요 (simulation 전용)예 (민감도 목록 포함)

중요 참고 사항

  • initial 구문은 합성 가능하지 않습니다(not synthesizable) — 하드웨어로 변환될 수 없습니다.
  • initial 구문은 테스트벤치에서만 사용하세요.
  • 테스트벤치에 계속 실행되는 클록이 포함된 경우(예: always #5 clk = ~clk;), $finish를 호출하지 않으면 시뮬레이션이 무한히 실행됩니다. initial 블록만 있는 경우에는 남아있는 이벤트가 없을 때 시뮬레이터가 자동으로 정지하지만, $finish를 추가하는 것이 좋은 관행입니다.
challenge icon

챌린지

a를 0으로 설정한 다음, 10 단위 시간 후에 a를 1로 설정하는 누락된 initial 블록을 추가하세요.

해야 할 일:

  1. initial beginend 추가
  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실력 점검

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

기초의 모든 레슨