我需要在Spartan-3E FPGA上为我的遗传算法生成伪随机数,并希望用Verilog实现:你能给我提供一些指导吗?
当然,Adam的随机数生成器是不可合成的!你必须显式地创建一个LFSR。
以下示例可能会有所帮助。它是一个8位最大LFSR。
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;
use IEEE.math_real.all;
procedure UNIFORM (variable Seed1,Seed2:inout integer; variable X:out real);
如果你对伪随机数生成器(PRNGs)进行一些研究,你会发现许多变体都是简单的LFSR,看起来非常类似于CRC生成器。
如果你想从现有的工作PRNGs开始自己创建,请参考以下资源:
http://www.opencores.org/?do=project&who=systemc_rng
http://verificationguild.com/modules.php?name=Downloads&d_op=viewdownload&cid=3
这里有一个CRC VHDL代码生成器:
我同意使用LFSR。我以前做过一个,用于加密。