0

最近、ハードウェアで乱数を生成する方法をここで尋ねたところ、LFSR を使用するように言われました。ランダムになりますが、特定の値の後に繰り返しが始まります。

問題は、生成される乱数が非常に予測可能であるため、次の値を簡単に推測できることです。たとえば、以下のシミュレーションを確認してください。

ここに画像の説明を入力

次の「乱数」は、前の数字に +1 を足すことで推測できます。これが正常であり、予想されることであるかどうかを確認してください。

LFSR に使用したコードは次のとおりです。

    module LFSR(
    input clock,
    input reset,
     output [12:0] rnd 
    );

wire feedback = rnd[12] ^ rnd[3] ^ rnd[2] ^ rnd[0]; 

reg [12:0] random;

always @ (posedge clock or posedge reset)
begin
    if (reset)
        random <= 13'hF; //An LFSR cannot have an all 0 state, thus reset to FF
    else
        random <= {random[11:0], feedback}; //shift left the xor'd every posedge clock
end

assign rnd = random;

endmodule

XOR するビットの位置は、ここから取得されます:テーブル ページ 5

4

2 に答える 2

6

LFSR は、クロックごとに1 つのランダム ビットのみを生成します。サイクルごとに新しい(あなたの場合)13ビットの数値を生成しません。他の 12 ビットrndは単なる古いランダム値であるため、あまりランダムに表示されません。

13 ビットの乱数が必要な場合は、13 サイクルごとに LFSR をサンプリングするか、13 個の LFSR を異なるシードと並列に配置し、13 個のゼロ ビットを乱数として使用する必要があります。

于 2013-02-10T17:50:17.793 に答える
-1

LFSR は、本当の意味で「ランダム」ではないことは間違いありません。フォン・ノイマンの言葉を引用すると、「乱数を生成する算術的方法を考える人は、もちろん、罪の状態にあります。」選択したフィードバック項が最大であるかどうか、つまり、LFSR のビット数と等しい長さのシーケンスを提供するかどうかは調べていませんが、それが最善です。

そうです、LFSR の次の値は非常に予測可能です。より安全に「ランダム」なものが必要な場合は、暗号化方法を調べる必要があります。これらはもちろん秘密鍵に依存し、LFSR よりもはるかに計算集約的です。しかし、あなたは「あなたが支払うものを手に入れます」。

ちなみに、予測可能な「乱数」を取得するシステムは、それ自体で非常に便利です。通常はシミュレーション用です。

于 2013-02-10T22:17:05.803 に答える