Circuitos Digitales basados en FPGAs para Generación de Números Aleatorios

Texto completo

(1)

I. OBJETIVO

L objetivo de este trabajo consiste en diseñar y construir un generador de números aleatorios utilizando FPGAs ( Field Programmable Gate Arrays). Dado que en sistemas digitales es imposible conseguir números totalmente aleatorios, en realidad lo que se pretende es utilizar generadores de números pseudoaleatorios que proporcionen secuencias lo más aleatorias y uniformemente distribuidas que sea posible.

La generación de números aleatorios es un tema que tiene diversas aplicaciones. Actualmente cada día es más importante tener buenos generadores de números aleatorios ya que son muy usados en criptografía o encriptación de datos (lo que posibilita las comunicaciones de datos seguras), así como por su aplicación en la generación de claves secretas. Otros campos en los que tienen aplicación creciente son las máquinas de azar o los videojuegos y los algoritmos genéticos.

II. INTRODUCCIÓN

Se pueden definir los números o bits aleatorios como sucesiones de números o bits seleccionados al azar de forma uniforme, es decir, es una distribución en la que todo bit o número tiene la misma probabilidad de ser escogido, o dicho de otra manera, los números o bits deben ser estadísticamente independientes [1]. Las secuencias de números aleatorios son completamente irreproducibles. Al hablar de generadores de números aleatorios (RNG) es muy importante la idea de aleatoriedad, que suele venir asociada a la impredecibilidad y probabilidad. En este contexto nos referiremos como números aleatorios a “una secuencia de números independientes con una distribución específica y una determinada probabilidad de caer en un rango cualquiera de valores” [5]. Existen diversos métodos para generar números aleatorios, pero los generadores de verdaderos números aleatorios en hardware dependen principalmente de las características aleatorias de los elementos físicos (radiación de un núcleo atómico radiactivo, medida de la inestabilidad en la frecuencia de un oscilador libre, ruido de una resistencia…). Para conseguir este tipo de generadores se siguen los siguientes pasos: recogida de bits, cálculo de la entropía (nos dirá cuantos de los bits obtenidos son impredecibles) y reducción a bits independientes (comprobar condiciones de uniformidad de la distribución). Este tipo de generadores tienen la desventaja de que no se puede demostrar matemáticamente que los números obtenidos sean aleatorios, y que no se pueden reproducir los valores obtenidos para analizar y testear los resultados.

Por otro lado se pueden estudiar los números pseudoaleatorios, que son generados a partir de una función determinista pero aparentan ser aleatorios. Estos números se generan a partir de un valor inicial aplicando iterativamente la función. Una sucesión de números pseudoaleatorios se somete a diversos test para medir su aleatoriedad, es decir, para ver hasta que punto es similar a una sucesión aleatoria [1]. El principal motivo de que se usen estas sucesiones pseudoaleatorias es que son más rápidas de generar, aunque presentan dos desventajas importantes, que son sucesiones periódicas y a partir de un mismo valor inicial se genera siempre la misma sucesión. Esas desventajas también pueden convertirse en ventajas, ya que nos permite repetir un experimento en las mismas condiciones simplemente utilizando el mismo generador y el mismo valor inicial. Estos números pseudoaleatorios se obtienen utilizando generadores de números pseudoaleatorios (PRNG) que consisten en una función que a partir de una “semilla” genera números aparentemente aleatorios. En los PRNGs interesa que el periodo sea lo más grande posible.

Las aplicaciones de los números aleatorios son muchas, desde máquinas de juego hasta criptografía, pasando aplicaciones tan dispares como la resolución de ecuaciones complejas o la composición de música electrónica.

III. ALGORITMOS DE GENERACIÓN DE NÚMEROS PSEUDOALEATORIOS Y TEST ESTADÍSTICOS III.I Algoritmos de Generación de Números Pseudoaleatorios

A. Generadores Congruenciales Lineales (GCL)

Estos generadores fueron introducidos por Lehmer hacia 1949 [4]. Sea Xn un elemento de la secuencia de números aleatorios, entonces Xn+1 se obtiene como sigue:

