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