Assignment Delays
Coddy Verilog 여정의 기초 섹션에 포함된 레슨. 90개 중 69번째.
이전 레슨에서는 일반 지연(#10 a = b;)과 게이트 지연(and #5 (out, a, b);)을 다뤘습니다. 이제 할당문에서 발생하는 지연인 assignment 지연을 다룹니다. 이는 initial 또는 always와 같은 절차적 블록의 내부에서 assignment 문의 일부로 발생하는 지연입니다.
assignment delay는 지정된 time 동안 기다린 다음 assignment를 수행합니다. delay는 after # 기호 뒤와 assignment 앞에 배치됩니다.
구문:
variable = #delay expression;일반적인 delay #10 a = b;(delay then assign)와 달리, assignment delay a = #10 b;는 그 순간 b의 값을 가져오고, 10 time units 동안 기다린 다음, 그 값을 a에 할당합니다.
Assignment 지연 대 General 지연
| General 지연 | Assignment 지연 | |
|---|---|---|
| 구문 | #10 a = b; | a = #10 b; |
| 값은 언제 읽히나요? | assignment 시점에 (after 지연) | 즉시 (지연 이전) |
| 어떤 값이 할당되나요? | 그 시점의 b 값 | time 0(또는 읽기 time)의 b 값 |
| 값은 언제 할당되나요? | after 지연 | 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여기서는 둘 다 같은 result를 제공합니다. 차이는 delay 동안 b가 changes할 때 나타납니다.
주요 차이점 예제
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에서:
a1이b = 1을 읽습니다 - 시간 5에서:
b가0으로 변경됩니다 (a1은 여전히 대기 중입니다) - 시간 10에서:
a1에는1이 할당됩니다 (시간 0에 읽은 값이며),0이 아닙니다
별도의 블록에서 일반 지연 #10 a2 = b;을 사용하면 b는 시간 10에 읽힙니다 (값은 0입니다).
중요한 규칙
| 규칙 | 설명 |
|---|---|
=는 # 앞에 옵니다 | a = #10 b;이며 a #10 = b;가 아닙니다 |
| 값은 즉시 읽힙니다 | 오른쪽 항은 즉시 평가됩니다 |
| 할당은 지연 후 발생합니다 | 왼쪽 항은 나중에 값을 받습니다 |
| 절차적 블록에만 해당합니다 | initial 또는 always에서 사용됩니다 |
챌린지
수행할 작업:
누락된 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이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design13Timing And Delays
What Are DelaysGate DelaysAssignment DelaysTimescale DirectiveClock GenerationRecap - Timing Control5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logic직접 연습해 보세요: 온라인 Verilog 컴파일러