Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cyclone II板VHDL时钟分频器_Vhdl_Fpga - Fatal编程技术网

Cyclone II板VHDL时钟分频器

Cyclone II板VHDL时钟分频器,vhdl,fpga,Vhdl,Fpga,我正忙着在我的FPGA板Altera Cyclone II模型中编写乒乓球类游戏,有两个时钟,50MHz和27MHz。游戏需要一个时钟才能运行。我想使用50MHz时钟,但需要将其降低到1Hz。每次振荡球只能移动一个LED。我是VHDL和FPGA的新用户,在网上做了一些研究,但没有一个能真正帮助我降低VHDL中的时钟 我的想法是使用两个环路,一个用于低电平,一个用于高电平,使用25000000个时钟周期用于高电平,25000000个时钟周期用于低电平,当使用50MHz时钟时,最终将生成1Hz时钟。

我正忙着在我的FPGA板Altera Cyclone II模型中编写乒乓球类游戏,有两个时钟,50MHz和27MHz。游戏需要一个时钟才能运行。我想使用50MHz时钟,但需要将其降低到1Hz。每次振荡球只能移动一个LED。我是VHDL和FPGA的新用户,在网上做了一些研究,但没有一个能真正帮助我降低VHDL中的时钟

我的想法是使用两个环路,一个用于低电平,一个用于高电平,使用25000000个时钟周期用于高电平,25000000个时钟周期用于低电平,当使用50MHz时钟时,最终将生成1Hz时钟。我不知道如何用VHDL实现它,尽管我知道它的非代码逻辑

我检查了前面一个类似的问题:但是发布问题的人没有包括评论,我无法真正理解代码中的内容。非常感谢您的帮助

下面是我的代码,但我不确定它是否会工作

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;

我不确定你是否能在一个过程中定义一个信号。只要数到50000000就足够了,然后将gameclk设置为your is right You cannot。我改为变量。在我看到那个错误后,代码现在起作用了。如果我像你建议的那样简单地数到50000000,它最终会使时钟变成0.5Hz。时钟LED在熄灭前会亮起整整一秒钟。它应仅打开半秒表示高,关闭半秒表示低。制作1 Hz时钟的替代方法是制作一个以1 Hz断言的启用信号,然后仍然使用高频时钟,但仅在断言启用信号时更新状态。通常,设计中不需要太多的时钟,因为时钟需要特殊处理,并且会出现跨时钟域的问题,所以通常使用启用信号。