Spartan-3E上的随机数生成

ako*_*sch 11 hardware random verilog fpga

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

Aam*_*mir 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;
Run Code Online (Sandbox Code Playgroud)


Mar*_*son 9

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

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

它有点Xilinx特定的地方(对你的FPGA来说没问题)但是这些原则可以转让给其他人.


Ada*_*vis 3

通常您会使用IEEE.math_real统一函数

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

但是,对伪随机数生成器 (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