2022-12-07 07:30:05 +00:00
|
|
|
---
|
|
|
|
tags: [logic-gates, binary, memory]
|
|
|
|
---
|
2022-12-07 08:00:05 +00:00
|
|
|
|
|
|
|
# Latches
|
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
The **combinatorial digital circuits** we have looked at so far have been
|
|
|
|
non-sequential. The outcome is a function of its immediate set of inputs and
|
|
|
|
everything happens at once: there is no means of storing state for future use.
|
2024-02-17 11:57:44 +00:00
|
|
|
In other words there is no _[memory](Memory.md)_.
|
2022-12-07 08:00:05 +00:00
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
In contrast, the output of a **sequential digital circuit** depends not only on
|
|
|
|
its present set of inputs but also on past inputs to the circuit. It has some
|
|
|
|
knowledge of its own previous state through the existence of memory. This can be
|
|
|
|
implemented via components that allow for the **storage and retrieval of binary
|
|
|
|
data**.
|
2022-12-07 08:00:05 +00:00
|
|
|
|
2022-12-08 20:18:56 +00:00
|
|
|
## What is a latch?
|
2022-12-07 08:00:05 +00:00
|
|
|
|
2023-01-18 19:52:45 +00:00
|
|
|
A latch is a circuit component that wor
|
2022-12-07 08:00:05 +00:00
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
The **SR Latch** (for "set/reset") has two inputs: _S_ (for "set") and _R_ (for
|
|
|
|
"reset") and one output, _Q_. _Q_ stands for the bit that is remembered. (There
|
|
|
|
is also _not-Q_ which is the opposite of whatever _Q_ is currently set to.)
|
2022-12-07 08:00:05 +00:00
|
|
|
|
2022-12-09 10:00:06 +00:00
|
|
|
The SR Latch goes through the following state changes:
|
2022-12-09 09:30:05 +00:00
|
|
|
|
|
|
|
- When _S_ is set to 1, output _Q_ becomes 1 also
|
|
|
|
- When _S_ goes to 0, _Q_ remains 1
|
|
|
|
- When _R_ is set to 1, the memory bit is cleared and _Q_ becomes 0.
|
|
|
|
- _Q_ remains at 0 even if _R_ goes back to 0
|
2022-12-07 08:00:05 +00:00
|
|
|
|
|
|
|
This is represented more clearly in the table below:
|
|
|
|
|
2023-01-18 19:52:45 +00:00
|
|
|
| S | R | Q | Operation |
|
|
|
|
| --- | --- | --- | ------------- |
|
|
|
|
| 1 | 1 | X | Invalid, null |
|
2022-12-07 08:00:05 +00:00
|
|
|
|
2022-12-10 11:00:04 +00:00
|
|
|
The most succinct account of a latch:
|
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
> A latch is a 1-bit memory device that has a state _Q_ of either 1 or 0. The
|
|
|
|
> _S_ input sets _Q_ to 1 and the _R_ input resets _Q_ to 0.
|
2022-12-09 18:30:05 +00:00
|
|
|
|
2022-12-09 09:30:05 +00:00
|
|
|
_The representation of an SR Latch in a digital circuit diagram_:
|
|
|
|
|
2024-02-16 16:14:01 +00:00
|
|
|

|
2022-12-07 08:00:05 +00:00
|
|
|
|
|
|
|
## Creating a latch circuit
|
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
The circuit diagram latch symbol obviously encapsulates more complex
|
|
|
|
functionality that occurs at the sub-circuit level. We will demonstrate how this
|
|
|
|
functionality can be achieved with two
|
2024-02-17 11:57:44 +00:00
|
|
|
[NOR](Logic_gates.md#nor-gate) gates.
|
2022-12-08 07:22:45 +00:00
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
The two gates are in a **cross-coupled configuration**. This basically means
|
|
|
|
that the wires are crossed back on themselves such that the output of one is
|
|
|
|
also an input of the other at a single stage in the sequence.
|
2022-12-08 20:18:56 +00:00
|
|
|
|
2022-12-10 11:00:04 +00:00
|
|
|
The circuit is created as follows:
|
2022-12-09 09:30:05 +00:00
|
|
|
|
2024-02-16 16:14:01 +00:00
|
|
|

|
2022-12-09 09:30:05 +00:00
|
|
|
|
2022-12-10 11:00:04 +00:00
|
|
|
Interactive version:
|
|
|
|
|
2022-12-09 10:00:06 +00:00
|
|
|
<iframe src="https://circuitverse.org/simulator/embed/nor-latch-0869192c-7d7b-4161-b13f-3f72c1bce8e9" style="border-width:; border-style: solid; border-color:;" name="myiframe" id="projectPreview" scrolling="no" frameborder="1" marginheight="0px" marginwidth="0px" height="400" width="600" allowFullScreen></iframe>
|
|
|
|
|
|
|
|
<br />
|
|
|
|
Let's talk through the logic at each state change:
|
|
|
|
|
|
|
|
- When _S_ is set to 1, output _Q_ becomes 1 also
|
2024-02-02 15:58:13 +00:00
|
|
|
- N1 is receiving 1 from S and 0 from R by way of N2. This is the inversion of
|
|
|
|
OR so TF equals F. Thus N1 is outputting 0.
|
|
|
|
- Thus N2 is receiving 0 from N1 as its top input and 0 from R as its bottom
|
|
|
|
input. It is therefore outputting 1 because with NOR, FF equals T. For this
|
|
|
|
reason, _Q_ is 1 because is directly connected to _R_.
|
2022-12-09 10:00:06 +00:00
|
|
|
- When _S_ goes to 0, _Q_ remains 1
|
2024-02-02 15:58:13 +00:00
|
|
|
- N2 is receiving 0 from N1 as the top input and 0 from R as the bottom input
|
|
|
|
hence the overall input is FF which means N2 is outputting T and Q remains 1
|
|
|
|
- N1 is outputting 0 because it is receiving 0 as its top input and 1 from its
|
|
|
|
bottom input
|
2022-12-09 10:00:06 +00:00
|
|
|
- When _R_ is set to 1, the memory bit is cleared and _Q_ becomes 0.
|
2024-02-02 15:58:13 +00:00
|
|
|
- N2 is receiving 1 from R as its bottom input and 1 from the output of N1 as
|
|
|
|
its top input. Therefore it is outputting TT which in NOR evaluates to F
|
|
|
|
hence Q is 0
|
|
|
|
- N1 is outputting 1 because it is receiving 0 from S as its top input and 0
|
|
|
|
from its bottom input coming from N2. FF equals T in NOR therefore 1 is
|
|
|
|
outputting 1
|
2022-12-09 10:00:06 +00:00
|
|
|
- _Q_ remains at 0 even if _R_ goes back to 0
|
2024-02-02 15:58:13 +00:00
|
|
|
- N2 is receiving 0 as its bottom input from R and 1 as its top input from N1.
|
|
|
|
TF equals F in NOR hence the output of N2 is 0 and Q remains 0
|
|
|
|
- N1 is outputting 1 because it is receiving 0 as its top input from S and 0
|
|
|
|
as its bottom input from N2. FF equals T in NOR hence N1 is 1
|