2009-04-16 22 views

risposta

2

In genere devi usare la funzione IEEE.math_real uniforme

use IEEE.math_real.all; 
procedure UNIFORM (variable Seed1,Seed2:inout integer; variable X:out real); 

Ma fare un po 'piccolo di una ricerca sulla pseudo numeri casuali generatori (PRNG) e troverete molte varianti che sono semplici s LFSR' - che sembra molto simile ai generatori CRC.

Qui ci sono diverse risorse se si desidera ripristinare la propria partenza dal esistenti, PRNGs di lavoro:

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

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

Ecco un generatore di codice CRC VHDL:

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

+1

L'OP voleva verilog - ma il tuo suggerimento di guardare gli LFSR è corretto. Solo per mio interesse, la procedura UNIFORM è sintetizzabile? A cosa sintetizza? – Marty

16

Ovviamente il generatore casuale di Adam non è sintetizzabile! Devi creare esplicitamente un LFSR.

L'esempio seguente potrebbe aiutare. Si tratta di un 8-bit LFSR massimale

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

Il puntatore sopra per OpenCores ha un file nella cartella denominata Verilog: rng.v

ho usato in uno Spartan-3AN e funziona benissimo. Il mio codice utilizzava il generatore di numeri casuali per selezionare un PWM casuale dopo che ho programmato la parte e copriva tutti i PWM selezionabili.

2

C'è uno strumento online che può generare codice Verilog o VHDL per un generatore di numeri pseudo-casuali. È il OutputLogic.com

2

Sono d'accordo con l'LFSR. Ne ho fatto uno prima ed è usato per la crittografia.

+2

Penso che sia importante notare qui che gli LFSR sono utili per la generazione di numeri pseudo-casuali, ma sono inappropriati per l'uso in schemi di crittografia reali. – wjl

Problemi correlati