Random VHDL中随机LED的开关

Random VHDL中随机LED的开关,random,vhdl,led,Random,Vhdl,Led,我想在BASYS2上实现一个随机数游戏。在这个游戏中,将选择五个LED,其中一个LED将随机打开一两秒钟(这一次可以改变以增加或减少游戏的难度)。然后,用户需要在该LED事件开启的时间内按下其后面的开关按钮来响应该LED事件。如果他或她能够成功地做到这一点,将获得一分,并显示在七段显示器上。如果他或她不及格,就不会得分。比赛将有9个这样的项目,之后可以重赛 Now following is my code (only for the random LED turning on). However

我想在BASYS2上实现一个随机数游戏。在这个游戏中,将选择五个LED,其中一个LED将随机打开一两秒钟(这一次可以改变以增加或减少游戏的难度)。然后,用户需要在该LED事件开启的时间内按下其后面的开关按钮来响应该LED事件。如果他或她能够成功地做到这一点,将获得一分,并显示在七段显示器上。如果他或她不及格,就不会得分。比赛将有9个这样的项目,之后可以重赛

Now following is my code (only for the random LED turning on). However, I am unable to fix it. Please somebody help. The FPGA I am using is BASYS2 SPARTAN 3E-100.
先谢谢大家

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_unsigned.ALL;
use IEEE.STD_LOGIC_arith.ALL;

entity random_number is
generic ( width : integer :=  4 ); 
port (
clk : in std_logic;
reset : in std_logic;
random_num : out std_logic_vector (width-1 downto 0)   --output vector            
);
end random_number;

architecture Behavioral of random_number is
signal q: std_logic_vector(23 downto 0);
signal divided_clock: std_logic;
begin
process(clk, reset)
begin
if (reset = '1')then 
q <= X"000000";
elsif(rising_edge(clk)) then
q <= q + 1;
end if;
end process;
divided_clock <= q(22);


process (divided_clock)
variable rand_temp : std_logic_vector(width-1 downto 0):=("1000");
variable temp : std_logic := '0';
begin
if(rising_edge(divided_clock)) then
temp := rand_temp(width-1) xor rand_temp(width-2);
rand_temp(width-1 downto 1) := rand_temp(width-2 downto 0);
rand_temp(0) := temp;
end if;
random_num <= rand_temp;
end process;
end Behavioral;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.STD_LOGIC_unsigned.ALL;
使用IEEE.STD_LOGIC_arith.ALL;
实体随机数为
通用(宽度:整数=4);
港口(
clk:标准逻辑中;
复位:在标准逻辑中;
随机数:输出标准逻辑向量(宽度-1到0)--输出向量
);
结束随机数;
随机数的结构是
信号q:std_逻辑_向量(23向下至0);
分信号时钟:标准逻辑;
开始
过程(时钟、复位)
开始
如果(重置='1'),则

q我认为第二个进程甚至应该与主时钟一起运行,并且偏差时钟应该是一个使能时钟

signal divided_enable: std_logic;
process(clk, reset)
begin
if (reset = '1')then 
  q <= X"000000";
elsif(rising_edge(clk)) then
  q <= q + 1;
end if;
if (q(22) = '1') then
  --short pulse wenn q bit 22 is high
  divided_enable <= '1';
  q <= (others => '0');
end if;
end process;


process (clk)
variable rand_temp : std_logic_vector(width-1 downto 0):=("1000");
variable temp : std_logic := '0';
begin
if(rising_edge(clk)) then
  if(divided_enable = '1') then
    temp := rand_temp(width-1) xor rand_temp(width-2);
    rand_temp(width-1 downto 1) := rand_temp(width-2 downto 0);
    rand_temp(0) := temp;
   end if;
 end if;
random_num <= rand_temp;
end process;
分信号启用:标准逻辑;
过程(时钟、复位)
开始
如果(重置='1'),则

你真是太好了。您修改的代码工作正常,没有任何错误。我会不断地问一些问题,因为我有一个项目要在本学期末提交。回头见。@user3518317,如果解决方案对您有效,您可以将答案标记为已接受吗?这是这里的标准做法,也是表达感激之情的好方法:)