mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 09:10:10 +00:00
Update Latches.md
This commit is contained in:
committed by
GitHub
parent
1c10097d72
commit
967ce4f13c
@@ -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`. В случае, если подобная комбинация не планируется к использованию, можно присвоить сигналу значение ноль. Конечно, в этом случае будет создана избыточная логика для присваивания ненужного значения, которое никогда не должно произойти (и существуют способы описания аппаратуры, позволяющие этого избежать), но в данном случае это самый простой способ.
|
||||||
|
Reference in New Issue
Block a user