如何在 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(...)
,则需要手动处理
我真的是 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(...)