| |
|
May 21, 1998
LFSR counters implement binary polynomial generators
Tom Balph, Motorola Semiconductor
LFSR counters make ideal pseudorandom-number generators, but make sure to
provide a reset function to prevent lockup.
You can use linear-feedback shift registers (LFSRs) as
alternatives to conventional bi-nary counters (Reference 1).
An LFSR reduces the amount of required logic and minimizes routing complexity. A possible
disadvantage is that the count sequence is not the normal binary increment or decrement
sequence. An LFSR counter, in effect, implements a binary polynomial generator. These
generators find common use for pseudorandom-number generation. This article provides some
guidelines for implementing LFSR-based counters. Some general points include
An LFSR with n flip-flops can implement only a (2n1)-state
counter. The all-zeros state is normally not allowed because the counter locks up.
Good design practice demands a reset condition that
provides start-up in a known condition and also ensures that the counter does not power up
in a zero condition and stay locked up.
The choice of the polynomial used should ensure 2n1
states--with no repeated states; such a polynomial is known as a "primitive," or
maximal-length polynomial.
To implement a counter with a divide ratio other than 2n1,
you must first select a primitive polynomial that has the proper degree. The degree, or
power of two, must be large enough to allow the desired number range. As an example, a
divide-by-35 counter must use a polynomial of the sixth degree (yielding 261=63
possible states). You can typically find primitive polynomials in tables in textbooks that
deal with testing and pseudorandom numbers. The values in Table
1 derive from Reference 2.
The values in Table 1
are the exponents of terms in primitive binary polynomials. The numbers listed represent
the smallest number of terms for a primitive polynomial of each degree. For example, the
entry 12: 7 4 3 0 represents the polynomial x12+x7+x4+x3+1.
Once you select a polynomial, you first implement a counter for just that polynomial. As a
design example, assume you need a divide-by-12 counter. From Table
1, you select the fourth-degree polynomial (x4+x+1) because it
allows as many as 15 possible states.
You
can implement the polynomial in logic as either a "many-to-one" (Figure 1a) or a "one-to-many" (Figure 1b) design. Note that, although either
approach implements the same polynomial, the count sequences differ. At this point, you
should add a synchronous reset to the design to force an all-ones condition at reset.
Figure
2a shows the one-to-many design example. Through simulation, you can observe
the count sequence and verify that the selected polynomial repeats after 2n1
states (in this case, 15 states) and that no state repeats within each sequence. Table 2 gives the sequence for this example.
To complete the counter design, you can decode the desired
final count and force the normal sequence to truncate back to the reset condition. For the
divide-by-12 example, you decode state 12, in which the count value equals two hex. Figure 2b shows the reset-modification hardware.
References
Dipert, Brian, "Shattering the
programmable-logic speed barrier," EDN, May 22, 1997, pg 37.
Bardel, McAnney, and Savir, Built-In Test for VLSI:
Pseudorandom Techniques, John Wiley and Sons, 1987.
|