Spartan-3E上的随机数生成

11

我需要在Spartan-3E FPGA上为我的遗传算法生成伪随机数,并希望用Verilog实现:你能给我提供一些指导吗?

6个回答

16

当然,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;

9

3
通常情况下,您会使用IEEE.math_real统一函数进行操作。
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代码生成器:

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


1
OP 想要 Verilog - 但你建议看看 LFSRs 是明智的。只是出于我的兴趣,那个 UNIFORM 过程可综合吗?它会综合成什么? - Marty

3

有一个在线工具可以为伪随机数生成器生成Verilog或VHDL代码。它在OutputLogic.com上。


2
上面的指针指向OpenCores,其中verilog文件夹中有一个名为rng.v的文件。
我已经在Spartan-3AN中使用它,效果很好。我的代码使用随机数生成器选择了一个随机PWM,在我编程芯片之后,覆盖了所有可选的PWM。

0

我同意使用LFSR。我以前做过一个,用于加密。


4
我认为在这里需要注意的是,LFSR对于伪随机数生成非常有用,但它们不适用于真正的加密方案。 - wjl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接