Question

Je dois générer des nombres pseudo-aléatoires pour mon algorithme génétique sur un Spartan-3E FPGA et je veux la mettre en œuvre dans Verilog: pourriez-vous me donner des indications sur ce

Était-ce utile?

La solution

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 petit peu une recherche sur des générateurs de nombres pseudo-aléatoires (PRNG) et vous trouverez de nombreuses variantes qui sont simples LFSR l ' -. qui semblent remarquablement similaires aux générateurs CRC

Voici plusieurs ressources si vous voulez rouler votre propre départ à partir existants, PRNGs de travail:

http://www.opencores.org/?do=project&who=systemc_rng

http://verificationguild.com/modules.php?name=Downloads&d_op = viewdownload & cid = 3

Voici un générateur de code CRC VHDL:

http://www.easics.be/webtools/crctool

Autres conseils

Bien sûr, le générateur aléatoire par Adam n'est pas synthétisable! Vous devez créer explicitement LFSR .

L'exemple suivant peut aider. Il est un LFSR maximal 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;

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 (ce qui est correct pour votre FPGA :) mais les principes sont transférables à d'autres.

Il est un outil en ligne qui peut générer Verilog ou code VHDL pour un générateur de nombres pseudo-aléatoires. Il est sur OutputLogic.com

Je suis d'accord avec le LFSR. Je l'ai fait un avant et il est utilisé pour le chiffrement.

Le pointeur ci-dessus pour OpenCores a un fichier dans le dossier appelé Verilog: rng.v

Je l'ai utilisé dans un Spartan-3AN et il fonctionne très bien. Mon code utilisé le générateur de nombres aléatoires pour sélectionner un PWM aléatoire après avoir programmé la pièce et il couvre tous les PWMs sélectionnables.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top