Je dois générer des nombres pseudo-aléatoires pour mon algorithme génétique sur un FPGA Spartan-3E et je veux l'implémenter dans verilog: pourriez-vous me donner des indications à ce sujet?Génération de nombres aléatoires sur Spartan-3E
Répondre
En général, vous devriez utiliser la fonction IEEE.math_real uniforme
use IEEE.math_real.all;
procedure UNIFORM (variable Seed1,Seed2:inout integer; variable X:out real);
Mais faire un tout petit peu une recherche sur générateurs de nombres pseudo-aléatoires (PRNG) et vous trouverez de nombreuses variantes qui sont de simples LFSR de » - qui ressemblent remarquablement aux générateurs de CRC.
Voici plusieurs ressources si vous voulez rouler votre propre départ à partir existants, PRNGs travail:
http://www.opencores.org/?do=project&who=systemc_rng
http://verificationguild.com/modules.php?name=Downloads&d_op=viewdownload&cid=3
est ici un générateur de code CRC VHDL:
Bien sûr, le générateur aléatoire d'Adam n'est pas synthétisable! Vous devez créer explicitement LFSR.
L'exemple suivant pourrait aider. Il est un 8 bits LFSR maximale
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;
Le pointeur ci-dessus pour OpenCores a un fichier dans le dossier Verilog appelé: rng.v
Je l'ai utilisé dans un Spartan-3AN et il fonctionne très bien. Mon code utilisait le générateur de nombres aléatoires pour sélectionner un PWM aléatoire après avoir programmé la pièce et il couvrait tous les PWM sélectionnables.
Il existe un outil en ligne qui peut générer du code Verilog ou VHDL pour un générateur de nombres pseudo-aléatoires. C'est sur OutputLogic.com
Je suis d'accord avec le LFSR. J'en ai fait un avant et il est utilisé pour le cryptage.
Je pense qu'il est important de noter ici que les LFSR sont utiles pour la génération de nombres pseudo-aléatoires, mais qu'ils ne sont pas appropriés pour une utilisation dans des schémas de chiffrement réels. – wjl
Vous avez déjà quelques bonnes réponses, mais je vais simplement signaler le guide canonique LFSRs dans les FPGA est ici:
http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf
Il est un peu Xilinx spécifique dans des endroits (qui est OK pour votre FPGA :) mais les principes sont transférables à d'autres.
L'OP voulait Verilog - mais votre suggestion de regarder LFSRs est solide. Juste pour mon propre intérêt, cette procédure UNIFORM est-elle synthétisable? À quoi synthétise-t-il? – Marty