Circuitos Digitales basados en FPGAs para

Generación de Números Aleatorios

Autora: Mª Goretti Sevillano Berasategui.

Tutores: Inés del Campo Hagelstrom y Javier Echanobe Arias

(2)

Xn+1 = (a Xn + c) mod m, con 0 ≤ Xn ≤ m Ұ n

[III.1]

Donde a es el multiplicador, c el incremento y m el módulo. Asociados a estos generadores se deben definir algunos conceptos como el periodo, que es la subcadena de la serie en la que no hay repeticiones, y longitud de periodo, que se define como el número de elementos de dicha subcadena. En estos generadores, cada elemento depende del anterior, por lo que una vez que se repita un elemento se repetirá toda la serie.

Existen dos tipos de G. C. L.:

- G. C. Multiplicativos (1949): tomando c = 0:

Xn+1 = a Xn mod m

[III.2]

- G. C. Mixtos (1958): permiten obtener longitud de de periodo mayor:

Xn+1 = (a Xn + c) mod m

[III.3]

A la hora de diseñar un G. C. L. hay que tener en cuenta que los parámetros a, c y m, deben cumplir ciertas condiciones: - Elección del módulo: Se debe elegir m de manera que facilite la operación de división, si trabajamos en sistema binario, una

buena elección podría ser m = 2e tal que 0 ≤ x ≤ m.

- Elección del multiplicador y del incremento: Existen varios teoremas que dan las condiciones para a y c que permitan obtener el periodo máximo [3].

B. Generadores Congruenciales Cuadráticos

Estos generadores permiten obtener la máxima longitud de periodo m pero necesitan hacer más operaciones, también existen teoremas para obtener los valores más apropiados de los parámetros [3]:

Xn+1 = (d Xn2 + a Xn + c) mod m

[III.4]

C. Generadores de Métodos Aditivos

En estos generadores cada nuevo elemento depende de dos elementos anteriores de la lista [3]. Permiten obtener longitudes de periodo de hasta m2, y son más rápidos, ya que son puramente aditivos y no usan multiplicadores.

- Fibonacci (1950): Xn+1 = (Xn-1 + Xn) mod m

[III.5]

- Green:

X

n+1 = (Xn + Xn-k) mod m, con k ≥ 16

[III.6]

- Mitchell – Moore (1958): para este generador se debe verificar que m sea par y necesita que se le proporcionen 55 semillas aleatorias no todas pares: Xn+1 = (Xn-24 + Xn-55) mod m, con n ≥ 55

[III.7]

D. Generador de Congruencia Inversa

En este generador cada elemento depende del inverso multiplicativo (Xn (Xn)-1 = 1 [7]) del anterior. Tiene el inconveniente de que hay que calcular esos inversos:

Xn+1 = (a (Xn)-1 + b) mod m

[III.8]

E. Generador de Método Mixto

Con estos generadores se obtienen series a partir de otras dos:

Zn+1 = (Xn + Yn) mod m

[III.9]

La longitud máxima de periodo obtenida para Zn será L1 * L2 si se verifica que mcd (L1, L2) = ± 1. A diferencia de con los GCL aquí el hecho de que un elemento de la serie se repita no significa que la serie empiece a ciclar. Es aconsejable utilizar métodos distintos para generar las dos series de partida [3].

F. Generador basado en Registros y puertas XOR

En este caso se trabaja con la codificación en binario de los números de la serie. Se dispone de una línea de bits aleatorios (semilla) que se deberá obtener con algún otro generador. Cada elemento de la serie se puede obtener de dos maneras distintas, y la selección de una y otra se realiza de una forma más o menos aleatoria:

1ª igualando el nuevo elemento a la semilla correspondiente

Xn+1 = semillan+1 [III.10]

(3)

Xn+1 = (Xn XOR Xn-1)

[III.11]

Hay que tener en cuenta que para los casos n = 1 y n= 2, el uso de las semillas es necesario. III.II Test Estadísticos

