Аппаратная генерация нескольких независимых псевдослучайных чисел (Verilog или VHDL)

Мне нужны псевдослучайные числа, сгенерированные для оборудования (либо на VHDL, либо на Verilog), которые соответствуют следующим критериям.
- Каждое число является 1-битным (не обязательно, но это еще больше усложнит ситуацию) - N псевдо случайные числа не могут быть связаны друг с другом. - N псевдослучайных чисел должны быть сгенерированы одновременно (каждый фронт тактов).

Я понимаю, что следующее не будет работать: - Использование N разных начальных чисел для заданного полинома - они будут просто сдвинутыми версиями друг друга - Использование N разных полиномов для заданной длины LFSR - нецелесообразно, поскольку N может достигать 64, и я не знаю, какой длины LSFR даст 64 различных комбинации касаний, слишком много, если вообще возможно.

При использовании LFSR длины не обязательно должны быть идентичными. Для небольшого N, скажем, 4, я подумал об использовании 4 разных длин простых чисел (чтобы свести к минимуму повторяемость), например, 15, 17, 19, 23, но опять же, для большого N это становится очень грязным. Скажем, что-то порядка 2^16 дает достаточную длину для LFSR.

Есть ли элегантный способ решения этой проблемы? Под элегантным я подразумеваю отсутствие необходимости кодировать N различных уникальных модулей (15, 17, 19, 23 выше в качестве примера). Использование N разных экземпляров Mersenne Twister с разными семенами? У меня нет неограниченного количества аппаратных ресурсов (FF, LUT, BRAM), но ради этого обсуждения, вероятно, лучше игнорировать проблемы с ресурсами.

Чем вы заранее.


person mxo    schedule 23.09.2014    source источник
comment
Это не похоже на вопрос программирования, а скорее на математический вопрос.   -  person Morgan    schedule 23.09.2014
comment
15, 17, 19, 23, но опять же, для большого N это становится очень грязным. Скажем, что-то порядка 2^16 дает достаточную длину для LFSR». 15, 17 и т. д. - ваша длина fft, что означает 2 ^ 16?   -  person Morgan    schedule 23.09.2014
comment
Да, это определенно можно рассматривать как математический вопрос. Я только что увлекся дизайном HDL, поэтому искал способ как-то легко реализовать, не углубляясь в математику...   -  person mxo    schedule 24.09.2014
comment
15, 17, 19, 23 — длина в LFSR, количество регистров сдвига, в результате чего 2^15-1, 2^17-1, 2^19-1, 2^19-1 будут соответствующим периодом этих ЛФСР. 2 ^ 16 (минус 1) относится к LFSR длиной 16, в порядке, аналогичном 15, 17, 19, 23. Извините, я не ясно выразился.   -  person mxo    schedule 24.09.2014
comment
Возможно, мне следует начать другую ветку, не делая это вопросом HDL...   -  person mxo    schedule 24.09.2014
comment
Извините, я не совсем ясно выразил свое предложение, я действительно думаю, что вы могли бы получить лучший ответ от MathSE или DSP-SE. Я понимаю интерес к реализации на этом уровне, но может быть лучше отделить подход от реализации. Я не публикую сообщения на этих других сайтах Stack Exchange, поэтому они могут сказать, что это не по теме для них, но удачи.   -  person Morgan    schedule 24.09.2014


Ответы (1)


Одним из вариантов является использование криптографического хэша, который обычно является широким (64-256 бит), а хорошие хэши обладают тем свойством, что изменение одного входного бита непредсказуемым образом распространяется на все биты вывода. Запустите инкрементный счетчик в хеш и запустите счетчик со случайным значением.

GHASH, используемый в AES-GCM, удобен для аппаратного обеспечения и может генерировать новые выходные значения каждый такт.

person Guy    schedule 26.03.2015