The Johnson counter is also known as a creeping counter.
A Johnson counter is a type of digital counter and a specific application of a shift register. It is renowned for its unique sequence generation and is an example of a synchronous counter. This means that all flip-flops within the counter are clocked simultaneously, ensuring precise timing and operation.
Key Characteristics of a Johnson Counter
- Creeping Counter Name: The alternative name, "creeping counter," stems from the way its output pattern progresses, creating a characteristic "creeping" or "walking" sequence of 1s and 0s.
- Synchronous Operation: Unlike asynchronous (ripple) counters where flip-flops are clocked sequentially, all flip-flops in a Johnson counter change state in unison, triggered by a common clock pulse.
- Feedback Mechanism: A defining feature of the Johnson counter's design is its specific feedback loop. The complemented output of the last flip-flop is connected to the input of the first flip-flop. This inversion and feedback are crucial for generating its distinct output sequence.
- Implementation: To implement an n-bit Johnson counter, n flip-flops are required. For instance, a 4-bit Johnson counter would utilize four flip-flops.
- Output Sequence: A unique aspect of an n-bit Johnson counter is that it produces a sequence of 2n states, which is different from a standard n-bit ring counter (which produces n states) or an n-bit binary counter (which produces 2^n states). The sequence typically involves a string of leading zeros gradually converting to ones, followed by a string of leading ones gradually converting to zeros.
Applications
Johnson counters are commonly used in various digital systems, including:
- Frequency Division: They can be used to divide the input clock frequency by a specific factor.
- Sequencing and Control: Their predictable output patterns make them suitable for generating control signals in sequential logic circuits.
- Decoders: They can be paired with decoding logic to create unique output signals for each state, useful in applications like displaying numerical values or controlling specific operations.