86 Pseudo-random number generator

86 : Pseudo-random number generator

Select Project123456789ONSW2
  • Author: Thomas Böhm <thomas.bohm@gmail.com>
  • Description: Pseudo-random number generator using a 16-bit Fibonacci linear-feedback shift register
  • GitHub repository
  • Clock: 0 Hz

How it works

16 flip flops are connected in a chain, and the output of some is XORed together and fed back into the first flip flop. The outputs that are XORed together are chosen in such a way as to give the longest possible cycle (2^16-1). All bits being zero is a special case and is treated separately (all negative outputs of the flip flops are ANDed together to generate a 1 as feedback). On each clock pulse (pin 1) one new bit is generated. Setting load_en (pin 3) to HIGH allows the loading of a user defined value through the data_in pin (pin2). On each clock pulse one bit is read into the flip flop chain. When load_en (pin 3) is set to LOW the computed feedback bit is fed back into the flip flops. The outputs of the last 8 flip flops are connected to the output pins. For each clock pulse a random bit is generated and the other 7 are shifted.

How to test

Set the switch for pin 1 so that the push button generates the clock. Press on it and see the output change on the hex display. Using pin 2 and 3 a custom value can be loaded into the flip flops.

External hardware

None

IO

#InputOutput
0clockrandom bit 0
1data_inrandom bit 1
2load_enrandom bit 2
3random bit 3
4random bit 4
5random bit 5
6random bit 6
7random bit 7