2009-04-16 11 views

Répondre

2

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:

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

+1

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

16

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; 
2

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.

2

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

2

Je suis d'accord avec le LFSR. J'en ai fait un avant et il est utilisé pour le cryptage.

+2

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