led照明前的VHDL延迟

led照明前的VHDL延迟,vhdl,delay,clock,led,Vhdl,Delay,Clock,Led,我想做一个简单的vhdl代码,在led亮起之前延迟20秒。我使用了一个信号计数器来进行20秒的延迟,但我注意到了一件非常奇怪的事情,如果我没有在延迟之前声明led关闭,led将始终打开 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 sign

我想做一个简单的vhdl代码,在led亮起之前延迟20秒。我使用了一个信号计数器来进行20秒的延迟,但我注意到了一件非常奇怪的事情,如果我没有在延迟之前声明led关闭,led将始终打开

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;
查看两个代码(时钟为50MHz):

在此代码中,led始终亮起

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;
ieee库;
使用ieee.std_logic_1164.all;
实体检查是
端口(时钟:在标准逻辑中;
led:输出标准(U逻辑);
结束检查;
架构检查弧是
信号计数器:整数范围0至100e6;
开始
过程(clk)
开始
如果上升沿(clk),则

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


可能led一直亮着,因为根据这段代码,若计数器你们应该初始化计数器和led。在模拟中,若不这样做,每个未初始化信号的值将为“U”,这意味着您无法确定它在实际系统中的值。可以同时为0或1。 您可以在端口声明中使用:='0'


可能led一直亮着,因为根据这个代码,如果这个代码在模拟中起作用,模拟器就坏了。它永远无法打开LED。如果该代码在模拟中工作,则模拟器已损坏。它永远无法打开LED。