게이트 지연
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 68번째.
이전 레슨에서는 #10 a = b;와 같이 문장을 실행하기 전에 대기하는 **일반 지연(general delays)**에 대해 다루었습니다.
이번 레슨에서는 and, or, not과 같은 내장 gate 프리미티브에 특화된 gate delay에 대해 다룹니다. gate delay는 하드웨어 gate의 inputs가 변경된 후 output을 생성하는 데 걸리는 시간을 모델링합니다.
실제 하드웨어에서 게이트는 즉각적으로 반응하지 않으며 약간의 지연이 발생합니다. 내장 게이트 프리미티브를 사용할 때 게이트의 전파 시간을 시뮬레이션하기 위해 지연을 추가할 수 있습니다. 출력은 지정된 지연이 지난 후에만 변경됩니다.
General Delay와 Gate Delay의 차이점
| General Delay | Gate Delay | |
|---|---|---|
| 구문 | #10 a = b; | and #5 (out, a, b); |
| 위치 | 문장 앞의 # | gate primitive 내부의 # |
| 목적 | 실행 전 대기 | 게이트 전파 시간 모델링 |
구문:
gate_type #(delay) (output, input1, input2, ...);#(delay)는 게이트가 반응하는 데 걸리는 시간 단위(time unit)를 지정합니다.
간단한 예시
and #5 (out, a, b);이 AND gate는 a 또는 b가 변경된 후 output을 변경하는 데 5 time unit이 걸립니다.
다중 입력 게이트 지연
nand #8 (out, a, b, c, d); // 8 시간 단위 지연을 갖는 4-입력 NAND중요한 규칙
| 규칙 | 설명 |
|---|---|
| Gate 이름 뒤에 Delay가 옵니다 | and #5 (out, a, b) |
| 시간 단위의 Delay 값 | timescale 디렉티브에 기반합니다 |
| 모든 inputs가 output에 영향을 줍니다 | 모든 input 변경이 delay를 트리거합니다 |
| 합성 불가능(Not synthesizable) | Gate delays는 시뮬레이션 전용입니다 |
챌린지
이 모듈에 누락된 게이트 지연 시간을 추가하세요. 각 게이트마다 다른 지연 시간을 사용하세요.
수행할 작업:
- AND 게이트: 5 시간 단위 지연
- OR 게이트: 3 시간 단위 지연
- NOT 게이트: 2 시간 단위 지연
직접 해보기
module gate_delay_challenge;
reg a, b;
wire and_out, or_out, not_out;
// TODO: 5 시간 단위 지연이 있는 AND 게이트 추가 (입력 a, b)
// TODO: 3 시간 단위 지연이 있는 OR 게이트 추가 (입력 a, b)
// TODO: 2 시간 단위 지연이 있는 NOT 게이트 추가 (입력 a)
initial begin
$monitor("Time %0t: a=%b, b=%b | and=%b, or=%b, not=%b",
$time, a, b, and_out, or_out, not_out);
a = 1; b = 1;
#10 $finish;
end
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.