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

D-защелки: проектирование, принцип работы и ключевые отличия от триггеров

Триггер захватывает данные по фронту такта. Защёлка (latch) не имеет тактового фронта — её выход следует за входом, пока вход разрешения (en) активен.

Проект

Защёлка с тремя входами (d — данные, rstn — активный низкий сброс, en — разрешение) и одним выходом q. Сброс активен при низком уровне. Выход q определяется комбинацией d, en, rstn.

module d_latch (
  input  d,
  input  en,
  input  rstn,
  output reg q
);
  always @(en or rstn or d)
    if (!rstn) q <= 0;
    else if (en) q <= d;
endmodule

Список чувствительности содержит все сигналы, влияющие на выход. Блок срабатывает при изменении любого из них. Выход принимает значение d только при en=1 — это положительная защёлка.

Схема

Тестбенч

module tb_latch;
  reg d, en, rstn;
  reg [2:0] delay;
  reg [1:0] delay2;
  integer i;
  wire q;

  d_latch dl0 (.d(d), .en(en), .rstn(rstn), .q(q));

  initial begin
    $monitor("[%0t] en=%0b d=%0b q=%0b", $time, en, d, q);
    d <= 0; en <= 0; rstn <= 0;
    #10 rstn <= 1;
    for (i = 0; i < 5; i = i+1) begin
      delay  = $random;
      delay2 = $random;
      #(delay2) en <= ~en;
      #(delay)  d <= i;
    end
  end
endmodule

Переменные delay (3 бита) и delay2 (2 бита) задают случайные задержки для разнообразия тестовых сценариев.

Результат симуляции

[0]  en=0 d=0 q=0
[11] en=1 d=0 q=0
[18] en=0 d=0 q=0
[19] en=0 d=1 q=0
[20] en=1 d=1 q=1
[25] en=1 d=0 q=0
[27] en=0 d=0 q=0
[32] en=0 d=1 q=0
[33] en=1 d=1 q=1
[34] en=1 d=0 q=0

Verilog

  1. Общееэмиттерный усилитель: Конструкция, измерения и техники обратной связи
  2. Сборка высоковольтного дифференциального усилителя, работающего как операционный усилитель
  3. Точный повторитель напряжения: освоение обратной связи ОУ для точного слежения сигналом
  4. Основы ввода-вывода в C#: Console.WriteLine, ReadLine и форматирование
  5. Освоение ввода и вывода в C++: практическое руководство
  6. Ввод-вывод в C: scanf() и printf() — подробное руководство
  7. Мастерство ввода-вывода и импорта модулей в Python: Практическое руководство
  8. Ввод и вывод в Java: печать, чтение и форматирование данных
  9. Потоки в C++: cout, cin, cerr, clog — практическое руководство
  10. Ввод-вывод в C: stdio.h, потоки stdin/stdout/stderr, функции getchar/putchar, gets/puts, scanf/printf