Estos test vienen recogidos en los Federal Information Processing Standard (FIPS) 140-1 (Enero 1994) y 140-2 (Noviembre 1999) [3]. Los FIPS son publicados por el Nacional Institute of Standards and Technology (NIST) y pretenden establecer unos estándares a seguir por el gobierno federal estadounidense. Estos estándares 140-1 y 140-2, en particular, hacen referencia a condiciones de seguridad exigidas a módulos criptográficos y especifican test estadísticos para los generadores de números aleatorios, como los que hay dentro de esos módulos [2].

A. Test Monobit

En este test hay que contar el número de bits iguales a uno en una secuencia de 20000 bits. A ese número le llamamos X. Dependiendo de cual de los dos FIPS consideremos podemos tener 2 rangos de valores de X para los cuales el test se pasa:

FIPS 140-1  9654 < X < 10346 [2] FIPS 140-2  9275 < X < 10275 [3]

El FIPS 140-1 era menos exigente, por lo que se considerará que el test se pasa cuando X pertenezca al rango establecido por el FIPS 140-2 que es el más restrictivo y reciente.

B. Test Poker

En este caso hay que dividir la secuencia de 20000 bits en 5000 segmentos contiguos de 4 bits. Esos 4 bits dan lugar a 16 posibles valores (0000, 0001, …, 1111). Hay que contar el número de veces que aparece cada uno de esos 16 posibles valores, y almacenaremos ese número de apariciones en f(i), siendo 0 ≤ i ≤ 15. A continuación se evalúa la siguiente expresión:

X = (16/5000) * ∑ f(i)2 – 5000 [III.12] El test se pasa si: FIPS 140-1  1.03 < X < 57.4 [2]

FIPS 140-2  2.16 < X < 46.17 [3]

Del mismo modo que con el test anterior, para evaluar los algoritmos se tendrá en cuenta el rango establecido por el FIPS 140-2.

C. Test de Rachas o Run Test

Se define una racha como una subsecuencia máxima de bits consecutivos iguales, bien sean ceros o unos, que es parte de la secuencia inicial de 20000 bits. Estas rachas se deben contar y almacenar el número de veces que aparecen rachas de 1 bit (un cero o un uno), 2 bits iguales (se almacenarán por separado número de veces que aparecen las rachas 00 y 11), 3 bits iguales… Se considera que el test se pasa si se verifica la tabla I:

Longitud de la racha Intervalo FIPS 140-1 [2] Intervalo FIPS 140-2 [3] [3.4]

1 2267 – 2733 2342 – 2657 2 1079 – 1421 1135 – 1365 3 502 – 748 542 – 708 4 223 – 402 251 – 373 5 90 – 223 111 – 201 ≥ 6 90 - 223 111 – 201

Tabla I Criterio de evaluación del Test de Rachas o Run Test

Al igual que en los casos anteriores se considerarán los intervalos establecidos por el FIPS 140-2 para comprobar si los algoritmos pasan el test.

D. Test de Rachas Largas o Long Run

La definición de una racha larga depende del FIPS que se considere:

- FIPS 140-1: se define como una racha de longitud 34 o más, bien sea de unos o de ceros [2]

(4)

Para superar el test se debe comprobar que en la serie de 20000 bits no hay ninguna racha larga.

E. Test de Chi - Cuadrado

Este test es un método básico de la estadística que sirve para medir la unifomidad de la distribución, y se rige por la ecuación [III.13]:

V = ∑ ((Ys – nps)2/nps) [III.13]

Donde Ys representa el número de veces que aparece un número en la serie y nps el número de veces que debería aparecer dicho número si la distribución fuese uniforme. Se considera que la distribución no es uniforme si V >> 1. Para saber cuando considerar ese V >> 1 existen varios criterios que siguen la cuación general [III.14]:

Vmáximo válido = (1/2) (Zα + √(2 * n – 1))2 [III.14]

Donde Zα representa el valor de la variable normal (N(0,1)) que deja delante de él “α de área”, 1 - α representa la fiabilidad o confianza del test (95%, 99%...) y n representa el número de elementos de la distribución. El criterio más utilizado corresponde al de confianza del 95%. En ese caso particular el valor de α es 0.05 (1 – α = 0.95) y el de la Zα, que se puede obtener consultando las tablas correspondientes, es 1.96.

