geração de números aleatórios em Spartan-3E
Pergunta
Eu preciso gerar números pseudo-aleatórios para o meu algoritmo genético em um Spartan-3E FPGA e eu quero implementá-lo em Verilog: você poderia me dar qualquer ponteiros sobre este
?Solução
Normalmente, você usaria o IEEE.math_real função uniforme
use IEEE.math_real.all;
procedure UNIFORM (variable Seed1,Seed2:inout integer; variable X:out real);
Mas fazer um pouco uma pesquisa sobre geradores de números pseudo aleatórios (PRNGs) e você vai encontrar muitas variantes que são simples LFSR 's -. que se parecem muito semelhantes aos geradores CRC
Aqui estão vários recursos se você desejar construir sua própria partida a partir do existente, PRNGs de trabalho:
http://www.opencores.org/?do=project&who=systemc_rng
http://verificationguild.com/modules.php?name=Downloads&d_op = viewdownload & cid = 3
Aqui está um gerador de código CRC VHDL:
Outras dicas
Claro que o gerador aleatório por Adam não é synthesizable! Você tem que criar explicitamente um LFSR .
Seguindo o exemplo pode ajudar. É um 8-bit máxima LFSR
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;
Você já tem algumas boas respostas, mas eu só vou apontar o guia canônica para LFSR em FPGAs está aqui:
http://www.xilinx.com/support/documentation/application_notes /xapp052.pdf
É um pouco Xilinx específica em lugares (que é OK para o seu FPGA :) mas os princípios são transferíveis para outros.
Não é uma ferramenta online que pode gerar código Verilog ou VHDL para um gerador de números pseudo-aleatórios. Está na OutputLogic.com
Eu concordo com o LFSR. Eu fiz um antes e é usada para criptografia.
O ponteiro acima para OpenCores tem um arquivo na pasta verilog chamada: rng.v
Eu usei-o em um Spartan-3AN e ele funciona muito bem. Meu código usado o gerador de números aleatórios para selecionar um PWM aleatória depois de eu programada a parte e cobriu todos os PWMs selecionáveis.