【问题标题】:Multiple independent pseudo random number generation in hardware (Verilog or VHDL)硬件中的多个独立伪随机数生成(Verilog 或 VHDL)
【发布时间】: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


【解决方案1】:

一种选择是使用加密散列,这些散列通常很宽(64-256 位),并且良好的散列具有这样的属性,即单个位输入更改将以不可预测的方式传播到所有输出位。在散列中运行递增计数器,并以随机值启动计​​数器。

AES-GCM 中使用的 GHASH 对硬件友好,可以在每个时钟生成新的输出值。

【讨论】:

    猜你喜欢
    • 2014-08-03
    • 2017-08-22
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 2017-04-05
    相关资源
    最近更新 更多