【发布时间】:2009-04-16 17:15:40
【问题描述】:
我需要在 Spartan-3E FPGA 上为我的遗传算法生成伪随机数,并且我想在 verilog 中实现它:你能给我任何指示吗?
【问题讨论】:
标签: hardware random verilog fpga
我需要在 Spartan-3E FPGA 上为我的遗传算法生成伪随机数,并且我想在 verilog 中实现它:你能给我任何指示吗?
【问题讨论】:
标签: hardware random verilog fpga
当然,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;
【讨论】:
您已经得到了一些很好的答案,但我只想指出 FPGA 中 LFSR 的规范指南在这里:
http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf
它在某些地方是 Xilinx 特定的(这对您的 FPGA 来说是可以的:),但原理可以转移到其他人。
【讨论】:
通常你会使用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 代码生成器:
【讨论】:
有一个在线工具可以为伪随机数生成器生成 Verilog 或 VHDL 代码。它在OutputLogic.com
【讨论】:
上面指向 OpenCores 的指针在 verilog 文件夹中有一个文件,名为:rng.v
我在 Spartan-3AN 中使用过它,效果很好。我的代码在对部件进行编程后使用随机数生成器来选择一个随机 PWM,它涵盖了所有可选的 PWM。
【讨论】:
我同意 LFSR。我之前做过一个,它是用来加密的。
【讨论】: