Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Verilog

Понимание задержек гейтов в 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

  1. Освоение Verilog: полное руководство по проектированию цифровых схем
  2. Освоение конкатенации в Verilog: практическое руководство
  3. Понимание назначений в Verilog: типы, синтаксис и лучшие практики
  4. Блокирующие и неблокирующие назначения в Verilog: ключевые различия
  5. Управление задержками в Verilog: техники таймингов и лучшие практики
  6. Межназначенные и внутриназначенные задержки в Verilog: понимание и применение
  7. Гейтовое моделирование в Verilog: от схем к коду
  8. Практическое гейтовое дизайнирование в Verilog: AND, OR, NOT гейты и 2x1 мультиплексор
  9. Генератор тактового сигнала в Verilog: проектирование и реализация
  10. Мастерство математических функций Verilog для эффективного аппаратного дизайна