Menu
Coddy logo textTech

지연이란 무엇인가

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

Verilog에서 delays는 구문이 실행되는 시점이나 신호가 변경되는 시점을 제어합니다. 이는 실제 하드웨어의 타이밍 동작을 모델링하는 데 사용됩니다.

지연 시간이 필요한 이유

실제 하드웨어에서는 신호가 와이어와 게이트를 통해 이동하는 데 시간이 걸립니다. 지연 시간을 사용하면 이러한 타이밍 동작을 시뮬레이션할 수 있습니다.

  • 시뮬레이션에서 지연 시간이 없으면 모든 작업이 time 0에 발생합니다
  • delay를 사용하면 시간에 따라 이벤트를 간격 두고 배치할 수 있습니다
  • 지연 시간은 clock 및 상태 머신과 같이 타이밍에 민감한 설계를 테스트하는 데 도움이 됩니다

지연의 종류

지연 유형목적
Gate Delays논리 게이트를 통과하는 지연
Assignment Delays값을 할당할 때의 지연
Timescale Directive시뮬레이션을 위한 시간 단위 설정

기본 구문

지연(delay)은 # 뒤에 숫자를 붙여 작성합니다:

#10 clk = ~clk;   // 10 시간 단위를 기다린 다음 클록을 토글
#5 a = b;         // 5 시간 단위를 기다린 다음 a = b를 할당

# 뒤에 오는 숫자는 대기할 시간 단위(time units) 수입니다.

Simple Example

initial begin
  a = 0;
  #10 a = 1;   // 10 시간 단위 후에 a는 1이 됩니다
  #5 a = 0;    // 또 다른 5 시간 단위 후에 a는 0이 됩니다
end

타이밍:

  • Time 0: a = 0
  • Time 10: a = 1
  • Time 15: a = 0

always 블록에서의 delay

always #5 clk = ~clk;   // 5 시간 단위마다 클록을 토글

이것은 연속적인 clock 신호를 생성합니다(clkinitial 블록에서 first 0으로 초기화되었다고 가정합니다 — 그렇지 않으면 ~xx로 유지됩니다).

중요한 규칙

규칙설명
# 기호딜레이를 표시함
# 뒤의 숫자대기할 시간 단위 수
딜레이는 누적됨#10#20은 총 30을 대기함
합성 불가능(Not synthesizable)딜레이는 시뮬레이션 전용임
challenge icon

챌린지

수행할 작업:

이 코드가 0, 10, 25, 40 시간에 메시지를 출력하도록 누락된 지연 시간을 추가하세요.

직접 해보기

module delay_challenge;
  
  initial begin
    $display("Time %0t: Start", $time);
    // TODO: 시간 10에 도달하도록 지연 추가
    $display("Time %0t: After first delay", $time);
    // TODO: 시간 25에 도달하도록 지연 추가
    $display("Time %0t: After second delay", $time);
    // TODO: 시간 40에 도달하도록 지연 추가
    $display("Time %0t: End", $time);
    $finish;
  end
  
endmodule

quiz icon실력 점검

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

기초의 모든 레슨