我正忙着尝试将乒乓球型游戏编写到我的FPGA板(Altera Cyclone II型号)中,并且有两个时钟,50MHz和27MHz。游戏需要时钟才能工作。我想使用50MHz时钟,但需要将其降低到1Hz("球"每次振荡时只应移动一个LED)。我是VHDL和FPGA的新用户,已经在线完成了一些研究,但没有一个真正帮助我减慢VHDL中时钟的速度。
我的想法是使用两个回路,一个用于低电平,一个用于高电平,使用25000000个时钟周期用于高电平,25000000个时钟周期用于低电平,这将在使用50MHz时钟时产生1Hz时钟。虽然我知道它的非代码逻辑,但我不知道如何在VHDL中实现它。
我检查了之前的类似问题:Clock divider simulation但发布问题的人不包含评论,我无法真正关注该代码中的内容。任何帮助都非常感谢!
以下是我的代码,但我不确定它是否可行。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity pingpong is
port(
clk : in std_logic;
gameclk : out std_logic
);
end pingpong;
architecture behave of pingpong is
begin
process(clk)
variable a : integer := 0;
signal b : std_logic := '0';
begin
if rising_edge(clk) then
a := a+1;
if a = 25000000 and b = '0' then
b := '1'; a := 0;
elsif a = 25000000 and b = '1' then
b := '0'; a := 0;
end if;
end if;
gameclk <= b;
end process;
end behave;