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

时间:2018-10-29 20:59:19

标签: random numbers 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;

1 个答案:

答案 0 :(得分:0)

请查看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(...)

,则需要手动处理它们