Menu
Coddy logo textTech

What Are Delays

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

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

지연이 필요한 이유

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

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

지연 유형

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

기본 구문

delay는 숫자 앞에 #을 붙여 작성합니다:

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

# 뒤의 숫자는 기다릴 time units의 수입니다.

간단한 예제

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 블록의 지연

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

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

중요 규칙

규칙설명
# 기호delay를 나타냅니다
# 뒤의 숫자기다릴 time units의 수
delay는 누적됩니다#10 다음 #20은 총 30만큼 기다립니다
합성할 수 없음delay는 simulation 전용입니다
challenge icon

챌린지

할 일:

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

직접 해보기

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

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

기초의 모든 레슨

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