如何在FPGA中生成伪随机数?

问题描述 投票:0回答:5

如何在FPGA中生成伪随机数?

random fpga
5个回答
7
投票

这已经涵盖了(我会选择 LFSR): Spartan-3E 上的随机数生成


5
投票

有一篇关于在 FPGA 中高效生成伪随机数序列的优秀 Xilinx 应用说明。这是XAPP052


4
投票

如果不是用于密码学或其他具有智能对手的应用程序(例如赌博),我会使用线性反馈移位寄存器方法。

仅使用异或和移位,因此硬件实现非常简单。


1
投票

正如其他人所说,LFSR 可用于 FPGA 中的伪随机数。这是最大长度 32 位 LFSR 的 VHDL 实现。

process(clk)

  -- maximal length 32-bit xnor LFSR based on xilinx app note XAPP210
  function lfsr32(x : std_logic_vector(31 downto 0)) return std_logic_vector is
  begin
    return x(30 downto 0) & (x(0) xnor x(1) xnor x(21) xnor x(31));
  end function;

begin
  if rising_edge(clk) then
    if rst='1' then
      pseudo_rand <= (others => '0');
    else
      pseudo_rand <= lfsr32(psuedo_rand);
    end if;
  end if;
end process;

0
投票

如果您需要一个随机单词,例如 C rand() 函数,则 LFSR 本身无法完成这项工作。 为此,我制作了一个小型开源 FPGA rand() 模块。

它是针对初始状态和输出宽度进行参数化的。 它是使用 Xilinx DSP48 内核编写的,运行速度非常快。与 Mersenne Twister 相比,单个 DSP48 可以提供良好的结果。

https://github.com/hdlguy/pg_prng
© www.soinside.com 2019 - 2024. All rights reserved.