IV. ESTUDIO COMPARATIVO DE LOS ALGORITMOS Y ELECCIÓN DEL MÁS APROPIADO

Utilizando la herramienta Matlab se implementaron los diferentes algoritmos de generación de números aleatorios obteniéndose diversas secuencias de números cuyas distribuciones se han representado en las figuras IV. 1 a IV. 9.

Figura IV. 1 Distribución de números obtenidos con Figura IV. 2 Distribución de números obtenidos con G. C. L. Multiplicativo G. C. L. Mixto

Figura IV. 3 Distribución de números obtenidos con Figura IV. 3 Distribución de números obtenidos con G. C. Cuadrático G. Fibonacci

(5)

G. Green G. Mitchell – Moore

Figura IV. 7 Distribución de números obtenidos con Figura IV. 8 Distribución de números obtenidos con G. Inversa G. Método Mixto

Figura IV. 9 Distribución de números obtenidos con G. Registros y Xor

A simple vista puede parecer que hay varios algoritmos que producen series bastante uniformes, pero al someter los algoritmos a los test se obtienen los resultados de la tabla II, donde se indica si el algoritmo pasa o no pasa el test de aleatoriedad propuesto:

Gen. \ Test Monobit Poker Run Long Run Chi2

G. C. L. Multiplicativo NO NO NO NO NO G. C. L. Mixto NO NO NO SI NO Cuadrático SI NO NO SI SI Fibonacci NO NO NO SI NO Green SI SI NO SI SI Mitchell – Moore SI NO NO SI SI Inversa NO NO NO SI NO Método Mixto SI NO NO SI SI Registros y Xor SI NO NO SI SI

Tabla II Resultados de los test de aleatoriedad

A la vista de los resultados de los test se deduce que el algoritmo de generación más apropiado es el Generador de Green, ya que es el que supera más test. Este algoritmo necesita que otro algoritmo le proporcione 16 semillas, y para eso se puede utilizar

(6)

el Generador Congruencial Cuadrático. En la selección de algoritmos se ha tenido en cuenta también la idoneidad de los mismos para una implementación hardware digital.

V. IMPLEMENTACIÓN HARDWARE

Se ha diseñado una arquitectura para la implementación digital del Generador de Green, lo que requiere la implementación de otro generador para inicializar la memoria de números aleatorios, en este caso el Generador Congruencial Cuadrático. La arquitectura se ha desarrollado utilizando la herramienta Quartus II de Altera. El generador completo tiene la estructura de la Figura V. 1.

Figura V. 1 Esquema de la estructura del generador de números aleatorios de Green

A. Bloque de Inicialización de memoria

Este bloque consiste en un Generador Congruencial Cuadrático que se encargará de inicializar la memoria con los valores aleatorios necesarios.

clk = señal de reloj

selec = señal que marca la selección de la semilla inicial

selec1 = señal que marca a partir de que instante debe empezar a calcular números el generador

a [4..0] = constante que multiplica al término x2

b [4..0] = constante que multiplica al término x

c [14..0] = constante aditiva

m [4..0] = modulo, valor máximo que pueden tomar los elementos

Este bloque es el que se encargará de generar las 16 semillas que necesita el generador de Green a partir de una semilla aleatoria que le proporcionará un contador en un momento dado. Guardará los 16 elementos en la memoria.

B. Bloque Memoria de números aleatorios

clock = señal de reloj

data [4..0] = dato que se escribe en la memoria

wraddress [3..0] = dirección de escritura en la memoria

wren = señal de habilitación de escritura

rdaddress [3..0] = dirección de lectura de la memoria

q [4..0] = dato leído de la memoria

Memoria de 16 palabras de 5 bits cada una en la que iremos almacenando los números generados por el generador cuadrático. El siguiente bloque leerá de aquí los números que necesita para generar un nuevo elemento y luego lo almacenará en la posición que le corresponda.

