algorithm - 硬件中的多个独立伪随机数生成(Verilog 或 VHDL)

标签 algorithm random unique hardware hdl

我需要为满足以下条件的硬件(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),但为了本次讨论,最好忽略资源问题。

比你提前。

最佳答案

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

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

关于algorithm - 硬件中的多个独立伪随机数生成(Verilog 或 VHDL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25985326/

相关文章:

entity-framework - Entity Framework 代码优先跨多个表的唯一约束

qt - std::Qt 中的独特类似物?

javascript - 获取按天分组的时间

javascript - 如何将人类可读的内存大小转换为字节?

c++ - 优化 Eigen 中的大型矩阵乘法

php - 随机 map 生成器 - 在网格上创建区域

java - 我正在学习人工智能,我可以实现什么游戏来将其付诸实践?

python - 从一组名称中打印两个随机的、不同的名称

algorithm - 创建有利于较小数字的随机数

MySQL 将列更改为唯一