Fuentes de hardware de entropía en un FPGA

7

Estoy construyendo un controlador de alimentación FPGA y uno de los problemas es que quiero hacer simulaciones de Monte-Carlo que requieren una fuente de entropía de alta calidad, es decir, una implementación LSR pseudoaleatoria no es suficiente. He leído que se puede intentar usar la metastabilidad como fuente de aleatoriedad, ¿alguien hace esto, esta es una opción viable?

También, ya que los FPGA tienen entradas de reloj externas, ¿pueden ser aprovechadas por alguna solución de hardware "verdadero RNG"? ¿Existen tales soluciones en el mercado?

    
pregunta Dmitri Nesteruk

3 respuestas

4

La metastabilidad en realidad no es una opción viable en una tecnología FPGA moderna porque la ventana de tiempo metaestable es pequeña: muchos órdenes de magnitud son más pequeños que la ventana de incertidumbre de tiempo de configuración / retención, que está dominada por elementos como inclinación del reloj, retrasos de enrutamiento y variaciones Con tensión y temperatura.

Desafortunadamente, hay mucha confusión acerca de la metastabilidad y esta ventana de tiempo a veces se denomina ventana de tiempo metaestable, ya que otras fuentes de incertidumbre (a veces inesperadas) en una salida debido a los tiempos de reloj se agrupan de forma flexible y se llaman incorrectamente metastability.

Si bien esta ventana más amplia genera incertidumbre en la salida, está altamente correlacionada con las causas anteriores, no entrópica (fuera de la pequeña ventana metaestable verdadera).

Si necesita los detalles matemáticos y prácticos, busque "metastability" y "Peter Alfke" en el grupo de noticias de Usenet comp.arch.fpga.

TL / DR: busque entropía en otra parte: un diodo de avalancha (es decir, un zener muy por encima de 6V, por ejemplo 12V) amplificado, cortado a niveles lógicos, alimentado a un pin de entrada sería una buena opción.

    
respondido por el Brian Drummond
2

Una opción podría ser usar un generador de números aleatorios de mayor calidad como mersenne twister y luego sembrar eso de algo externo. Es posible que otras opciones no puedan proporcionar suficiente ancho de banda para ejecutar una simulación.

Aquí hay una implementación: enlace

Otra ventaja de usar este tipo de generador es que es relativamente fácil de sembrar con un valor conocido para la depuración, es decir, hace que sea sencillo sembrar el hardware exactamente igual que la simulación funcional para garantizar que obtenga el mismo resultado .

    
respondido por el alex.forencich
1

Puede obtener cierta aleatoriedad de un circuito combinatorio inestable como un oscilador en anillo. Una forma de hacerlo es tener tantas puertas XOR como bits que desee en la salida, donde cada puerta es la XOR de sí misma y sus dos vecinos. Se debe invertir un número impar de las puertas XOR en la salida para evitar que caiga en un patrón estable. Esto genera un conjunto de números aleatorios no distribuidos uniformemente (algunos bits serán 1 significativamente más / menos que el 50% del tiempo). Al introducir esto en un generador pseudoaleatorio como un LHCA, puede generar números aleatorios de alta calidad. Hay mucha más información aquí: enlace

Con su implementación, puede obtener números aleatorios anchos, a una velocidad de reloj alta, que pasan las pruebas intransigentes de aleatoriedad por el precio de 2 LUT y 2 registros por bit de salida.

Código para números aleatorios de 8 bits, salida en rnd:

(* ALLOW_COMBINATORIAL_LOOPS = "TRUE", KEEP = "TRUE" *) wire [7:0] ring;
(* ASYNC_REG = "TRUE" *) reg [7:0] ring_reg;

assign ring = {ring, ring[7]} ^ ring ^ ({ring[0], ring}>>1) ^ {3{2'b01}};

always  @(posedge clk) begin
    ring_reg <= ring;
    rnd <= {rnd, 1'b0} ^ ring_reg ^ (rnd & 8'h06) ^ ({1'b0, rnd}>>1);
end

el 8'h06 son los elementos diagonales del LHCA del papel. Es posible que deba cambiar los atributos para evitar que la herramienta de síntesis lo estropee al "optimizar" la lógica. Esto me funciona en Vivado 2016.3 y genera lo que parecen ser números aleatorios distribuidos uniformemente (no he realizado las pruebas estadísticas adecuadas).

    
respondido por el patstew

Lea otras preguntas en las etiquetas