C. Bloque Algoritmo de. Green

dato1 [4..0] = primer elemento de entrada al G. Green

dato16 [4..0] = último elemento de entrada al G. Green

clk = señal de reloj

m [4..0] = modulo, valor máximo que pueden tomar los números generados

sig [4..0] = a la salida se obtiene el elemento generado mediante el algoritmo de Green

Este bloque se encarga de tomar 2 datos de la memoria y los utiliza para generar el número aleatorio correspondiente. número aleatorio dentro del rango valor máximo de números solicitados señal de reset señal de reloj Memoria de números aleatorios Algoritmo de Green Inicializació n de memoria Comparador de rango

(7)

D. Bloque Comparador de Rango

numero [4..0] = numero aleatorio leído de memoria (obtenido del generador)

max [4..0] = valor máximo de los números solicitados

numval [4..0] = valor perteneciente al rango solicitado

VI. EJEMPLO DE APLICACIÓN A ALGORITMOS GENÉTICOS

Con objeto de ilustrar la utilidad de los generadores de números aleatorios se presenta un ejemplo en el cual se utilizan (de forma intensiva) números aleatorios para construir un algoritmo genético.

A. Introducción a los Algoritmos Genéticos

Los Algoritmos Genéticos (GA) son algoritmos de búsqueda de propósito general que se inspiran en la teoría de la evolución de las especies (Charles Darwin, 1859). Los algoritmos AG operan sobre una población de soluciones (individuos o cromosomas) generados de forma aleatoria y representados mediante cadenas de 0 y 1 (genes). La población evoluciona hacia soluciones mejores mediante la aplicación de operadores genéticos como son el cruce y la mutación. En cada generación las mejores soluciones generan descendientes que reemplazan las peores soluciones [13]. En la operación de cruce se producen descendientes con características combinadas de sus padres, y su objetivo es representar la reproducción natural. En la operación de mutación se genera un descendiente mediante la mutación de uno de los genes de un individuo. Tanto el número de cruces como el número de mutaciones es aleatorio, así como también lo son el bit a mutar en las mutaciones y el bit a partir del cual se combinan los padres en la operación de cruce. Se utiliza una función de fitness para distinguir las mejores soluciones de las peores [13].

B. Resolución de un ejemplo concreto mediante algoritmos genéticos

El objetivo es encontrar la curva óptima para que una masa “m” vaya de una posición inicial alta (x0, y0) a una posición final más baja (xk, yk) en el menor tiempo posible. Esta curva se conoce como curva braquistocroma [13].

Figura VI. 1 Problema de la Braquistocroma

Cada curva candidata a ser solución está definida por una sucesión de k + 1 puntos de la forma (x0, y0). Para simplificar el problema se considera que la distancia horizontal entre los puntos es constante, ∆x, de manera que sólo las posiciones y deben ser optimizadas. Cada altura yi se codificará como una cadena de n bits. Al encadenar todas las alturas de cada posible solución se obtiene un cromosoma (cadena de N bits). Para obtener la primera población se toma la siguiente ecuación, de manera que se obtengan valores aceptables en el rango [ymin, ymáx]:

y1 = ymin + ((ymáx - ymin)/(2 n – 1)) ∑ i = 0n --1 si 2 i

[VI.1]

El primer elemento de la posible solución vendrá determinado por las n primeras posiciones de la cadena de bits s, el segundo por los siguientes n y así sucesivamente. Aplicando esta ecuación tantas veces como alturas queramos para cada posible solución se obtiene el primer individuo de la población inicial. Para obtener el resto de los individuos se partiría de otra cadena aleatoria de bits y se repetirá la operación.

En el ejemplo a estudiar, la curva estará compuesta por siete segmentos, de manera que se necesitarán seis puntos intermedios. La posición inicial será la (x7, y7) = (1.0, 0.0) y la final (x0, y0) = (0.0, 1.0). Se escoge una longitud total de los cromosomas, C, de 36 bits, de manera que cada parámetro o altura a calcular y 1, …, y 6 vendrá codificada por n = 6 bits. La población a considerar constará de M = 20 individuos. La función de fitness vendrá determinada por el tiempo que tarda la masa en ir desde el punto inicial al punto final, que se puede expresar como suma del tiempo que tarda en recorrer cada tramo:

