# Hardware implementation of Gaussian noise generator

I am implementing a GNG using Verilog. The implementation is based on the IEEE paper "Hardware Architecture of a Gaussian Noise Generator Based on the Inversion Method". In this, i could not understand what exactly does the ROM_trans block needs to store. I understand it is a lookup table, but I do not know what to store inside it. Also how will I determine the coefficients that need to be stored in the ROM_coef block.

• Answer upvotes and better answer validation are required for this question – Laurent Duval Jul 28 '19 at 14:45

My friend, you dont need to break your head against a paper...

Just with any example of this list, the Blum Blum Shub Method:

$$x'_{{n+1}}=x_{n}^{'2}{\bmod M}$$

with $M=pq$, $p$, $q$ primes, with $x=\frac{1}{M}x' \approx U(0,1)$ gives you a fairly acceptable uniform $U(0,1)$ random number generator. You can use $p$=13331 and $q$=131 or whatever other.

And for converting the $U(0,1)$ Uniform Random Number into a $N(0,1)$ Gaussian Number Generator, as in here, just can use the Central Limit Theorem to generate N numbers each step, and make the sum (Bates Distribution). You can use $N$=15:

$$y'_{n}=\frac{1}{N}\sum_{i=1}^N x_{n}^i$$

with $y=\sqrt{12N}(y'-\frac{1}{2}) \approx N(0,1)$

For randomizing, just use a clock or cpu time seed as $x_0'$.

The paper does not give much details. As a partial answer, I would suggest you to parse the Ph. D. thesis of the first author: Implementación de Funciones Elementales en Dispositivos FPGA, Julio 2011.

Even if the thesis is in castellano, you can find several more occurrences of the terms ROM_coef and ROM_trans, for instance in the algorithm description Algoritmo Segmentación no-uniforme ICDF on page 130.