Spartan-3E上的随机数生成

时间:2009-04-16 17:15:41

标签: hardware random verilog fpga

我需要在Spartan-3E FPGA上为我的遗传算法生成伪随机数,我想在verilog中实现它:你能给我任何指示吗?

6 个答案:

答案 0 :(得分:16)

当然亚当的随机发生器不可合成!您必须明确创建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;

答案 1 :(得分:9)

你已经有了一些很好的答案,但我只想指出FPGA中LFSR的规范指南就在这里:

http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf

有些Xilinx特定的地方(适用于您的FPGA)但原则可以转让给其他人。

答案 2 :(得分:3)

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

答案 3 :(得分:2)

通常你会使用IEEE.math_real统一功能

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

但是对伪随机数生成器(PRNG)进行一点研究,你会发现许多简单LFSR的变体 - 它们看起来与CRC生成器非常相似。

如果您想从现有的,有效的PRNG开始推出自己的资源,可以使用以下几种资源:

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

答案 4 :(得分:2)

OpenCores上面的指针在verilog文件夹中有一个名为rng.v的文件

我在Spartan-3AN中使用它并且效果很好。在编写器件后,我的代码使用随机数发生器选择随机PWM,它覆盖了所有可选择的PWM。

答案 5 :(得分:2)

我同意LFSR。我以前做了一个,它用于加密。