Menu
Coddy logo textTech

Initial Block

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

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

Initial 블록이란?

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

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

  • 초기값 설정
  • 테스트 신호 생성
  • 메시지 표시
  • simulation 시작

구문

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

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

initial과 Always

 initialalways
실행Once계속해서 (영원히)
용도테스트벤치, 초기화하드웨어 (플립플롭, 카운터)
합성 가능 여부?아니요 (simulation 전용)예 (감도 목록과 함께)

중요 참고 사항

  • initial 블록은 합성할 수 없습니다. 하드웨어로 변환할 수 없습니다
  • initial테스트벤치에서만 사용하세요
  • 테스트벤치에 자유 실행 클록(예: always #5 clk = ~clk;)이 포함되어 있으면 $finish를 호출하지 않는 한 simulation은 영원히 실행됩니다. initial 블록만 있는 경우에는 남아 있는 이벤트가 없을 때 시뮬레이터가 스스로 중지하지만, 그래도 $finish를 추가하는 것이 좋은 습관입니다
challenge icon

챌린지

누락된 initial block을 Add하여 a를 0으로 설정한 다음, 10 time units 후에 a를 1로 설정하세요.

수행할 작업:

  1. Add initial beginend
  2. a = 0으로 설정
  3. Wait #10
  4. a = 1로 설정
  5. $finish를 Add하여 simulation 종료

직접 해보기

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

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

기초의 모든 레슨

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