2009-04-16 30 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