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.