Random Number Generator (RNG) is designed by
Jason M. Chu of Boston
University during the Spring semester of 2002.

Abstract of the Problem:

"How are random numbers
generated? True randomness is impossible to do on a computer since any
number obtained will depend on the algorithm used to generate them and thus
cannot possibly be random. Generally, it is sufficient to produce
pseudorandom numbers, which are numbers that appear to be random. When we
say they appear to be random, we mean that pseudorandom numbers should
satisfy many of the properties that random numbers do. This is much easier
said than done though."

-- Mark Allen Weiss, Computer Scientist and Author

The goal of this project is to design a circuit from combinational and
sequential logic blocks that is capable of generating random output signals.

During my senior year as an undergraduate at Boston University, I
received an assignment of designing a Random Number Generator (RNG) for an
FPGA-based counting device. The function of RNG is to take a mechanical
input from the user (i.e. pushing a button) and output in visual form a
random number inclusively between 0 and 15. Even more simply put, every time
the user push a button, RNG will randomly output a number ranged from 0 to
15.

The assignment sounds simple enough. However, when you consider a circuit
that is primarily consists of transistors, achieving randomness is quite a
bit of a challenge. All the logics from a combinational and/or a sequential
circuit may be arranged as a truth table which gives us the
Boolean functions. One of the definitions for a function is that for a
certain combination of inputs, there can exist only one single output. And
the Boolean functions are no exception. Back to our case, if the input to
the device circuit is always the one single mechanical input from the user,
then by definition there can exist only one device output, regardless of how
the logic blocks were used for building the circuit. Thus, randomness is
impossible to achieve. Furthermore, a random output is only possible if and
only if the input itself is random.

"It is impossible to obtain a random output from a circuit unless the
circuit itself is randomly put together. Designs may be random, but
randomness may not be designed."

"If the output is predictable, it is not random."

-- from two engineering students

But it is possible. As Dr. Mark Allen Weiss had mentioned, it is
sufficient just to obtain numbers that are not actually random, but seem
to be random to the human eyes.