T = ∑ i = 0k - 1 t i

[VI.2]

Teniendo en cuenta las fuerzas que intervienen en el movimiento de la masa y aplicando las ecuaciones de desplazamiento para la masa se llega a las expresiones [VI.3] y [VI.4] para el tiempo:

(8)

[VI.3] [VI.4]

Dado que los algoritmos genéticos utilizan para la función de fitness criterios de máximo, en realidad, para este problema se deberá tomar como función de fitness la inversa del tiempo, es decir:

f (C i) = 1/T(C i) [VI.5]

Una vez obtenida la población inicial y calculada la función de fitness de cada individuo, se define una función de probabilidad que será la que permitirá distinguir entre individuos mejores y peores, para seleccionar los padres de la siguiente generación.

Resulta evidente que para la resolución de este problema mediante algoritmos genéticos se van a necesitar varios números aleatorios:

- cadena de bits para obtener la población inicial

- cálculo de un “valor medio” por encima del cual se consideran buenos los individuos - número de cruces, individuos a cruzar, posición a partir de la cual se cruzan

- número de mutaciones, individuo a mutar, posición en la que se producirá la mutación.

Para obtener todos los números aleatorios necesarios para resolver este ejemplo se ha utilizado el generador de números aleatorios diseñado en este trabajo. Para verificar el funcionamiento del algoritmo genético se han realizado simulaciones con la herramienta Matlab. A continuación (Figuras VI.2 a VI.5) se muestran los resultados de las simulaciones. En concreto se muestra parte de la evolución de la solución del problema.

1 2 3 4 5 6 7 8 0 10 20 30 40 50 60 70 posición i de yi v a l o r d e l a a l t u r a y i

curva de la población inicial

1 2 3 4 5 6 7 8 0 10 20 30 40 50 60 70 posición i de yi v a l o r d e l a a l t u r a y i

Mejora de la curva obtenida en la interación 1

Figura VI. 2 Mejor trayectoria de la población Figura VI. 3 Mejora de la trayectoria en la iteración inicial: [63 43 37 12 19 18 23 0] 1, nueva trayectoria: [63 43 37 25 19 18 23 0] t = 1.7067 seg t = 1.5591 seg 1 2 3 4 5 6 7 8 0 10 20 30 40 50 60 70 posición i de yi v a l o r d e l a a l t u r a y i

Mejora de la trayectoria en la iteración 10

1 2 3 4 5 6 7 8 0 10 20 30 40 50 60 70 posición i de yi v a l o r d e l a a l t u r a y i

Trayectorio óptima definitiva (alcanzada en la iteración 15)

Figura VI. 4 Mejora de la trayectoria en la iteración Figura VI. 5 Trayectoria óptima definitiva (alcanzada 10, nueva trayectoria: [63 45 45 25 20 18 19 0] en iteración 15): [63 45 45 25 20 17 12 0]

t = 1.4212 seg t = 1.3739 seg

El algoritmo genético se ejecuta varias veces, de manera que se consiguen varias generaciones. En este caso se obtuvieron 200 generaciones, pero tal y como era de esperar el valor óptimo se consiguió bastante pronto, en este caso en la iteración 15. Por tanto, aunque el algoritmo siga buscando soluciones, como no encuentra ninguna mejor en las siguientes generaciones, nos devuelve la curva de la iteración 15 como la mejor solución al problema.

(9)

VII. CONCLUSIONES

A. Conclusiones relacionadas con la generación de números aleatorios

