VHDL在照明前延迟

时间:2016-11-03 19:43:29

标签: vhdl delay clock led

我想制作一个简单的vhdl代码,在led开启之前延迟20秒。我使用信号计数器来延迟20秒,但我注意到非常奇怪的事情,如果我没有在延迟之前声明LED已经关闭,那么led将始终开启。

看两个代码(时钟是50MHz):

在此代码中,led始终为ON。

library ieee;
use ieee.std_logic_1164.all;
entity check is
port(clk : in std_logic;
      led : out std_logic);
end check;

architecture arc of check is
signal counter : integer range 0 to 100e6;
begin
process(clk)
begin
if rising_edge(clk) then
    if counter<500e6 then
        counter<=counter+1;
    else
        led<='1';
    end if;
end if;
end process;
end arc;

在此代码中,led仅在20秒后开启。

library ieee;
use ieee.std_logic_1164.all;
entity check is
port(clk : in std_logic;
      led : out std_logic);
end check;

architecture arc of check is
signal counter : integer range 0 to 100e6;
begin
process(clk)
begin
if rising_edge(clk) then
    if counter<500e6 then
        counter<=counter+1;
        led<='0';
    else
        led<='1';
    end if;
end if;
end process;
end arc;

1 个答案:

答案 0 :(得分:0)

你应该初始化计数器和led。在模拟中,当您不这样做时,每个未初始化信号的值将为“U”,这意味着您无法确定它在实际系统中将具有什么值。可以是0或1。 您可以在端口声明中使用:='0'。

可能led始终打开,因为根据此代码,如果计数器&lt; 500e6,'led'的值无关紧要,否则它为1,因此编译器简化了它,因为程序设置的唯一值为' led'是'1'。