Menu
Coddy logo textTech

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 블록 사용하기

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

이것은 a를 0, 10, 20 시점에 변경합니다.

Initial vs Always

 initialalways
실행한 번지속적으로 (영구히)
용도테스트벤치, 초기화하드웨어 (플립플롭, 카운터)
합성 가능 여부?아니요 (시뮬레이션 전용)예 (감지 목록 포함 시)

중요 참고 사항

  • initial 블록은 합성 가능하지 않습니다(not synthesizable) — 하드웨어로 변환될 수 없습니다
  • initial테스트벤치(testbenches)에서만 사용하세요
  • $finish가 없으면 시뮬레이션이 영원히 실행됩니다 (중지할 클락이 없음)
challenge icon

챌린지

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

수행할 작업:

  1. initial beginend를 추가하세요
  2. a = 0으로 설정하세요
  3. #10 동안 대기하세요
  4. a = 1로 설정하세요
  5. 시뮬레이션을 종료하기 위해 $finish를 추가하세요

치트 시트

initial 블록은 시뮬레이션 시간 0에 한 번 실행됩니다. 테스트벤치에서만 사용됩니다 (합성 불가능).

initial begin
  a = 0;       // time 0에 설정
  #10 a = 1;   // time 10에 설정
  #10 a = 0;   // time 20에 설정
  $finish;     // 시뮬레이션 종료
end

$finish가 없으면 시뮬레이션은 영원히 실행됩니다.

initialalways
실행한 번지속적으로
용도테스트벤치하드웨어
합성 가능 여부?아니요

직접 해보기

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

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

기초의 모든 레슨