| In the previous section, we saw a circuit using 
    one J-K flip-flop that counted backward in a two-bit binary sequence, from 
    11 to 10 to 01 to 00. Since it would be desirable to have a circuit that 
    could count forward and not just backward, it would be worthwhile to 
    examine a forward count sequence again and look for more patterns that might 
    indicate how to build such a circuit.
    Since we know that binary count sequences follow a pattern of octave 
    (factor of 2) frequency division, and that J-K flip-flop multivibrators set 
    up for the "toggle" mode are capable of performing this type of frequency 
    division, we can envision a circuit made up of several J-K flip-flops, 
    cascaded to produce four bits of output. The main problem facing us is to 
    determine how to connect these flip-flops together so that they 
    toggle at the right times to produce the proper binary sequence. Examine the 
    following binary count sequence, paying attention to patterns preceding the 
    "toggling" of a bit between 0 and 1:  
      Note that each bit in this four-bit sequence toggles when the bit before 
    it (the bit having a lesser significance, or place-weight), toggles in a 
    particular direction: from 1 to 0. Small arrows indicate those points in the 
    sequence where a bit toggles, the head of the arrow pointing to the previous 
    bit transitioning from a "high" (1) state to a "low" (0) state:  
      Starting with four J-K flip-flops connected in such a way to always be in 
    the "toggle" mode, we need to determine how to connect the clock inputs in 
    such a way so that each succeeding bit toggles when the bit before it 
    transitions from 1 to 0. The Q outputs of each flip-flop will serve as the 
    respective binary bits of the final, four-bit count:  
      If we used flip-flops with negative-edge triggering (bubble symbols on 
    the clock inputs), we could simply connect the clock input of each flip-flop 
    to the Q output of the flip-flop before it, so that when the bit before it 
    changes from a 1 to a 0, the "falling edge" of that signal would "clock" the 
    next flip-flop to toggle the next bit:  
      This circuit would yield the following output waveforms, when "clocked" 
    by a repetitive source of pulses from an oscillator:  
      The first flip-flop (the one with the Q0 output), has a 
    positive-edge triggered clock input, so it toggles with each rising edge of 
    the clock signal. Notice how the clock signal in this example has a duty 
    cycle less than 50%. I've shown the signal in this manner for the purpose of 
    demonstrating how the clock signal need not be symmetrical to obtain 
    reliable, "clean" output bits in our four-bit binary sequence. In the very 
    first flip-flop circuit shown in this chapter, I used the clock signal 
    itself as one of the output bits. This is a bad practice in counter design, 
    though, because it necessitates the use of a square wave signal with a 50% 
    duty cycle ("high" time = "low" time) in order to obtain a count sequence 
    where each and every step pauses for the same amount of time. Using one J-K 
    flip-flop for each output bit, however, relieves us of the necessity of 
    having a symmetrical clock signal, allowing the use of practically any 
    variety of high/low waveform to increment the count sequence.  As indicated by all the other arrows in the pulse diagram, each 
    succeeding output bit is toggled by the action of the preceding bit 
    transitioning from "high" (1) to "low" (0). This is the pattern necessary to 
    generate an "up" count sequence.  A less obvious solution for generating an "up" sequence using 
    positive-edge triggered flip-flops is to "clock" each flip-flop using the Q' 
    output of the preceding flip-flop rather than the Q output. Since the Q' 
    output will always be the exact opposite state of the Q output on a J-K 
    flip-flop (no invalid states with this type of flip-flop), a high-to-low 
    transition on the Q output will be accompanied by a low-to-high transition 
    on the Q' output. In other words, each time the Q output of a flip-flop 
    transitions from 1 to 0, the Q' output of the same flip-flop will transition 
    from 0 to 1, providing the positive-going clock pulse we would need to 
    toggle a positive-edge triggered flip-flop at the right moment:  
      One way we could expand the capabilities of either of these two counter 
    circuits is to regard the Q' outputs as another set of four binary bits. If 
    we examine the pulse diagram for such a circuit, we see that the Q' outputs 
    generate a down-counting sequence, while the Q outputs generate an 
    up-counting sequence:  
      
      Unfortunately, all of the counter circuits shown thusfar share a common 
    problem: the ripple effect. This effect is seen in certain types of 
    binary adder and data conversion circuits, and is due to accumulative 
    propagation delays between cascaded gates. When the Q output of a flip-flop 
    transitions from 1 to 0, it commands the next flip-flop to toggle. If the 
    next flip-flop toggle is a transition from 1 to 0, it will command the 
    flip-flop after it to toggle as well, and so on. However, since there is 
    always some small amount of propagation delay between the command to toggle 
    (the clock pulse) and the actual toggle response (Q and Q' outputs changing 
    states), any subsequent flip-flops to be toggled will toggle some time 
    after the first flip-flop has toggled. Thus, when multiple bits toggle 
    in a binary count sequence, they will not all toggle at exactly the same 
    time:  
      As you can see, the more bits that toggle with a given clock pulse, the 
    more severe the accumulated delay time from LSB to MSB. When a clock pulse 
    occurs at such a transition point (say, on the transition from 0111 to 
    1000), the output bits will "ripple" in sequence from LSB to MSB, as each 
    succeeding bit toggles and commands the next bit to toggle as well, with a 
    small amount of propagation delay between each bit toggle. If we take a 
    close-up look at this effect during the transition from 0111 to 1000, we can 
    see that there will be false output counts generated in the brief 
    time period that the "ripple" effect takes place:  
      Instead of cleanly transitioning from a "0111" output to a "1000" output, 
    the counter circuit will very quickly ripple from 0111 to 0110 to 0100 to 
    0000 to 1000, or from 7 to 6 to 4 to 0 and then to 8. 
    This behavior earns the counter circuit the name of ripple counter, 
    or asynchronous counter.  In many applications, this effect is tolerable, since the ripple happens 
    very, very quickly (the width of the delays has been exaggerated here as an 
    aid to understanding the effects). If all we wanted to do was drive a set of 
    light-emitting diodes (LEDs) with the counter's outputs, for example, this 
    brief ripple would be of no consequence at all. However, if we wished to use 
    this counter to drive the "select" inputs of a multiplexer, index a memory 
    pointer in a microprocessor (computer) circuit, or perform some other task 
    where false outputs could cause spurious errors, it would not be acceptable. 
    There is a way to use this type of counter circuit in applications sensitive 
    to false, ripple-generated outputs, and it involves a principle known as 
    strobing.  Most decoder and multiplexer circuits are equipped with at least one 
    input called the "enable." The output(s) of such a circuit will be active 
    only when the enable input is made active. We can use this enable input to
    strobe the circuit receiving the ripple counter's output so that it 
    is disabled (and thus not responding to the counter output) during the brief 
    period of time in which the counter outputs might be rippling, and enabled 
    only when sufficient time has passed since the last clock pulse that all 
    rippling will have ceased. In most cases, the strobing signal can be the 
    same clock pulse that drives the counter circuit:  
      With an active-low Enable input, the receiving circuit will respond to 
    the binary count of the four-bit counter circuit only when the clock signal 
    is "low." As soon as the clock pulse goes "high," the receiving circuit 
    stops responding to the counter circuit's output. Since the counter circuit 
    is positive-edge triggered (as determined by the first flip-flop 
    clock input), all the counting action takes place on the low-to-high 
    transition of the clock signal, meaning that the receiving circuit will 
    become disabled just before any toggling occurs on the counter circuit's 
    four output bits. The receiving circuit will not become enabled until the 
    clock signal returns to a low state, which should be a long enough time 
    after all rippling has ceased to be "safe" to allow the new count to 
    have effect on the receiving circuit. The crucial parameter here is the 
    clock signal's "high" time: it must be at least as long as the maximum 
    expected ripple period of the counter circuit. If not, the clock signal will 
    prematurely enable the receiving circuit, while some rippling is still 
    taking place.  Another disadvantage of the asynchronous, or ripple, counter circuit is 
    limited speed. While all gate circuits are limited in terms of maximum 
    signal frequency, the design of asynchronous counter circuits compounds this 
    problem by making propagation delays additive. Thus, even if strobing is 
    used in the receiving circuit, an asynchronous counter circuit cannot be 
    clocked at any frequency higher than that which allows the greatest possible 
    accumulated propagation delay to elapse well before the next pulse.  The solution to this problem is a counter circuit that avoids ripple 
    altogether. Such a counter circuit would eliminate the need to design a "strobing" 
    feature into whatever digital circuits use the counter output as an input, 
    and would also enjoy a much greater operating speed than its asynchronous 
    equivalent. This design of counter circuit is the subject of the next 
    section.  
      REVIEW: An "up" counter may be made by connecting the clock inputs of 
      positive-edge triggered J-K flip-flops to the Q' outputs of the preceding 
      flip-flops. Another way is to use negative-edge triggered flip-flops, 
      connecting the clock inputs to the Q outputs of the preceding flip-flops. 
      In either case, the J and K inputs of all flip-flops are connected to Vcc 
      or Vdd so as to always be "high." Counter circuits made from cascaded J-K flip-flops where each clock 
      input receives its pulses from the output of the previous flip-flop 
      invariably exhibit a ripple effect, where false output counts are 
      generated between some steps of the count sequence. These types of counter 
      circuits are called asynchronous counters, or ripple counters.
      Strobing is a technique applied to circuits receiving the 
      output of an asynchronous (ripple) counter, so that the false counts 
      generated during the ripple time will have no ill effect. Essentially, the
      enable input of such a circuit is connected to the counter's clock 
      pulse in such a way that it is enabled only when the counter outputs are 
      not changing, and will be disabled during those periods of changing 
      counter outputs where ripple occurs. |