Menu
Coddy logo textTech

할당 지연

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

이전 레슨에서는 일반 지연(#10 a = b;)과 게이트 지연(and #5 (out, a, b);)에 대해 다루었습니다. 이제 assignment 지연에 대해 다룹니다. 이는 initial 또는 always와 같은 절차적 block 내부에서 assignment 문시의 일부로 발생하는 지연입니다.

assignment delay는 지정된 시간 동안 대기한 후 assignment를 수행합니다. delay는 # 기호 after 및 assignment 이전에 위치합니다.

구문:

variable = #delay expression;

일반적인 delay #10 a = b; (delay 후 assign)와 달리, assignment delay a = #10 b;는 그 순간의 b 값을 가져와 10 time units 동안 waits 한 후 a에 assigns합니다.

Assignment Delay vs General Delay

 General DelayAssignment Delay
구문#10 a = b;a = #10 b;
값은 언제 Read 되나요?assignment 의 time 에 (delay after)즉시 (delay 전)
어떤 값이 assign 되나요?그 순간의 btime 0 (또는 Read time)의 b
값이 언제 assign 되나요?delay afterdelay after

예시: 차이점

initial begin
  b = 1;
  #5 b = 0;
  
  // 일반 지연
  #10 a1 = b;     // 10을 기다린 후 b를 읽음 (b=0) → a1=0
  
  // 할당 지연
  a2 = #10 b;     // 지금 b를 읽음 (b=0), 10을 기다린 후 할당 → a2=0
end

여기서는 둘 다 동일한 결과를 제공합니다. 차이점은 delay 동안 b가 변경될 때 나타납니다.

주요 차이점 예시

To show b changing during the delay, we need two separate initial blocks that run in parallel:

initial begin
  b = 1;
  a1 = #10 b;     // 시간 0에서 b=1을 읽고, 시간 10에서 a1=1을 할당합니다
end

initial begin
  #5 b = 0;       // 시간 5에서 b를 0으로 변경합니다 (지연 중에)
end
  • 0 시점에: a1b = 1을 읽음
  • 5 시점에: b0으로 변경됨 (a1이 여전히 대기하는 동안)
  • 10 시점에: a10이 아닌 1(0 시점에 읽은 값)이 할당됨

별도의 블록에 있는 일반 지연 #10 a2 = b;를 사용하면 b는 10 시점에 읽히게 됩니다 (값 0).

중요한 규칙

규칙설명
=#보다 앞에 옴a = #10 b;이며 a #10 = b;가 아닙니다
값은 즉시 읽음우변은 즉시 평가됨
지연 후 대입 실행좌변은 나중에 값을 얻음
절차적 블록 전용initial 또는 always에서 사용됨
challenge icon

챌린지

수행할 작업:

누락된 assignment delay를 Add하여 a가 15 time units after에 b의 값을 gets하지만, b를 즉시 reads하도록 만드세요.

직접 해보기

module assignment_challenge;
  reg a, b;
  
  // 지연 중에 b를 변경하기 위한 별도의 블록
  initial begin
    b = 1;
    // TODO: 할당 지연 추가
    // a는 15 시간 단위 후에 b를 받아야 함
    // 지금 b를 읽고, 지연 후에 할당

  end
  
  initial begin
    #5 b = 0;      // 지연 중에 b를 변경
    #20 $display("Time %0t: a = %b", $time, a);
    $finish;
  end
endmodule
quiz icon실력 점검

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

기초의 모든 레슨