Недавно я спросил здесь, как аппаратно генерировать случайные числа, и мне сказали использовать 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< /а>