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

异或位的位置取自这里:表格第 5 页

4

2 回答 2

6

LFSR每个时钟只产生一个随机位。它不会在每个周期生成一个新的(在您的情况下)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 回答