2009-04-16 18 views
11

私の遺伝的アルゴリズムの疑似乱数をSpartan-3E FPGAで生成する必要があります。これをVerilogで実装したいと思います。Spartan-3Eの乱数生成

答えて

2

通常は、

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

IEEE.math_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が欲しいですが、LFSRを見るあなたの提案は妥当です。 私の興味のために、ユニファイア・プロシージャは合成可能ですか?それは何に合成されますか? – Marty

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; 
2

OpenCoresのに上記のポインタと呼ばれるのverilogフォルダ内のファイルがあります:私はのSpartan-3ANにそれを使用している、それは素晴らしい作品rng.v

を。私のコードは、パートをプログラムした後に乱数ジェネレータを使用してランダムPWMを選択し、選択可能なPWMをすべてカバーしていました。

2

擬似乱数ジェネレータ用のVerilogまたはVHDLコードを生成できるオンラインツールがあります。それは上にありますOutputLogic.com

2

私はLFSRに同意します。私はこれを前に作ったし、それは暗号化のために使われる。

+2

LFSRは擬似乱数生成には便利だが、実際の暗号化方式では不適切であることに注意することが重要だと思う。 – wjl

9

あなたはすでにいくつかの良い答えを持っているが、私はただのFPGA内のLFSRに正規のガイドを指摘するだろうが、ここにある:

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

それはOKである場所でビットザイリンクス特定の(ですあなたのFPGAの:)しかし、原則は他の人に転送することができます。