2009-04-16 94 views

回答

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代码生成器:

http://www.easics.be/webtools/crctool

+1

该OP想要verilog - 但你看看LFSRs的建议是健全的。 为了我自己的利益,UNIFORM程序是否可综合?它综合了什么? – Marty 2009-04-16 22:13:29

16

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

指针上面OpenCores的有Verilog的文件夹,文件名为:rng.v

我已经在的Spartan-3AN用它和它的伟大工程。我的代码使用随机数发生器在编程器件后选择一个随机PWM,它覆盖了所有可选择的PWM。

2

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

+2

我认为这里很重要的一点是,LFSR对于伪随机数生成很有用,但它们不适合用于真正的加密方案。 – wjl 2011-06-05 15:36:15