Понимание задержек гейтов в Verilog: точное тайминг для надежных цифровых схем
Цифровые элементы — бинарные сущности, хранящие 0 или 1. Однако переходы 0→1 и 1→0 имеют переходные задержки, как и каждый гейт для распространения значения от входа к выходу.
Например, двухвходовый AND гейт должен переключить выход в 1, если оба входа становятся 1, и обратно в 0, когда любой вход становится 0. Эти задержки гейтов и pin-to-pin можно задать в Verilog при инстанцировании логических примитивов.
Задержки нарастания, спада и отключения (Rise, Fall, Turn-Off Delays)
Время, за которое выход гейта меняется от любого значения к 1 — rise delay. Время перехода к 0 — fall delay. Время перехода в высокоомное состояние (Z) — turn-off delay.
Эти задержки применимы к любому сигналу, так как все могут нарастать или спадать в реальных схемах, не ограничиваясь только выходами гейтов. Есть три способа задать задержки гейтов. Двухзадержковый формат применим к большинству примитивов, выходы которых не переходят в Z. Трехзадержковый формат нельзя применить к AND гейту, так как его выход никогда не переходит в Z.
// Одиночная задержка — для всех трех типов переходов
or #(<delay>) o1 (out, a, b);
// Две задержки — rise и fall
or #(<rise>, <fall>) o1 (out, a, b);
// Три задержки — rise, fall, turn-off
or #(<rise>, <fall>, <turn_off>) o1 (out, a, b);
Если задана одна задержка — все три типа используют это значение. Если две — первая rise, вторая fall. Если три — rise, fall, turn-off соответственно.
Формат с одной задержкой
module des (
input a, b,
output out1, out2
);
// AND гейт с задержкой 2 единицы времени
and #(2) o1 (out1, a, b);
// BUFIF0 гейт с задержкой 3 единицы времени
bufif0 #(3) b1 (out2, a, b);
endmodule
module tb;
reg a, b;
wire out1, out2;
des d0 (.out1(out1), .out2(out2), .a(a), .b(b));
initial begin
{a, b} <= 0;
$monitor ("T=%0t a=%0b b=%0b and=%0b bufif0=%0b", $time, a, b, out1, out2);
#10 a <= 1;
#10 b <= 1;
#10 a <= 0;
#10 b <= 0;
end
endmodule
Выход AND гейта меняется через 2 единицы времени после изменения входа. Например, b становится 1, пока a уже 1 в T=20. Но выход становится 1 только в T=22. Аналогично, a возвращается в 0 в T=30, выход обновляется в T=32.
Задержка BUFIF0 = 3 единицы, поэтому когда b меняется 0→1 при a=1, выход обновляется в Z через 3 единицы — в T=23.
Simulation Log
ncsim> run T=0 a=0 b=0 and=x bufif0=x T=2 a=0 b=0 and=0 bufif0=x T=3 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=13 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=22 a=1 b=1 and=1 bufif0=1 T=23 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=32 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=43 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete.
Формат с двумя задержками
Применим тот же тестбенч к модели с явными rise и fall задержками.
module des (
input a, b,
output out1, out2
);
and #(2, 3) o1 (out1, a, b);
bufif0 #(4, 5) b1 (out2, a, b);
endmodule
Simulation Log
ncsim> run T=0 a=0 b=0 and=x bufif0=x T=3 a=0 b=0 and=0 bufif0=x T=5 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=14 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=22 a=1 b=1 and=1 bufif0=1 T=24 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=33 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=45 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete.
Формат с тремя задержками
module des (
input a, b,
output out1, out2
);
and #(2, 3) o1 (out1, a, b);
bufif0 #(5, 6, 7) b1 (out2, a, b);
endmodule
Simulation Log
ncsim> run T=0 a=0 b=0 and=x bufif0=x T=3 a=0 b=0 and=0 bufif0=x T=6 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=15 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=22 a=1 b=1 and=1 bufif0=1 T=27 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=33 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=46 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete.
Min/Typ/Max задержки
Задержки различаются в разных участках чипа, при разных температурах и вариациях. Verilog предоставляет дополнительный уровень контроля для каждого типа задержки. У каждого цифрового гейта и транзисторной ячейки есть min, typ, max задержки по процессовому узлу, обычно предоставляемые библиотеками фOUNDRY.
Для каждого типа задержки — rise, fall, turn-off — можно задать три значения min, typ, max (минимум, типичное, максимум).
module des (
input a, b,
output out1, out2
);
and #(2:3:4, 3:4:5) o1 (out1, a, b);
bufif0 #(5:6:7, 6:7:8, 7:8:9) b1 (out2, a, b);
endmodule
Simulation Log
ncsim> run T=0 a=0 b=0 and=x bufif0=x T=4 a=0 b=0 and=0 bufif0=x T=7 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=16 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=23 a=1 b=1 and=1 bufif0=1 T=28 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=34 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=47 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete.
Verilog
- Освоение Verilog: полное руководство по проектированию цифровых схем
- Освоение конкатенации в Verilog: практическое руководство
- Понимание назначений в Verilog: типы, синтаксис и лучшие практики
- Блокирующие и неблокирующие назначения в Verilog: ключевые различия
- Управление задержками в Verilog: техники таймингов и лучшие практики
- Межназначенные и внутриназначенные задержки в Verilog: понимание и применение
- Гейтовое моделирование в Verilog: от схем к коду
- Практическое гейтовое дизайнирование в Verilog: AND, OR, NOT гейты и 2x1 мультиплексор
- Генератор тактового сигнала в Verilog: проектирование и реализация
- Мастерство математических функций Verilog для эффективного аппаратного дизайна