如何在 vhdl 中获取 -1024 和 1024 之间的随机数

How can I get random numbers between -1024 and 1024 in vhdl

我真的是 VHDL 的初学者,我正在尝试制作一个冷热游戏。我的第一个目标是生成 -1024 到 1024 之间的数字,以便我可以使用 10 个开关来猜测。然而,有很多关于正整数的资料,但我找不到任何关于负数的资料。这是我的示例代码。另外,有人说 LFSR 可以完成这项工作,但我是新手,无法理解 LFSR 的行为。

library ieee;
use ieee.math_real.all;

entity rand_gen is
end rand_gen;

architecture behavior of rand_gen is 

signal rand_num : integer := 0;

begin

process
    variable seed1, seed2: positive;              
    variable rand: real;   
    variable range_of_rand : real := 1024.0;   
begin
    uniform(seed1, seed2, rand);   
    rand_num <= integer(rand*range_of_rand);  
    wait for 10 ns;
end process;

end behavior;

请看Open Source VHDL Verification Methodology。这个框架提供了许多包来简化测试平台的编写。例如,有一个 RandomPkg VHDL 包,它提供了许多随机化过程、函数和受约束随机的受保护类型:RandInt(min, max).

process
  variable RV : RandomPType;
begin
  RV.Init("dkudbcsdkbcfsdbcfdsyc");   -- create a seed value

  for in i 0 to 15 loop
    rand_num <= RV.RandInt(-1024, 1024);
    wait until rising_edge(Clock);
  end loop;
end process;

受保护类型将负责处理两个种子整数,如果您使用 ieee.math_real.uniform(...)

,则需要手动处理