我需要在Spartan-3E FPGA上为我的遗传算法生成伪随机数,我想在verilog中实现它:你能给我任何指示吗?
答案 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代码生成器:
答案 4 :(得分:2)
OpenCores上面的指针在verilog文件夹中有一个名为rng.v的文件
我在Spartan-3AN中使用它并且效果很好。在编写器件后,我的代码使用随机数发生器选择随机PWM,它覆盖了所有可选择的PWM。
答案 5 :(得分:2)
我同意LFSR。我以前做了一个,它用于加密。