Update Latches.md

This commit is contained in:
Andrei Solodovnikov
2025-07-22 17:31:08 +03:00
committed by GitHub
parent 1c10097d72
commit 967ce4f13c

View File

@@ -1,12 +1,12 @@
# Защелка
# D-защёлка
Очень важно при описании мультиплексора с помощью блока `case` описывать оставшиеся комбинации управляющего сигнала с помощью `default` (а при использовании блока `if` — описывать блок `else`) — в противном случае в вашей схеме может появиться [защелка](https://www.build-electronic-circuits.com/d-latch/) — даже несмотря на то, что для описания защелок в SytemVerilog есть отдельный блок `always`: `always_latch`.
Очень важно при описании мультиплексора с помощью блока `case` описывать оставшиеся комбинации управляющего сигнала с помощью `default` (а при использовании блока `if` — описывать блок `else`) — в противном случае в вашей схеме может появиться [D-защёлка]([https://www.build-electronic-circuits.com/d-latch/](https://web.archive.org/web/20221214154654/https://www.build-electronic-circuits.com/d-latch/)) — даже несмотря на то, что для описания защелок в SytemVerilog есть отдельный блок `always`: `always_latch`.
Защелка представляет из себя элемент памяти, причем данные в нее записываются не по тактовому синхроимпульсу, а на протяжении относительно длинного промежутка времени, когда управляющий сигнал "открывает" защелку (в этом случае говорят, что защелка становится "прозрачной"). Из-за этого она не является ни комбинационной, ни синхронной схемой.
Защёлка представляет из себя элемент памяти, причем данные в нее записываются не по тактовому синхроимпульсу, а на протяжении относительно длинного промежутка времени, когда управляющий сигнал "открывает" защелку (в этом случае говорят, что защёлка становится "прозрачной"). Из-за этого она не является ни комбинационной, ни синхронной схемой.
Защелка — это всего лишь элемент цифровой схемы и будет неправильно говорить о нём в терминах "плохой" или "хороший". Защелка имеет свои плюсы для [ASIC](https://ru.wikipedia.org/wiki/Интегральная_схема_специальногоазначения)-проектирования. Однако защелка совершенно не подходит при проектировании устройств под ПЛИС.
Защёлка — это всего лишь элемент цифровой схемы и будет неправильно говорить о нём в терминах "плохой" или "хороший". Защёлка имеет свои плюсы для [ASIC](https://ru.wikipedia.org/wiki/Интегральная_схема_специальногоазначения)-проектирования. Однако защёлка совершенно не подходит при проектировании устройств под ПЛИС.
Обычно появление защелки в цифровой схеме говорит об ошибке разработки: в случае, если планировалась комбинационная логика, добавление защелки приведет к непредвиденному удержанию предыдущих значений (поскольку защелка сохраняет предыдущее значение до прихода очередной комбинации управляющего сигнала, описанной в блоке `case`). Это особенно плохо, если сигнал, перед которым появилась защелка, чем-то управляет. Представьте, что он управляет сейфом, который должен открываться если ввели правильный пароль:
Обычно появление защелки в цифровой схеме говорит об ошибке разработки: в случае, если планировалась комбинационная логика, добавление защелки приведет к непредвиденному удержанию предыдущих значений (поскольку защёлка сохраняет предыдущее значение до прихода очередной комбинации управляющего сигнала, описанной в блоке `case`). Это особенно плохо, если сигнал, перед которым появилась защёлка, чем-то управляет. Представьте, что он управляет сейфом, который должен открываться если ввели правильный пароль:
```Verilog
always_comb begin
@@ -29,7 +29,7 @@ always_comb begin
end
```
В случае синхронной логики, будет непредсказуемое поведение данных, т.к. информация в защелку будет записываться не синхронно, как это ожидается, а на протяжении длительного промежутка времени, пока защелка "открыта".
В случае синхронной логики, будет непредсказуемое поведение данных, т.к. информация в защелку будет записываться не синхронно, как это ожидается, а на протяжении длительного промежутка времени, пока защёлка "открыта".
Ещё один пример:
@@ -62,7 +62,7 @@ _Рисунок 1. Пример генерации защелки у непол
На _рис. 1_ различные её части обозначены следующим образом:
1. Мультиплексор, который мы хотели описать
2. Защелка
2. Защёлка
3. Мультиплексор, который был добавлен чтобы генерировать сигнал, "открывающий" защелку
4. Константная единица (питание)
5. Константный ноль (земля).
@@ -75,6 +75,6 @@ _Рисунок 1. Пример генерации защелки у непол
_Рисунок 2. Пример удержания предыдущих значений защелкой._
Кроме того, защелка усложняет временной анализ и может ухудшить временные характеристики, из-за чего схема может работать на меньших частотах, чем могла бы.
Кроме того, защёлка усложняет временной анализ и может ухудшить временные характеристики, из-за чего схема может работать на меньших частотах, чем могла бы.
Таким образом, во избежание появления защелки, необходимо описывать все возможные комбинации в блоке `case` (при необходимости покрывая множество оставшихся комбинаций с помощью `default`) и для каждого блока `if` описывать блоки `else`. В случае, если подобная комбинация не планируется к использованию, можно присвоить сигналу значение ноль. Конечно, в этом случае будет создана избыточная логика для присваивания ненужного значения, которое никогда не должно произойти (и существуют способы описания аппаратуры, позволяющие этого избежать), но в данном случае это самый простой способ.