11

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

4

6 回答 6

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;
于 2009-05-17T01:01:10.710 回答
9

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

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

它在某些地方有点 Xilinx 特定(这对您的 FPGA 来说没问题:),但这些原则可以转移到其他人身上。

于 2009-10-29T15:57:01.877 回答
3

通常你会使用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

于 2009-04-16T17:30:35.263 回答
3

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

于 2009-06-24T06:43:05.947 回答
2

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

我在 Spartan-3AN 中使用过它,效果很好。在我对部件进行编程后,我的代码使用随机数生成器来选择一个随机 PWM,它涵盖了所有可选的 PWM。

于 2009-05-26T14:48:18.043 回答
0

我同意 LFSR。我之前做过一个,它是用来加密的。

于 2009-07-04T07:03:08.213 回答