ipu*_*hed 0 hardware verilog fpga hdl
最近我在这里问过,如何在硬件中生成随机数,并被告知要使用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
Run Code Online (Sandbox Code Playgroud)
从这里获取位到XOR的位:表页5
LFSR 每个时钟仅生成一个随机位.它不会在每个周期生成一个新的(在您的情况下)13位数字.其他12位rnd只是旧的随机值,因此它不会显得非常随机.
如果需要13位随机数,则必须每13个周期对LFSR进行采样,或者将13个LFSR与不同的种子并行,并使用13个零位作为随机数.