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 ```Verilog
always_comb begin always_comb begin
@@ -29,7 +29,7 @@ always_comb begin
end end
``` ```
В случае синхронной логики, будет непредсказуемое поведение данных, т.к. информация в защелку будет записываться не синхронно, как это ожидается, а на протяжении длительного промежутка времени, пока защелка "открыта". В случае синхронной логики, будет непредсказуемое поведение данных, т.к. информация в защелку будет записываться не синхронно, как это ожидается, а на протяжении длительного промежутка времени, пока защёлка "открыта".
Ещё один пример: Ещё один пример:
@@ -62,7 +62,7 @@ _Рисунок 1. Пример генерации защелки у непол
На _рис. 1_ различные её части обозначены следующим образом: На _рис. 1_ различные её части обозначены следующим образом:
1. Мультиплексор, который мы хотели описать 1. Мультиплексор, который мы хотели описать
2. Защелка 2. Защёлка
3. Мультиплексор, который был добавлен чтобы генерировать сигнал, "открывающий" защелку 3. Мультиплексор, который был добавлен чтобы генерировать сигнал, "открывающий" защелку
4. Константная единица (питание) 4. Константная единица (питание)
5. Константный ноль (земля). 5. Константный ноль (земля).
@@ -75,6 +75,6 @@ _Рисунок 1. Пример генерации защелки у непол
_Рисунок 2. Пример удержания предыдущих значений защелкой._ _Рисунок 2. Пример удержания предыдущих значений защелкой._
Кроме того, защелка усложняет временной анализ и может ухудшить временные характеристики, из-за чего схема может работать на меньших частотах, чем могла бы. Кроме того, защёлка усложняет временной анализ и может ухудшить временные характеристики, из-за чего схема может работать на меньших частотах, чем могла бы.
Таким образом, во избежание появления защелки, необходимо описывать все возможные комбинации в блоке `case` (при необходимости покрывая множество оставшихся комбинаций с помощью `default`) и для каждого блока `if` описывать блоки `else`. В случае, если подобная комбинация не планируется к использованию, можно присвоить сигналу значение ноль. Конечно, в этом случае будет создана избыточная логика для присваивания ненужного значения, которое никогда не должно произойти (и существуют способы описания аппаратуры, позволяющие этого избежать), но в данном случае это самый простой способ. Таким образом, во избежание появления защелки, необходимо описывать все возможные комбинации в блоке `case` (при необходимости покрывая множество оставшихся комбинаций с помощью `default`) и для каждого блока `if` описывать блоки `else`. В случае, если подобная комбинация не планируется к использованию, можно присвоить сигналу значение ноль. Конечно, в этом случае будет создана избыточная логика для присваивания ненужного значения, которое никогда не должно произойти (и существуют способы описания аппаратуры, позволяющие этого избежать), но в данном случае это самый простой способ.