Ho bisogno di generare numeri pseudocasuali per il mio algoritmo genetico su un FPGA Spartan-3E e voglio implementarlo in verilog: potresti darmi qualche suggerimento su questo?Generazione di numeri casuali su Spartan-3E
risposta
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:
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;
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.
C'è uno strumento online che può generare codice Verilog o VHDL per un generatore di numeri pseudo-casuali. È il OutputLogic.com
Sono d'accordo con l'LFSR. Ne ho fatto uno prima ed è usato per la crittografia.
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
Hai già alcune buone risposte, ma mi limiterò a segnalare la guida canonica per LFSR in FPGA è qui:
http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf
E 'una Xilinx specifica po' in posti (che è OK per il tuo FPGA :) ma i principi sono trasferibili ad altri.
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