Necesito generar números pseudoaleatorios para mi algoritmo genético en un FPGA Spartan-3E y quiero implementarlo en verilog: ¿podría darme algún consejo sobre esto?Generación de números aleatorios en Spartan-3E
Respuesta
lo general tendrá que utilizar la función IEEE.math_real uniforme
use IEEE.math_real.all;
procedure UNIFORM (variable Seed1,Seed2:inout integer; variable X:out real);
Pero hacer un poquito de una investigación sobre los pseudo generadores de números aleatorios (PRNG) y encontrará muchas variantes que son simples LFSR 's - lo cual parece notablemente similar a los generadores CRC.
Aquí hay varios recursos si desea rodar su propia partida, PRNG de trabajo existentes:
http://www.opencores.org/?do=project&who=systemc_rng
http://verificationguild.com/modules.php?name=Downloads&d_op=viewdownload&cid=3
Aquí es un generador de código CRC VHDL:
¡Por supuesto, el generador aleatorio de Adam no se puede sintetizar! Tienes que crear explícitamente un LFSR.
El siguiente ejemplo podría ayudar. Es un LFSR máxima de 8 bits
module lfsr(input clk, reset, en, output reg [7:0] q);
always @(posedge clk or posedge reset) begin
if (reset)
q <= 8'd1; // can be anything except zero
else if (en)
q <= {q[6:0], q[7]^q[5]^q[4]^q[3]}; // polynomial for maximal LFSR
end
endmodule;
El puntero por encima de OpenCores tiene un archivo en la carpeta llamada Verilog: rng.v
lo he utilizado en un Spartan-3AN y funciona muy bien. Mi código utilizó el generador de números aleatorios para seleccionar un PWM aleatorio después de que programé la pieza y cubría todos los PWM seleccionables.
Hay una herramienta en línea que puede generar código Verilog o VHDL para un generador de números pseudoaleatorio. Está en OutputLogic.com
Estoy de acuerdo con el LFSR. He hecho uno antes y se usa para el cifrado.
Creo que es importante señalar aquí que los LFSR son útiles para la generación de números pseudoaleatorios, pero no son apropiados para el uso en esquemas de cifrado reales. – wjl
Ya tienes algunas buenas respuestas, pero sólo voy a señalar la guía canónica a LFSR en FPGAs está aquí:
http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf
Es un poco Xilinx específica en lugares (lo cual está bien para su FPGA :) pero los principios son transferibles a otros.
- 1. Generación concurrente de números aleatorios
- 2. Gran generación de números aleatorios
- 3. Robusta generación de números aleatorios
- 4. Generación de números aleatorios distribuidos
- 5. Generación de números aleatorios ponderados en R
- 6. La generación de números aleatorios en C
- 7. Generación de números aleatorios diferentes entre OS
- 8. generación de números aleatorios - Mismo número devuelto
- 9. ¿Las semillas cercanas en la generación de números aleatorios pueden dar números aleatorios similares?
- 10. Generación de números aleatorios secuenciales distribuidos en Ruby 1.9.2
- 11. la generación de dos secuencias independientes de números aleatorios (C++)
- 12. Generación de la misma secuencia de números aleatorios
- 13. srand (tiempo (0)) y generación de números aleatorios
- 14. Generación paralela de números aleatorios con Akka Futures
- 15. números aleatorios en Java
- 16. Números aleatorios en C
- 17. Probabilidad de números aleatorios
- 18. Análisis de números aleatorios
- 19. especial de números aleatorios
- 20. Cómo generar números aleatorios erróneos
- 21. Generando Números Aleatorios en Go
- 22. Números aleatorios en un rango
- 23. Números aleatorios y negativos
- 24. Números aleatorios no repetitivos
- 25. Números aleatorios usando C#
- 26. Haskell y números aleatorios
- 27. Generación de Números Aleatorios En cada fila de consultas de Oracle
- 28. Algoritmo de generación de números aleatorios de código abierto en C++?
- 29. Crappy generador de números aleatorios
- 30. Boost generador de números aleatorios
El OP quería verilog, pero su sugerencia de mirar los LFSR es sólida. Solo por mi propio interés, ¿ese procedimiento UNIFORMO se puede sintetizar? ¿A qué se sintetiza? – Marty