【问题标题】:Random number generation on Spartan-3ESpartan-3E 上的随机数生成
【发布时间】:2009-04-16 17:15:40
【问题描述】:

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

【问题讨论】:

    标签: hardware random verilog fpga


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      它在某些地方是 Xilinx 特定的(这对您的 FPGA 来说是可以的:),但原理可以转移到其他人。

      【讨论】:

        【解决方案3】:

        通常你会使用IEEE.math_real uniform 函数

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

        但是稍微研究一下伪随机数生成器 (PRNG),您会发现许多简单的变体 LFSR's - 看起来与 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

        【讨论】:

        • OP 想要 verilog - 但您对 LFSR 的建议是合理的。只是为了我自己的利益,那个 UNIFORM 程序可以合成吗?它合成什么?
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

            • 我认为这里需要注意的是,LFSR 对伪随机数生成很有用,但它们不适合在真正的加密方案中使用。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-01-03
            • 2017-10-16
            相关资源
            最近更新 更多