Ring counter

From Wikipedia, the free encyclopedia
  (Redirected from Johnson counter)
Jump to: navigation, search
Twisted ring counter as a Minecraft redstone circuit

A ring counter is a type of counter composed of a type of circular shift register. The output of the last shift register is fed to the input of the first register. The hamming distance of an Overbeck counter is 2, the hamming distance of a Johnson counter is 1.

There are two types of ring counters:

  • A straight ring counter or Overbeck counter connects the output of the last shift register to the first shift register input and circulates a single one (or zero) bit around the ring. For example, in a 4-register one-hot counter, with initial register values of 1000, the repeating pattern is: 1000, 0100, 0010, 0001, 1000... . Note that one of the registers must be pre-loaded with a 1 (or 0) in order to operate properly.
  • A twisted ring counter, also called Johnson counter or Möbius counter (also Moebius), connects the complement of the output of the last shift register to the input of the first register and circulates a stream of ones followed by zeros around the ring. For example, in a 4-register counter, with initial register values of 0000, the repeating pattern is: 0000, 1000, 1100, 1110, 1111, 0111, 0011, 0001, 0000... .

Johnson counters are often favoured, not just because they offer twice as many count states from the same number of shift registers, but because they are able to self-initialise from the all-zeros state, without requiring the first count bit to be injected externally at start-up. The Johnson counter generates a Gray code, a code in which adjacent states differ by only one bit.

Four-bit ring counter sequences[edit]

Straight ring/Overbeck counter Twisted ring/Johnson counter
State Q0 Q1 Q2 Q3 State Q0 Q1 Q2 Q3
0 1 0 0 0 0 0 0 0 0
1 0 1 0 0 1 1 0 0 0
2 0 0 1 0 2 1 1 0 0
3 0 0 0 1 3 1 1 1 0
0 1 0 0 0 4 1 1 1 1
1 0 1 0 0 5 0 1 1 1
2 0 0 1 0 6 0 0 1 1
3 0 0 0 1 7 0 0 0 1
0 1 0 0 0 0 0 0 0 0

Johnson counter[edit]

A Johnson counter is a ring with an inversion; here is a 4-bit Johnson counter:

A 4-bit Ring counter using D-type flip flops with asynchronous clear.  (Line-negations drawn as circle.)[1]

Note the inversion of the Q signal from the last shift register before feeding back to the first D input, making this a Johnson counter.


Ring counters are used in hardware logic design(e.g. ASIC & FPGA) to create complicated finite state machines. A binary counter will require an adder circuit which is substantially more complex than a ring counter. Additionally, the worst case propagation delay on an adder circuit will be proportional to the number of bits in the code (due to the carry propagation). The propagation delay of a ring counter will be a constant regardless of the number of bits in the code. The complex combinational logic of an adder can create timing errors which may result in erratic hardware performance. Last, ring counters with Hamming distance 2(or more) allow the detection of single bit upsets that can occur in hazardous environments.

The disadvantage of ring counters is that they are lower density codes. A binary counter can represent 2^N states, where N is the number of bits in the code, whereas an Overbeck counter can represent only N states and a Johnson counter can represent only 2N states. This may be an important consideration in hardware implementations where registers are more expensive than combinational logic (e.g. FPGA).

See also[edit]


External links[edit]