Menu
Coddy logo textTech

지연이란 무엇인가

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

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

지연이 필요한 이유

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

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

지연의 유형

지연 유형목적
게이트 지연논리 게이트를 통한 지연
할당 지연값을 할당할 때의 지연
타임스케일 지시어시뮬레이션을 위한 시간 단위를 설정함

기본 구문

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

#10 clk = ~clk;   // 10 시간 단위 대기 후, 클록 토글
#5 a = b;         // 5 시간 단위 대기 후, a = b 할당

# 뒤의 숫자는 대기할 시간 단위의 수입니다.

간단한 예제

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

타이밍:

  • 시간 0: a = 0
  • 시간 10: a = 1
  • 시간 15: a = 0

Always 블록에서의 지연

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

이것은 지속적인 클록 신호를 생성합니다.

중요 규칙

규칙설명
# 기호지연(delay)을 표시합니다
# 뒤의 숫자대기할 시간 단위 수
지연은 누적됩니다#10 이후 #20은 총 30을 대기합니다
합성 가능하지 않음지연은 시뮬레이션 전용입니다
challenge icon

챌린지

수행할 작업:

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

치트 시트

Verilog에서 지연(delays)# 뒤에 시간 단위를 붙여 문장이 실행되는 시점을 제어합니다:

#10 a = 1;   // 10 시간 단위를 대기한 후, 할당

지연은 누적(cumulative)됩니다 — 각 지연은 현재 시간에 더해집니다:

initial begin
  a = 0;      // 시간 0
  #10 a = 1;  // 시간 10
  #5  a = 0;  // 시간 15
end

클락을 생성하기 위해 always 블록에서 사용합니다:

always #5 clk = ~clk;  // 5 단위마다 토글

참고: 지연은 시뮬레이션 전용이며, 합성(synthesis)은 불가능합니다.

직접 해보기

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실력 점검

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

기초의 모든 레슨