Durante el estudio realizado sobre los números aleatorios y pseudoaleatorios se comprobó la dificultad de generar números realmente aleatorios en un sistema digital. Este hecho así como la imposibilidad de reproducir los números obtenidos de manera que sean verdaderamente aleatorios puso de manifiesto la gran importancia y necesidad de los números pseudoaleatorios. Dichos números pseudoaleatorios tienen diversas aplicaciones hoy en día, algunas de las cuales son fundamentales en la vida diaria sin que la gente se percate de ello; algo tan habitual como los videojuegos, la música electrónica o las claves (como las de las tarjetas de crédito) utilizan números aleatorios. Otras aplicaciones importantes como la criptografía permiten que las comunicaciones, por ejemplo a través de Internet sean seguras, gracias a la encriptación de datos. Más novedosas y tal vez un poco más abstractas resultan aplicaciones como la de los algoritmos genéticos y algunas nuevas tecnologías.

Durante el desarrollo del trabajo se ha podido comprobar que los algoritmos de generación de números pseudoaleatorios tienen ciertos problemas como puede ser la saturación o la predecibilidad de los números, lo que hace que la obtención de generadores de largo periodo sea importante.

B. Conclusiones relacionadas con la tecnología del dispositivo

Las FPGAs presentan varias ventajas cuando se quieren construir circuitos digitales. Permiten diseñar el hardware a medida, es decir, el diseñador no tiene que buscar en el mercado productos que se adapten a sus diseños, sino que puede diseñarlo a la medida de sus necesidades, o reutilizar y modificar otros diseños ya existentes. También facilitan la modificación y reprogramación del diseño. Otra de las ventajas de las FPGAs es que permiten acortar los ciclos de diseño gracias al lenguaje VHDL, que permite escribir ficheros de texto que se pueden simular, modificar y finalmente sintetizar. Las FPGAs facilitan la construcción de diseños de alta velocidad. Trabajar con FPGAs proporciona la oportunidad de utilizar las herramientas de diseño distribuidas por los distintos fabricantes, estas herramientas permiten incorporar gran cantidad de bloques IP (Propiedad Intelectual) que facilitan y agilizan de manera notable el diseño de cualquier dispositivo.

BIBLIOGRAFÍA

[1] “El azar de la criptografía”, artículo publicado por Germán Sáez i Moreno en Criptomicón; servicio web ofrecido por el Instituto de Física Aplicada del CSIC http://www.iec.csic.es/criptonomicon/articulos/expertos52.html

[2] “Intel Random Number generador”, Intel Corporation.

[3] MundoCripto http://webs.ono.com/usr005/jsuarez/disclaim.html Actualizado 2004-07-30 Jaime Suárez Martínez: mcripto@bigfoot.com [4] Tema3: Generación de números aleatorios; asignatura: Computación Estadística (2º curso), Departamento de Informática de la

Universidad de Jaén. http://wwwdi.ujaen.es/~jmserrano/teaching/computacionestadistica/pdfs/tema3.pdf

[5] “The Art of Computer Programming”, Volume 2 “Seminumerical Algorithms”, Donald E. Knuth, 1997, Addison – Wesley. [6] http://math.uprm.edu/~edgar/LEC9COMP.PDF

[7] http://docencia.udea.edu.co/ingenieria/isi-494/contenido/Exposicion1.ppt

[8] “Numerical Recipes in C. The Art of Scientific Computing”, 1988-1992, Cambridge University Press.

[9] “Lenguajes de Simulación”, 2004-2005. http://jair.lab.fi.uva.es/~pablfue/leng_simulacion/slides/aleat_t_0405.pdf

[10] “Random Number Generator Using Leap-Forward Techniques”, Narendra S. Bolabattin; International Institute of Information Technology-Pune http://www.techonline.com/community/ed_resource/feature_article/38012

[11] http://teoria.fis.ucm.es/programas/Montecarlo.pdf

[12] “Estadística Elemental para Bioestadística Básica y Calidad”, Javier Franco Bilbao, Emilio Navarro Garcia, … Prontuarios de Master de Salud Mental, 2002

[13] “Genetic Fuzzy Systems. Evolutionary Tunning and Learning of Fuzzy Knowledge Bases”, Oscar Gordón, Francisco Herrera, Frank Hoffmann, Luis Magdalena; Ed. World Scientific, 2001

Figure

Actualización...

Referencias

Actualización...

Related subjects :