使用VHDL的真随机数发生器

时间:2013-09-17 05:09:59

标签: random numbers

我被要求使用VHDL设计一个真正的随机生成器。经过多次努力,我只能设计一个PRNG而不是TRNG。有可能完全随机生成数字???请在此建议我。我真的很无能!

5 个答案:

答案 0 :(得分:3)

没有“真正的”随机数发生器这样的东西。这是我最喜欢的伪随机生成器之一,并且在VHDL中实现会很有趣。

http://en.wikipedia.org/wiki/Xorshift

另请参阅:http://en.wikipedia.org/wiki/Random_number_generation#.22True.22_random_numbers_vs._pseudorandom_numbers

我能想到的唯一让你“更好”随机性的事情就是做一些事情,比如写一个文件然后读一个文件。主机PC 上的调度程序可能具有足够的熵,导致这些操作所需的时间存在一些差异,您可以将该时间用作种子算法的关键。

答案 1 :(得分:1)

既然您在询问VHDL,那么您需要设计专用硬件。现在,如果你以一种永远不会为数字逻辑做的方式操作硬件,你可能会得到某种“真正的”随机行为。
例如,如果您设计的电路具有D型触发器,当其数据输入改变其电平时,该触发器会被计时,则输出变为亚稳态,即在某个时间未定义(0到1之间)之前,它变为稳定为0或者再次1。这需要多长时间,取决于电噪声,例如是随机的。我可以想象你可以使用这样的效果制作一个随机发生器。

答案 2 :(得分:0)

您不会从FPGA / VHDL中获得真正的随机数发生器。你可以期待的最好的是一个h / w PRNG,它可以从某个寄存器中读取。

您可以选择实施其中一种PRNG算法。然后,您将不得不相信算法设计者,然后相信您使用的VHDL实现(您自己或您从其他人那里获得的实现)。你可以先看看:

http://en.wikipedia.org/wiki/List_of_pseudorandom_number_generators#Cryptographic_algorithms

答案 3 :(得分:0)

谢谢大家的回复。我正在考虑使用一个包含不同值的寄存器,并在每次重复开始时使用它。我的想法是提供不同的种子值,这样我就可以获得随机值。由于我是VHDL编码的新手,我不确定这是否有效,但如果我可以这样做的话,只是尝试一下。欢迎任何建议。

答案 4 :(得分:0)

与大多数其他答案的主张相反,有 T 种针对FPGA的 T RNG设计,这些设计主要基于环形振荡器或自定时环,请参见例如< / p>

B. Yang, "True Random Number Generators for FPGAs," PhD thesis, KU Leuven, N. Mentens, and I. Verbauwhede (promotors), 2018.

VHDL TRNG designs

相关问题