我被要求使用 VHDL 设计一个真正的随机生成器。经过很多努力,我只能设计一个 PRNG,而不是 TRNG。是否可以生成完全随机的数字???请在这方面给我建议。我真是一头雾水!
5 回答
由于您要询问 VHDL,因此您想设计专用硬件。现在,如果您以永远不应该为数字逻辑完成的方式操作硬件,您可能会得到某种“真正的”随机行为。
例如,如果您设计一个带有 D 型触发器的电路,该触发器在其数据输入改变其电平时被计时,则输出变为亚稳态,即在一段时间未定义(在 0 和 1 之间)之前,它会稳定为 0或再次 1。这需要多长时间,尤其取决于电噪声,例如是随机的。我可以想象你可以使用这样的效果来制作一个随机发生器。
没有“真正的”随机数生成器之类的东西。然而,这是我最喜欢的伪随机生成器之一,用 VHDL 实现会很有趣。
http://en.wikipedia.org/wiki/Xorshift
我能想到的唯一能让你“更好”随机性的事情就是写一个文件然后读一个文件。主机 PC 上的调度程序可能有足够的熵与之关联,从而导致这些操作所需的时间出现一些差异,您可以使用该时间作为播种算法的关键。
谢谢大家的回复。我正在考虑使用一个保存不同值的寄存器,并在每次重复开始时使用它。这个想法是提供不同的种子值,这样我就可以获得随机值。由于我是 VHDL 编码的新手,我不确定这是否有效,但如果我能做到这一点,请尝试一下。欢迎对此提出任何建议。
与大多数其他答案的主张相反, FPGA有几种T RNG 设计,主要基于环形振荡器或自定时环,参见例如
B. Yang,“FPGA 的真随机数生成器”,博士论文,KU Leuven、N. Mentens 和 I. Verbauwhede(发起人),2018 年。
和
您不会从 FPGA / VHDL 中获得真正的随机数生成器。您可以期望的最好结果是 ah/w PRNG,它可以从某处的某个寄存器中读取。
您可能会选择实现其中一种 PRNG 算法。然后,您将不得不信任算法设计者,然后信任您使用的任何 VHDL 实现(您自己的或您从别人那里获得的)。您可以从查看以下内容开始:
http://en.wikipedia.org/wiki/List_of_pseudorandom_number_generators#Cryptographic_algorithms