【发布时间】:2014-09-23 01:05:23
【问题描述】:
我需要为满足以下条件的硬件(VHDL 或 Verilog)生成伪随机数。
- 每个数字都是 1 位(不一定是,但这会使事情变得更复杂)
- N 个伪随机数不能相互关联。
- N个伪随机数需要同时产生(每个时钟沿)。
我了解以下内容不起作用: - 对给定的多项式使用 N 个不同的种子 - 它们将简单地相互转换版本 - 对给定长度的 LFSR 使用 N 个不同的多项式 - 不切实际,因为 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),但为了便于讨论,最好忽略资源问题。
比你提前。
【问题讨论】:
-
这感觉不像是一个编程问题,而更像是一个数学问题。
-
'15, 17, 19, 23,但同样,对于较大的 N,它会变得非常混乱。假设,大约 2^16 的东西为 LFSR 提供了足够的长度。 15、17等是你的fft长度,2^16指的是什么?
-
是的,这绝对可以看作是一道数学题。我刚刚全神贯注于 HDL 设计,所以一直在寻找一种无需深入数学即可轻松实现的方法……
-
15, 17, 19, 23是LFSR中的长度,移位寄存器的个数,结果是2^15-1, 2^17-1, 2^19-1, 2^19- 1 将是这些 LFSR 的相应时期。 2^16(减 1)指的是 16 长的 LFSR,其顺序类似于 15、17、19、23。抱歉,我不清楚。
-
也许我应该开始一个不同的线程,而不是让它成为一个 HDL 问题......
标签: algorithm random unique hardware hdl